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
|
||||
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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue