diff --git a/AndroidManifest.xml b/AndroidManifest.xml index bd1f753fc..e5cd2b8d8 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -107,6 +107,7 @@ + diff --git a/AndroidManifest.xml.pattern b/AndroidManifest.xml.pattern index c22dcc63c..0e1a19586 100644 --- a/AndroidManifest.xml.pattern +++ b/AndroidManifest.xml.pattern @@ -107,6 +107,7 @@ + diff --git a/res/layout/style_item.xml b/res/layout/style_item.xml index 3f1c0fb96..885821c5e 100644 --- a/res/layout/style_item.xml +++ b/res/layout/style_item.xml @@ -3,16 +3,27 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" + android:paddingLeft="5dip" + android:paddingRight="8dp" android:orientation="horizontal" > + + diff --git a/src/org/geometerplus/android/fbreader/SelectionBookmarkAction.java b/src/org/geometerplus/android/fbreader/SelectionBookmarkAction.java index 9fbed96e9..23c9c7ab9 100644 --- a/src/org/geometerplus/android/fbreader/SelectionBookmarkAction.java +++ b/src/org/geometerplus/android/fbreader/SelectionBookmarkAction.java @@ -19,6 +19,8 @@ package org.geometerplus.android.fbreader; +import android.content.Intent; + import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.fbreader.book.Bookmark; @@ -40,6 +42,9 @@ public class SelectionBookmarkAction extends FBAndroidAction { ZLResource.resource("selection").getResource("bookmarkCreated").getValue() .replace("%s", bookmark.getText()) ); - //final Intent styleIntent = new Intent(); + final Intent intent = + new Intent(BaseActivity.getApplicationContext(), StyleListActivity.class); + intent.putExtra(FBReader.BOOKMARK_KEY, SerializerUtil.serialize(bookmark)); + OrientationUtil.startActivity(BaseActivity, intent); } } diff --git a/src/org/geometerplus/android/fbreader/StyleListActivity.java b/src/org/geometerplus/android/fbreader/StyleListActivity.java index 06757825a..5ae37d9e4 100644 --- a/src/org/geometerplus/android/fbreader/StyleListActivity.java +++ b/src/org/geometerplus/android/fbreader/StyleListActivity.java @@ -19,6 +19,9 @@ package org.geometerplus.android.fbreader; +import java.util.ArrayList; +import java.util.List; + import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; @@ -27,34 +30,63 @@ import android.view.*; import org.geometerplus.zlibrary.ui.android.R; +import org.geometerplus.fbreader.book.*; + +import org.geometerplus.android.fbreader.libraryService.BookCollectionShadow; + public class StyleListActivity extends ListActivity { - static final String LIST_SIZE = "listSize"; - static final String ITEM_TITLE = "title"; - static final String ITEM_SUMMARY = "summary"; + private final BookCollectionShadow myCollection = new BookCollectionShadow(); + private Bookmark myBookmark; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); requestWindowFeature(Window.FEATURE_NO_TITLE); - final ActionListAdapter adapter = new ActionListAdapter(getIntent()); - setListAdapter(adapter); - getListView().setOnItemClickListener(adapter); - setResult(-1); + } + + @Override + protected void onStart() { + super.onStart(); + myCollection.bindToService(this, new Runnable() { + public void run() { + myBookmark = SerializerUtil.deserializeBookmark( + getIntent().getStringExtra(FBReader.BOOKMARK_KEY) + ); + if (myBookmark == null) { + finish(); + return; + } + final List styles = myCollection.highlightingStyles(); + if (styles.isEmpty()) { + finish(); + return; + } + final ActionListAdapter adapter = new ActionListAdapter(styles); + setListAdapter(adapter); + getListView().setOnItemClickListener(adapter); + } + }); + } + + @Override + protected void onDestroy() { + myCollection.unbind(); + super.onDestroy(); } private class ActionListAdapter extends BaseAdapter implements AdapterView.OnItemClickListener { - private final Intent myIntent; + private final List myStyles; - ActionListAdapter(Intent intent) { - myIntent = intent; + ActionListAdapter(List styles) { + myStyles = new ArrayList(styles); } public final int getCount() { - return myIntent.getIntExtra(LIST_SIZE, 0); + return myStyles.size(); } - public final Integer getItem(int position) { - return position; + public final HighlightingStyle getItem(int position) { + return myStyles.get(position); } public final long getItemId(int position) { @@ -64,30 +96,21 @@ public class StyleListActivity extends ListActivity { public View getView(int position, View convertView, final ViewGroup parent) { final View view = convertView != null ? convertView - : LayoutInflater.from(parent.getContext()).inflate(R.layout.cancel_item, parent, false); - final TextView titleView = (TextView)view.findViewById(R.id.cancel_item_title); - final TextView summaryView = (TextView)view.findViewById(R.id.cancel_item_summary); - final String title = myIntent.getStringExtra(ITEM_TITLE + position); - final String summary = myIntent.getStringExtra(ITEM_SUMMARY + position); + : LayoutInflater.from(parent.getContext()).inflate(R.layout.style_item, parent, false); + final TextView titleView = (TextView)view.findViewById(R.id.style_item_title); + final String title = "Style " + getItem(position).Id; titleView.setText(title); - if (summary != null) { - summaryView.setVisibility(View.VISIBLE); - summaryView.setText(summary); - titleView.setLayoutParams(new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT - )); - } else { - summaryView.setVisibility(View.GONE); - titleView.setLayoutParams(new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT - )); - } return view; } - public final void onItemClick(AdapterView parent, View view, int position, long id) { - setResult((int)id + 1); - finish(); + public final void onItemClick(AdapterView parent, View view, final int position, long id) { + myCollection.bindToService(StyleListActivity.this, new Runnable() { + public void run() { + myBookmark.setStyleId(getItem(position).Id); + myCollection.saveBookmark(myBookmark); + finish(); + } + }); } } } diff --git a/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java b/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java index 94eaad3a4..6ea2b8d20 100644 --- a/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java +++ b/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java @@ -898,14 +898,14 @@ final class SQLiteBooksDatabase extends BooksDatabase { if (bookmark.getId() == -1) { if (myInsertBookmarkStatement == null) { myInsertBookmarkStatement = myDatabase.compileStatement( - "INSERT OR IGNORE INTO Bookmarks (book_id,bookmark_text,creation_time,modification_time,access_time,access_counter,model_id,paragraph,word,char,end_paragraph,end_word,end_character,visible) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)" + "INSERT OR IGNORE INTO Bookmarks (book_id,bookmark_text,creation_time,modification_time,access_time,access_counter,model_id,paragraph,word,char,end_paragraph,end_word,end_character,visible,style_id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ); } statement = myInsertBookmarkStatement; } else { if (myUpdateBookmarkStatement == null) { myUpdateBookmarkStatement = myDatabase.compileStatement( - "UPDATE Bookmarks SET book_id = ?, bookmark_text = ?, creation_time =?, modification_time = ?,access_time = ?, access_counter = ?, model_id = ?, paragraph = ?, word = ?, char = ?, end_paragraph = ?, end_word = ?, end_character = ?, visible = ? WHERE bookmark_id = ?" + "UPDATE Bookmarks SET book_id = ?, bookmark_text = ?, creation_time =?, modification_time = ?,access_time = ?, access_counter = ?, model_id = ?, paragraph = ?, word = ?, char = ?, end_paragraph = ?, end_word = ?, end_character = ?, visible = ?, style_id = ? WHERE bookmark_id = ?" ); } statement = myUpdateBookmarkStatement; @@ -932,12 +932,13 @@ final class SQLiteBooksDatabase extends BooksDatabase { statement.bindNull(13); } statement.bindLong(14, bookmark.IsVisible ? 1 : 0); + statement.bindLong(15, bookmark.getStyleId()); if (statement == myInsertBookmarkStatement) { return statement.executeInsert(); } else { final long id = bookmark.getId(); - statement.bindLong(12, id); + statement.bindLong(16, id); statement.execute(); return id; } diff --git a/src/org/geometerplus/fbreader/book/Bookmark.java b/src/org/geometerplus/fbreader/book/Bookmark.java index 4c5d9a4d5..f84206005 100644 --- a/src/org/geometerplus/fbreader/book/Bookmark.java +++ b/src/org/geometerplus/fbreader/book/Bookmark.java @@ -257,6 +257,10 @@ mainLoop: return myStyleId; } + public void setStyleId(int styleId) { + myStyleId = styleId; + } + public String getText() { return myText; }