Go back to previous state when hitting back from discovery bounce
Normally when you hit back, we just close the floating view if there
is one. This makes less sense for DiscoveryBounce, since it doesn't
feel like a different state even though it's technically a floating
view. So in that case, don't consume the back press; let launcher
handle it to go to the previous state.
Bug: 80075741
Change-Id: I7270b61be70509cb2101400a12929478a5d082aa
diff --git a/src/com/android/launcher3/AbstractFloatingView.java b/src/com/android/launcher3/AbstractFloatingView.java
index 5a1c158..b112a8c 100644
--- a/src/com/android/launcher3/AbstractFloatingView.java
+++ b/src/com/android/launcher3/AbstractFloatingView.java
@@ -121,9 +121,11 @@
protected abstract boolean isOfType(@FloatingViewType int type);
- public void onBackPressed() {
+ /** @return Whether the back is consumed. If false, Launcher will handle the back as well. */
+ public boolean onBackPressed() {
logActionCommand(Action.Command.BACK);
close(true);
+ return true;
}
@Override
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index e851499..32539cd 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1583,8 +1583,8 @@
// by using if-else statements.
UserEventDispatcher ued = getUserEventDispatcher();
AbstractFloatingView topView = AbstractFloatingView.getTopOpenView(this);
- if (topView != null) {
- topView.onBackPressed();
+ if (topView != null && topView.onBackPressed()) {
+ // Handled by the floating view.
} else if (!isInState(NORMAL)) {
LauncherState lastState = mStateManager.getLastState();
ued.logActionCommand(Action.Command.BACK, mStateManager.getState().containerType,
diff --git a/src/com/android/launcher3/allapps/DiscoveryBounce.java b/src/com/android/launcher3/allapps/DiscoveryBounce.java
index deaf8d3..e1cd06a 100644
--- a/src/com/android/launcher3/allapps/DiscoveryBounce.java
+++ b/src/com/android/launcher3/allapps/DiscoveryBounce.java
@@ -84,6 +84,14 @@
}
@Override
+ public boolean onBackPressed() {
+ super.onBackPressed();
+ // Go back to the previous state (from a user's perspective this floating view isn't
+ // something to go back from).
+ return false;
+ }
+
+ @Override
public boolean onControllerInterceptTouchEvent(MotionEvent ev) {
handleClose(false);
return false;
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index b49952f..6b13da7 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -1437,12 +1437,13 @@
}
@Override
- public void onBackPressed() {
+ public boolean onBackPressed() {
if (isEditingName()) {
mFolderName.dispatchBackKey();
} else {
super.onBackPressed();
}
+ return true;
}
@Override