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