Bookmark drop CAB
When dragging a bookmark, show the CAB with drop targets
Change-Id: I2a05800c8ab393f8fba64c46945266566eeacc7f
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index caf8a83..d4d1c0d 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -16,10 +16,6 @@
package com.android.browser;
-import com.android.browser.BookmarkDragHandler.BookmarkDragController;
-import com.android.browser.view.BookmarkExpandableGridView;
-import com.android.browser.view.BookmarkExpandableGridView.BookmarkContextMenuInfo;
-
import android.app.Activity;
import android.app.Fragment;
import android.app.LoaderManager;
@@ -44,6 +40,7 @@
import android.provider.BrowserContract;
import android.provider.BrowserContract.Accounts;
import android.provider.BrowserContract.ChromeSyncColumns;
+import android.view.ActionMode;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
@@ -55,10 +52,17 @@
import android.webkit.WebIconDatabase.IconListener;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.Toast;
+import com.android.browser.BookmarkDragHandler.BookmarkDragController;
+import com.android.browser.BookmarkDragHandler.BookmarkDragState;
+import com.android.browser.view.BookmarkExpandableGridView;
+import com.android.browser.view.BookmarkExpandableGridView.BookmarkContextMenuInfo;
+
import java.util.HashMap;
interface BookmarksPageCallbacks {
@@ -75,6 +79,11 @@
LoaderManager.LoaderCallbacks<Cursor>, IconListener,
BreadCrumbView.Controller, OnMenuItemClickListener, OnChildClickListener {
+ public static class ExtraDragState {
+ public int childPosition;
+ public int groupPosition;
+ }
+
static final String LOGTAG = "browser";
static final int LOADER_ACCOUNTS = 1;
@@ -179,33 +188,42 @@
@Override
public boolean onContextItemSelected(MenuItem item) {
- final Activity activity = getActivity();
BookmarkContextMenuInfo i = (BookmarkContextMenuInfo)item.getMenuInfo();
// If we have no menu info, we can't tell which item was selected.
if (i == null) {
return false;
}
- BrowserBookmarksAdapter adapter = getChildAdapter(i.groupPosition);
- switch (item.getItemId()) {
+ if (handleContextItem(item.getItemId(), i.groupPosition, i.childPosition)) {
+ return true;
+ }
+ return super.onContextItemSelected(item);
+ }
+
+ public boolean handleContextItem(int itemId, int groupPosition,
+ int childPosition) {
+ final Activity activity = getActivity();
+ BrowserBookmarksAdapter adapter = getChildAdapter(groupPosition);
+
+ switch (itemId) {
case R.id.open_context_menu_id:
- loadUrl(adapter, i.childPosition);
+ loadUrl(adapter, childPosition);
break;
case R.id.edit_context_menu_id:
- editBookmark(adapter, i.childPosition);
+ editBookmark(adapter, childPosition);
break;
case R.id.shortcut_context_menu_id:
- Cursor c = adapter.getItem(i.childPosition);
+ Cursor c = adapter.getItem(childPosition);
activity.sendBroadcast(createShortcutIntent(getActivity(), c));
break;
case R.id.delete_context_menu_id:
- displayRemoveBookmarkDialog(adapter, i.childPosition);
+ displayRemoveBookmarkDialog(adapter, childPosition);
break;
case R.id.new_window_context_menu_id:
- openInNewWindow(adapter, i.childPosition);
+ openInNewWindow(adapter, childPosition);
break;
case R.id.share_link_context_menu_id: {
- Cursor cursor = adapter.getItem(i.childPosition);
+ Cursor cursor = adapter.getItem(childPosition);
Controller.sharePage(activity,
cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE),
cursor.getString(BookmarksLoader.COLUMN_INDEX_URL),
@@ -214,16 +232,16 @@
break;
}
case R.id.copy_url_context_menu_id:
- copy(getUrl(adapter, i.childPosition));
+ copy(getUrl(adapter, childPosition));
break;
case R.id.homepage_context_menu_id: {
- BrowserSettings.getInstance().setHomePage(getUrl(adapter, i.childPosition));
+ BrowserSettings.getInstance().setHomePage(getUrl(adapter, childPosition));
Toast.makeText(activity, R.string.homepage_set, Toast.LENGTH_LONG).show();
break;
}
// Only for the Most visited page
case R.id.save_to_bookmarks_menu_id: {
- Cursor cursor = adapter.getItem(i.childPosition);
+ Cursor cursor = adapter.getItem(childPosition);
String name = cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE);
String url = cursor.getString(BookmarksLoader.COLUMN_INDEX_URL);
// If the site is bookmarked, the item becomes remove from
@@ -232,7 +250,7 @@
break;
}
default:
- return super.onContextItemSelected(item);
+ return false;
}
return true;
}
@@ -684,6 +702,41 @@
public boolean startDrag(Cursor item) {
return canEdit(item);
}
+
+ @Override
+ public ViewGroup getActionModeView(ActionMode mode,
+ BookmarkDragState state) {
+ LayoutInflater inflater = LayoutInflater.from(getActivity());
+ LinearLayout view = (LinearLayout) inflater.inflate(
+ R.layout.bookmarks_drag_actionmode, null);
+ view.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
+ ExtraDragState extraState = (ExtraDragState) state.extraState;
+ BrowserBookmarksAdapter adapter = getChildAdapter(extraState.groupPosition);
+ Cursor c = adapter.getItem(extraState.childPosition);
+ boolean isFolder = c.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0;
+ if (isFolder) {
+ view.findViewById(R.id.open_context_menu_id).setVisibility(View.GONE);
+ ImageView iv = (ImageView) view.findViewById(
+ R.id.new_window_context_menu_id);
+ iv.setImageResource(R.drawable.ic_windows_holo_dark);
+ }
+ return view;
+ }
+
+ @Override
+ public void actionItemClicked(View v, BookmarkDragState state) {
+ if (v.getId() == R.id.info) {
+ if (mCurrentView == VIEW_THUMBNAILS) {
+ mGrid.showContextMenuForState(state);
+ } else {
+ // TODO: Support expandable list
+ }
+ } else {
+ ExtraDragState extraState = (ExtraDragState) state.extraState;
+ handleContextItem(v.getId(), extraState.groupPosition,
+ extraState.childPosition);
+ }
+ }
};
private static class LookupBookmarkCount extends AsyncTask<Long, Void, Integer> {