diff options
| -rw-r--r-- | res/menu/bookmarkscontext.xml | 4 | ||||
| -rw-r--r-- | res/menu/historycontext.xml | 2 | ||||
| -rw-r--r-- | src/com/android/browser/AddBookmarkPage.java | 2 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserActivity.java | 4 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserBookmarksAdapter.java | 65 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserBookmarksPage.java | 77 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserHistoryPage.java | 2 | ||||
| -rw-r--r-- | src/com/android/browser/CombinedBookmarkHistoryActivity.java | 8 |
8 files changed, 128 insertions, 36 deletions
diff --git a/res/menu/bookmarkscontext.xml b/res/menu/bookmarkscontext.xml index ba5d1dcd6..badbb000a 100644 --- a/res/menu/bookmarkscontext.xml +++ b/res/menu/bookmarkscontext.xml @@ -28,8 +28,8 @@ android:title="@string/edit_bookmark"/> <item android:id="@+id/shortcut_context_menu_id" android:title="@string/create_shortcut_bookmark"/> - <item android:id="@+id/send_context_menu_id" - android:title="@string/tab_picker_send_url"/> + <item android:id="@+id/share_link_context_menu_id" + android:title="@string/contextmenu_sharelink"/> <item android:id="@+id/copy_url_context_menu_id" android:title="@string/contextmenu_copylink"/> <item android:id="@+id/delete_context_menu_id" diff --git a/res/menu/historycontext.xml b/res/menu/historycontext.xml index 5306396dc..bd4ede490 100644 --- a/res/menu/historycontext.xml +++ b/res/menu/historycontext.xml @@ -23,7 +23,7 @@ android:title="@string/save_to_bookmarks"/> <item android:id="@+id/share_link_context_menu_id" android:title="@string/contextmenu_sharelink"/> - <item android:id="@+id/copy_context_menu_id" + <item android:id="@+id/copy_url_context_menu_id" android:title="@string/contextmenu_copylink"/> <item android:id="@+id/delete_context_menu_id" android:title="@string/remove_history_item"/> diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java index d26954645..87638d874 100644 --- a/src/com/android/browser/AddBookmarkPage.java +++ b/src/com/android/browser/AddBookmarkPage.java @@ -150,7 +150,7 @@ public class AddBookmarkPage extends Activity { if (mTouchIconUrl != null) { final Cursor c = BrowserBookmarksAdapter.queryBookmarksForUrl( - cr, null, url); + cr, null, url, true); new DownloadTouchIcon(cr, c, url) .execute(mTouchIconUrl); } diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index 3c46fc9d6..68ccf79ba 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -2929,7 +2929,7 @@ public class BrowserActivity extends Activity // currently accessible here. ContentResolver cr = getContentResolver(); final Cursor c = BrowserBookmarksAdapter.queryBookmarksForUrl( - cr, view.getOriginalUrl(), view.getUrl()); + cr, view.getOriginalUrl(), view.getUrl(), false); if (c != null) { boolean succeed = c.moveToFirst(); ContentValues values = null; @@ -3790,7 +3790,7 @@ public class BrowserActivity extends Activity final ContentResolver cr = getContentResolver(); final Cursor c = BrowserBookmarksAdapter.queryBookmarksForUrl(cr, - view.getOriginalUrl(), view.getUrl()); + view.getOriginalUrl(), view.getUrl(), true); if (c != null) { if (c.getCount() > 0) { new DownloadTouchIcon(cr, c, view).execute(url); diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java index c3ccdfd3f..bf74ba23a 100644 --- a/src/com/android/browser/BrowserBookmarksAdapter.java +++ b/src/com/android/browser/BrowserBookmarksAdapter.java @@ -52,10 +52,9 @@ class BrowserBookmarksAdapter extends BaseAdapter { private ContentResolver mContentResolver; private boolean mDataValid; private boolean mGridMode; - - // When true, this adapter is used to pick a bookmark to create a shortcut - private boolean mCreateShortcut; - private int mExtraOffset; + private boolean mMostVisited; + private boolean mNeedsOffset; + private int mExtraOffset; // Implementation of WebIconDatabase.IconListener private class IconReceiver implements IconListener { @@ -74,10 +73,10 @@ class BrowserBookmarksAdapter extends BaseAdapter { * appropriately after a search. */ public BrowserBookmarksAdapter(BrowserBookmarksPage b, String curPage, - String curTitle, boolean createShortcut) { - mDataValid = false; - mCreateShortcut = createShortcut; - mExtraOffset = createShortcut ? 0 : 1; + String curTitle, boolean createShortcut, boolean mostVisited) { + mNeedsOffset = !(createShortcut || mostVisited); + mMostVisited = mostVisited; + mExtraOffset = mNeedsOffset ? 1 : 0; mBookmarksPage = b; mCurrentPage = b.getResources().getString(R.string.current_page) + curPage; @@ -85,9 +84,14 @@ class BrowserBookmarksAdapter extends BaseAdapter { mContentResolver = b.getContentResolver(); mGridMode = false; + String whereClause; // FIXME: Should have a default sort order that the user selects. - String whereClause = Browser.BookmarkColumns.BOOKMARK + " != 0"; String orderBy = Browser.BookmarkColumns.VISITS + " DESC"; + if (mostVisited) { + whereClause = Browser.BookmarkColumns.VISITS + " != 0"; + } else { + whereClause = Browser.BookmarkColumns.BOOKMARK + " != 0"; + } mCursor = b.managedQuery(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION, whereClause, null, orderBy); mCursor.registerContentObserver(new ChangeObserver()); @@ -264,7 +268,7 @@ class BrowserBookmarksAdapter extends BaseAdapter { private static void updateBookmarkFavicon(ContentResolver cr, String originalUrl, String url, Bitmap favicon) { - final Cursor c = queryBookmarksForUrl(cr, originalUrl, url); + final Cursor c = queryBookmarksForUrl(cr, originalUrl, url, true); if (c == null) { return; } @@ -285,7 +289,7 @@ class BrowserBookmarksAdapter extends BaseAdapter { } /* package */ static Cursor queryBookmarksForUrl(ContentResolver cr, - String originalUrl, String url) { + String originalUrl, String url, boolean onlyBookmarks) { if (cr == null || url == null) { return null; } @@ -309,11 +313,13 @@ class BrowserBookmarksAdapter extends BaseAdapter { // http://www.google.com/m?some_query) final String[] selArgs = new String[] { originalUrlNoQuery, urlNoQuery, originalUrl, url }; - final String where = "(" + BookmarkColumns.URL + " == ? OR " + String where = BookmarkColumns.URL + " == ? OR " + BookmarkColumns.URL + " == ? OR " + BookmarkColumns.URL + " GLOB ? || '*' OR " - + BookmarkColumns.URL + " GLOB ? || '*') AND " - + BookmarkColumns.BOOKMARK + " == 1"; + + BookmarkColumns.URL + " GLOB ? || '*'"; + if (onlyBookmarks) { + where = "(" + where + ") AND " + BookmarkColumns.BOOKMARK + " == 1"; + } final String[] projection = new String[] { Browser.BookmarkColumns._ID }; return cr.query(Browser.BOOKMARKS_URI, projection, where, selArgs, @@ -411,7 +417,7 @@ class BrowserBookmarksAdapter extends BaseAdapter { ImageView thumb = (ImageView) convertView.findViewById(R.id.thumb); TextView tv = (TextView) convertView.findViewById(R.id.label); - if (0 == position && !mCreateShortcut) { + if (0 == position && mNeedsOffset) { // This is to create a bookmark for the current page. holder.setVisibility(View.VISIBLE); tv.setText(mCurrentTitle); @@ -436,7 +442,7 @@ class BrowserBookmarksAdapter extends BaseAdapter { return convertView; } - if (position == 0 && !mCreateShortcut) { + if (position == 0 && mNeedsOffset) { AddNewBookmark b; if (convertView instanceof AddNewBookmark) { b = (AddNewBookmark) convertView; @@ -446,10 +452,20 @@ class BrowserBookmarksAdapter extends BaseAdapter { b.setUrl(mCurrentPage); return b; } - if (convertView == null || !(convertView instanceof BookmarkItem)) { - convertView = new BookmarkItem(mBookmarksPage); + if (mMostVisited) { + if (convertView == null || !(convertView instanceof HistoryItem)) { + convertView = new HistoryItem(mBookmarksPage); + } + } else { + if (convertView == null || !(convertView instanceof BookmarkItem)) { + convertView = new BookmarkItem(mBookmarksPage); + } + } + bind((BookmarkItem) convertView, position); + if (mMostVisited) { + ((HistoryItem) convertView).setIsBookmark( + getIsBookmark(position)); } - bind((BookmarkItem)convertView, position); return convertView; } @@ -491,6 +507,17 @@ class BrowserBookmarksAdapter extends BaseAdapter { } /** + * Return whether or not this item represents a bookmarked site. + */ + public boolean getIsBookmark(int position) { + if (position < mExtraOffset || position > mCount) { + return false; + } + mCursor.moveToPosition(position - mExtraOffset); + return (1 == mCursor.getInt(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX)); + } + + /** * Private helper function to return the title or url. */ private String getString(int cursorIndex, int position) { diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java index 0fc264302..caadfdda8 100644 --- a/src/com/android/browser/BrowserBookmarksPage.java +++ b/src/com/android/browser/BrowserBookmarksPage.java @@ -45,6 +45,8 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.ViewStub; import android.view.ContextMenu.ContextMenuInfo; import android.widget.AdapterView; import android.widget.GridView; @@ -67,6 +69,8 @@ public class BrowserBookmarksPage extends Activity implements private AddNewBookmark mAddHeader; private boolean mCanceled = false; private boolean mCreateShortcut; + private boolean mMostVisited; + private View mEmptyView; // XXX: There is no public string defining this intent so if Home changes // the value, we have to update this string. private static final String INSTALL_SHORTCUT = @@ -105,12 +109,18 @@ public class BrowserBookmarksPage extends Activity implements sendBroadcast(send); break; case R.id.delete_context_menu_id: - displayRemoveBookmarkDialog(i.position); + if (mMostVisited) { + Browser.deleteFromHistory(getContentResolver(), + getUrl(i.position)); + refreshList(); + } else { + displayRemoveBookmarkDialog(i.position); + } break; case R.id.new_window_context_menu_id: openInNewWindow(i.position); break; - case R.id.send_context_menu_id: + case R.id.share_link_context_menu_id: Browser.sendString(BrowserBookmarksPage.this, getUrl(i.position)); break; case R.id.copy_url_context_menu_id: @@ -122,6 +132,19 @@ public class BrowserBookmarksPage extends Activity implements Toast.makeText(this, R.string.homepage_set, Toast.LENGTH_LONG).show(); break; + // Only for the Most visited page + case R.id.save_to_bookmarks_menu_id: + HistoryItem historyItem = ((HistoryItem) i.targetView); + // If the site is bookmarked, the item becomes remove from + // bookmarks. + if (historyItem.isBookmark()) { + Bookmarks.removeFromBookmarks(this, getContentResolver(), + historyItem.getUrl()); + } else { + Browser.saveBookmark(this, historyItem.getName(), + historyItem.getUrl()); + } + break; default: return super.onContextItemSelected(item); } @@ -135,9 +158,13 @@ public class BrowserBookmarksPage extends Activity implements (AdapterView.AdapterContextMenuInfo) menuInfo; MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.bookmarkscontext, menu); + if (mMostVisited) { + inflater.inflate(R.menu.historycontext, menu); + } else { + inflater.inflate(R.menu.bookmarkscontext, menu); + } - if (0 == i.position) { + if (0 == i.position && !mMostVisited) { menu.setGroupVisible(R.id.CONTEXT_MENU, false); if (mAddHeader == null) { mAddHeader = new AddNewBookmark(BrowserBookmarksPage.this); @@ -149,7 +176,17 @@ public class BrowserBookmarksPage extends Activity implements menu.setHeaderView(mAddHeader); return; } - menu.setGroupVisible(R.id.ADD_MENU, false); + if (mMostVisited) { + if ((!mGridMode && ((HistoryItem) i.targetView).isBookmark()) + || mBookmarksAdapter.getIsBookmark(i.position)) { + MenuItem item = menu.findItem( + R.id.save_to_bookmarks_menu_id); + item.setTitle(R.string.remove_from_bookmarks); + } + } else { + // The historycontext menu has no ADD_MENU group. + menu.setGroupVisible(R.id.ADD_MENU, false); + } if (mMaxTabsOpen) { menu.findItem(R.id.new_window_context_menu_id).setVisible( false); @@ -181,11 +218,18 @@ public class BrowserBookmarksPage extends Activity implements mCreateShortcut = true; } mMaxTabsOpen = getIntent().getBooleanExtra("maxTabsOpen", false); + mMostVisited = getIntent().getBooleanExtra("mostVisited", false); - setTitle(R.string.browser_bookmarks_page_bookmarks_text); + if (mCreateShortcut) { + setTitle(R.string.browser_bookmarks_page_bookmarks_text); + } mBookmarksAdapter = new BrowserBookmarksAdapter(this, getIntent().getStringExtra("url"), - getIntent().getStringExtra("title"), mCreateShortcut); + getIntent().getStringExtra("title"), mCreateShortcut, + mMostVisited); + if (mMostVisited) { + mEmptyView = new ViewStub(this, R.layout.empty_history); + } switchViewMode(true); } @@ -209,6 +253,9 @@ public class BrowserBookmarksPage extends Activity implements mGridPage.setFocusableInTouchMode(true); mGridPage.setSelector(android.R.drawable.gallery_thumb); mGridPage.setVerticalSpacing(10); + if (mMostVisited) { + mGridPage.setEmptyView(mEmptyView); + } if (!mCreateShortcut) { mGridPage.setOnCreateContextMenuListener(this); } @@ -226,6 +273,9 @@ public class BrowserBookmarksPage extends Activity implements listView.setDrawSelectorOnTop(false); listView.setVerticalScrollBarEnabled(true); listView.setOnItemClickListener(mListener); + if (mMostVisited) { + listView.setEmptyView(mEmptyView); + } if (!mCreateShortcut) { listView.setOnCreateContextMenuListener(this); @@ -233,6 +283,10 @@ public class BrowserBookmarksPage extends Activity implements } setContentView(mVerticalList); } + if (mMostVisited) { + addContentView(mEmptyView, new LayoutParams( + LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); + } } private static final int SAVE_CURRENT_PAGE = 1000; @@ -254,7 +308,7 @@ public class BrowserBookmarksPage extends Activity implements return; } if (!mCreateShortcut) { - if (0 == position) { + if (0 == position && !mMostVisited) { // XXX: Work-around for a framework issue. mHandler.sendEmptyMessage(SAVE_CURRENT_PAGE); } else { @@ -366,6 +420,9 @@ public class BrowserBookmarksPage extends Activity implements if (!mCreateShortcut) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.bookmarks, menu); + // Most visited page does not have an option to bookmark the last + // viewed page. + menu.findItem(R.id.new_context_menu_id).setVisible(!mMostVisited); return true; } return result; @@ -373,6 +430,10 @@ public class BrowserBookmarksPage extends Activity implements @Override public boolean onPrepareOptionsMenu(Menu menu) { + if (mBookmarksAdapter.getCount() == 0) { + // No need to show the menu if there are no items. + return false; + } menu.findItem(R.id.switch_mode_menu_id).setTitle( mGridMode ? R.string.switch_to_list : R.string.switch_to_thumbnails); diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java index 335d8fe0d..cb8340e81 100644 --- a/src/com/android/browser/BrowserHistoryPage.java +++ b/src/com/android/browser/BrowserHistoryPage.java @@ -236,7 +236,7 @@ public class BrowserHistoryPage extends ExpandableListActivity { case R.id.share_link_context_menu_id: Browser.sendString(this, url); return true; - case R.id.copy_context_menu_id: + case R.id.copy_url_context_menu_id: copy(url); return true; case R.id.delete_context_menu_id: diff --git a/src/com/android/browser/CombinedBookmarkHistoryActivity.java b/src/com/android/browser/CombinedBookmarkHistoryActivity.java index 26fd1eea8..7162c88c3 100644 --- a/src/com/android/browser/CombinedBookmarkHistoryActivity.java +++ b/src/com/android/browser/CombinedBookmarkHistoryActivity.java @@ -91,8 +91,12 @@ public class CombinedBookmarkHistoryActivity extends TabActivity bookmarksIntent.putExtras(extras); createTab(bookmarksIntent, R.string.tab_bookmarks, BOOKMARKS_TAB); - Intent visitedIntent = new Intent(this, MostVisitedActivity.class); - visitedIntent.putExtras(extras); + Intent visitedIntent = new Intent(this, BrowserBookmarksPage.class); + // Need to copy extras so the bookmarks activity and this one will be + // different + Bundle visitedExtras = new Bundle(extras); + visitedExtras.putBoolean("mostVisited", true); + visitedIntent.putExtras(visitedExtras); createTab(visitedIntent, R.string.tab_most_visited, VISITED_TAB); Intent historyIntent = new Intent(this, BrowserHistoryPage.class); |
