diff --git a/ChangeLog b/ChangeLog index d566a3614..5961b515d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ * Scrolling speed improvement for large books * Vietnamese translation has been updated (by Phạm Văn Hùng) * Czech translation has been updated (by Marek Pavelka) +* Cancel button preesing calls a menu of actions ===== 0.99.6 (Jan 22, 2011) ===== * Wallpaper drawing speed-up diff --git a/res/layout/cancel_item.xml b/res/layout/cancel_item.xml index ea3a6eb5f..0c6a439ca 100644 --- a/res/layout/cancel_item.xml +++ b/res/layout/cancel_item.xml @@ -16,6 +16,7 @@ android:id="@+id/cancel_item_title" android:layout_width="fill_parent" android:layout_height="wrap_content" + android:gravity="center_vertical" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceLarge" android:ellipsize="marquee" diff --git a/src/org/geometerplus/android/fbreader/BookmarksActivity.java b/src/org/geometerplus/android/fbreader/BookmarksActivity.java index 0b58a7822..ef86dce98 100644 --- a/src/org/geometerplus/android/fbreader/BookmarksActivity.java +++ b/src/org/geometerplus/android/fbreader/BookmarksActivity.java @@ -223,7 +223,8 @@ public class BookmarksActivity extends TabActivity implements MenuItem.OnMenuIte final Bookmark bookmark = new Bookmark( fbreader.Model.Book, textView.getModel().getId(), - cursor + cursor, + true ); myThisBookBookmarks.add(0, bookmark); AllBooksBookmarks.add(0, bookmark); diff --git a/src/org/geometerplus/android/fbreader/CancelActivity.java b/src/org/geometerplus/android/fbreader/CancelActivity.java index 34d570b75..8205d6820 100644 --- a/src/org/geometerplus/android/fbreader/CancelActivity.java +++ b/src/org/geometerplus/android/fbreader/CancelActivity.java @@ -39,6 +39,7 @@ public class CancelActivity extends ListActivity { final ActionListAdapter adapter = new ActionListAdapter(getIntent()); setListAdapter(adapter); getListView().setOnItemClickListener(adapter); + setResult(-1); } private class ActionListAdapter extends BaseAdapter implements AdapterView.OnItemClickListener { @@ -76,9 +77,14 @@ public class CancelActivity extends ListActivity { if (summary != null) { summaryView.setVisibility(View.VISIBLE); summaryView.setText(summary); + titleView.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT + )); } else { summaryView.setVisibility(View.GONE); - titleView.setGravity(Gravity.CENTER_VERTICAL); + titleView.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT + )); } return view; } diff --git a/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java b/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java index 5dfffe044..017674b99 100644 --- a/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java +++ b/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java @@ -60,7 +60,7 @@ public final class SQLiteBooksDatabase extends BooksDatabase { private void migrate(Context context) { final int version = myDatabase.getVersion(); - final int currentVersion = 13; + final int currentVersion = 14; if (version >= currentVersion) { return; } @@ -95,6 +95,8 @@ public final class SQLiteBooksDatabase extends BooksDatabase { updateTables11(); case 12: updateTables12(); + case 13: + updateTables13(); } myDatabase.setTransactionSuccessful(); myDatabase.endTransaction(); @@ -695,10 +697,11 @@ public final class SQLiteBooksDatabase extends BooksDatabase { return ids; } - protected List loadBookmarks(long bookId) { + @Override + protected List loadBookmarks(long bookId, boolean visible) { 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 } + "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 Bookmarks.book_id = ? AND Bookmarks.visible = ?", new String[] { "" + bookId, visible ? "1" : "0" } ); while (cursor.moveToNext()) { list.add(createBookmark( @@ -713,18 +716,20 @@ public final class SQLiteBooksDatabase extends BooksDatabase { cursor.getString(8), (int)cursor.getLong(9), (int)cursor.getLong(10), - (int)cursor.getLong(11) + (int)cursor.getLong(11), + visible )); } cursor.close(); return list; } - protected List loadAllBookmarks() { + @Override + protected List loadAllVisibleBookmarks() { LinkedList list = new LinkedList(); myDatabase.execSQL("DELETE FROM Bookmarks WHERE book_id = -1"); 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", null + "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 Bookmarks.visible = 1", null ); while (cursor.moveToNext()) { list.add(createBookmark( @@ -739,7 +744,8 @@ public final class SQLiteBooksDatabase extends BooksDatabase { cursor.getString(8), (int)cursor.getLong(9), (int)cursor.getLong(10), - (int)cursor.getLong(11) + (int)cursor.getLong(11), + true )); } cursor.close(); @@ -748,19 +754,20 @@ public final class SQLiteBooksDatabase extends BooksDatabase { private SQLiteStatement myInsertBookmarkStatement; private SQLiteStatement myUpdateBookmarkStatement; + @Override protected long saveBookmark(Bookmark bookmark) { SQLiteStatement statement; if (bookmark.getId() == -1) { if (myInsertBookmarkStatement == null) { myInsertBookmarkStatement = myDatabase.compileStatement( - "INSERT OR IGNORE INTO Bookmarks (book_id,bookmark_text,creation_time,modification_time,access_time,access_counter,model_id,paragraph,word,char) VALUES (?,?,?,?,?,?,?,?,?,?)" + "INSERT OR IGNORE INTO Bookmarks (book_id,bookmark_text,creation_time,modification_time,access_time,access_counter,model_id,paragraph,word,char,visible) VALUES (?,?,?,?,?,?,?,?,?,?,?)" ); } statement = myInsertBookmarkStatement; } else { if (myUpdateBookmarkStatement == null) { myUpdateBookmarkStatement = myDatabase.compileStatement( - "UPDATE Bookmarks SET book_id = ?, bookmark_text = ?, creation_time =?, modification_time = ?,access_time = ?, access_counter = ?, model_id = ?, paragraph = ?, word = ?, char = ? WHERE bookmark_id = ?" + "UPDATE Bookmarks SET book_id = ?, bookmark_text = ?, creation_time =?, modification_time = ?,access_time = ?, access_counter = ?, model_id = ?, paragraph = ?, word = ?, char = ?, visible = ? WHERE bookmark_id = ?" ); } statement = myUpdateBookmarkStatement; @@ -772,22 +779,24 @@ public final class SQLiteBooksDatabase extends BooksDatabase { bindDate(statement, 4, bookmark.getTime(Bookmark.MODIFICATION)); bindDate(statement, 5, bookmark.getTime(Bookmark.ACCESS)); statement.bindLong(6, bookmark.getAccessCount()); - bindString(statement, 7, bookmark.getModelId()); + bindString(statement, 7, bookmark.ModelId); statement.bindLong(8, bookmark.ParagraphIndex); statement.bindLong(9, bookmark.ElementIndex); statement.bindLong(10, bookmark.CharIndex); + statement.bindLong(11, bookmark.IsVisible ? 1 : 0); if (statement == myInsertBookmarkStatement) { return statement.executeInsert(); } else { final long id = bookmark.getId(); - statement.bindLong(11, id); + statement.bindLong(12, id); statement.execute(); return id; } } private SQLiteStatement myDeleteBookmarkStatement; + @Override protected void deleteBookmark(Bookmark bookmark) { if (myDeleteBookmarkStatement == null) { myDeleteBookmarkStatement = myDatabase.compileStatement( @@ -1134,4 +1143,10 @@ public final class SQLiteBooksDatabase extends BooksDatabase { private void updateTables12() { myDatabase.execSQL("DELETE FROM Files WHERE parent_id IN (SELECT file_id FROM Files WHERE name LIKE '%.epub')"); } + + private void updateTables13() { + myDatabase.execSQL( + "ALTER TABLE Bookmarks ADD COLUMN visible INTEGER DEFAULT 1" + ); + } } diff --git a/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java b/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java index 9fa7e5267..c2c0f5566 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java +++ b/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java @@ -144,6 +144,9 @@ public final class FBReaderApp extends ZLApplication { } public void openBook(final Book book, final Bookmark bookmark) { + if (book == null) { + return; + } if (Model != null) { if (bookmark == null & book.File.getPath().equals(Model.Book.File.getPath())) { return; @@ -234,7 +237,7 @@ public final class FBReaderApp extends ZLApplication { } public void gotoBookmark(Bookmark bookmark) { - final String modelId = bookmark.getModelId(); + final String modelId = bookmark.ModelId; if (modelId == null) { BookTextView.gotoPosition(bookmark); setView(BookTextView); @@ -309,9 +312,12 @@ public final class FBReaderApp extends ZLApplication { public List getCancelActionsList() { myCancelActionsList.clear(); - myCancelActionsList.add(new CancelActionDescription( - CancelActionType.previousBook, "this is a summary" - )); + final Book previousBook = Library.getPreviousBook(); + if (previousBook != null) { + myCancelActionsList.add(new CancelActionDescription( + CancelActionType.previousBook, previousBook.getTitle() + )); + } myCancelActionsList.add(new CancelActionDescription( CancelActionType.gotoPosition, "this is a summary" )); @@ -335,6 +341,7 @@ public final class FBReaderApp extends ZLApplication { final CancelActionDescription description = myCancelActionsList.get(index); switch (description.Type) { case previousBook: + openBook(Library.getPreviousBook(), null); break; case gotoPosition: break; diff --git a/src/org/geometerplus/fbreader/library/Bookmark.java b/src/org/geometerplus/fbreader/library/Bookmark.java index 51aee5ca2..96e000537 100644 --- a/src/org/geometerplus/fbreader/library/Bookmark.java +++ b/src/org/geometerplus/fbreader/library/Bookmark.java @@ -30,7 +30,7 @@ public final class Bookmark extends ZLTextFixedPosition { public final static int LATEST = 3; public static List bookmarks() { - return BooksDatabase.Instance().loadAllBookmarks(); + return BooksDatabase.Instance().loadAllVisibleBookmarks(); } private long myId; @@ -42,11 +42,13 @@ public final class Bookmark extends ZLTextFixedPosition { private Date myAccessDate; private int myAccessCount; private Date myLatestDate; - private final String myModelId; + + public final String ModelId; + public final boolean IsVisible; private boolean myIsChanged; - Bookmark(long id, long bookId, String bookTitle, String text, Date creationDate, Date modificationDate, Date accessDate, int accessCount, String modelId, int paragraphIndex, int elementIndex, int charIndex) { + Bookmark(long id, long bookId, String bookTitle, String text, Date creationDate, Date modificationDate, Date accessDate, int accessCount, String modelId, int paragraphIndex, int elementIndex, int charIndex, boolean isVisible) { super(paragraphIndex, elementIndex, charIndex); myId = id; @@ -63,11 +65,12 @@ public final class Bookmark extends ZLTextFixedPosition { } } myAccessCount = accessCount; - myModelId = modelId; + ModelId = modelId; + IsVisible = isVisible; myIsChanged = false; } - public Bookmark(Book book, String modelId, ZLTextWordCursor cursor) { + public Bookmark(Book book, String modelId, ZLTextWordCursor cursor, boolean isVisible) { super(cursor); myId = -1; @@ -75,7 +78,8 @@ public final class Bookmark extends ZLTextFixedPosition { myBookTitle = book.getTitle(); myText = createBookmarkText(cursor, 20); myCreationDate = new Date(); - myModelId = modelId; + ModelId = modelId; + IsVisible = isVisible; myIsChanged = true; } @@ -95,10 +99,6 @@ public final class Bookmark extends ZLTextFixedPosition { return myBookTitle; } - public String getModelId() { - return myModelId; - } - public Date getTime(int timeStamp) { switch (timeStamp) { default: diff --git a/src/org/geometerplus/fbreader/library/BooksDatabase.java b/src/org/geometerplus/fbreader/library/BooksDatabase.java index 6ecde9a48..e8882bc86 100644 --- a/src/org/geometerplus/fbreader/library/BooksDatabase.java +++ b/src/org/geometerplus/fbreader/library/BooksDatabase.java @@ -89,12 +89,12 @@ public abstract class BooksDatabase { protected abstract void addToFavorites(long bookId); protected abstract void removeFromFavorites(long bookId); - 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 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, boolean isVisible) { + return new Bookmark(id, bookId, bookTitle, text, creationDate, modificationDate, accessDate, accessCounter, modelId, paragraphIndex, wordIndex, charIndex, isVisible); } - protected abstract List loadBookmarks(long bookId); - protected abstract List loadAllBookmarks(); + protected abstract List loadBookmarks(long bookId, boolean isVisible); + protected abstract List loadAllVisibleBookmarks(); 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 717848e06..b6c8b23aa 100644 --- a/src/org/geometerplus/fbreader/library/Library.java +++ b/src/org/geometerplus/fbreader/library/Library.java @@ -378,6 +378,11 @@ public final class Library { return (recentIds.size() > 0) ? Book.getById(recentIds.get(0)) : null; } + public static Book getPreviousBook() { + List recentIds = BooksDatabase.Instance().loadRecentBookIds(); + return (recentIds.size() > 1) ? Book.getById(recentIds.get(1)) : null; + } + public LibraryTree favorites() { waitForState(STATE_FULLY_INITIALIZED); return myFavorites;