1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-04 18:29:23 +02:00

library activity has been moved to a separate process

This commit is contained in:
Nikolay Pultsin 2010-11-14 14:58:09 +00:00
parent 2b4a247c1f
commit 95c96af494
8 changed files with 33 additions and 21 deletions

View file

@ -60,7 +60,7 @@
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
</activity>
<activity android:name="org.geometerplus.android.fbreader.BookSearchActivity">
<activity android:name="org.geometerplus.android.fbreader.BookSearchActivity" android:process=":library">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
@ -74,7 +74,7 @@
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
</activity>
<activity android:name="org.geometerplus.android.fbreader.LibraryTabActivity" android:configChanges="orientation|keyboardHidden">
<activity android:name="org.geometerplus.android.fbreader.LibraryTabActivity" android:process=":library" android:configChanges="orientation|keyboardHidden">
<meta-data android:name="android.app.default_searchable" android:value="org.geometerplus.android.fbreader.BookSearchActivity" />
</activity>
<activity android:name="org.geometerplus.android.fbreader.TOCActivity" android:configChanges="orientation|keyboardHidden" />

View file

@ -60,7 +60,7 @@
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
</activity>
<activity android:name="org.geometerplus.android.fbreader.BookSearchActivity">
<activity android:name="org.geometerplus.android.fbreader.BookSearchActivity" android:process=":library">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
@ -74,7 +74,7 @@
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
</activity>
<activity android:name="org.geometerplus.android.fbreader.LibraryTabActivity" android:configChanges="orientation|keyboardHidden">
<activity android:name="org.geometerplus.android.fbreader.LibraryTabActivity" android:process=":library" android:configChanges="orientation|keyboardHidden">
<meta-data android:name="android.app.default_searchable" android:value="org.geometerplus.android.fbreader.BookSearchActivity" />
</activity>
<activity android:name="org.geometerplus.android.fbreader.TOCActivity" android:configChanges="orientation|keyboardHidden" />

View file

@ -189,7 +189,9 @@ public final class FBReader extends ZLAndroidActivity {
}
protected ZLApplication createApplication(String fileName) {
new SQLiteBooksDatabase();
if (SQLiteBooksDatabase.Instance() == null) {
new SQLiteBooksDatabase("READER");
}
return new FBReaderApp(fileName);
}

View file

@ -82,6 +82,10 @@ public class LibraryTabActivity extends TabActivity implements MenuItem.OnMenuIt
Thread.setDefaultUncaughtExceptionHandler(new org.geometerplus.zlibrary.ui.android.library.UncaughtExceptionHandler(this));
if (SQLiteBooksDatabase.Instance() == null) {
new SQLiteBooksDatabase("LIBRARY");
}
if (myLibrary == null) {
myLibrary = new Library();
}

View file

@ -39,9 +39,11 @@ import org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication;
import org.geometerplus.fbreader.library.*;
final class SQLiteBooksDatabase extends BooksDatabase {
private final String myInstanceId;
private final SQLiteDatabase myDatabase;
SQLiteBooksDatabase() {
SQLiteBooksDatabase(String instanceId) {
myInstanceId = instanceId;
myDatabase = ZLAndroidApplication.Instance().openOrCreateDatabase("books.db", Context.MODE_PRIVATE, null);
migrate();
}
@ -121,6 +123,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
}
protected Book loadBook(long bookId) {
System.err.println("loading book info for " + bookId + " (" + myInstanceId + ")");
Book book = null;
final Cursor cursor = myDatabase.rawQuery("SELECT file_id,title,encoding,language FROM Books WHERE book_id = " + bookId, null);
if (cursor.moveToNext()) {
@ -133,6 +136,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
}
protected Book loadBookByFile(long fileId, ZLFile file) {
System.err.println("loading book info for " + file.getPath() + " (" + myInstanceId + ")");
if (fileId == -1) {
return null;
}
@ -170,7 +174,8 @@ final class SQLiteBooksDatabase extends BooksDatabase {
}
@Override
protected Map<Long,Book> listBooks(FileInfoSet infos) {
protected Map<Long,Book> loadBooks(FileInfoSet infos) {
System.err.println("loading all books info for " + myInstanceId);
Cursor cursor = myDatabase.rawQuery(
"SELECT book_id,file_id,title,encoding,language FROM Books", null
);
@ -531,6 +536,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
}
protected Collection<FileInfo> loadFileInfos() {
System.err.println("loading all files info for " + myInstanceId);
Cursor cursor = myDatabase.rawQuery(
"SELECT file_id,name,parent_id,size FROM Files", null
);
@ -628,7 +634,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
});
}
protected List<Long> listRecentBookIds() {
protected List<Long> loadRecentBookIds() {
final Cursor cursor = myDatabase.rawQuery(
"SELECT book_id FROM RecentBooks ORDER BY book_index", null
);
@ -640,7 +646,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
return ids;
}
protected List<Bookmark> listBookmarks(long bookId) {
protected List<Bookmark> loadBookmarks(long bookId) {
LinkedList<Bookmark> list = new LinkedList<Bookmark>();
Cursor cursor = myDatabase.rawQuery(
"SELECT Bookmarks.bookmark_id,Bookmarks.book_id,Books.title,Bookmarks.bookmark_text,Bookmarks.creation_time,Bookmarks.modification_time,Bookmarks.access_time,Bookmarks.access_counter,Bookmarks.model_id,Bookmarks.paragraph,Bookmarks.word,Bookmarks.char FROM Bookmarks INNER JOIN Books ON Books.book_id = Bookmarks.book_id WHERE book_id = ?", new String[] { "" + bookId }
@ -665,7 +671,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
return list;
}
protected List<Bookmark> listAllBookmarks() {
protected List<Bookmark> loadAllBookmarks() {
LinkedList<Bookmark> list = new LinkedList<Bookmark>();
myDatabase.execSQL("DELETE FROM Bookmarks WHERE book_id = -1");
Cursor cursor = myDatabase.rawQuery(

View file

@ -31,7 +31,7 @@ public final class Bookmark extends ZLTextFixedPosition {
public final static int LATEST = 3;
public static List<Bookmark> bookmarks() {
return BooksDatabase.Instance().listAllBookmarks();
return BooksDatabase.Instance().loadAllBookmarks();
}
private long myId;

View file

@ -28,7 +28,7 @@ import org.geometerplus.zlibrary.text.view.ZLTextPosition;
public abstract class BooksDatabase {
private static BooksDatabase ourInstance;
static BooksDatabase Instance() {
public static BooksDatabase Instance() {
return ourInstance;
}
@ -56,7 +56,7 @@ public abstract class BooksDatabase {
protected abstract void executeAsATransaction(Runnable actions);
// returns map fileId -> book
protected abstract Map<Long,Book> listBooks(FileInfoSet infos);
protected abstract Map<Long,Book> loadBooks(FileInfoSet infos);
protected abstract Book loadBook(long bookId);
protected abstract Book loadBookByFile(long fileId, ZLFile file);
@ -81,15 +81,15 @@ public abstract class BooksDatabase {
protected abstract void removeFileInfo(long fileId);
protected abstract void saveFileInfo(FileInfo fileInfo);
protected abstract List<Long> listRecentBookIds();
protected abstract List<Long> loadRecentBookIds();
protected abstract void saveRecentBookIds(final List<Long> ids);
protected Bookmark createBookmark(long id, long bookId, String bookTitle, String text, Date creationDate, Date modificationDate, Date accessDate, int accessCounter, String modelId, int paragraphIndex, int wordIndex, int charIndex) {
return new Bookmark(id, bookId, bookTitle, text, creationDate, modificationDate, accessDate, accessCounter, modelId, paragraphIndex, wordIndex, charIndex);
}
protected abstract List<Bookmark> listBookmarks(long bookId);
protected abstract List<Bookmark> listAllBookmarks();
protected abstract List<Bookmark> loadBookmarks(long bookId);
protected abstract List<Bookmark> loadAllBookmarks();
protected abstract long saveBookmark(Bookmark bookmark);
protected abstract void deleteBookmark(Bookmark bookmark);

View file

@ -150,7 +150,7 @@ public final class Library {
FileInfoSet fileInfos = new FileInfoSet();
final Map<Long,Book> savedBooks = BooksDatabase.Instance().listBooks(fileInfos);
final Map<Long,Book> savedBooks = BooksDatabase.Instance().loadBooks(fileInfos);
for (ZLPhysicalFile file : physicalFilesList) {
collectBooks(file, fileInfos, savedBooks, !fileInfos.check(file));
@ -251,7 +251,7 @@ public final class Library {
}
final BooksDatabase db = BooksDatabase.Instance();
for (long id : db.listRecentBookIds()) {
for (long id : db.loadRecentBookIds()) {
Book book = bookById.get(id);
if (book != null) {
myRecentBooks.createBookSubTree(book, true);
@ -295,7 +295,7 @@ public final class Library {
}
public static Book getRecentBook() {
List<Long> recentIds = BooksDatabase.Instance().listRecentBookIds();
List<Long> recentIds = BooksDatabase.Instance().loadRecentBookIds();
return (recentIds.size() > 0) ? Book.getById(recentIds.get(0)) : null;
}
@ -316,7 +316,7 @@ public final class Library {
public static void addBookToRecentList(Book book) {
final BooksDatabase db = BooksDatabase.Instance();
final List<Long> ids = db.listRecentBookIds();
final List<Long> ids = db.loadRecentBookIds();
final Long bookId = book.getId();
ids.remove(bookId);
ids.add(0, bookId);
@ -361,7 +361,7 @@ public final class Library {
myLibraryByTag.removeBook(book);
if (myRecentBooks.removeBook(book)) {
final BooksDatabase db = BooksDatabase.Instance();
final List<Long> ids = db.listRecentBookIds();
final List<Long> ids = db.loadRecentBookIds();
ids.remove(book.getId());
db.saveRecentBookIds(ids);
}