diff options
| author | Patrick Scott <phanna@android.com> | 2010-03-09 16:02:08 -0500 |
|---|---|---|
| committer | Patrick Scott <phanna@android.com> | 2010-03-11 10:19:12 -0500 |
| commit | c1cf63a4c15ad81f4d19e10574e9dba91f0b83e4 (patch) | |
| tree | 3233b47f7524012efdfe7e48a5756711e21f11fe /src/com/android/browser | |
| parent | f739271c1cf974a1057a9a8a3f42b89937836228 (diff) | |
| download | packages_apps_Browser-c1cf63a4c15ad81f4d19e10574e9dba91f0b83e4.tar.gz packages_apps_Browser-c1cf63a4c15ad81f4d19e10574e9dba91f0b83e4.tar.bz2 packages_apps_Browser-c1cf63a4c15ad81f4d19e10574e9dba91f0b83e4.zip | |
Request icons in the background.
BrowserBookmarksAdapter does not need to request bookmark icons as most of the
bookmarks have up-to-date icons. We still need to request all icons on start up
because a new icon may be loaded as a result of clicking a history items.
Move the icon request to a background thread to not block the ui thread on large
db lookups.
Remove MostVisitedActivity as it is no longer used.
Bug: 2496872
Change-Id: I378dce8fdb7e825da96594cd31b720ea24758af1
Diffstat (limited to 'src/com/android/browser')
| -rw-r--r-- | src/com/android/browser/BrowserBookmarksAdapter.java | 19 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserBookmarksPage.java | 18 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserHistoryPage.java | 3 | ||||
| -rw-r--r-- | src/com/android/browser/CombinedBookmarkHistoryActivity.java | 17 | ||||
| -rw-r--r-- | src/com/android/browser/MostVisitedActivity.java | 216 |
5 files changed, 34 insertions, 239 deletions
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java index 7b93fa139..4442c7f6c 100644 --- a/src/com/android/browser/BrowserBookmarksAdapter.java +++ b/src/com/android/browser/BrowserBookmarksAdapter.java @@ -34,7 +34,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebIconDatabase; -import android.webkit.WebIconDatabase.IconListener; import android.webkit.WebView; import android.widget.BaseAdapter; import android.widget.ImageView; @@ -57,16 +56,6 @@ class BrowserBookmarksAdapter extends BaseAdapter { private boolean mNeedsOffset; private int mExtraOffset; - // Implementation of WebIconDatabase.IconListener - private class IconReceiver implements IconListener { - public void onReceivedIcon(String url, Bitmap icon) { - updateBookmarkFavicon(mContentResolver, null, url, icon); - } - } - - // Instance of IconReceiver - private final IconReceiver mIconReceiver = new IconReceiver(); - /** * Create a new BrowserBookmarksAdapter. * @param b BrowserBookmarksPage that instantiated this. @@ -93,7 +82,7 @@ class BrowserBookmarksAdapter extends BaseAdapter { if (mostVisited) { whereClause = Browser.BookmarkColumns.VISITS + " != 0"; } else { - whereClause = Browser.BookmarkColumns.BOOKMARK + " != 0"; + whereClause = Browser.BookmarkColumns.BOOKMARK + " = 1"; } mCursor = b.managedQuery(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION, whereClause, null, orderBy); @@ -104,12 +93,6 @@ class BrowserBookmarksAdapter extends BaseAdapter { notifyDataSetChanged(); mCount = mCursor.getCount() + mExtraOffset; - - // FIXME: This requires another query of the database after the - // managedQuery. Can we optimize this? - Browser.requestAllIcons(mContentResolver, - Browser.BookmarkColumns.FAVICON + " is NULL AND " + - Browser.BookmarkColumns.BOOKMARK + " == 1", mIconReceiver); } /** diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java index 1183b707d..bff7c796f 100644 --- a/src/com/android/browser/BrowserBookmarksPage.java +++ b/src/com/android/browser/BrowserBookmarksPage.java @@ -47,6 +47,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.ContextMenu.ContextMenuInfo; +import android.webkit.WebIconDatabase.IconListener; import android.widget.AdapterView; import android.widget.GridView; import android.widget.ListView; @@ -373,6 +374,23 @@ public class BrowserBookmarksPage extends Activity implements if (mVerticalList != null) { mVerticalList.setAdapter(mBookmarksAdapter); } + // Add our own listener in case there are favicons that + // have yet to be loaded. + if (mMostVisited) { + IconListener listener = new IconListener() { + public void onReceivedIcon(String url, + Bitmap icon) { + if (mGridPage != null) { + mGridPage.setAdapter(mBookmarksAdapter); + } + if (mVerticalList != null) { + mVerticalList.setAdapter(mBookmarksAdapter); + } + } + }; + CombinedBookmarkHistoryActivity.getIconListenerSet() + .addListener(listener); + } break; } } diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java index 7c47460a6..23080f86b 100644 --- a/src/com/android/browser/BrowserHistoryPage.java +++ b/src/com/android/browser/BrowserHistoryPage.java @@ -135,8 +135,11 @@ public class BrowserHistoryPage extends ExpandableListActivity { } mDisableNewWindow = getIntent().getBooleanExtra("disable_new_window", false); + + // Register to receive icons in case they haven't all been loaded. CombinedBookmarkHistoryActivity.getIconListenerSet() .addListener(mIconReceiver); + Activity parent = getParent(); if (null == parent || !(parent instanceof CombinedBookmarkHistoryActivity)) { diff --git a/src/com/android/browser/CombinedBookmarkHistoryActivity.java b/src/com/android/browser/CombinedBookmarkHistoryActivity.java index af968abdb..dd29121be 100644 --- a/src/com/android/browser/CombinedBookmarkHistoryActivity.java +++ b/src/com/android/browser/CombinedBookmarkHistoryActivity.java @@ -22,6 +22,7 @@ import android.content.ContentResolver; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; +import android.os.AsyncTask; import android.os.Bundle; import android.provider.Browser; import android.view.Window; @@ -100,11 +101,6 @@ public class CombinedBookmarkHistoryActivity extends TabActivity Bundle extras = getIntent().getExtras(); - getIconListenerSet(); - // Do this every time we create a new activity so that we get the - // newest icons. - Browser.requestAllIcons(getContentResolver(), null, sIconListenerSet); - Intent bookmarksIntent = new Intent(this, BrowserBookmarksPage.class); bookmarksIntent.putExtras(extras); createTab(bookmarksIntent, R.string.tab_bookmarks, @@ -128,6 +124,17 @@ public class CombinedBookmarkHistoryActivity extends TabActivity if (defaultTab != null) { getTabHost().setCurrentTab(2); } + + // Do this every time we launch the activity in case a new favicon was + // added to the webkit db. + (new AsyncTask<Void, Void, Void>() { + public Void doInBackground(Void... v) { + Browser.requestAllIcons(getContentResolver(), + Browser.BookmarkColumns.FAVICON + " is NULL", + getIconListenerSet()); + return null; + } + }).execute(); } private void createTab(Intent intent, int labelResId, int iconResId, diff --git a/src/com/android/browser/MostVisitedActivity.java b/src/com/android/browser/MostVisitedActivity.java deleted file mode 100644 index 416ae8fdf..000000000 --- a/src/com/android/browser/MostVisitedActivity.java +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.browser; - -import android.app.Activity; -import android.app.ListActivity; -import android.content.Intent; -import android.database.ContentObserver; -import android.database.Cursor; -import android.database.DataSetObserver; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.os.Bundle; -import android.os.Handler; -import android.provider.Browser; -import android.webkit.WebIconDatabase.IconListener; -import android.widget.ListAdapter; -import android.widget.ListView; -import android.widget.TextView; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.view.ViewStub; - -import java.util.Vector; - -public class MostVisitedActivity extends ListActivity { - - private MyAdapter mAdapter; - - // Instance of IconReceiver - private final IconReceiver mIconReceiver = new IconReceiver(); - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mAdapter = new MyAdapter(); - CombinedBookmarkHistoryActivity.getIconListenerSet() - .addListener(mIconReceiver); - setListAdapter(mAdapter); - ListView list = getListView(); - View v = new ViewStub(this, R.layout.empty_history); - addContentView(v, new LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT)); - list.setEmptyView(v); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - CombinedBookmarkHistoryActivity.getIconListenerSet() - .removeListener(mIconReceiver); - } - - private class IconReceiver implements IconListener { - public void onReceivedIcon(String url, Bitmap icon) { - setListAdapter(mAdapter); - } - } - - protected void onListItemClick(ListView l, View v, int position, long id) { - TextView tv = (TextView) v.findViewById(R.id.url); - String url = tv.getText().toString(); - loadUrl(url, false); - } - - private void loadUrl(String url, boolean newWindow) { - Intent intent = new Intent().setAction(url); - if (newWindow) { - Bundle b = new Bundle(); - b.putBoolean("new_window", true); - intent.putExtras(b); - } - setResultToParent(RESULT_OK, intent); - finish(); - } - - private class MyAdapter implements ListAdapter { - private Vector<DataSetObserver> mObservers; - private Cursor mCursor; - // These correspond with projection below. - private static final int mUrlIndex = 0; - private static final int mTitleIndex = 1; - private static final int mBookmarkIndex = 2; - private static final int mFaviconIndex = 3; - - MyAdapter() { - mObservers = new Vector<DataSetObserver>(); - String[] projection = new String[] { - Browser.BookmarkColumns.URL, - Browser.BookmarkColumns.TITLE, - Browser.BookmarkColumns.BOOKMARK, - Browser.BookmarkColumns.FAVICON }; - String whereClause = Browser.BookmarkColumns.VISITS + " != 0"; - String orderBy = Browser.BookmarkColumns.VISITS + " DESC"; - mCursor = managedQuery(Browser.BOOKMARKS_URI, projection, - whereClause, null, orderBy); - mCursor.registerContentObserver(new ChangeObserver()); - } - - private class ChangeObserver extends ContentObserver { - public ChangeObserver() { - super(new Handler()); - } - - @Override - public boolean deliverSelfNotifications() { - return true; - } - - @Override - public void onChange(boolean selfChange) { - MyAdapter.this.refreshData(); - } - } - - void refreshData() { - mCursor.requery(); - for (DataSetObserver o : mObservers) { - o.onChanged(); - } - } - - public View getView(int position, View convertView, ViewGroup parent) { - HistoryItem item; - if (null == convertView) { - item = new HistoryItem(MostVisitedActivity.this); - } else { - item = (HistoryItem) convertView; - } - mCursor.moveToPosition(position); - item.setName(mCursor.getString(mTitleIndex)); - String url = mCursor.getString(mUrlIndex); - item.setUrl(url); - byte[] data = mCursor.getBlob(mFaviconIndex); - if (data != null) { - item.setFavicon(BitmapFactory.decodeByteArray(data, 0, - data.length)); - } else { - item.setFavicon(CombinedBookmarkHistoryActivity - .getIconListenerSet().getFavicon(url)); - } - item.setIsBookmark(1 == mCursor.getInt(mBookmarkIndex)); - return item; - } - - public boolean areAllItemsEnabled() { - return true; - } - - public boolean isEnabled(int position) { - return true; - } - - public int getCount() { - return mCursor.getCount(); - } - - public Object getItem(int position) { - return null; - } - - public long getItemId(int position) { - return position; - } - - // Always a HistoryItem - public int getItemViewType(int position) { - return 0; - } - - public int getViewTypeCount() { - return 1; - } - - public boolean hasStableIds() { - return true; - } - - public void registerDataSetObserver(DataSetObserver observer) { - mObservers.add(observer); - } - - public void unregisterDataSetObserver(DataSetObserver observer) { - mObservers.remove(observer); - } - - public boolean isEmpty() { - return getCount() == 0; - } - } - - // This Activity is generally a sub-Activity of CombinedHistoryActivity. In - // that situation, we need to pass our result code up to our parent. - // However, if someone calls this Activity directly, then this has no - // parent, and it needs to set it on itself. - private void setResultToParent(int resultCode, Intent data) { - Activity a = getParent() == null ? this : getParent(); - a.setResult(resultCode, data); - } -} - |
