summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/Launcher.java27
-rw-r--r--src/com/android/launcher3/dragndrop/DragLayer.java9
-rw-r--r--src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java42
-rw-r--r--src/com/android/launcher3/shortcuts/ShortcutsContainerListener.java3
4 files changed, 50 insertions, 31 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 763daf4d4..717b05998 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -116,6 +116,7 @@ import com.android.launcher3.logging.UserEventDispatcher;
import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.pageindicators.PageIndicator;
import com.android.launcher3.shortcuts.DeepShortcutManager;
+import com.android.launcher3.shortcuts.DeepShortcutsContainer;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.MultiHashMap;
import com.android.launcher3.util.PackageManagerHelper;
@@ -1245,6 +1246,9 @@ public class Launcher extends Activity
// Close any open folders
closeFolder();
+ // Close any shortcuts containers
+ closeShortcutsContainer();
+
// Stop resizing any widgets
mWorkspace.exitWidgetResizeMode();
@@ -1840,6 +1844,7 @@ public class Launcher extends Activity
mWorkspace.exitWidgetResizeMode();
closeFolder(alreadyOnHome);
+ closeShortcutsContainer();
exitSpringLoadedDragMode();
// If we are already on home, then just animate back to the workspace,
@@ -1927,6 +1932,8 @@ public class Launcher extends Activity
// TODO: Move folderInfo.isOpened out of the model and make it a UI state.
closeFolder(false);
+ closeShortcutsContainer();
+
if (mPendingAddInfo.container != ItemInfo.NO_ID && mPendingAddInfo.screenId > -1 &&
mWaitingForResult) {
ContentValues itemValues = new ContentValues();
@@ -2423,7 +2430,9 @@ public class Launcher extends Activity
return;
}
- if (isAppsViewVisible()) {
+ if (getOpenShortcutsContainer() != null) {
+ closeShortcutsContainer();
+ } else if (isAppsViewVisible()) {
showWorkspace(true);
} else if (isWidgetsViewVisible()) {
showOverviewMode(true);
@@ -3090,6 +3099,21 @@ public class Launcher extends Activity
getDragLayer().sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
}
+ public void closeShortcutsContainer() {
+ DeepShortcutsContainer deepShortcutsContainer = getOpenShortcutsContainer();
+ if (deepShortcutsContainer != null) {
+ mDragController.removeDragListener(deepShortcutsContainer);
+ mDragLayer.removeView(deepShortcutsContainer);
+ }
+ }
+
+ /**
+ * @return The open shortcuts container, or null if there is none
+ */
+ public DeepShortcutsContainer getOpenShortcutsContainer() {
+ return (DeepShortcutsContainer) mDragLayer.findViewById(R.id.deep_shortcuts_container);
+ }
+
@Override
public boolean onLongClick(View v) {
if (!isDraggingEnabled()) return false;
@@ -3351,6 +3375,7 @@ public class Launcher extends Activity
mUserPresent = false;
updateAutoAdvanceState();
closeFolder();
+ closeShortcutsContainer();
// Send an accessibility event to announce the context change
getWindow().getDecorView()
diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java
index ce9753666..82b5dd314 100644
--- a/src/com/android/launcher3/dragndrop/DragLayer.java
+++ b/src/com/android/launcher3/dragndrop/DragLayer.java
@@ -231,8 +231,7 @@ public class DragLayer extends InsettableFrameLayout {
}
// Remove the shortcuts container when touching outside of it.
- DeepShortcutsContainer deepShortcutsContainer = (DeepShortcutsContainer)
- findViewById(R.id.deep_shortcuts_container);
+ DeepShortcutsContainer deepShortcutsContainer = mLauncher.getOpenShortcutsContainer();
if (deepShortcutsContainer != null) {
if (isEventOverView(deepShortcutsContainer, ev)) {
// Let the container handle the event.
@@ -244,7 +243,7 @@ public class DragLayer extends InsettableFrameLayout {
return true;
}
} else {
- removeView(deepShortcutsContainer);
+ 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);
@@ -547,10 +546,6 @@ public class DragLayer extends InsettableFrameLayout {
return new LayoutParams(p);
}
- public void setController(TouchController controller) {
- mActiveController = controller;
- }
-
public static class LayoutParams extends InsettableFrameLayout.LayoutParams {
public int x, y;
public boolean customPosition = false;
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
index 6f3875cad..31440ff13 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
@@ -27,12 +27,12 @@ import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.Utilities;
import com.android.launcher3.Workspace;
import com.android.launcher3.compat.UserHandleCompat;
+import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.DragView;
import com.android.launcher3.logging.UserEventDispatcher;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
-import com.android.launcher3.util.TouchController;
import com.android.launcher3.util.UiThreadCircularReveal;
import java.util.ArrayList;
@@ -42,9 +42,9 @@ import java.util.List;
* A container for shortcuts to deep links within apps.
*/
@TargetApi(Build.VERSION_CODES.N)
-public class DeepShortcutsContainer extends LinearLayout implements View.OnClickListener,
- View.OnLongClickListener, View.OnTouchListener, DragSource,
- UserEventDispatcher.LaunchSourceProvider, TouchController {
+public class DeepShortcutsContainer extends LinearLayout implements View.OnLongClickListener,
+ View.OnTouchListener, DragSource, DragController.DragListener,
+ UserEventDispatcher.LaunchSourceProvider {
private static final String TAG = "ShortcutsContainer";
private Launcher mLauncher;
@@ -121,7 +121,7 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic
ShortcutInfo launcherShortcutInfo = shortcuts.get(i);
iconAndText.applyFromShortcutInfo(launcherShortcutInfo,
LauncherAppState.getInstance().getIconCache());
- iconAndText.setOnClickListener(DeepShortcutsContainer.this);
+ iconAndText.setOnClickListener(mLauncher);
iconAndText.setOnLongClickListener(DeepShortcutsContainer.this);
iconAndText.setOnTouchListener(DeepShortcutsContainer.this);
int viewId = mLauncher.getViewIdForItem(originalInfo);
@@ -194,6 +194,7 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic
private void deferDrag(BubbleTextView originalIcon) {
mDeferredDragIcon = originalIcon;
showDragView(originalIcon);
+ mLauncher.getDragController().addDragListener(this);
}
public BubbleTextView getDeferredDragIcon() {
@@ -231,7 +232,6 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic
return false;
}
-
final int activePointerIndex = ev.findPointerIndex(mActivePointerId);
if (activePointerIndex < 0) {
return false;
@@ -256,12 +256,10 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic
boolean containerContainsTouch = x >= 0 && y >= 0 && x < getWidth() && y < getHeight();
if (shouldStartDeferredDrag((int) x, (int) y, containerContainsTouch)) {
+ cleanupDeferredDrag();
mDeferredDragIcon.getParent().requestDisallowInterceptTouchEvent(false);
- mDeferredDragIcon.setVisibility(VISIBLE);
mDeferredDragIcon.getOnLongClickListener().onLongClick(mDeferredDragIcon);
- mLauncher.getDragLayer().removeView(this);
mLauncher.getDragController().onTouchEvent(ev);
- cleanupDeferredDrag();
return true;
} else {
// Determine whether touch is over a shortcut.
@@ -288,7 +286,6 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic
}
}
} else if (action == MotionEvent.ACTION_UP) {
- mDeferredDragIcon.setVisibility(VISIBLE);
cleanupDeferredDrag();
// Launch a shortcut if user was hovering over it.
for (int i = 0; i < childCount; i++) {
@@ -326,6 +323,7 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic
if (mDragView != null) {
mDragView.remove();
}
+ mDeferredDragIcon.setVisibility(VISIBLE);
}
@Override
@@ -340,13 +338,6 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic
return false;
}
- @Override
- public void onClick(View view) {
- // Clicked on a shortcut.
- mLauncher.onClick(view);
- ((DragLayer) getParent()).removeView(this);
- }
-
public boolean onLongClick(View v) {
// Return early if this is not initiated from a touch
if (!v.isInTouchMode()) return false;
@@ -354,11 +345,7 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic
if (!mLauncher.isDraggingEnabled()) return false;
// Long clicked on a shortcut.
- // TODO remove this hack; it required because DragLayer isn't intercepting touch, so
- // the controller is not updated from what it was previously.
- mLauncher.getDragLayer().setController(mLauncher.getDragController());
mLauncher.getWorkspace().beginDragShared(v, mIconLastTouchPos, this, false);
- ((DragLayer) getParent()).removeView(this);
// TODO: support dragging from within folder without having to close it
mLauncher.closeFolder();
return false;
@@ -401,6 +388,19 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic
}
@Override
+ public void onDragStart(DragSource source, ItemInfo info, int dragAction) {
+ // Either the original icon or one of the shortcuts was dragged.
+ // Hide the container, but don't remove it yet because that interferes with touch events.
+ setVisibility(INVISIBLE);
+ }
+
+ @Override
+ public void onDragEnd() {
+ // Now remove the container.
+ mLauncher.closeShortcutsContainer();
+ }
+
+ @Override
public void fillInLaunchSourceData(View v, ItemInfo info, Target target, Target targetParent) {
target.itemType = LauncherLogProto.SHORTCUT; // TODO: change to DYNAMIC_SHORTCUT
target.gridX = info.cellX;
diff --git a/src/com/android/launcher3/shortcuts/ShortcutsContainerListener.java b/src/com/android/launcher3/shortcuts/ShortcutsContainerListener.java
index 956623e2c..efb5be5e5 100644
--- a/src/com/android/launcher3/shortcuts/ShortcutsContainerListener.java
+++ b/src/com/android/launcher3/shortcuts/ShortcutsContainerListener.java
@@ -243,8 +243,7 @@ public class ShortcutsContainerListener implements View.OnTouchListener,
private boolean onTouchForwarded(MotionEvent srcEvent) {
final View src = mSrcIcon;
- final DeepShortcutsContainer dst = (DeepShortcutsContainer)
- mDragLayer.findViewById(R.id.deep_shortcuts_container);
+ final DeepShortcutsContainer dst = mLauncher.getOpenShortcutsContainer();
if (dst == null) {
return false;
}