diff options
| author | Leon Scroggins <scroggo@google.com> | 2009-08-05 14:07:58 -0400 |
|---|---|---|
| committer | Leon Scroggins <scroggo@google.com> | 2009-08-06 12:57:25 -0400 |
| commit | a5d669e4c08f0e64387c2c539c41a26ac8c845ab (patch) | |
| tree | d21f09081815d993bef30c1835064291c9732073 /src/com/android | |
| parent | 4d055a532447cd1adfeac2abebdf365b38fb8a15 (diff) | |
| download | packages_apps_Browser-a5d669e4c08f0e64387c2c539c41a26ac8c845ab.tar.gz packages_apps_Browser-a5d669e4c08f0e64387c2c539c41a26ac8c845ab.tar.bz2 packages_apps_Browser-a5d669e4c08f0e64387c2c539c41a26ac8c845ab.zip | |
Make the "Most visited" page have a thumbnail viewing mode.
Start capturing screenshots for all visited pages, and show them
in a grid view on the most visited page. Modify the BrowserBookmarks-
Page and Adapter so they can be used for the "Most visited" page.
Also change some of the ids for context menu items to be the same
in the browser and history context menus, for simplicity in
handling them in BrowserBookmarksPage.
Diffstat (limited to 'src/com/android')
6 files changed, 125 insertions, 33 deletions
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); |
