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

View file

@ -60,7 +60,7 @@
</intent-filter> </intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
</activity> </activity>
<activity android:name="org.geometerplus.android.fbreader.BookSearchActivity"> <activity android:name="org.geometerplus.android.fbreader.BookSearchActivity" android:process=":library">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.SEARCH" /> <action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
@ -74,7 +74,7 @@
</intent-filter> </intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
</activity> </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" /> <meta-data android:name="android.app.default_searchable" android:value="org.geometerplus.android.fbreader.BookSearchActivity" />
</activity> </activity>
<activity android:name="org.geometerplus.android.fbreader.TOCActivity" android:configChanges="orientation|keyboardHidden" /> <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) { protected ZLApplication createApplication(String fileName) {
new SQLiteBooksDatabase(); if (SQLiteBooksDatabase.Instance() == null) {
new SQLiteBooksDatabase("READER");
}
return new FBReaderApp(fileName); 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)); Thread.setDefaultUncaughtExceptionHandler(new org.geometerplus.zlibrary.ui.android.library.UncaughtExceptionHandler(this));
if (SQLiteBooksDatabase.Instance() == null) {
new SQLiteBooksDatabase("LIBRARY");
}
if (myLibrary == null) { if (myLibrary == null) {
myLibrary = new Library(); myLibrary = new Library();
} }

View file

@ -39,9 +39,11 @@ import org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication;
import org.geometerplus.fbreader.library.*; import org.geometerplus.fbreader.library.*;
final class SQLiteBooksDatabase extends BooksDatabase { final class SQLiteBooksDatabase extends BooksDatabase {
private final String myInstanceId;
private final SQLiteDatabase myDatabase; private final SQLiteDatabase myDatabase;
SQLiteBooksDatabase() { SQLiteBooksDatabase(String instanceId) {
myInstanceId = instanceId;
myDatabase = ZLAndroidApplication.Instance().openOrCreateDatabase("books.db", Context.MODE_PRIVATE, null); myDatabase = ZLAndroidApplication.Instance().openOrCreateDatabase("books.db", Context.MODE_PRIVATE, null);
migrate(); migrate();
} }
@ -121,6 +123,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
} }
protected Book loadBook(long bookId) { protected Book loadBook(long bookId) {
System.err.println("loading book info for " + bookId + " (" + myInstanceId + ")");
Book book = null; Book book = null;
final Cursor cursor = myDatabase.rawQuery("SELECT file_id,title,encoding,language FROM Books WHERE book_id = " + bookId, null); final Cursor cursor = myDatabase.rawQuery("SELECT file_id,title,encoding,language FROM Books WHERE book_id = " + bookId, null);
if (cursor.moveToNext()) { if (cursor.moveToNext()) {
@ -133,6 +136,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
} }
protected Book loadBookByFile(long fileId, ZLFile file) { protected Book loadBookByFile(long fileId, ZLFile file) {
System.err.println("loading book info for " + file.getPath() + " (" + myInstanceId + ")");
if (fileId == -1) { if (fileId == -1) {
return null; return null;
} }
@ -170,7 +174,8 @@ final class SQLiteBooksDatabase extends BooksDatabase {
} }
@Override @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( Cursor cursor = myDatabase.rawQuery(
"SELECT book_id,file_id,title,encoding,language FROM Books", null "SELECT book_id,file_id,title,encoding,language FROM Books", null
); );
@ -531,6 +536,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
} }
protected Collection<FileInfo> loadFileInfos() { protected Collection<FileInfo> loadFileInfos() {
System.err.println("loading all files info for " + myInstanceId);
Cursor cursor = myDatabase.rawQuery( Cursor cursor = myDatabase.rawQuery(
"SELECT file_id,name,parent_id,size FROM Files", null "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( final Cursor cursor = myDatabase.rawQuery(
"SELECT book_id FROM RecentBooks ORDER BY book_index", null "SELECT book_id FROM RecentBooks ORDER BY book_index", null
); );
@ -640,7 +646,7 @@ final class SQLiteBooksDatabase extends BooksDatabase {
return ids; return ids;
} }
protected List<Bookmark> listBookmarks(long bookId) { protected List<Bookmark> loadBookmarks(long bookId) {
LinkedList<Bookmark> list = new LinkedList<Bookmark>(); LinkedList<Bookmark> list = new LinkedList<Bookmark>();
Cursor cursor = myDatabase.rawQuery( 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 } "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; return list;
} }
protected List<Bookmark> listAllBookmarks() { protected List<Bookmark> loadAllBookmarks() {
LinkedList<Bookmark> list = new LinkedList<Bookmark>(); LinkedList<Bookmark> list = new LinkedList<Bookmark>();
myDatabase.execSQL("DELETE FROM Bookmarks WHERE book_id = -1"); myDatabase.execSQL("DELETE FROM Bookmarks WHERE book_id = -1");
Cursor cursor = myDatabase.rawQuery( Cursor cursor = myDatabase.rawQuery(

View file

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

View file

@ -28,7 +28,7 @@ import org.geometerplus.zlibrary.text.view.ZLTextPosition;
public abstract class BooksDatabase { public abstract class BooksDatabase {
private static BooksDatabase ourInstance; private static BooksDatabase ourInstance;
static BooksDatabase Instance() { public static BooksDatabase Instance() {
return ourInstance; return ourInstance;
} }
@ -56,7 +56,7 @@ public abstract class BooksDatabase {
protected abstract void executeAsATransaction(Runnable actions); protected abstract void executeAsATransaction(Runnable actions);
// returns map fileId -> book // 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 loadBook(long bookId);
protected abstract Book loadBookByFile(long fileId, ZLFile file); 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 removeFileInfo(long fileId);
protected abstract void saveFileInfo(FileInfo fileInfo); 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 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) { 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); 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> loadBookmarks(long bookId);
protected abstract List<Bookmark> listAllBookmarks(); protected abstract List<Bookmark> loadAllBookmarks();
protected abstract long saveBookmark(Bookmark bookmark); protected abstract long saveBookmark(Bookmark bookmark);
protected abstract void deleteBookmark(Bookmark bookmark); protected abstract void deleteBookmark(Bookmark bookmark);

View file

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