Cancel exit spring loaded runnable when launcher state is set to APPS or WIDGETS b/29645452
am: 06ca7568c6
Change-Id: I17e8718fc30f3afe405b85095f30818e2369bd2f
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 5f5ac2e..1de8a68 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -348,6 +348,11 @@
}
}
+ // Exiting spring loaded mode happens with a delay. This runnable object triggers the
+ // state transition. If another state transition happened during this delay,
+ // simply unregister this runnable.
+ private Runnable mExitSpringLoadedModeRunnable;
+
@Thunk Runnable mBuildLayersRunnable = new Runnable() {
public void run() {
if (mWorkspace != null) {
@@ -3416,6 +3421,12 @@
return false;
}
+ // This is a safe and supported transition to bypass spring_loaded mode.
+ if (mExitSpringLoadedModeRunnable != null) {
+ mHandler.removeCallbacks(mExitSpringLoadedModeRunnable);
+ mExitSpringLoadedModeRunnable = null;
+ }
+
if (toState == State.APPS) {
mStateTransitionAnimation.startAnimationToAllApps(mWorkspace.getState(), animated,
focusSearchBar);
@@ -3475,7 +3486,10 @@
final Runnable onCompleteRunnable) {
if (!isStateSpringLoaded()) return;
- mHandler.postDelayed(new Runnable() {
+ if (mExitSpringLoadedModeRunnable != null) {
+ mHandler.removeCallbacks(mExitSpringLoadedModeRunnable);
+ }
+ mExitSpringLoadedModeRunnable = new Runnable() {
@Override
public void run() {
if (successfulDrop) {
@@ -3489,8 +3503,10 @@
} else {
exitSpringLoadedDragMode();
}
+ mExitSpringLoadedModeRunnable = null;
}
- }, delay);
+ };
+ mHandler.postDelayed(mExitSpringLoadedModeRunnable, delay);
}
boolean isStateSpringLoaded() {