diff options
author | John Reck <jreck@google.com> | 2010-11-22 14:15:36 -0800 |
---|---|---|
committer | John Reck <jreck@google.com> | 2010-11-24 15:58:51 -0800 |
commit | c8490818ccb693ed2610366d2e91fb290e40c372 (patch) | |
tree | 5f48e40f032afd0384da01ae27ea1ad70065ed88 /src/com/android/browser/BrowserBookmarksPage.java | |
parent | a62b093ebf6ac8071eddf96edb6457ff55ebd1a3 (diff) | |
download | packages_apps_browser-c8490818ccb693ed2610366d2e91fb290e40c372.zip packages_apps_browser-c8490818ccb693ed2610366d2e91fb290e40c372.tar.gz packages_apps_browser-c8490818ccb693ed2610366d2e91fb290e40c372.tar.bz2 |
Adds context menu for folders (edit/delete)
Bug: 3214901
Adds support for folder context menus to edit and delete folders.
Change-Id: I89cb2fa4b139ba3f59ec62b34154d5837c7f471b
Diffstat (limited to 'src/com/android/browser/BrowserBookmarksPage.java')
-rw-r--r-- | src/com/android/browser/BrowserBookmarksPage.java | 163 |
1 files changed, 76 insertions, 87 deletions
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java index 4370885..4887f3f 100644 --- a/src/com/android/browser/BrowserBookmarksPage.java +++ b/src/com/android/browser/BrowserBookmarksPage.java @@ -24,7 +24,6 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.ContentResolver; import android.content.ContentUris; -import android.content.ContentValues; import android.content.Context; import android.content.CursorLoader; import android.content.DialogInterface; @@ -36,6 +35,7 @@ import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; +import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; import android.provider.BrowserContract; @@ -75,7 +75,6 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte LoaderManager.LoaderCallbacks<Cursor>, OnItemClickListener, IconListener, OnItemSelectedListener, BreadCrumbView.Controller, OnClickListener, OnMenuItemClickListener { - static final int BOOKMARKS_SAVE = 1; static final String LOGTAG = "browser"; static final int LOADER_BOOKMARKS = 1; @@ -98,7 +97,6 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte ListView mList; BrowserBookmarksAdapter mAdapter; boolean mDisableNewWindow; - BookmarkItem mContextHeader; boolean mCanceled = false; boolean mEnableContextMenu = true; boolean mShowRootFolder = false; @@ -331,42 +329,60 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte return BitmapFactory.decodeByteArray(data, 0, data.length); } + private MenuItem.OnMenuItemClickListener mContextItemClickListener = + new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + return onContextItemSelected(item); + } + }; + @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; Cursor cursor = mAdapter.getItem(info.position); boolean isFolder = cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0; - if (isFolder) return; final Activity activity = getActivity(); MenuInflater inflater = activity.getMenuInflater(); inflater.inflate(R.menu.bookmarkscontext, menu); - - if (mDisableNewWindow) { - menu.findItem(R.id.new_window_context_menu_id).setVisible(false); + if (isFolder) { + menu.setGroupVisible(R.id.FOLDER_CONTEXT_MENU, true); + } else { + menu.setGroupVisible(R.id.BOOKMARK_CONTEXT_MENU, true); + if (mDisableNewWindow) { + menu.findItem(R.id.new_window_context_menu_id).setVisible(false); + } } + BookmarkItem header = new BookmarkItem(activity); + populateBookmarkItem(cursor, header, isFolder); + new LookupBookmarkCount(getActivity(), header) + .execute(cursor.getLong(BookmarksLoader.COLUMN_INDEX_ID)); + menu.setHeaderView(header); - if (mContextHeader == null) { - mContextHeader = new BookmarkItem(activity); - } else if (mContextHeader.getParent() != null) { - ((ViewGroup) mContextHeader.getParent()).removeView(mContextHeader); + int count = menu.size(); + for (int i = 0; i < count; i++) { + menu.getItem(i).setOnMenuItemClickListener(mContextItemClickListener); } - - populateBookmarkItem(cursor, mContextHeader); - - menu.setHeaderView(mContextHeader); } - private void populateBookmarkItem(Cursor cursor, BookmarkItem item) { - String url = cursor.getString(BookmarksLoader.COLUMN_INDEX_URL); - item.setUrl(url); + private void populateBookmarkItem(Cursor cursor, BookmarkItem item, boolean isFolder) { item.setName(cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE)); - Bitmap bitmap = getBitmap(cursor, BookmarksLoader.COLUMN_INDEX_FAVICON); - if (bitmap == null) { - bitmap = CombinedBookmarkHistoryView.getIconListenerSet().getFavicon(url); + if (isFolder) { + item.setUrl(null); + Bitmap bitmap = + BitmapFactory.decodeResource(getResources(), R.drawable.ic_folder); + item.setFavicon(bitmap); + } else { + String url = cursor.getString(BookmarksLoader.COLUMN_INDEX_URL); + item.setUrl(url); + Bitmap bitmap = getBitmap(cursor, BookmarksLoader.COLUMN_INDEX_FAVICON); + if (bitmap == null) { + bitmap = CombinedBookmarkHistoryView.getIconListenerSet().getFavicon(url); + } + item.setFavicon(bitmap); } - item.setFavicon(bitmap); } /** @@ -566,73 +582,14 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte item.putParcelable(BrowserContract.Bookmarks.FAVICON, BitmapFactory.decodeByteArray(data, 0, data.length)); } - item.putInt("id", cursor.getInt(BookmarksLoader.COLUMN_INDEX_ID)); + item.putLong(BrowserContract.Bookmarks._ID, + cursor.getLong(BookmarksLoader.COLUMN_INDEX_ID)); item.putLong(BrowserContract.Bookmarks.PARENT, cursor.getLong(BookmarksLoader.COLUMN_INDEX_PARENT)); - intent.putExtra("bookmark", item); - startActivityForResult(intent, BOOKMARKS_SAVE); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - switch(requestCode) { - case BOOKMARKS_SAVE: - if (resultCode == Activity.RESULT_OK) { - Bundle extras; - if (data != null && (extras = data.getExtras()) != null) { - // If there are extras, then we need to save - // the edited bookmark. This is done in updateRow() - String title = extras.getString(BrowserContract.Bookmarks.TITLE); - String url = extras.getString(BrowserContract.Bookmarks.URL); - if (title != null && url != null) { - updateRow(extras); - } - } - } - break; - } - } - - /** - * Update a row in the database with new information. - * @param map Bundle storing id, title and url of new information - */ - public void updateRow(Bundle map) { - - // Find the record - int id = map.getInt("id"); - int position = -1; - Cursor cursor = mAdapter.getCursor(); - for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { - if (cursor.getInt(BookmarksLoader.COLUMN_INDEX_ID) == id) { - position = cursor.getPosition(); - break; - } - } - if (position < 0) { - return; - } - - cursor.moveToPosition(position); - ContentValues values = new ContentValues(); - String title = map.getString(BrowserContract.Bookmarks.TITLE); - if (!title.equals(cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE))) { - values.put(BrowserContract.Bookmarks.TITLE, title); - } - String url = map.getString(BrowserContract.Bookmarks.URL); - if (!url.equals(cursor.getString(BookmarksLoader.COLUMN_INDEX_URL))) { - values.put(BrowserContract.Bookmarks.URL, url); - } - - if (map.getBoolean(AddBookmarkPage.REMOVE_THUMBNAIL)) { - values.putNull(BrowserContract.Bookmarks.THUMBNAIL); - } - - if (values.size() > 0) { - getActivity().getContentResolver().update( - ContentUris.withAppendedId(BrowserContract.Bookmarks.CONTENT_URI, id), - values, null, null); - } + intent.putExtra(AddBookmarkPage.EXTRA_EDIT_BOOKMARK, item); + intent.putExtra(AddBookmarkPage.EXTRA_IS_FOLDER, + cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) == 1); + startActivity(intent); } private void displayRemoveBookmarkDialog(final int position) { @@ -779,4 +736,36 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte } } } + + private static class LookupBookmarkCount extends AsyncTask<Long, Void, Integer> { + Context mContext; + BookmarkItem mHeader; + + public LookupBookmarkCount(Context context, BookmarkItem header) { + mContext = context; + mHeader = header; + } + + @Override + protected Integer doInBackground(Long... params) { + if (params.length != 1) { + throw new IllegalArgumentException("Missing folder id!"); + } + Uri uri = BookmarkUtils.getBookmarksUri(mContext); + Cursor c = mContext.getContentResolver().query(uri, + null, BrowserContract.Bookmarks.PARENT + "=?", + new String[] {params[0].toString()}, null); + return c.getCount(); + } + + @Override + protected void onPostExecute(Integer result) { + if (result > 0) { + mHeader.setUrl(mContext.getString(R.string.contextheader_folder_bookmarkcount, + result)); + } else if (result == 0) { + mHeader.setUrl(mContext.getString(R.string.contextheader_folder_empty)); + } + } + } } |