From 186e593776c396bde3d720addd6f6842fe880a7c Mon Sep 17 00:00:00 2001 From: Leon Scroggins Date: Tue, 28 Jul 2009 14:14:48 -0400 Subject: In History context menu, do not show "Add bookmark" for bookmarks. Fix for http://b/issue?id=1688867. Instead of providing an option to add a bookmark to bookmarks, provide an option to remove the item from bookmarks. Also display the item as the context menu header. --- src/com/android/browser/BrowserHistoryPage.java | 30 ++++++++++++++++++++----- src/com/android/browser/HistoryItem.java | 11 +++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) (limited to 'src/com/android/browser') diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java index d5e7049f9..335d8fe0d 100644 --- a/src/com/android/browser/BrowserHistoryPage.java +++ b/src/com/android/browser/BrowserHistoryPage.java @@ -62,6 +62,7 @@ public class BrowserHistoryPage extends ExpandableListActivity { private HistoryAdapter mAdapter; private DateSorter mDateSorter; private boolean mMaxTabsOpen; + private HistoryItem mContextHeader; private final static String LOGTAG = "browser"; @@ -166,7 +167,7 @@ public class BrowserHistoryPage extends ExpandableListActivity { } return super.onOptionsItemSelected(item); } - + @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { @@ -181,12 +182,25 @@ public class BrowserHistoryPage extends ExpandableListActivity { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.historycontext, menu); + HistoryItem historyItem = (HistoryItem) i.targetView; + // Setup the header - menu.setHeaderTitle(((HistoryItem)i.targetView).getUrl()); + if (mContextHeader == null) { + mContextHeader = new HistoryItem(this); + } else if (mContextHeader.getParent() != null) { + ((ViewGroup) mContextHeader.getParent()).removeView(mContextHeader); + } + historyItem.copyTo(mContextHeader); + menu.setHeaderView(mContextHeader); // Only show open in new tab if we have not maxed out available tabs menu.findItem(R.id.new_window_context_menu_id).setVisible(!mMaxTabsOpen); + // For a bookmark, provide the option to remove it from bookmarks + if (historyItem.isBookmark()) { + MenuItem item = menu.findItem(R.id.save_to_bookmarks_menu_id); + item.setTitle(R.string.remove_from_bookmarks); + } // decide whether to show the share link option PackageManager pm = getPackageManager(); Intent send = new Intent(Intent.ACTION_SEND); @@ -201,8 +215,9 @@ public class BrowserHistoryPage extends ExpandableListActivity { public boolean onContextItemSelected(MenuItem item) { ExpandableListContextMenuInfo i = (ExpandableListContextMenuInfo) item.getMenuInfo(); - String url = ((HistoryItem)i.targetView).getUrl(); - String title = ((HistoryItem)i.targetView).getName(); + HistoryItem historyItem = (HistoryItem) i.targetView; + String url = historyItem.getUrl(); + String title = historyItem.getName(); switch (item.getItemId()) { case R.id.open_context_menu_id: loadUrl(url, false); @@ -211,7 +226,12 @@ public class BrowserHistoryPage extends ExpandableListActivity { loadUrl(url, true); return true; case R.id.save_to_bookmarks_menu_id: - Browser.saveBookmark(this, title, url); + if (historyItem.isBookmark()) { + Bookmarks.removeFromBookmarks(this, getContentResolver(), + url); + } else { + Browser.saveBookmark(this, title, url); + } return true; case R.id.share_link_context_menu_id: Browser.sendString(this, url); diff --git a/src/com/android/browser/HistoryItem.java b/src/com/android/browser/HistoryItem.java index 8a994f37e..e8f15b1c9 100644 --- a/src/com/android/browser/HistoryItem.java +++ b/src/com/android/browser/HistoryItem.java @@ -55,18 +55,25 @@ import android.widget.TextView; }; } - void copyTo(HistoryItem item) { + /* package */ void copyTo(HistoryItem item) { item.mTextView.setText(mTextView.getText()); item.mUrlText.setText(mUrlText.getText()); item.setIsBookmark(mStar.isChecked()); item.mImageView.setImageDrawable(mImageView.getDrawable()); } + /** + * Whether or not this item represents a bookmarked site + */ + /* package */ boolean isBookmark() { + return mStar.isChecked(); + } + /** * Set whether or not this represents a bookmark, and make sure the star * behaves appropriately. */ - void setIsBookmark(boolean isBookmark) { + /* package */ void setIsBookmark(boolean isBookmark) { mStar.setOnCheckedChangeListener(null); mStar.setChecked(isBookmark); mStar.setOnCheckedChangeListener(mListener); -- cgit v1.2.3