Bookmark drop CAB
When dragging a bookmark, show the CAB with drop targets
Change-Id: I2a05800c8ab393f8fba64c46945266566eeacc7f
diff --git a/src/com/android/browser/BookmarkDragHandler.java b/src/com/android/browser/BookmarkDragHandler.java
index 0707058..fc0752f 100644
--- a/src/com/android/browser/BookmarkDragHandler.java
+++ b/src/com/android/browser/BookmarkDragHandler.java
@@ -16,23 +16,30 @@
package com.android.browser;
+import android.app.Activity;
import android.content.ClipData;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
-import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.BrowserContract;
-import android.provider.BrowserContract.Bookmarks;
+import android.view.ActionMode;
+import android.view.ActionMode.Callback;
import android.view.DragEvent;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.View.OnDragListener;
+import android.view.ViewGroup;
-public class BookmarkDragHandler {
+public class BookmarkDragHandler implements Callback {
public static interface BookmarkDragController {
boolean startDrag(Cursor item);
+
+ ViewGroup getActionModeView(ActionMode mode, BookmarkDragState state);
+ void actionItemClicked(View v, BookmarkDragState state);
}
public static interface BookmarkDragAdapter {
@@ -40,26 +47,29 @@
Cursor getItemForView(View v);
}
- static class BookmarkDragState {
- long id;
- long parent;
+ public static class BookmarkDragState {
+ public long id;
+ public long parent;
+ public Object extraState;
}
static final String BOOKMARK_DRAG_LABEL = "com.android.browser.BOOKMARK_LABEL";
- private Context mContext;
+ private Activity mActivity;
private BookmarkDragController mDragController;
private BookmarkDragAdapter mDragAdapter;
+ private ActionMode mActionMode;
+ private BookmarkDragState mDragState;
- public BookmarkDragHandler(Context context, BookmarkDragController controller,
+ public BookmarkDragHandler(Activity activity, BookmarkDragController controller,
BookmarkDragAdapter adapter) {
- mContext = context;
+ mActivity = activity;
mDragController = controller;
mDragAdapter = adapter;
mDragAdapter.setBookmarkDragHandler(this);
}
- public boolean startDrag(View view, Cursor item, long id) {
+ public boolean startDrag(View view, Cursor item, long id, Object extraState) {
if (!mDragController.startDrag(item)) {
return false;
}
@@ -69,7 +79,10 @@
BookmarkDragState state = new BookmarkDragState();
state.id = id;
state.parent = item.getLong(BookmarksLoader.COLUMN_INDEX_PARENT);
+ state.extraState = extraState;
+ mDragState = state;
view.startDrag(data, new View.DragShadowBuilder(view), state, 0);
+ mActionMode = view.startActionMode(this);
return true;
}
@@ -98,9 +111,9 @@
parent = c.getLong(BookmarksLoader.COLUMN_INDEX_ID);
}
if (parent != state.parent) {
- ContentResolver cr = mContext.getContentResolver();
+ ContentResolver cr = mActivity.getContentResolver();
ContentValues values = new ContentValues();
- values.put(Bookmarks.PARENT, parent);
+ values.put(BrowserContract.Bookmarks.PARENT, parent);
Uri uri = event.getClipData().getItemAt(0).getUri();
cr.update(uri, values, null, null);
}
@@ -110,7 +123,55 @@
}
};
+ private OnDragListener mActionModeDragListener = new OnDragListener() {
+
+ @Override
+ public boolean onDrag(View v, DragEvent event) {
+ BookmarkDragState state = (BookmarkDragState) event.getLocalState();
+ switch (event.getAction()) {
+ case DragEvent.ACTION_DRAG_STARTED:
+ return true;
+ case DragEvent.ACTION_DROP:
+ mDragController.actionItemClicked(v, state);
+ // fall through
+ case DragEvent.ACTION_DRAG_ENDED:
+ if (mActionMode != null) {
+ mActionMode.finish();
+ mActionMode = null;
+ }
+ return true;
+ }
+ return false;
+ }
+ };
+
static boolean isFolder(Cursor c) {
return c.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0;
}
+
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ ViewGroup view = mDragController.getActionModeView(mode, mDragState);
+ int count = view.getChildCount();
+ for (int i = 0; i < count; i++) {
+ view.getChildAt(i).setOnDragListener(mActionModeDragListener);
+ }
+ mode.setCustomView(view);
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return true;
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ return false;
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ }
+
}