10c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project/* 20c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 30c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * 40c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 50c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * you may not use this file except in compliance with the License. 60c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * You may obtain a copy of the License at 70c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * 80c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 90c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * 100c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 110c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 120c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * See the License for the specific language governing permissions and 140c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * limitations under the License. 150c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project */ 160c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 170c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectpackage com.android.browser; 180c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 198402962ef58546d3cfd48fbb211b5e36df0f118eJeff Hamiltonimport android.content.Context; 200c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.database.Cursor; 210c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.graphics.Bitmap; 22f94abcf44fc1611f76e55461f48220e621fc31b7John Reckimport android.graphics.drawable.BitmapDrawable; 23d18ac4b36b057a6a403cb060dfc10761b7394548John Reckimport android.provider.BrowserContract.Bookmarks; 248af906474c84854598da1886edacfd5f10cae70fJohn Reckimport android.view.LayoutInflater; 250c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.view.View; 268af906474c84854598da1886edacfd5f10cae70fJohn Reckimport android.view.ViewGroup; 27892df31fda83baeeee2d0620b622b4730c30ee87Leon Scrogginsimport android.widget.ImageView; 2823c61dd30cd2f4a96ab2b01a5878badc79380c6aJohn Reckimport android.widget.ImageView.ScaleType; 29892df31fda83baeeee2d0620b622b4730c30ee87Leon Scrogginsimport android.widget.TextView; 300c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 31f94abcf44fc1611f76e55461f48220e621fc31b7John Reckimport com.android.browser.util.ThreadedCursorAdapter; 32f94abcf44fc1611f76e55461f48220e621fc31b7John Reckimport com.android.browser.view.BookmarkContainer; 33f94abcf44fc1611f76e55461f48220e621fc31b7John Reck 34f94abcf44fc1611f76e55461f48220e621fc31b7John Reckpublic class BrowserBookmarksAdapter extends 35f94abcf44fc1611f76e55461f48220e621fc31b7John Reck ThreadedCursorAdapter<BrowserBookmarksAdapterItem> { 36f94abcf44fc1611f76e55461f48220e621fc31b7John Reck 378af906474c84854598da1886edacfd5f10cae70fJohn Reck LayoutInflater mInflater; 38f94abcf44fc1611f76e55461f48220e621fc31b7John Reck Context mContext; 398af906474c84854598da1886edacfd5f10cae70fJohn Reck 400c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project /** 410c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * Create a new BrowserBookmarksAdapter. 420c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project */ 43af991f93d09bf4d2db3c7a8c03ca3ca4352bed83John Reck public BrowserBookmarksAdapter(Context context) { 448402962ef58546d3cfd48fbb211b5e36df0f118eJeff Hamilton // Make sure to tell the CursorAdapter to avoid the observer and auto-requery 458402962ef58546d3cfd48fbb211b5e36df0f118eJeff Hamilton // since the Loader will do that for us. 46f94abcf44fc1611f76e55461f48220e621fc31b7John Reck super(context, null); 478af906474c84854598da1886edacfd5f10cae70fJohn Reck mInflater = LayoutInflater.from(context); 48f94abcf44fc1611f76e55461f48220e621fc31b7John Reck mContext = context; 490c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 500c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 518402962ef58546d3cfd48fbb211b5e36df0f118eJeff Hamilton @Override 529ee87d9ce5aae1460f53bea66bfcafd3671505a0John Reck protected long getItemId(Cursor c) { 539ee87d9ce5aae1460f53bea66bfcafd3671505a0John Reck return c.getLong(BookmarksLoader.COLUMN_INDEX_ID); 549ee87d9ce5aae1460f53bea66bfcafd3671505a0John Reck } 559ee87d9ce5aae1460f53bea66bfcafd3671505a0John Reck 569ee87d9ce5aae1460f53bea66bfcafd3671505a0John Reck @Override 57f94abcf44fc1611f76e55461f48220e621fc31b7John Reck public View newView(Context context, ViewGroup parent) { 58af991f93d09bf4d2db3c7a8c03ca3ca4352bed83John Reck return mInflater.inflate(R.layout.bookmark_thumbnail, parent, false); 598af906474c84854598da1886edacfd5f10cae70fJohn Reck } 608af906474c84854598da1886edacfd5f10cae70fJohn Reck 61f94abcf44fc1611f76e55461f48220e621fc31b7John Reck @Override 62f94abcf44fc1611f76e55461f48220e621fc31b7John Reck public void bindView(View view, BrowserBookmarksAdapterItem object) { 63f94abcf44fc1611f76e55461f48220e621fc31b7John Reck BookmarkContainer container = (BookmarkContainer) view; 64f94abcf44fc1611f76e55461f48220e621fc31b7John Reck container.setIgnoreRequestLayout(true); 65af991f93d09bf4d2db3c7a8c03ca3ca4352bed83John Reck bindGridView(view, mContext, object); 66f94abcf44fc1611f76e55461f48220e621fc31b7John Reck container.setIgnoreRequestLayout(false); 67f94abcf44fc1611f76e55461f48220e621fc31b7John Reck } 68f94abcf44fc1611f76e55461f48220e621fc31b7John Reck 69f94abcf44fc1611f76e55461f48220e621fc31b7John Reck CharSequence getTitle(Cursor cursor) { 70d18ac4b36b057a6a403cb060dfc10761b7394548John Reck int type = cursor.getInt(BookmarksLoader.COLUMN_INDEX_TYPE); 71d18ac4b36b057a6a403cb060dfc10761b7394548John Reck switch (type) { 72d18ac4b36b057a6a403cb060dfc10761b7394548John Reck case Bookmarks.BOOKMARK_TYPE_OTHER_FOLDER: 73f94abcf44fc1611f76e55461f48220e621fc31b7John Reck return mContext.getText(R.string.other_bookmarks); 74d18ac4b36b057a6a403cb060dfc10761b7394548John Reck } 75d18ac4b36b057a6a403cb060dfc10761b7394548John Reck return cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE); 76d18ac4b36b057a6a403cb060dfc10761b7394548John Reck } 77d18ac4b36b057a6a403cb060dfc10761b7394548John Reck 78f94abcf44fc1611f76e55461f48220e621fc31b7John Reck void bindGridView(View view, Context context, BrowserBookmarksAdapterItem item) { 79f3828cd09f12cbf2980af72187628a608db8e938John Reck // We need to set this to handle rotation and other configuration change 80f3828cd09f12cbf2980af72187628a608db8e938John Reck // events. If the padding didn't change, this is a no op. 81f3828cd09f12cbf2980af72187628a608db8e938John Reck int padding = context.getResources() 82f3828cd09f12cbf2980af72187628a608db8e938John Reck .getDimensionPixelSize(R.dimen.combo_horizontalSpacing); 83f3828cd09f12cbf2980af72187628a608db8e938John Reck view.setPadding(padding, view.getPaddingTop(), 84f3828cd09f12cbf2980af72187628a608db8e938John Reck padding, view.getPaddingBottom()); 858402962ef58546d3cfd48fbb211b5e36df0f118eJeff Hamilton ImageView thumb = (ImageView) view.findViewById(R.id.thumb); 868402962ef58546d3cfd48fbb211b5e36df0f118eJeff Hamilton TextView tv = (TextView) view.findViewById(R.id.label); 873918d4443ff38ef1870e02aa51a8b29f8352bb1aPatrick Scott 88f94abcf44fc1611f76e55461f48220e621fc31b7John Reck tv.setText(item.title); 89f94abcf44fc1611f76e55461f48220e621fc31b7John Reck if (item.is_folder) { 90fa3140719411322b678f1bd998ac1bac961047e0Michael Kolb // folder 91b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck thumb.setImageResource(R.drawable.thumb_bookmark_widget_folder_holo); 9223c61dd30cd2f4a96ab2b01a5878badc79380c6aJohn Reck thumb.setScaleType(ScaleType.FIT_END); 93f94abcf44fc1611f76e55461f48220e621fc31b7John Reck thumb.setBackground(null); 948402962ef58546d3cfd48fbb211b5e36df0f118eJeff Hamilton } else { 9523c61dd30cd2f4a96ab2b01a5878badc79380c6aJohn Reck thumb.setScaleType(ScaleType.CENTER_CROP); 961df6df7e33601f1dcd6358a1eea9c34bc6373927John Reck if (item.thumbnail == null || !item.has_thumbnail) { 97fa3140719411322b678f1bd998ac1bac961047e0Michael Kolb thumb.setImageResource(R.drawable.browser_thumbnail); 98fa3140719411322b678f1bd998ac1bac961047e0Michael Kolb } else { 99f94abcf44fc1611f76e55461f48220e621fc31b7John Reck thumb.setImageDrawable(item.thumbnail); 1008af906474c84854598da1886edacfd5f10cae70fJohn Reck } 101b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck thumb.setBackgroundResource(R.drawable.border_thumb_bookmarks_widget_holo); 1028af906474c84854598da1886edacfd5f10cae70fJohn Reck } 1038af906474c84854598da1886edacfd5f10cae70fJohn Reck } 1048af906474c84854598da1886edacfd5f10cae70fJohn Reck 105608baa78f4071409294f79b37e7ffa9ca96c4223John Reck @Override 106f94abcf44fc1611f76e55461f48220e621fc31b7John Reck public BrowserBookmarksAdapterItem getRowObject(Cursor c, 107f94abcf44fc1611f76e55461f48220e621fc31b7John Reck BrowserBookmarksAdapterItem item) { 108f94abcf44fc1611f76e55461f48220e621fc31b7John Reck if (item == null) { 109f94abcf44fc1611f76e55461f48220e621fc31b7John Reck item = new BrowserBookmarksAdapterItem(); 110f94abcf44fc1611f76e55461f48220e621fc31b7John Reck } 111f94abcf44fc1611f76e55461f48220e621fc31b7John Reck Bitmap thumbnail = item.thumbnail != null ? item.thumbnail.getBitmap() : null; 112f94abcf44fc1611f76e55461f48220e621fc31b7John Reck thumbnail = BrowserBookmarksPage.getBitmap(c, 113f94abcf44fc1611f76e55461f48220e621fc31b7John Reck BookmarksLoader.COLUMN_INDEX_THUMBNAIL, thumbnail); 1141df6df7e33601f1dcd6358a1eea9c34bc6373927John Reck item.has_thumbnail = thumbnail != null; 115f94abcf44fc1611f76e55461f48220e621fc31b7John Reck if (thumbnail != null 116f94abcf44fc1611f76e55461f48220e621fc31b7John Reck && (item.thumbnail == null || item.thumbnail.getBitmap() != thumbnail)) { 117f94abcf44fc1611f76e55461f48220e621fc31b7John Reck item.thumbnail = new BitmapDrawable(mContext.getResources(), thumbnail); 118f94abcf44fc1611f76e55461f48220e621fc31b7John Reck } 119f94abcf44fc1611f76e55461f48220e621fc31b7John Reck item.is_folder = c.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0; 120f94abcf44fc1611f76e55461f48220e621fc31b7John Reck item.title = getTitle(c); 121f94abcf44fc1611f76e55461f48220e621fc31b7John Reck item.url = c.getString(BookmarksLoader.COLUMN_INDEX_URL); 122f94abcf44fc1611f76e55461f48220e621fc31b7John Reck return item; 123f94abcf44fc1611f76e55461f48220e621fc31b7John Reck } 124f94abcf44fc1611f76e55461f48220e621fc31b7John Reck 125f94abcf44fc1611f76e55461f48220e621fc31b7John Reck @Override 126f94abcf44fc1611f76e55461f48220e621fc31b7John Reck public BrowserBookmarksAdapterItem getLoadingObject() { 127f94abcf44fc1611f76e55461f48220e621fc31b7John Reck BrowserBookmarksAdapterItem item = new BrowserBookmarksAdapterItem(); 128f94abcf44fc1611f76e55461f48220e621fc31b7John Reck return item; 129608baa78f4071409294f79b37e7ffa9ca96c4223John Reck } 1300c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project} 131