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
protected void onStop() {
myCollection.unbind();
@ -225,7 +217,7 @@ public class BookmarksActivity extends TabActivity implements MenuItem.OnMenuIte
// TODO: implement
return true;
case DELETE_ITEM_ID:
bookmark.delete();
myCollection.deleteBookmark(bookmark);
myThisBookBookmarks.remove(bookmark);
myAllBooksBookmarks.remove(bookmark);
mySearchResults.remove(bookmark);
@ -239,6 +231,7 @@ public class BookmarksActivity extends TabActivity implements MenuItem.OnMenuIte
final FBReaderApp fbreader = (FBReaderApp)FBReaderApp.Instance();
final Bookmark bookmark = fbreader.addBookmark(20, true);
if (bookmark != null) {
myCollection.saveBookmark(bookmark);
myThisBookBookmarks.add(0, bookmark);
myAllBooksBookmarks.add(0, bookmark);
invalidateAllViews();
@ -246,7 +239,8 @@ public class BookmarksActivity extends TabActivity implements MenuItem.OnMenuIte
}
private void gotoBookmark(Bookmark bookmark) {
bookmark.onOpen();
bookmark.markAsAccessed();
myCollection.saveBookmark(bookmark);
final FBReaderApp fbreader = (FBReaderApp)FBReaderApp.Instance();
final long bookId = bookmark.getBookId();
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
public synchronized void onServiceConnected(ComponentName name, IBinder service) {
myInterface = LibraryInterface.Stub.asInterface(service);

View file

@ -8,5 +8,8 @@ import java.util.List;
interface LibraryInterface {
String bookById(in long id);
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() {
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;

View file

@ -428,4 +428,16 @@ public class BookCollection implements IBookCollection {
Collections.sort(list, new Bookmark.ByTimeComparator());
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 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) {
super(paragraphIndex, elementIndex, charIndex);
@ -65,7 +63,6 @@ public final class Bookmark extends ZLTextFixedPosition {
myAccessCount = accessCount;
ModelId = modelId;
IsVisible = isVisible;
myIsChanged = false;
}
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();
ModelId = modelId;
IsVisible = isVisible;
myIsChanged = true;
}
public long getId() {
@ -124,28 +120,13 @@ public final class Bookmark extends ZLTextFixedPosition {
myText = text;
myModificationDate = new Date();
myLatestDate = myModificationDate;
myIsChanged = true;
}
}
public void onOpen() {
public void markAsAccessed() {
myAccessDate = new Date();
++myAccessCount;
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> {
@ -239,4 +220,25 @@ mainLoop:
}
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 {
Book getBookById(long id);
List<Bookmark> allBookmarks();
void saveBookmark(Bookmark bookmark);
void deleteBookmark(Bookmark bookmark);
}

View file

@ -126,7 +126,7 @@ class XMLSerializer extends AbstractSerializer {
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) {
return date != null ? ourDateFormatter.format(date) : null;
}
@ -433,7 +433,7 @@ class XMLSerializer extends AbstractSerializer {
@Override
public void endDocumentHandler() {
if (myId == -1 || myBookId == -1) {
if (myBookId == -1) {
return;
}
myBookmark = new Bookmark(