mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 18:29:23 +02:00
save/delete bookmarks via library service
This commit is contained in:
parent
47899dd926
commit
d6800ebc04
8 changed files with 76 additions and 32 deletions
|
@ -145,14 +145,6 @@ public class BookmarksActivity extends TabActivity implements MenuItem.OnMenuIte
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
for (Bookmark bookmark : myAllBooksBookmarks) {
|
|
||||||
bookmark.save();
|
|
||||||
}
|
|
||||||
super.onPause();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStop() {
|
protected void onStop() {
|
||||||
myCollection.unbind();
|
myCollection.unbind();
|
||||||
|
@ -225,7 +217,7 @@ public class BookmarksActivity extends TabActivity implements MenuItem.OnMenuIte
|
||||||
// TODO: implement
|
// TODO: implement
|
||||||
return true;
|
return true;
|
||||||
case DELETE_ITEM_ID:
|
case DELETE_ITEM_ID:
|
||||||
bookmark.delete();
|
myCollection.deleteBookmark(bookmark);
|
||||||
myThisBookBookmarks.remove(bookmark);
|
myThisBookBookmarks.remove(bookmark);
|
||||||
myAllBooksBookmarks.remove(bookmark);
|
myAllBooksBookmarks.remove(bookmark);
|
||||||
mySearchResults.remove(bookmark);
|
mySearchResults.remove(bookmark);
|
||||||
|
@ -239,6 +231,7 @@ public class BookmarksActivity extends TabActivity implements MenuItem.OnMenuIte
|
||||||
final FBReaderApp fbreader = (FBReaderApp)FBReaderApp.Instance();
|
final FBReaderApp fbreader = (FBReaderApp)FBReaderApp.Instance();
|
||||||
final Bookmark bookmark = fbreader.addBookmark(20, true);
|
final Bookmark bookmark = fbreader.addBookmark(20, true);
|
||||||
if (bookmark != null) {
|
if (bookmark != null) {
|
||||||
|
myCollection.saveBookmark(bookmark);
|
||||||
myThisBookBookmarks.add(0, bookmark);
|
myThisBookBookmarks.add(0, bookmark);
|
||||||
myAllBooksBookmarks.add(0, bookmark);
|
myAllBooksBookmarks.add(0, bookmark);
|
||||||
invalidateAllViews();
|
invalidateAllViews();
|
||||||
|
@ -246,7 +239,8 @@ public class BookmarksActivity extends TabActivity implements MenuItem.OnMenuIte
|
||||||
}
|
}
|
||||||
|
|
||||||
private void gotoBookmark(Bookmark bookmark) {
|
private void gotoBookmark(Bookmark bookmark) {
|
||||||
bookmark.onOpen();
|
bookmark.markAsAccessed();
|
||||||
|
myCollection.saveBookmark(bookmark);
|
||||||
final FBReaderApp fbreader = (FBReaderApp)FBReaderApp.Instance();
|
final FBReaderApp fbreader = (FBReaderApp)FBReaderApp.Instance();
|
||||||
final long bookId = bookmark.getBookId();
|
final long bookId = bookmark.getBookId();
|
||||||
if (fbreader.Model == null || fbreader.Model.Book.getId() != bookId) {
|
if (fbreader.Model == null || fbreader.Model.Book.getId() != bookId) {
|
||||||
|
|
|
@ -72,6 +72,26 @@ public class BookCollectionShadow implements IBookCollection, ServiceConnection
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void saveBookmark(Bookmark bookmark) {
|
||||||
|
if (myInterface != null) {
|
||||||
|
try {
|
||||||
|
bookmark.update(SerializerUtil.deserializeBookmark(
|
||||||
|
myInterface.saveBookmark(SerializerUtil.serialize(bookmark))
|
||||||
|
));
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteBookmark(Bookmark bookmark) {
|
||||||
|
if (myInterface != null) {
|
||||||
|
try {
|
||||||
|
myInterface.deleteBookmark(SerializerUtil.serialize(bookmark));
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// method from ServiceConnection interface
|
// method from ServiceConnection interface
|
||||||
public synchronized void onServiceConnected(ComponentName name, IBinder service) {
|
public synchronized void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
myInterface = LibraryInterface.Stub.asInterface(service);
|
myInterface = LibraryInterface.Stub.asInterface(service);
|
||||||
|
|
|
@ -8,5 +8,8 @@ import java.util.List;
|
||||||
|
|
||||||
interface LibraryInterface {
|
interface LibraryInterface {
|
||||||
String bookById(in long id);
|
String bookById(in long id);
|
||||||
|
|
||||||
List<String> allBookmarks();
|
List<String> allBookmarks();
|
||||||
|
String saveBookmark(in String bookmark);
|
||||||
|
void deleteBookmark(in String bookmark);
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,6 +76,16 @@ public class LibraryService extends Service {
|
||||||
public List<String> allBookmarks() {
|
public List<String> allBookmarks() {
|
||||||
return SerializerUtil.serialize(myCollection.allBookmarks());
|
return SerializerUtil.serialize(myCollection.allBookmarks());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String saveBookmark(String serialized) {
|
||||||
|
final Bookmark bookmark = SerializerUtil.deserializeBookmark(serialized);
|
||||||
|
myCollection.saveBookmark(bookmark);
|
||||||
|
return SerializerUtil.serialize(bookmark);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteBookmark(String serialized) {
|
||||||
|
myCollection.deleteBookmark(SerializerUtil.deserializeBookmark(serialized));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private LibraryImplementation myLibrary;
|
private LibraryImplementation myLibrary;
|
||||||
|
|
|
@ -428,4 +428,16 @@ public class BookCollection implements IBookCollection {
|
||||||
Collections.sort(list, new Bookmark.ByTimeComparator());
|
Collections.sort(list, new Bookmark.ByTimeComparator());
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void saveBookmark(Bookmark bookmark) {
|
||||||
|
if (bookmark != null) {
|
||||||
|
bookmark.setId(BooksDatabase.Instance().saveBookmark(bookmark));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteBookmark(Bookmark bookmark) {
|
||||||
|
if (bookmark != null && bookmark.getId() != -1) {
|
||||||
|
BooksDatabase.Instance().deleteBookmark(bookmark);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,8 +44,6 @@ public final class Bookmark extends ZLTextFixedPosition {
|
||||||
public final String ModelId;
|
public final String ModelId;
|
||||||
public final boolean IsVisible;
|
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, boolean isVisible) {
|
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);
|
super(paragraphIndex, elementIndex, charIndex);
|
||||||
|
|
||||||
|
@ -65,7 +63,6 @@ public final class Bookmark extends ZLTextFixedPosition {
|
||||||
myAccessCount = accessCount;
|
myAccessCount = accessCount;
|
||||||
ModelId = modelId;
|
ModelId = modelId;
|
||||||
IsVisible = isVisible;
|
IsVisible = isVisible;
|
||||||
myIsChanged = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Bookmark(Book book, String modelId, ZLTextWordCursor cursor, int maxLength, boolean isVisible) {
|
public Bookmark(Book book, String modelId, ZLTextWordCursor cursor, int maxLength, boolean isVisible) {
|
||||||
|
@ -82,7 +79,6 @@ public final class Bookmark extends ZLTextFixedPosition {
|
||||||
myCreationDate = new Date();
|
myCreationDate = new Date();
|
||||||
ModelId = modelId;
|
ModelId = modelId;
|
||||||
IsVisible = isVisible;
|
IsVisible = isVisible;
|
||||||
myIsChanged = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
|
@ -124,28 +120,13 @@ public final class Bookmark extends ZLTextFixedPosition {
|
||||||
myText = text;
|
myText = text;
|
||||||
myModificationDate = new Date();
|
myModificationDate = new Date();
|
||||||
myLatestDate = myModificationDate;
|
myLatestDate = myModificationDate;
|
||||||
myIsChanged = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onOpen() {
|
public void markAsAccessed() {
|
||||||
myAccessDate = new Date();
|
myAccessDate = new Date();
|
||||||
++myAccessCount;
|
++myAccessCount;
|
||||||
myLatestDate = myAccessDate;
|
myLatestDate = myAccessDate;
|
||||||
myIsChanged = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void save() {
|
|
||||||
if (myIsChanged) {
|
|
||||||
myId = BooksDatabase.Instance().saveBookmark(this);
|
|
||||||
myIsChanged = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void delete() {
|
|
||||||
if (myId != -1) {
|
|
||||||
BooksDatabase.Instance().deleteBookmark(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ByTimeComparator implements Comparator<Bookmark> {
|
public static class ByTimeComparator implements Comparator<Bookmark> {
|
||||||
|
@ -239,4 +220,25 @@ mainLoop:
|
||||||
}
|
}
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setId(long id) {
|
||||||
|
myId = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(Bookmark other) {
|
||||||
|
// TODO: copy other fields (?)
|
||||||
|
myId = other.myId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: this method should be removed
|
||||||
|
public void save() {
|
||||||
|
myId = BooksDatabase.Instance().saveBookmark(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: this method should be removed
|
||||||
|
public void delete() {
|
||||||
|
if (myId != -1) {
|
||||||
|
BooksDatabase.Instance().deleteBookmark(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,5 +23,8 @@ import java.util.List;
|
||||||
|
|
||||||
public interface IBookCollection {
|
public interface IBookCollection {
|
||||||
Book getBookById(long id);
|
Book getBookById(long id);
|
||||||
|
|
||||||
List<Bookmark> allBookmarks();
|
List<Bookmark> allBookmarks();
|
||||||
|
void saveBookmark(Bookmark bookmark);
|
||||||
|
void deleteBookmark(Bookmark bookmark);
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ class XMLSerializer extends AbstractSerializer {
|
||||||
return deserializer.getBookmark();
|
return deserializer.getBookmark();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DateFormat ourDateFormatter = DateFormat.getDateInstance(DateFormat.FULL, Locale.ENGLISH);
|
private static DateFormat ourDateFormatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.FULL, Locale.ENGLISH);
|
||||||
private static String formatDate(Date date) {
|
private static String formatDate(Date date) {
|
||||||
return date != null ? ourDateFormatter.format(date) : null;
|
return date != null ? ourDateFormatter.format(date) : null;
|
||||||
}
|
}
|
||||||
|
@ -433,7 +433,7 @@ class XMLSerializer extends AbstractSerializer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void endDocumentHandler() {
|
public void endDocumentHandler() {
|
||||||
if (myId == -1 || myBookId == -1) {
|
if (myBookId == -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
myBookmark = new Bookmark(
|
myBookmark = new Bookmark(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue