From 95c96af49465699fd67c828d21827a44944b4c67 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sun, 14 Nov 2010 14:58:09 +0000 Subject: [PATCH] library activity has been moved to a separate process --- AndroidManifest.xml | 4 ++-- AndroidManifest.xml.pattern | 4 ++-- .../geometerplus/android/fbreader/FBReader.java | 4 +++- .../android/fbreader/LibraryTabActivity.java | 4 ++++ .../android/fbreader/SQLiteBooksDatabase.java | 16 +++++++++++----- .../geometerplus/fbreader/library/Bookmark.java | 2 +- .../fbreader/library/BooksDatabase.java | 10 +++++----- .../geometerplus/fbreader/library/Library.java | 10 +++++----- 8 files changed, 33 insertions(+), 21 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 9f2a9a601..ca9c2f326 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -60,7 +60,7 @@ - + @@ -74,7 +74,7 @@ - + diff --git a/AndroidManifest.xml.pattern b/AndroidManifest.xml.pattern index 98ced86da..b685b7115 100644 --- a/AndroidManifest.xml.pattern +++ b/AndroidManifest.xml.pattern @@ -60,7 +60,7 @@ - + @@ -74,7 +74,7 @@ - + diff --git a/src/org/geometerplus/android/fbreader/FBReader.java b/src/org/geometerplus/android/fbreader/FBReader.java index cbd68637a..e1927e690 100644 --- a/src/org/geometerplus/android/fbreader/FBReader.java +++ b/src/org/geometerplus/android/fbreader/FBReader.java @@ -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); } diff --git a/src/org/geometerplus/android/fbreader/LibraryTabActivity.java b/src/org/geometerplus/android/fbreader/LibraryTabActivity.java index 2461f591c..2f4a3c340 100644 --- a/src/org/geometerplus/android/fbreader/LibraryTabActivity.java +++ b/src/org/geometerplus/android/fbreader/LibraryTabActivity.java @@ -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(); } diff --git a/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java b/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java index 234dc7026..ce963ec30 100644 --- a/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java +++ b/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java @@ -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 listBooks(FileInfoSet infos) { + protected Map 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 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 listRecentBookIds() { + protected List 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 listBookmarks(long bookId) { + protected List loadBookmarks(long bookId) { LinkedList list = new LinkedList(); 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 listAllBookmarks() { + protected List loadAllBookmarks() { LinkedList list = new LinkedList(); myDatabase.execSQL("DELETE FROM Bookmarks WHERE book_id = -1"); Cursor cursor = myDatabase.rawQuery( diff --git a/src/org/geometerplus/fbreader/library/Bookmark.java b/src/org/geometerplus/fbreader/library/Bookmark.java index 7b2747951..9c5271849 100644 --- a/src/org/geometerplus/fbreader/library/Bookmark.java +++ b/src/org/geometerplus/fbreader/library/Bookmark.java @@ -31,7 +31,7 @@ public final class Bookmark extends ZLTextFixedPosition { public final static int LATEST = 3; public static List bookmarks() { - return BooksDatabase.Instance().listAllBookmarks(); + return BooksDatabase.Instance().loadAllBookmarks(); } private long myId; diff --git a/src/org/geometerplus/fbreader/library/BooksDatabase.java b/src/org/geometerplus/fbreader/library/BooksDatabase.java index e65a43036..e4259a9ba 100644 --- a/src/org/geometerplus/fbreader/library/BooksDatabase.java +++ b/src/org/geometerplus/fbreader/library/BooksDatabase.java @@ -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 listBooks(FileInfoSet infos); + protected abstract Map 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 listRecentBookIds(); + protected abstract List loadRecentBookIds(); protected abstract void saveRecentBookIds(final List 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 listBookmarks(long bookId); - protected abstract List listAllBookmarks(); + protected abstract List loadBookmarks(long bookId); + protected abstract List loadAllBookmarks(); protected abstract long saveBookmark(Bookmark bookmark); protected abstract void deleteBookmark(Bookmark bookmark); diff --git a/src/org/geometerplus/fbreader/library/Library.java b/src/org/geometerplus/fbreader/library/Library.java index 021846fe7..8a7fe81ac 100644 --- a/src/org/geometerplus/fbreader/library/Library.java +++ b/src/org/geometerplus/fbreader/library/Library.java @@ -150,7 +150,7 @@ public final class Library { FileInfoSet fileInfos = new FileInfoSet(); - final Map savedBooks = BooksDatabase.Instance().listBooks(fileInfos); + final Map 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 recentIds = BooksDatabase.Instance().listRecentBookIds(); + List 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 ids = db.listRecentBookIds(); + final List 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 ids = db.listRecentBookIds(); + final List ids = db.loadRecentBookIds(); ids.remove(book.getId()); db.saveRecentBookIds(ids); }