Adding support for auto-cancelling an action mode when interacting with launcher
Change-Id: Iba0207e36e9e5bd94bd9016318a4e00c6e1f6393
diff --git a/src/com/android/launcher3/AbstractFloatingView.java b/src/com/android/launcher3/AbstractFloatingView.java
index da464c0..8e64346 100644
--- a/src/com/android/launcher3/AbstractFloatingView.java
+++ b/src/com/android/launcher3/AbstractFloatingView.java
@@ -153,6 +153,7 @@
public static void closeAllOpenViews(Launcher launcher, boolean animate) {
closeOpenViews(launcher, animate, TYPE_ALL);
+ launcher.finishAutoCancelActionMode();
}
public static void closeAllOpenViews(Launcher launcher) {
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 44660ec..a403f71 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -72,6 +72,7 @@
import android.text.method.TextKeyListener;
import android.util.Log;
import android.util.SparseArray;
+import android.view.ActionMode;
import android.view.Display;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
@@ -198,6 +199,10 @@
// Type: SparseArray<Parcelable>
private static final String RUNTIME_STATE_WIDGET_PANEL = "launcher.widget_panel";
+ // When starting an action mode, setting this tag will cause the action mode to be cancelled
+ // automatically when user interacts with the launcher.
+ public static final Object AUTO_CANCEL_ACTION_MODE = new Object();
+
private LauncherStateManager mStateManager;
private boolean mIsSafeModeEnabled;
@@ -275,6 +280,7 @@
private boolean mAppLaunchSuccess;
private RotationPrefChangeHandler mRotationPrefChangeHandler;
+ private ActionMode mCurrentActionMode;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -1626,6 +1632,9 @@
@Override
public void onBackPressed() {
+ if (finishAutoCancelActionMode()) {
+ return;
+ }
if (mLauncherCallbacks != null && mLauncherCallbacks.handleBackPressed()) {
return;
}
@@ -3015,6 +3024,26 @@
}
}
+ @Override
+ public void onActionModeStarted(ActionMode mode) {
+ super.onActionModeStarted(mode);
+ mCurrentActionMode = mode;
+ }
+
+ @Override
+ public void onActionModeFinished(ActionMode mode) {
+ super.onActionModeFinished(mode);
+ mCurrentActionMode = null;
+ }
+
+ public boolean finishAutoCancelActionMode() {
+ if (mCurrentActionMode != null && AUTO_CANCEL_ACTION_MODE == mCurrentActionMode.getTag()) {
+ mCurrentActionMode.finish();
+ return true;
+ }
+ return false;
+ }
+
/**
* Callback for listening for onResume
*/
diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java
index 0137b26..d25f958 100644
--- a/src/com/android/launcher3/LauncherStateManager.java
+++ b/src/com/android/launcher3/LauncherStateManager.java
@@ -264,6 +264,7 @@
private void onStateTransitionEnd(LauncherState state) {
mLauncher.getWorkspace().setClipChildren(!state.disablePageClipping);
mLauncher.getUserEventDispatcher().resetElapsedContainerMillis();
+ mLauncher.finishAutoCancelActionMode();
}
/**
diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java
index 27d6b89..c75e616 100644
--- a/src/com/android/launcher3/dragndrop/DragLayer.java
+++ b/src/com/android/launcher3/dragndrop/DragLayer.java
@@ -157,6 +157,8 @@
mTouchCompleteListener.onTouchComplete();
}
mTouchCompleteListener = null;
+ } else if (action == MotionEvent.ACTION_DOWN) {
+ mLauncher.finishAutoCancelActionMode();
}
mActiveController = null;