From c1cf63a4c15ad81f4d19e10574e9dba91f0b83e4 Mon Sep 17 00:00:00 2001 From: Patrick Scott Date: Tue, 9 Mar 2010 16:02:08 -0500 Subject: [PATCH] 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 --- AndroidManifest.xml | 2 - .../android/browser/BrowserBookmarksAdapter.java | 19 +- src/com/android/browser/BrowserBookmarksPage.java | 18 ++ src/com/android/browser/BrowserHistoryPage.java | 3 + .../browser/CombinedBookmarkHistoryActivity.java | 17 +- src/com/android/browser/MostVisitedActivity.java | 216 --------------------- 6 files changed, 34 insertions(+), 241 deletions(-) delete mode 100644 src/com/android/browser/MostVisitedActivity.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 49dd97f..e3e64d4 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -133,8 +133,6 @@ - () { + 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 416ae8f..0000000 --- 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 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(); - 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); - } -} - -- 2.11.0