summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/BrowserBookmarksAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/browser/BrowserBookmarksAdapter.java')
-rw-r--r--src/com/android/browser/BrowserBookmarksAdapter.java122
1 files changed, 78 insertions, 44 deletions
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index fcc3f27..be3c211 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -19,19 +19,24 @@ package com.android.browser;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
+import android.graphics.drawable.BitmapDrawable;
import android.provider.BrowserContract.Bookmarks;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.TextView;
-public class BrowserBookmarksAdapter extends CursorAdapter {
+import com.android.browser.util.ThreadedCursorAdapter;
+import com.android.browser.view.BookmarkContainer;
+
+public class BrowserBookmarksAdapter extends
+ ThreadedCursorAdapter<BrowserBookmarksAdapterItem> {
+
LayoutInflater mInflater;
int mCurrentView;
+ Context mContext;
/**
* Create a new BrowserBookmarksAdapter.
@@ -39,30 +44,53 @@ public class BrowserBookmarksAdapter extends CursorAdapter {
public BrowserBookmarksAdapter(Context context, int defaultView) {
// Make sure to tell the CursorAdapter to avoid the observer and auto-requery
// since the Loader will do that for us.
- super(context, null, 0);
+ super(context, null);
mInflater = LayoutInflater.from(context);
+ mContext = context;
selectView(defaultView);
}
@Override
- public void bindView(View view, Context context, Cursor cursor) {
+ public View newView(Context context, ViewGroup parent) {
if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) {
- bindListView(view, context, cursor);
+ return mInflater.inflate(R.layout.bookmark_list, parent, false);
} else {
- bindGridView(view, context, cursor);
+ return mInflater.inflate(R.layout.bookmark_thumbnail, parent, false);
}
}
- CharSequence getTitle(Cursor cursor, Context context) {
+ @Override
+ public void bindView(View view, BrowserBookmarksAdapterItem object) {
+ BookmarkContainer container = (BookmarkContainer) view;
+ container.setIgnoreRequestLayout(true);
+ if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) {
+ bindListView(view, mContext, object);
+ } else {
+ bindGridView(view, mContext, object);
+ }
+ container.setIgnoreRequestLayout(false);
+ }
+
+ void clearView(View view) {
+ if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) {
+ ImageView favicon = (ImageView) view.findViewById(R.id.favicon);
+ favicon.setImageBitmap(null);
+ } else {
+ ImageView thumb = (ImageView) view.findViewById(R.id.thumb);
+ thumb.setImageBitmap(null);
+ }
+ }
+
+ CharSequence getTitle(Cursor cursor) {
int type = cursor.getInt(BookmarksLoader.COLUMN_INDEX_TYPE);
switch (type) {
case Bookmarks.BOOKMARK_TYPE_OTHER_FOLDER:
- return context.getText(R.string.other_bookmarks);
+ return mContext.getText(R.string.other_bookmarks);
}
return cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE);
}
- void bindGridView(View view, Context context, Cursor cursor) {
+ void bindGridView(View view, Context context, BrowserBookmarksAdapterItem item) {
// We need to set this to handle rotation and other configuration change
// events. If the padding didn't change, this is a no op.
int padding = context.getResources()
@@ -72,63 +100,42 @@ public class BrowserBookmarksAdapter extends CursorAdapter {
ImageView thumb = (ImageView) view.findViewById(R.id.thumb);
TextView tv = (TextView) view.findViewById(R.id.label);
- tv.setText(getTitle(cursor, context));
- if (cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0) {
+ tv.setText(item.title);
+ if (item.is_folder) {
// folder
thumb.setImageResource(R.drawable.thumb_bookmark_widget_folder_holo);
thumb.setScaleType(ScaleType.FIT_END);
- thumb.setBackgroundDrawable(null);
+ thumb.setBackground(null);
} else {
- byte[] thumbData = cursor.getBlob(BookmarksLoader.COLUMN_INDEX_THUMBNAIL);
- Bitmap thumbBitmap = null;
- if (thumbData != null) {
- thumbBitmap = BitmapFactory.decodeByteArray(thumbData, 0, thumbData.length);
- }
-
thumb.setScaleType(ScaleType.CENTER_CROP);
- if (thumbBitmap == null) {
+ if (item.thumbnail == null) {
thumb.setImageResource(R.drawable.browser_thumbnail);
} else {
- thumb.setImageBitmap(thumbBitmap);
+ thumb.setImageDrawable(item.thumbnail);
}
thumb.setBackgroundResource(R.drawable.border_thumb_bookmarks_widget_holo);
}
}
- void bindListView(View view, Context context, Cursor cursor) {
+ void bindListView(View view, Context context, BrowserBookmarksAdapterItem item) {
ImageView favicon = (ImageView) view.findViewById(R.id.favicon);
TextView tv = (TextView) view.findViewById(R.id.label);
- tv.setText(getTitle(cursor, context));
- if (cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0) {
+ tv.setText(item.title);
+ if (item.is_folder) {
// folder
favicon.setImageResource(R.drawable.ic_folder_holo_dark);
- favicon.setBackgroundDrawable(null);
+ favicon.setBackground(null);
} else {
- byte[] faviconData = cursor.getBlob(BookmarksLoader.COLUMN_INDEX_FAVICON);
- Bitmap faviconBitmap = null;
- if (faviconData != null) {
- faviconBitmap = BitmapFactory.decodeByteArray(faviconData, 0, faviconData.length);
- }
-
- if (faviconBitmap == null) {
+ if (item.favicon == null) {
favicon.setImageResource(R.drawable.app_web_browser_sm);
} else {
- favicon.setImageBitmap(faviconBitmap);
+ favicon.setImageDrawable(item.favicon);
}
favicon.setBackgroundResource(R.drawable.bookmark_list_favicon_bg);
}
}
- @Override
- public View newView(Context context, Cursor cursor, ViewGroup parent) {
- if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) {
- return mInflater.inflate(R.layout.bookmark_list, parent, false);
- } else {
- return mInflater.inflate(R.layout.bookmark_thumbnail, parent, false);
- }
- }
-
public void selectView(int view) {
if (view != BrowserBookmarksPage.VIEW_LIST
&& view != BrowserBookmarksPage.VIEW_THUMBNAILS) {
@@ -142,7 +149,34 @@ public class BrowserBookmarksAdapter extends CursorAdapter {
}
@Override
- public Cursor getItem(int position) {
- return (Cursor) super.getItem(position);
+ public BrowserBookmarksAdapterItem getRowObject(Cursor c,
+ BrowserBookmarksAdapterItem item) {
+ if (item == null) {
+ item = new BrowserBookmarksAdapterItem();
+ }
+ Bitmap favicon = item.favicon != null ? item.favicon.getBitmap() : null;
+ Bitmap thumbnail = item.thumbnail != null ? item.thumbnail.getBitmap() : null;
+ favicon = BrowserBookmarksPage.getBitmap(c,
+ BookmarksLoader.COLUMN_INDEX_FAVICON, favicon);
+ thumbnail = BrowserBookmarksPage.getBitmap(c,
+ BookmarksLoader.COLUMN_INDEX_THUMBNAIL, thumbnail);
+ if (favicon != null
+ && (item.favicon == null || item.favicon.getBitmap() != favicon)) {
+ item.favicon = new BitmapDrawable(mContext.getResources(), favicon);
+ }
+ if (thumbnail != null
+ && (item.thumbnail == null || item.thumbnail.getBitmap() != thumbnail)) {
+ item.thumbnail = new BitmapDrawable(mContext.getResources(), thumbnail);
+ }
+ item.is_folder = c.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0;
+ item.title = getTitle(c);
+ item.url = c.getString(BookmarksLoader.COLUMN_INDEX_URL);
+ return item;
+ }
+
+ @Override
+ public BrowserBookmarksAdapterItem getLoadingObject() {
+ BrowserBookmarksAdapterItem item = new BrowserBookmarksAdapterItem();
+ return item;
}
}