Work on the Bookmark Grid, including the favicon.
Remove the file BookmarkGridPage, since a GridView will do just fine.
Now we specify a height and width for the bitmaps rather than adjusting
them for the screen size. Also add the favicon and match the design
more closely for the Add option. In BrowserActivity, match the size
of the saved screenshots to the desired size for the Bookmarks
Activity. Also move the logic into its own method so it can be
called from multiple places (still called in only one at the moment).
diff --git a/src/com/android/browser/BookmarkGridPage.java b/src/com/android/browser/BookmarkGridPage.java
deleted file mode 100644
index 5517d9c..0000000
--- a/src/com/android/browser/BookmarkGridPage.java
+++ /dev/null
@@ -1,47 +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.content.Context;
-import android.widget.GridView;
-
-import java.util.ArrayList;
-
-public class BookmarkGridPage extends GridView {
- private final static int SPACING = 10;
- private BrowserBookmarksAdapter mAdapter;
-
- public BookmarkGridPage(Context context, BrowserBookmarksAdapter adapter) {
- super(context);
- setNumColumns(3);
- mAdapter = adapter;
- setAdapter(mAdapter);
- setFocusable(true);
- setFocusableInTouchMode(true);
- setSelector(android.R.drawable.gallery_thumb);
- setVerticalSpacing(SPACING);
- setHorizontalSpacing(SPACING);
- }
-
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- int thumbHeight = (h - 2 * (SPACING + getListPaddingTop()
- + getListPaddingBottom())) / 3;
- mAdapter.heightChanged(thumbHeight);
- super.onSizeChanged(w, h, oldw, oldh);
- }
-}
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 43f1acd..585b8ff 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -2878,6 +2878,58 @@
}
};
+ private void updateScreenshot(WebView view) {
+ // If this is a bookmarked site, add a screenshot to the database.
+ // FIXME: When should we update? Every time?
+ // FIXME: Would like to make sure there is actually something to
+ // draw, but the API for that (WebViewCore.pictureReady()) is not
+ // currently accessible here.
+ String original = view.getOriginalUrl();
+ if (original != null) {
+ // copied from BrowserBookmarksAdapter
+ int query = original.indexOf('?');
+ String noQuery = original;
+ if (query != -1) {
+ noQuery = original.substring(0, query);
+ }
+ String URL = noQuery + '?';
+ String[] selArgs = new String[] { noQuery, URL };
+ final String where
+ = "(url == ? OR url GLOB ? || '*') AND bookmark == 1";
+ final String[] projection
+ = new String[] { Browser.BookmarkColumns._ID };
+ ContentResolver cr = getContentResolver();
+ final Cursor c = cr.query(Browser.BOOKMARKS_URI, projection,
+ where, selArgs, null);
+ boolean succeed = c.moveToFirst();
+ ContentValues values = null;
+ while (succeed) {
+ if (values == null) {
+ final ByteArrayOutputStream os
+ = new ByteArrayOutputStream();
+ Picture thumbnail = view.capturePicture();
+ // Keep width and height in sync with BrowserBookmarksPage
+ // and bookmark_thumb
+ Bitmap bm = Bitmap.createBitmap(100, 80,
+ Bitmap.Config.ARGB_4444);
+ Canvas canvas = new Canvas(bm);
+ // May need to tweak these values to determine what is the
+ // best scale factor
+ canvas.scale(.5f, .5f);
+ thumbnail.draw(canvas);
+ bm.compress(Bitmap.CompressFormat.PNG, 100, os);
+ values = new ContentValues();
+ values.put(Browser.BookmarkColumns.THUMBNAIL,
+ os.toByteArray());
+ }
+ cr.update(ContentUris.withAppendedId(Browser.BOOKMARKS_URI,
+ c.getInt(0)), values, null, null);
+ succeed = c.moveToNext();
+ }
+ c.close();
+ }
+ }
+
// -------------------------------------------------------------------------
// WebViewClient implementation.
//-------------------------------------------------------------------------
@@ -2989,48 +3041,7 @@
// Update the lock icon image only once we are done loading
updateLockIconImage(mLockIconType);
-
- // If this is a bookmarked site, add a screenshot to the database.
- // FIXME: When should we update? Every time?
- String original = view.getOriginalUrl();
- if (original != null) {
- // copied from BrowserBookmarksAdapter
- int query = original.indexOf('?');
- String noQuery = original;
- if (query != -1) {
- noQuery = original.substring(0, query);
- }
- String URL = noQuery + '?';
- String[] selArgs = new String[] { noQuery, URL };
- final String where = "(url == ? OR url GLOB ? || '*') AND bookmark == 1";
- final String[] projection = new String[] { Browser.BookmarkColumns._ID };
- ContentResolver cr = getContentResolver();
- final Cursor c = cr.query(Browser.BOOKMARKS_URI, projection, where, selArgs, null);
- boolean succeed = c.moveToFirst();
- ContentValues values = null;
- while (succeed) {
- if (values == null) {
- final ByteArrayOutputStream os = new ByteArrayOutputStream();
- Picture thumbnail = view.capturePicture();
- // Height was arbitrarily chosen
- Bitmap bm = Bitmap.createBitmap(100, 100,
- Bitmap.Config.ARGB_4444);
- Canvas canvas = new Canvas(bm);
- // Scale chosen to be about one third, since we want
- // roughly three rows/columns for bookmark page
- canvas.scale(.3f, .3f);
- thumbnail.draw(canvas);
- bm.compress(Bitmap.CompressFormat.PNG, 100, os);
- values = new ContentValues();
- values.put(Browser.BookmarkColumns.THUMBNAIL,
- os.toByteArray());
- }
- cr.update(ContentUris.withAppendedId(Browser.BOOKMARKS_URI,
- c.getInt(0)), values, null, null);
- succeed = c.moveToNext();
- }
- c.close();
- }
+ updateScreenshot(view);
// Performance probe
if (false) {
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index c7210af..75be45b 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -44,15 +44,13 @@
class BrowserBookmarksAdapter extends BaseAdapter {
private String mCurrentPage;
+ private String mCurrentTitle;
private Cursor mCursor;
private int mCount;
private BrowserBookmarksPage mBookmarksPage;
private ContentResolver mContentResolver;
private boolean mDataValid;
-
- // The following variables are used for the grid mode
private boolean mGridMode;
- private int mThumbHeight;
// When true, this adapter is used to pick a bookmark to create a shortcut
private boolean mCreateShortcut;
@@ -70,28 +68,19 @@
/**
* Create a new BrowserBookmarksAdapter.
- * @param b BrowserBookmarksPage that instantiated this.
- * Necessary so it will adjust its focus
- * appropriately after a search.
- */
- public BrowserBookmarksAdapter(BrowserBookmarksPage b, String curPage) {
- this(b, curPage, false);
- }
-
- /**
- * Create a new BrowserBookmarksAdapter.
* @param b BrowserBookmarksPage that instantiated this.
* Necessary so it will adjust its focus
* appropriately after a search.
*/
public BrowserBookmarksAdapter(BrowserBookmarksPage b, String curPage,
- boolean createShortcut) {
+ String curTitle, boolean createShortcut) {
mDataValid = false;
mCreateShortcut = createShortcut;
mExtraOffset = createShortcut ? 0 : 1;
mBookmarksPage = b;
- mCurrentPage = b.getResources().getString(R.string.current_page) +
- curPage;
+ mCurrentPage = b.getResources().getString(R.string.current_page)
+ + curPage;
+ mCurrentTitle = curTitle;
mContentResolver = b.getContentResolver();
mGridMode = false;
@@ -109,7 +98,7 @@
mCount = mCursor.getCount() + mExtraOffset;
// FIXME: This requires another query of the database after the
- // initial search(null). Can we optimize this?
+ // managedQuery. Can we optimize this?
Browser.requestAllIcons(mContentResolver,
Browser.BookmarkColumns.FAVICON + " is NULL AND " +
Browser.BookmarkColumns.BOOKMARK + " == 1", mIconReceiver);
@@ -341,10 +330,6 @@
return position;
}
- /* package */ void heightChanged(int newHeight) {
- mThumbHeight = newHeight;
- }
-
/* package */ void switchViewMode(boolean toGrid) {
mGridMode = toGrid;
}
@@ -381,24 +366,21 @@
convertView
= factory.inflate(R.layout.bookmark_thumbnail, null);
}
+ View holder = convertView.findViewById(R.id.holder);
ImageView thumb = (ImageView) convertView.findViewById(R.id.thumb);
- // Favicon disabled for now.
- //ImageView fav = (ImageView) convertView.findViewById(R.id.fav);
+ ImageView fav = (ImageView) convertView.findViewById(R.id.fav);
TextView tv = (TextView) convertView.findViewById(R.id.label);
- ViewGroup.LayoutParams lp = thumb.getLayoutParams();
- if (lp.height != mThumbHeight) {
- lp.height = mThumbHeight;
- thumb.requestLayout();
- }
-
if (0 == position && !mCreateShortcut) {
// This is to create a bookmark for the current page.
- tv.setText(R.string.add_new_bookmark);
- thumb.setImageResource(
- R.drawable.ic_tab_browser_bookmark_selected);
+ holder.setVisibility(View.VISIBLE);
+ fav.setVisibility(View.GONE);
+ tv.setText(mCurrentTitle);
+ // FIXME: Want to show the screenshot of the current page
+ thumb.setImageResource(R.drawable.blank);
return convertView;
}
+ holder.setVisibility(View.GONE);
mCursor.moveToPosition(position - mExtraOffset);
tv.setText(mCursor.getString(
Browser.HISTORY_PROJECTION_TITLE_INDEX));
@@ -411,7 +393,6 @@
thumb.setImageBitmap(
BitmapFactory.decodeByteArray(data, 0, data.length));
}
-/*
// Now show the favicon
data = mCursor.getBlob(Browser.HISTORY_PROJECTION_FAVICON_INDEX);
if (data == null) {
@@ -421,7 +402,7 @@
fav.setImageBitmap(
BitmapFactory.decodeByteArray(data, 0, data.length));
}
-*/
+
return convertView;
}
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 513ce3e..428aa92 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -44,6 +44,7 @@
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
+import android.widget.GridView;
import android.widget.ListView;
import android.widget.Toast;
@@ -54,7 +55,7 @@
View.OnCreateContextMenuListener {
private boolean mGridMode;
- private BookmarkGridPage mGridPage;
+ private GridView mGridPage;
private View mVerticalList;
private BrowserBookmarksAdapter mBookmarksAdapter;
private static final int BOOKMARKS_SAVE = 1;
@@ -181,9 +182,9 @@
setTitle(R.string.browser_bookmarks_page_bookmarks_text);
mBookmarksAdapter = new BrowserBookmarksAdapter(this,
- getIntent().getStringExtra("url"), mCreateShortcut);
- mGridMode = true;
- switchViewMode(mGridMode);
+ getIntent().getStringExtra("url"),
+ getIntent().getStringExtra("title"), mCreateShortcut);
+ switchViewMode(true);
}
/**
@@ -195,8 +196,17 @@
mBookmarksAdapter.switchViewMode(gridMode);
if (mGridMode) {
if (mGridPage == null) {
- mGridPage = new BookmarkGridPage(this, mBookmarksAdapter);
+ mGridPage = new GridView(this);
+ mGridPage.setAdapter(mBookmarksAdapter);
mGridPage.setOnItemClickListener(mListener);
+ mGridPage.setNumColumns(GridView.AUTO_FIT);
+ // Keep this in sync with bookmark_thumb and
+ // BrowserActivity.updateScreenshot
+ mGridPage.setColumnWidth(100);
+ mGridPage.setFocusable(true);
+ mGridPage.setFocusableInTouchMode(true);
+ mGridPage.setSelector(android.R.drawable.gallery_thumb);
+ mGridPage.setVerticalSpacing(10);
if (!mCreateShortcut) {
mGridPage.setOnCreateContextMenuListener(this);
}