summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Wickham <twickham@google.com>2016-09-28 12:49:25 -0700
committerTony Wickham <twickham@google.com>2016-10-04 12:26:35 -0700
commit10236d6ac7f5f787ca21736494ccb5eaf2bd7c27 (patch)
tree5caed1278efbd05aa9a99f5be8afd38e025569b3
parent59769e3331f36fd63134825b5155035e32413469 (diff)
downloadandroid_packages_apps_Trebuchet-10236d6ac7f5f787ca21736494ccb5eaf2bd7c27.tar.gz
android_packages_apps_Trebuchet-10236d6ac7f5f787ca21736494ccb5eaf2bd7c27.tar.bz2
android_packages_apps_Trebuchet-10236d6ac7f5f787ca21736494ccb5eaf2bd7c27.zip
Update pre-drag lifecycle for apps with shortcuts.
- First of all, deferred drag has been renamed to pre-drag to avoid confusion with the existing deferred end drag. - For normal drags, the cycle is still startDrag --> onDragStart --> onDrop --> onDropComplete --> onDragEnd. - Pre-drags have two additional callbacks: onPreDragStart and onPreDragEnd. onPreDragStart is called between startDrag and onDragStart, and onPreDragEnd is called at the same time as onDragStart or onDragEnd. - If the pre-drag has not transitioned to a full drag before onDragEnd, onDragStart and onDropComplete are skipped (onDrop is still called to allow the DragView to animate). Change-Id: Icd7a8f75d5fcc159f9a52758c22ab6eae3edb9e2
-rw-r--r--build.gradle2
-rw-r--r--res/values/dimens.xml2
-rw-r--r--src/com/android/launcher3/Launcher.java12
-rw-r--r--src/com/android/launcher3/Workspace.java8
-rw-r--r--src/com/android/launcher3/allapps/AllAppsContainerView.java35
-rw-r--r--src/com/android/launcher3/dragndrop/DragController.java77
-rw-r--r--src/com/android/launcher3/dragndrop/DragLayer.java2
-rw-r--r--src/com/android/launcher3/dragndrop/DragOptions.java42
-rw-r--r--src/com/android/launcher3/folder/Folder.java20
-rw-r--r--src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java49
10 files changed, 117 insertions, 132 deletions
diff --git a/build.gradle b/build.gradle
index e103d792f..0c00da9d3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,7 +3,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.1.3'
+ classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
}
}
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 47edadd0d..12e902ac3 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -164,7 +164,7 @@
<dimen name="bg_pill_height">48dp</dimen>
<dimen name="bg_pill_radius">24dp</dimen>
<dimen name="deep_shortcuts_spacing">4dp</dimen>
- <dimen name="deferred_drag_view_scale">6dp</dimen>
+ <dimen name="pre_drag_view_scale">6dp</dimen>
<!-- an icon with shortcuts must be dragged this far before the container is removed. -->
<dimen name="deep_shortcuts_start_drag_threshold">16dp</dimen>
<dimen name="deep_shortcut_icon_size">36dp</dimen>
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 5841bf5b6..30d5b17c5 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -3042,17 +3042,7 @@ public class Launcher extends Activity
longClickCellInfo.cellX, longClickCellInfo.cellY));
if (!(itemUnderLongClick instanceof Folder || isAllAppsButton)) {
// User long pressed on an item
- DragOptions dragOptions = new DragOptions();
- if (itemUnderLongClick instanceof BubbleTextView) {
- BubbleTextView icon = (BubbleTextView) itemUnderLongClick;
- if (icon.hasDeepShortcuts()) {
- DeepShortcutsContainer dsc = DeepShortcutsContainer.showForIcon(icon);
- if (dsc != null) {
- dragOptions.deferDragCondition = dsc.createDeferDragCondition(null);
- }
- }
- }
- mWorkspace.startDrag(longClickCellInfo, dragOptions);
+ mWorkspace.startDrag(longClickCellInfo, new DragOptions());
}
}
}
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 10fbc8eeb..315e23ad2 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -73,6 +73,7 @@ import com.android.launcher3.dragndrop.SpringLoadedDragController;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.folder.FolderIcon;
import com.android.launcher3.graphics.DragPreviewProvider;
+import com.android.launcher3.shortcuts.DeepShortcutsContainer;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
import com.android.launcher3.util.ItemInfoMatcher;
@@ -2339,6 +2340,13 @@ public class Workspace extends PagedView
mDragSourceInternal = (ShortcutAndWidgetContainer) child.getParent();
}
+ if (child instanceof BubbleTextView) {
+ DeepShortcutsContainer dsc = DeepShortcutsContainer.showForIcon((BubbleTextView) child);
+ if (dsc != null) {
+ dragOptions.preDragCondition = dsc.createPreDragCondition();
+ }
+ }
+
DragView dv = mDragController.startDrag(b, dragLayerX, dragLayerY, source,
dragObject, dragVisualizeOffset, dragRect, scale, dragOptions);
dv.setIntrinsicIconScaleFactor(source.getIntrinsicIconScaleFactor());
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index 8fedc96c2..77e8ad17d 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -33,7 +33,6 @@ import android.view.ViewGroup;
import com.android.launcher3.AppInfo;
import com.android.launcher3.BaseContainerView;
-import com.android.launcher3.BubbleTextView;
import com.android.launcher3.CellLayout;
import com.android.launcher3.DeleteDropTarget;
import com.android.launcher3.DeviceProfile;
@@ -48,11 +47,11 @@ import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.Workspace;
import com.android.launcher3.config.FeatureFlags;
+import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.graphics.TintedDrawableSpan;
import com.android.launcher3.keyboard.FocusedItemDecorator;
-import com.android.launcher3.shortcuts.DeepShortcutsContainer;
import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
import com.android.launcher3.util.ComponentKey;
@@ -443,7 +442,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
}
@Override
- public boolean onLongClick(View v) {
+ public boolean onLongClick(final View v) {
// Return early if this is not initiated from a touch
if (!v.isInTouchMode()) return false;
// When we have exited all apps or are in transition, disregard long clicks
@@ -455,22 +454,20 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
if (mLauncher.getDragController().isDragging()) return false;
// Start the drag
- DragOptions dragOptions = new DragOptions();
- if (v instanceof BubbleTextView) {
- final BubbleTextView icon = (BubbleTextView) v;
- if (icon.hasDeepShortcuts()) {
- DeepShortcutsContainer dsc = DeepShortcutsContainer.showForIcon(icon);
- if (dsc != null) {
- dragOptions.deferDragCondition = dsc.createDeferDragCondition(new Runnable() {
- @Override
- public void run() {
- icon.setVisibility(VISIBLE);
- }
- });
- }
+ final DragController dragController = mLauncher.getDragController();
+ dragController.addDragListener(new DragController.DragListener() {
+ @Override
+ public void onDragStart(DropTarget.DragObject dragObject, DragOptions options) {
+ v.setVisibility(INVISIBLE);
}
- }
- mLauncher.getWorkspace().beginDragShared(v, this, dragOptions);
+
+ @Override
+ public void onDragEnd() {
+ v.setVisibility(VISIBLE);
+ dragController.removeDragListener(this);
+ }
+ });
+ mLauncher.getWorkspace().beginDragShared(v, this, new DragOptions());
if (FeatureFlags.LAUNCHER3_LEGACY_WORKSPACE_DND) {
// Enter spring loaded mode (the new workspace does this in
// onDragStart(), so we don't want to do it here)
@@ -525,7 +522,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
// target layout we were dropping on.
if (!success) {
boolean showOutOfSpaceMessage = false;
- if (target instanceof Workspace && !mLauncher.getDragController().isDeferringDrag()) {
+ if (target instanceof Workspace) {
int currentScreen = mLauncher.getCurrentWorkspaceScreen();
Workspace workspace = (Workspace) target;
CellLayout layout = (CellLayout) workspace.getChildAt(currentScreen);
diff --git a/src/com/android/launcher3/dragndrop/DragController.java b/src/com/android/launcher3/dragndrop/DragController.java
index c7b66e7bd..19a47e873 100644
--- a/src/com/android/launcher3/dragndrop/DragController.java
+++ b/src/com/android/launcher3/dragndrop/DragController.java
@@ -131,7 +131,7 @@ public class DragController implements DragDriver.EventListener, TouchController
protected final int mFlingToDeleteThresholdVelocity;
private VelocityTracker mVelocityTracker;
- private boolean mIsDragDeferred;
+ private boolean mIsInPreDrag;
/**
* Interface to receive notifications when a drag starts or stops
@@ -230,13 +230,14 @@ public class DragController implements DragDriver.EventListener, TouchController
mDragObject = new DropTarget.DragObject();
- mIsDragDeferred = !mOptions.deferDragCondition.shouldStartDeferredDrag(0);
+ mIsInPreDrag = mOptions.preDragCondition != null
+ && !mOptions.preDragCondition.shouldStartDrag(0);
final Resources res = mLauncher.getResources();
final float scaleDps = FeatureFlags.LAUNCHER3_LEGACY_WORKSPACE_DND
? res.getDimensionPixelSize(R.dimen.dragViewScale)
- : mIsDragDeferred
- ? res.getDimensionPixelSize(R.dimen.deferred_drag_view_scale)
+ : mIsInPreDrag
+ ? res.getDimensionPixelSize(R.dimen.pre_drag_view_scale)
: 0f;
final DragView dragView = mDragObject.dragView = new DragView(mLauncher, b, registrationX,
registrationY, initialDragViewScale, scaleDps);
@@ -271,10 +272,10 @@ public class DragController implements DragDriver.EventListener, TouchController
dragView.show(mMotionDownX, mMotionDownY);
mDistanceSinceScroll = 0;
- if (!mIsDragDeferred) {
- startDeferredDrag();
- } else {
- mOptions.deferDragCondition.onDeferredDragStart();
+ if (!mIsInPreDrag) {
+ callOnDragStart();
+ } else if (mOptions.preDragCondition != null) {
+ mOptions.preDragCondition.onPreDragStart();
}
mLastTouch[0] = mMotionDownX;
@@ -284,16 +285,18 @@ public class DragController implements DragDriver.EventListener, TouchController
return dragView;
}
- public boolean isDeferringDrag() {
- return mIsDragDeferred;
- }
-
- public void startDeferredDrag() {
+ private void callOnDragStart() {
for (DragListener listener : new ArrayList<>(mListeners)) {
listener.onDragStart(mDragObject, mOptions);
}
- mOptions.deferDragCondition.onDragStart();
- mIsDragDeferred = false;
+ if (mOptions.preDragCondition != null) {
+ mOptions.preDragCondition.onPreDragEnd(true /* dragStarted*/);
+ }
+ mIsInPreDrag = false;
+ }
+
+ public boolean isInPreDrag() {
+ return mIsInPreDrag;
}
/**
@@ -329,7 +332,9 @@ public class DragController implements DragDriver.EventListener, TouchController
mDragObject.deferDragViewCleanupPostAnimation = false;
mDragObject.cancelled = true;
mDragObject.dragComplete = true;
- mDragObject.dragSource.onDropCompleted(null, mDragObject, false, false);
+ if (!mIsInPreDrag) {
+ mDragObject.dragSource.onDropCompleted(null, mDragObject, false, false);
+ }
}
endDrag();
}
@@ -350,7 +355,6 @@ public class DragController implements DragDriver.EventListener, TouchController
private void endDrag() {
if (isDragging()) {
mDragDriver = null;
- mOptions = null;
clearScrollRunnable();
boolean isDeferred = false;
if (mDragObject.dragView != null) {
@@ -363,15 +367,24 @@ public class DragController implements DragDriver.EventListener, TouchController
// Only end the drag if we are not deferred
if (!isDeferred) {
- for (DragListener listener : new ArrayList<>(mListeners)) {
- listener.onDragEnd();
- }
+ callOnDragEnd();
}
}
releaseVelocityTracker();
}
+ private void callOnDragEnd() {
+ if (mIsInPreDrag && mOptions.preDragCondition != null) {
+ mOptions.preDragCondition.onPreDragEnd(false /* dragStarted*/);
+ }
+ mIsInPreDrag = false;
+ mOptions = null;
+ for (DragListener listener : new ArrayList<>(mListeners)) {
+ listener.onDragEnd();
+ }
+ }
+
/**
* This only gets called as a result of drag view cleanup being deferred in endDrag();
*/
@@ -380,9 +393,7 @@ public class DragController implements DragDriver.EventListener, TouchController
if (mDragObject.deferDragViewCleanupPostAnimation) {
// If we skipped calling onDragEnd() before, do it now
- for (DragListener listener : new ArrayList<>(mListeners)) {
- listener.onDragEnd();
- }
+ callOnDragEnd();
}
}
@@ -536,9 +547,9 @@ public class DragController implements DragDriver.EventListener, TouchController
mLastTouch[1] = y;
checkScrollState(x, y);
- if (mIsDragDeferred && mOptions.deferDragCondition.shouldStartDeferredDrag(
- Math.hypot(x - mMotionDownX, y - mMotionDownY))) {
- startDeferredDrag();
+ if (mIsInPreDrag && mOptions.preDragCondition != null
+ && mOptions.preDragCondition.shouldStartDrag(mDistanceSinceScroll)) {
+ callOnDragStart();
}
}
@@ -701,7 +712,7 @@ public class DragController implements DragDriver.EventListener, TouchController
(vec1.length() * vec2.length()));
}
- void drop(DropTarget dropTarget, float x, float y, PointF flingVel) {
+ private void drop(DropTarget dropTarget, float x, float y, PointF flingVel) {
final int[] coordinates = mCoordinatesTemp;
mDragObject.x = coordinates[0];
@@ -734,11 +745,15 @@ public class DragController implements DragDriver.EventListener, TouchController
}
}
final View dropTargetAsView = dropTarget instanceof View ? (View) dropTarget : null;
- mDragObject.dragSource.onDropCompleted(
- dropTargetAsView, mDragObject, flingVel != null, accepted);
mLauncher.getUserEventDispatcher().logDragNDrop(mDragObject, dropTargetAsView);
- if (mIsDragDeferred) {
- mOptions.deferDragCondition.onDropBeforeDeferredDrag();
+ if (!mIsInPreDrag) {
+ mDragObject.dragSource.onDropCompleted(
+ dropTargetAsView, mDragObject, flingVel != null, accepted);
+ } else {
+ // Only defer the drag view cleanup if the drag source handles the drop.
+ if (!(mDragObject.dragSource instanceof DropTarget)) {
+ mDragObject.deferDragViewCleanupPostAnimation = false;
+ }
}
}
diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java
index e1c74bf6d..15ee4118d 100644
--- a/src/com/android/launcher3/dragndrop/DragLayer.java
+++ b/src/com/android/launcher3/dragndrop/DragLayer.java
@@ -219,7 +219,7 @@ public class DragLayer extends InsettableFrameLayout {
mLauncher.closeShortcutsContainer();
// We let touches on the original icon go through so that users can launch
// the app with one tap if they don't find a shortcut they want.
- return !isEventOverView(deepShortcutsContainer.getDeferredDragIcon(), ev);
+ return !isEventOverView(deepShortcutsContainer.getOriginalIcon(), ev);
}
}
}
diff --git a/src/com/android/launcher3/dragndrop/DragOptions.java b/src/com/android/launcher3/dragndrop/DragOptions.java
index dbf46f338..906855a7c 100644
--- a/src/com/android/launcher3/dragndrop/DragOptions.java
+++ b/src/com/android/launcher3/dragndrop/DragOptions.java
@@ -17,6 +17,8 @@
package com.android.launcher3.dragndrop;
import android.graphics.Point;
+import android.support.annotation.CallSuper;
+import android.view.View;
/**
* Set of options to control the drag and drop behavior.
@@ -29,8 +31,8 @@ public class DragOptions {
/** Specifies the start location for the system DnD, null when using internal DnD */
public Point systemDndStartPoint = null;
- /** Determines when a deferred drag should start. By default, drags aren't deferred at all. */
- public DeferDragCondition deferDragCondition = new DeferDragCondition();
+ /** Determines when a pre-drag should transition to a drag. By default, this is immediate. */
+ public PreDragCondition preDragCondition = null;
/**
* Specifies a condition that must be met before DragListener#onDragStart() is called.
@@ -38,34 +40,26 @@ public class DragOptions {
* DragController#startDrag().
*
* This condition can be overridden, and callbacks are provided for the following cases:
- * - The drag starts, but onDragStart() is deferred (onDeferredDragStart()).
- * - The drag ends before the condition is met (onDropBeforeDeferredDrag()).
- * - The condition is met (onDragStart()).
+ * - The pre-drag starts, but onDragStart() is deferred (onPreDragStart()).
+ * - The pre-drag ends before the condition is met (onPreDragEnd(false)).
+ * - The actual drag starts when the condition is met (onPreDragEnd(true)).
*/
- public static class DeferDragCondition {
- public boolean shouldStartDeferredDrag(double distanceDragged) {
- return true;
- }
+ public interface PreDragCondition {
+
+ public boolean shouldStartDrag(double distanceDragged);
/**
- * The drag has started, but onDragStart() is deferred.
- * This happens when shouldStartDeferredDrag() returns true.
+ * The pre-drag has started, but onDragStart() is
+ * deferred until shouldStartDrag() returns true.
*/
- public void onDeferredDragStart() {
- // Do nothing.
- }
+ void onPreDragStart();
/**
- * User dropped before the deferred condition was met,
- * i.e. before shouldStartDeferredDrag() returned true.
+ * The pre-drag has ended. This gets called at the same time as onDragStart()
+ * if the condition is met, otherwise at the same time as onDragEnd().
+ * @param dragStarted Whether the pre-drag ended because the actual drag started.
+ * This will be true if the condition was met, otherwise false.
*/
- public void onDropBeforeDeferredDrag() {
- // Do nothing
- }
-
- /** onDragStart() has been called, now we are in a normal drag. */
- public void onDragStart() {
- // Do nothing
- }
+ void onPreDragEnd(boolean dragStarted);
}
}
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index ebbe64127..4fe351368 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -281,17 +281,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
public boolean onLongClick(View v) {
// Return if global dragging is not enabled
if (!mLauncher.isDraggingEnabled()) return true;
- DragOptions dragOptions = new DragOptions();
- if (v instanceof BubbleTextView) {
- BubbleTextView icon = (BubbleTextView) v;
- if (icon.hasDeepShortcuts()) {
- DeepShortcutsContainer dsc = DeepShortcutsContainer.showForIcon(icon);
- if (dsc != null) {
- dragOptions.deferDragCondition = dsc.createDeferDragCondition(null);
- }
- }
- }
- return startDrag(v, dragOptions);
+ return startDrag(v, new DragOptions());
}
public boolean startDrag(View v, DragOptions options) {
@@ -916,7 +906,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
if (mDeleteFolderOnDropCompleted && !mItemAddedBackToSelfViaIcon && target != this) {
replaceFolderWithFinalItem();
}
- } else if (!mDragController.isDeferringDrag()) {
+ } else {
// The drag failed, we need to return the item to the folder
ShortcutInfo info = (ShortcutInfo) d.dragInfo;
View icon = (mCurrentDragView != null && mCurrentDragView.getTag() == info)
@@ -1309,7 +1299,8 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
mIsExternalDrag = false;
} else {
currentDragView = mCurrentDragView;
- if (!mDragController.isDeferringDrag()) {
+ // The view was never removed from this folder if we are still in the pre-drag.
+ if (!mDragController.isInPreDrag()) {
mContent.addViewForRank(currentDragView, si, mEmptyCellRank);
}
}
@@ -1332,7 +1323,8 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
mItemsInvalidated = true;
rearrangeChildren();
- if (!mDragController.isDeferringDrag()) {
+ // The ShortcutInfo was never removed if we are still in the pre-drag.
+ if (!mDragController.isInPreDrag()) {
// Temporarily suppress the listener, as we did all the work already here.
try (SuppressInfoChanges s = new SuppressInfoChanges()) {
mInfo.add(si, false);
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
index 9ff4721e0..31f382370 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
@@ -62,7 +62,6 @@ import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.dragndrop.DragView;
-import com.android.launcher3.graphics.LauncherIcons;
import com.android.launcher3.graphics.TriangleShape;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
@@ -86,7 +85,7 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
private final ShortcutMenuAccessibilityDelegate mAccessibilityDelegate;
private final boolean mIsRtl;
- private BubbleTextView mDeferredDragIcon;
+ private BubbleTextView mOriginalIcon;
private final Rect mTempRect = new Rect();
private Point mIconLastTouchPos = new Point();
private boolean mIsLeftAligned;
@@ -151,7 +150,8 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
animateOpen();
- deferDrag(originalIcon);
+ mOriginalIcon = originalIcon;
+ mLauncher.getDragController().addDragListener(this);
// Load the shortcuts on a background thread and update the container as it animates.
final Looper workerLooper = LauncherModel.getWorkerLooper();
@@ -376,13 +376,8 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
return arrowView;
}
- private void deferDrag(BubbleTextView originalIcon) {
- mDeferredDragIcon = originalIcon;
- mLauncher.getDragController().addDragListener(this);
- }
-
- public BubbleTextView getDeferredDragIcon() {
- return mDeferredDragIcon;
+ public BubbleTextView getOriginalIcon() {
+ return mOriginalIcon;
}
/**
@@ -391,30 +386,26 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
* Current behavior:
* - Start the drag if the touch passes a certain distance from the original touch down.
*/
- public DragOptions.DeferDragCondition createDeferDragCondition(final Runnable onDragStart) {
- return new DragOptions.DeferDragCondition() {
+ public DragOptions.PreDragCondition createPreDragCondition() {
+ return new DragOptions.PreDragCondition() {
@Override
- public boolean shouldStartDeferredDrag(double distanceDragged) {
+ public boolean shouldStartDrag(double distanceDragged) {
return distanceDragged > mStartDragThreshold;
}
@Override
- public void onDeferredDragStart() {
- mDeferredDragIcon.setVisibility(INVISIBLE);
- }
-
- @Override
- public void onDropBeforeDeferredDrag() {
- mLauncher.getUserEventDispatcher().logDeepShortcutsOpen(mDeferredDragIcon);
- if (!mIsAboveIcon) {
- mDeferredDragIcon.setTextVisibility(false);
- }
+ public void onPreDragStart() {
+ mOriginalIcon.setVisibility(INVISIBLE);
}
@Override
- public void onDragStart() {
- if (onDragStart != null) {
- onDragStart.run();
+ public void onPreDragEnd(boolean dragStarted) {
+ if (!dragStarted) {
+ mOriginalIcon.setVisibility(VISIBLE);
+ mLauncher.getUserEventDispatcher().logDeepShortcutsOpen(mOriginalIcon);
+ if (!mIsAboveIcon) {
+ mOriginalIcon.setTextVisibility(false);
+ }
}
}
};
@@ -512,7 +503,6 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
}
}
}
- mDeferredDragIcon.setVisibility(VISIBLE);
}
@Override
@@ -624,9 +614,9 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
}
mIsOpen = false;
mDeferContainerRemoval = false;
- boolean isInHotseat = ((ItemInfo) mDeferredDragIcon.getTag()).container
+ boolean isInHotseat = ((ItemInfo) mOriginalIcon.getTag()).container
== LauncherSettings.Favorites.CONTAINER_HOTSEAT;
- mDeferredDragIcon.setTextVisibility(!isInHotseat);
+ mOriginalIcon.setTextVisibility(!isInHotseat);
mLauncher.getDragController().removeDragListener(this);
mLauncher.getDragLayer().removeView(this);
}
@@ -648,7 +638,6 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
}
List<String> ids = launcher.getShortcutIdsForItem((ItemInfo) icon.getTag());
if (!ids.isEmpty()) {
- // There are shortcuts associated with the app, so defer its drag.
final DeepShortcutsContainer container =
(DeepShortcutsContainer) launcher.getLayoutInflater().inflate(
R.layout.deep_shortcuts_container, launcher.getDragLayer(), false);