diff options
Diffstat (limited to 'src/com/android/browser')
| -rw-r--r-- | src/com/android/browser/BrowserBookmarksAdapter.java | 75 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserBookmarksPage.java | 54 | ||||
| -rw-r--r-- | src/com/android/browser/CombinedBookmarkHistoryView.java | 45 |
3 files changed, 159 insertions, 15 deletions
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java index a5d51dda1..6478b10c2 100644 --- a/src/com/android/browser/BrowserBookmarksAdapter.java +++ b/src/com/android/browser/BrowserBookmarksAdapter.java @@ -20,42 +20,97 @@ import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; +import android.widget.CursorAdapter; import android.widget.ImageView; -import android.widget.ResourceCursorAdapter; import android.widget.TextView; -class BrowserBookmarksAdapter extends ResourceCursorAdapter { +class BrowserBookmarksAdapter extends CursorAdapter { + LayoutInflater mInflater; + int mCurrentView; + /** * Create a new BrowserBookmarksAdapter. */ - public BrowserBookmarksAdapter(Context context) { + 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, R.layout.bookmark_thumbnail, null); + super(context, null); + mInflater = LayoutInflater.from(context); + selectView(defaultView); } @Override public void bindView(View view, Context context, Cursor cursor) { + if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) { + bindListView(view, context, cursor); + } else { + bindGridView(view, context, cursor); + } + } + + void bindGridView(View view, Context context, Cursor cursor) { ImageView thumb = (ImageView) view.findViewById(R.id.thumb); TextView tv = (TextView) view.findViewById(R.id.label); tv.setText(cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE)); - Bitmap thumbnail = null; if (cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0) { // folder thumb.setImageResource(R.drawable.ic_folder); } else { - byte[] data = cursor.getBlob(BookmarksLoader.COLUMN_INDEX_THUMBNAIL); - if (data != null) { - thumbnail = BitmapFactory.decodeByteArray(data, 0, data.length); + byte[] thumbData = cursor.getBlob(BookmarksLoader.COLUMN_INDEX_THUMBNAIL); + Bitmap thumbBitmap = null; + if (thumbData != null) { + thumbBitmap = BitmapFactory.decodeByteArray(thumbData, 0, thumbData.length); } - if (thumbnail == null) { + if (thumbBitmap == null) { thumb.setImageResource(R.drawable.browser_thumbnail); } else { - thumb.setImageBitmap(thumbnail); + thumb.setImageBitmap(thumbBitmap); + } + } + } + + void bindListView(View view, Context context, Cursor cursor) { + ImageView favicon = (ImageView) view.findViewById(R.id.favicon); + TextView tv = (TextView) view.findViewById(R.id.label); + + tv.setText(cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE)); + if (cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0) { + // folder + favicon.setImageResource(R.drawable.ic_folder); + } 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) { + favicon.setImageResource(R.drawable.app_web_browser_sm); + } else { + favicon.setImageBitmap(faviconBitmap); } } } + + @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) { + throw new IllegalArgumentException("Unknown view specified: " + view); + } + mCurrentView = view; + } } diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java index c7392cc31..2b8c5350c 100644 --- a/src/com/android/browser/BrowserBookmarksPage.java +++ b/src/com/android/browser/BrowserBookmarksPage.java @@ -31,6 +31,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.Loader; import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -53,6 +54,7 @@ import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.GridView; +import android.widget.ListView; import android.widget.Toast; /** @@ -77,15 +79,20 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte public static final String PREF_ACCOUNT_NAME = "acct_name"; static final String DEFAULT_ACCOUNT = "local"; + static final int VIEW_THUMBNAILS = 1; + static final int VIEW_LIST = 2; + static final String PREF_SELECTED_VIEW = "bookmarks_view"; BookmarksHistoryCallbacks mCallbacks; GridView mGrid; + ListView mList; BrowserBookmarksAdapter mAdapter; boolean mDisableNewWindow; BookmarkItem mContextHeader; boolean mCanceled = false; boolean mCreateShortcut; View mEmptyView; + int mCurrentView; BreadCrumbView mCrumbs; @@ -134,9 +141,10 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte if (cursor == null || cursor.getCount() == 0) { mEmptyView.setVisibility(View.VISIBLE); mGrid.setVisibility(View.GONE); + mList.setVisibility(View.GONE); } else { mEmptyView.setVisibility(View.GONE); - mGrid.setVisibility(View.VISIBLE); + setupBookmarkView(); } // Give the new data to the adapter @@ -372,13 +380,19 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte if (!mCreateShortcut) { mGrid.setOnCreateContextMenuListener(this); } - - mAdapter = new BrowserBookmarksAdapter(getActivity()); - mGrid.setAdapter(mAdapter); + mList = (ListView) root.findViewById(R.id.list); + mList.setOnItemClickListener(this); + if (!mCreateShortcut) { + mList.setOnCreateContextMenuListener(this); + registerForContextMenu(mList); + } // Start the loaders LoaderManager lm = getLoaderManager(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + mCurrentView = + prefs.getInt(PREF_SELECTED_VIEW, BrowserBookmarksPage.VIEW_THUMBNAILS); + mAdapter = new BrowserBookmarksAdapter(getActivity(), mCurrentView); String accountType = prefs.getString(PREF_ACCOUNT_TYPE, DEFAULT_ACCOUNT); String accountName = prefs.getString(PREF_ACCOUNT_NAME, DEFAULT_ACCOUNT); if (!TextUtils.isEmpty(accountType) && !TextUtils.isEmpty(accountName)) { @@ -609,4 +623,36 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte cm.setPrimaryClip(ClipData.newRawUri(null, null, Uri.parse(text.toString()))); } + void selectView(int view) { + if (view == mCurrentView) { + return; + } + mCurrentView = view; + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); + Editor edit = prefs.edit(); + edit.putInt(PREF_SELECTED_VIEW, mCurrentView); + edit.apply(); + if (mEmptyView.getVisibility() == View.VISIBLE) { + return; + } + setupBookmarkView(); + } + + private void setupBookmarkView() { + mAdapter.selectView(mCurrentView); + switch (mCurrentView) { + case VIEW_THUMBNAILS: + mList.setAdapter(null); + mGrid.setAdapter(mAdapter); + mGrid.setVisibility(View.VISIBLE); + mList.setVisibility(View.GONE); + break; + case VIEW_LIST: + mGrid.setAdapter(null); + mList.setAdapter(mAdapter); + mGrid.setVisibility(View.GONE); + mList.setVisibility(View.VISIBLE); + break; + } + } } diff --git a/src/com/android/browser/CombinedBookmarkHistoryView.java b/src/com/android/browser/CombinedBookmarkHistoryView.java index c078b51b3..4f6f10c1b 100644 --- a/src/com/android/browser/CombinedBookmarkHistoryView.java +++ b/src/com/android/browser/CombinedBookmarkHistoryView.java @@ -21,17 +21,22 @@ import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; +import android.content.SharedPreferences; import android.content.res.Resources; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; +import android.preference.PreferenceManager; import android.provider.Browser; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.webkit.WebIconDatabase; import android.webkit.WebIconDatabase.IconListener; import android.widget.LinearLayout; +import android.widget.PopupMenu; +import android.widget.PopupMenu.OnMenuItemClickListener; import android.widget.TextView; import java.util.HashMap; @@ -44,7 +49,7 @@ interface BookmarksHistoryCallbacks { } public class CombinedBookmarkHistoryView extends LinearLayout - implements OnClickListener, BreadCrumbView.Controller { + implements OnClickListener, BreadCrumbView.Controller, OnMenuItemClickListener { final static String STARTING_FRAGMENT = "fragment"; @@ -63,6 +68,8 @@ public class CombinedBookmarkHistoryView extends LinearLayout TextView mTabBookmarks; TextView mTabHistory; TextView mAddBookmark; + TextView mSelectBookmarkView; + View mSeperateSelectAdd; BrowserBookmarksPage mBookmarks; BrowserHistoryPage mHistory; @@ -122,9 +129,20 @@ public class CombinedBookmarkHistoryView extends LinearLayout mTabBookmarks = (TextView) findViewById(R.id.bmtab); mTabHistory = (TextView) findViewById(R.id.historytab); mAddBookmark = (TextView) findViewById(R.id.addbm); + mSeperateSelectAdd = findViewById(R.id.seperate_select_add); + mSelectBookmarkView = (TextView) findViewById(R.id.select_bookmark_view); mAddBookmark.setOnClickListener(this); mTabHistory.setOnClickListener(this); mTabBookmarks.setOnClickListener(this); + mSelectBookmarkView.setOnClickListener(this); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); + int bookmarksView = + prefs.getInt(BrowserBookmarksPage.PREF_SELECTED_VIEW, BrowserBookmarksPage.VIEW_THUMBNAILS); + if (bookmarksView == BrowserBookmarksPage.VIEW_THUMBNAILS) { + mSelectBookmarkView.setText(R.string.bookmark_thumbnail_view); + } else { + mSelectBookmarkView.setText(R.string.bookmark_list_view); + } // Start up the default fragment initFragments(mExtras); loadFragment(startingFragment, mExtras, false); @@ -157,6 +175,8 @@ public class CombinedBookmarkHistoryView extends LinearLayout switch (id) { case FRAGMENT_ID_BOOKMARKS: fragment = mBookmarks; + mSeperateSelectAdd.setVisibility(View.VISIBLE); + mSelectBookmarkView.setVisibility(View.VISIBLE); mCrumbs.setVisibility(View.VISIBLE); if (notify) { mCrumbs.notifyController(); @@ -165,6 +185,8 @@ public class CombinedBookmarkHistoryView extends LinearLayout case FRAGMENT_ID_HISTORY: fragment = mHistory; mCrumbs.setVisibility(View.GONE); + mSeperateSelectAdd.setVisibility(View.GONE); + mSelectBookmarkView.setVisibility(View.GONE); break; default: throw new IllegalArgumentException(); @@ -189,6 +211,12 @@ public class CombinedBookmarkHistoryView extends LinearLayout } } else if (mAddBookmark == view) { mUiController.bookmarkCurrentPage(mBookmarks.getFolderId()); + } else if (mSelectBookmarkView == view) { + PopupMenu popup = new PopupMenu(mContext, mSelectBookmarkView); + popup.getMenuInflater().inflate(R.menu.bookmark_view, + popup.getMenu()); + popup.setOnMenuItemClickListener(this); + popup.show(); } } @@ -212,4 +240,19 @@ public class CombinedBookmarkHistoryView extends LinearLayout return false; } + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.list_view: + mSelectBookmarkView.setText(R.string.bookmark_list_view); + mBookmarks.selectView(BrowserBookmarksPage.VIEW_LIST); + return true; + case R.id.thumbnail_view: + mSelectBookmarkView.setText(R.string.bookmark_thumbnail_view); + mBookmarks.selectView(BrowserBookmarksPage.VIEW_THUMBNAILS); + return true; + } + return false; + } + } |
