diff --git a/assets/resources/application/cs.xml b/assets/resources/application/cs.xml index 6ef802b2a..bec853217 100644 --- a/assets/resources/application/cs.xml +++ b/assets/resources/application/cs.xml @@ -159,7 +159,7 @@ - + diff --git a/assets/resources/application/de.xml b/assets/resources/application/de.xml index 950647658..3e7ac0648 100644 --- a/assets/resources/application/de.xml +++ b/assets/resources/application/de.xml @@ -160,7 +160,7 @@ - + diff --git a/assets/resources/application/en.xml b/assets/resources/application/en.xml index 4e4cafa00..1fb978e04 100644 --- a/assets/resources/application/en.xml +++ b/assets/resources/application/en.xml @@ -158,7 +158,7 @@ - + diff --git a/assets/resources/application/fr.xml b/assets/resources/application/fr.xml index 55cdf510b..8eec3b7fa 100644 --- a/assets/resources/application/fr.xml +++ b/assets/resources/application/fr.xml @@ -162,7 +162,7 @@ - + diff --git a/assets/resources/application/hu.xml b/assets/resources/application/hu.xml index bf9b74819..0bd210456 100644 --- a/assets/resources/application/hu.xml +++ b/assets/resources/application/hu.xml @@ -159,7 +159,7 @@ - + diff --git a/assets/resources/application/it.xml b/assets/resources/application/it.xml index 32dfefee2..a650d9c2b 100644 --- a/assets/resources/application/it.xml +++ b/assets/resources/application/it.xml @@ -159,7 +159,7 @@ - + diff --git a/assets/resources/application/nl.xml b/assets/resources/application/nl.xml index 6e7bb8de7..ad6459ffc 100644 --- a/assets/resources/application/nl.xml +++ b/assets/resources/application/nl.xml @@ -159,7 +159,7 @@ - + diff --git a/assets/resources/application/ru.xml b/assets/resources/application/ru.xml index c913f9d18..fd9dda42c 100644 --- a/assets/resources/application/ru.xml +++ b/assets/resources/application/ru.xml @@ -158,7 +158,7 @@ - + diff --git a/assets/resources/application/uk.xml b/assets/resources/application/uk.xml index 0f58326a5..0472bfed9 100644 --- a/assets/resources/application/uk.xml +++ b/assets/resources/application/uk.xml @@ -159,7 +159,7 @@ - + diff --git a/assets/resources/application/vi.xml b/assets/resources/application/vi.xml index 9b416e521..c85ffe8ab 100644 --- a/assets/resources/application/vi.xml +++ b/assets/resources/application/vi.xml @@ -159,7 +159,7 @@ - + diff --git a/assets/resources/application/zh.xml b/assets/resources/application/zh.xml index 6a7668742..d67bc2f58 100644 --- a/assets/resources/application/zh.xml +++ b/assets/resources/application/zh.xml @@ -159,7 +159,7 @@ - + diff --git a/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java b/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java index 42ad66519..947c52685 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java +++ b/src/org/geometerplus/fbreader/fbreader/FBReaderApp.java @@ -190,6 +190,7 @@ public final class FBReaderApp extends ZLApplication { if (Model != null) { BookModel.Label label = Model.getLabel(id); if (label != null) { + addInvisibleBookmark(); if (label.ModelId == null) { BookTextView.gotoPosition(label.ParagraphIndex, 0, 0); } else { @@ -291,7 +292,7 @@ public final class FBReaderApp extends ZLApplication { static enum CancelActionType { previousBook, - gotoPosition, + returnTo, close } @@ -308,6 +309,15 @@ public final class FBReaderApp extends ZLApplication { } } + private static class BookmarkDescription extends CancelActionDescription { + final Bookmark Bookmark; + + BookmarkDescription(Bookmark b) { + super(CancelActionType.returnTo, b.getText()); + Bookmark = b; + } + } + private final ArrayList myCancelActionsList = new ArrayList(); @@ -319,15 +329,11 @@ public final class FBReaderApp extends ZLApplication { CancelActionType.previousBook, previousBook.getTitle() )); } - myCancelActionsList.add(new CancelActionDescription( - CancelActionType.gotoPosition, "this is a summary" - )); - myCancelActionsList.add(new CancelActionDescription( - CancelActionType.gotoPosition, "this is a summary" - )); - myCancelActionsList.add(new CancelActionDescription( - CancelActionType.gotoPosition, "this is a summary" - )); + if (Model.Book != null) { + for (Bookmark bookmark : Bookmark.invisibleBookmarks(Model.Book)) { + myCancelActionsList.add(new BookmarkDescription(bookmark)); + } + } myCancelActionsList.add(new CancelActionDescription( CancelActionType.close, null )); @@ -344,14 +350,33 @@ public final class FBReaderApp extends ZLApplication { case previousBook: openBook(Library.getPreviousBook(), null); break; - case gotoPosition: + case returnTo: + { + final Bookmark b = ((BookmarkDescription)description).Bookmark; + b.delete(); + addInvisibleBookmark(); + gotoBookmark(b); break; + } case close: closeWindow(); break; } } + public void addInvisibleBookmark() { + if (Model.Book != null) { + final Bookmark b = addBookmark(6, false); + if (b != null) { + b.save(); + final List bookmarks = Bookmark.invisibleBookmarks(Model.Book); + for (int i = 3; i < bookmarks.size(); ++i) { + bookmarks.get(i).delete(); + } + } + } + } + public Bookmark addBookmark(int maxLength, boolean visible) { final FBView view = getTextView(); final ZLTextWordCursor cursor = view.getStartCursor(); diff --git a/src/org/geometerplus/fbreader/library/Bookmark.java b/src/org/geometerplus/fbreader/library/Bookmark.java index 37a31dae5..b8e9d28b2 100644 --- a/src/org/geometerplus/fbreader/library/Bookmark.java +++ b/src/org/geometerplus/fbreader/library/Bookmark.java @@ -33,6 +33,12 @@ public final class Bookmark extends ZLTextFixedPosition { return BooksDatabase.Instance().loadAllVisibleBookmarks(); } + public static List invisibleBookmarks(Book book) { + final List list = BooksDatabase.Instance().loadBookmarks(book.getId(), false); + Collections.sort(list, new ByTimeComparator()); + return list; + } + private long myId; private final long myBookId; private final String myBookTitle; @@ -152,7 +158,7 @@ public final class Bookmark extends ZLTextFixedPosition { } } - public static String createBookmarkText(ZLTextWordCursor cursor, int maxWords) { + private static String createBookmarkText(ZLTextWordCursor cursor, int maxWords) { cursor = new ZLTextWordCursor(cursor); final StringBuilder builder = new StringBuilder();