summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorLeon Scroggins <scroggo@google.com>2009-08-05 14:07:58 -0400
committerLeon Scroggins <scroggo@google.com>2009-08-06 12:57:25 -0400
commita5d669e4c08f0e64387c2c539c41a26ac8c845ab (patch)
treed21f09081815d993bef30c1835064291c9732073 /src/com/android
parent4d055a532447cd1adfeac2abebdf365b38fb8a15 (diff)
downloadpackages_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')
-rw-r--r--src/com/android/browser/AddBookmarkPage.java2
-rw-r--r--src/com/android/browser/BrowserActivity.java4
-rw-r--r--src/com/android/browser/BrowserBookmarksAdapter.java65
-rw-r--r--src/com/android/browser/BrowserBookmarksPage.java77
-rw-r--r--src/com/android/browser/BrowserHistoryPage.java2
-rw-r--r--src/com/android/browser/CombinedBookmarkHistoryActivity.java8
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);