1
0
Fork 0
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:
Nikolay Pultsin 2013-01-11 05:46:24 +04:00
parent 47899dd926
commit d6800ebc04
8 changed files with 76 additions and 32 deletions

View file

@ -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) {

View file

@ -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);

View file

@ -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);
} }

View file

@ -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;

View file

@ -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);
}
}
} }

View file

@ -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);
}
}
} }

View file

@ -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);
} }

View file

@ -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(