1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.browser; 18 19 import android.content.Context; 20 import android.database.Cursor; 21 import android.graphics.Bitmap; 22 import android.graphics.BitmapFactory; 23 import android.view.LayoutInflater; 24 import android.view.View; 25 import android.view.ViewGroup; 26 import android.widget.CursorAdapter; 27 import android.widget.ImageView; 28 import android.widget.ImageView.ScaleType; 29 import android.widget.TextView; 30 31 public class BrowserBookmarksAdapter extends CursorAdapter { 32 LayoutInflater mInflater; 33 int mCurrentView; 34 35 /** 36 * Create a new BrowserBookmarksAdapter. 37 */ 38 public BrowserBookmarksAdapter(Context context, int defaultView) { 39 // Make sure to tell the CursorAdapter to avoid the observer and auto-requery 40 // since the Loader will do that for us. 41 super(context, null, 0); 42 mInflater = LayoutInflater.from(context); 43 selectView(defaultView); 44 } 45 46 @Override 47 public void bindView(View view, Context context, Cursor cursor) { 48 if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) { 49 bindListView(view, context, cursor); 50 } else { 51 bindGridView(view, context, cursor); 52 } 53 } 54 55 void bindGridView(View view, Context context, Cursor cursor) { 56 // We need to set this to handle rotation and other configuration change 57 // events. If the padding didn't change, this is a no op. 58 int padding = context.getResources() 59 .getDimensionPixelSize(R.dimen.combo_horizontalSpacing); 60 view.setPadding(padding, view.getPaddingTop(), 61 padding, view.getPaddingBottom()); 62 ImageView thumb = (ImageView) view.findViewById(R.id.thumb); 63 TextView tv = (TextView) view.findViewById(R.id.label); 64 65 tv.setText(cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE)); 66 if (cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0) { 67 // folder 68 thumb.setImageResource(R.drawable.thumb_bookmark_widget_folder_holo); 69 thumb.setScaleType(ScaleType.FIT_END); 70 thumb.setBackgroundDrawable(null); 71 } else { 72 byte[] thumbData = cursor.getBlob(BookmarksLoader.COLUMN_INDEX_THUMBNAIL); 73 Bitmap thumbBitmap = null; 74 if (thumbData != null) { 75 thumbBitmap = BitmapFactory.decodeByteArray(thumbData, 0, thumbData.length); 76 } 77 78 thumb.setScaleType(ScaleType.CENTER_CROP); 79 if (thumbBitmap == null) { 80 thumb.setImageResource(R.drawable.browser_thumbnail); 81 } else { 82 thumb.setImageBitmap(thumbBitmap); 83 } 84 thumb.setBackgroundResource(R.drawable.border_thumb_bookmarks_widget_holo); 85 } 86 } 87 88 void bindListView(View view, Context context, Cursor cursor) { 89 ImageView favicon = (ImageView) view.findViewById(R.id.favicon); 90 TextView tv = (TextView) view.findViewById(R.id.label); 91 92 tv.setText(cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE)); 93 if (cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0) { 94 // folder 95 favicon.setImageResource(R.drawable.ic_folder_holo_dark); 96 favicon.setBackgroundDrawable(null); 97 } else { 98 byte[] faviconData = cursor.getBlob(BookmarksLoader.COLUMN_INDEX_FAVICON); 99 Bitmap faviconBitmap = null; 100 if (faviconData != null) { 101 faviconBitmap = BitmapFactory.decodeByteArray(faviconData, 0, faviconData.length); 102 } 103 104 if (faviconBitmap == null) { 105 favicon.setImageResource(R.drawable.app_web_browser_sm); 106 } else { 107 favicon.setImageBitmap(faviconBitmap); 108 } 109 favicon.setBackgroundResource(R.drawable.bookmark_list_favicon_bg); 110 } 111 } 112 113 @Override 114 public View newView(Context context, Cursor cursor, ViewGroup parent) { 115 if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) { 116 return mInflater.inflate(R.layout.bookmark_list, parent, false); 117 } else { 118 return mInflater.inflate(R.layout.bookmark_thumbnail, parent, false); 119 } 120 } 121 122 public void selectView(int view) { 123 if (view != BrowserBookmarksPage.VIEW_LIST 124 && view != BrowserBookmarksPage.VIEW_THUMBNAILS) { 125 throw new IllegalArgumentException("Unknown view specified: " + view); 126 } 127 mCurrentView = view; 128 } 129 130 public int getViewMode() { 131 return mCurrentView; 132 } 133 134 @Override 135 public Cursor getItem(int position) { 136 return (Cursor) super.getItem(position); 137 } 138 } 139