diff options
author | Tony Wickham <twickham@google.com> | 2016-09-28 12:49:25 -0700 |
---|---|---|
committer | Tony Wickham <twickham@google.com> | 2016-10-04 12:26:35 -0700 |
commit | 10236d6ac7f5f787ca21736494ccb5eaf2bd7c27 (patch) | |
tree | 5caed1278efbd05aa9a99f5be8afd38e025569b3 /src/com/android/launcher3 | |
parent | 59769e3331f36fd63134825b5155035e32413469 (diff) | |
download | android_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
Diffstat (limited to 'src/com/android/launcher3')
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 12 | ||||
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 8 | ||||
-rw-r--r-- | src/com/android/launcher3/allapps/AllAppsContainerView.java | 35 | ||||
-rw-r--r-- | src/com/android/launcher3/dragndrop/DragController.java | 77 | ||||
-rw-r--r-- | src/com/android/launcher3/dragndrop/DragLayer.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/dragndrop/DragOptions.java | 42 | ||||
-rw-r--r-- | src/com/android/launcher3/folder/Folder.java | 20 | ||||
-rw-r--r-- | src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java | 49 |
8 files changed, 115 insertions, 130 deletions
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); |