Loading quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java +2 −1 Original line number Diff line number Diff line Loading @@ -194,7 +194,8 @@ public class TaskbarDragLayer extends BaseDragLayer<TaskbarActivityContext> { public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == ACTION_UP && event.getKeyCode() == KEYCODE_BACK) { AbstractFloatingView topView = AbstractFloatingView.getTopOpenView(mActivity); if (topView != null && topView.onBackPressed()) { if (topView != null && topView.canHandleBack()) { topView.onBackInvoked(); // Handled by the floating view. return true; } Loading quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayDragLayer.java +2 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,8 @@ public class TaskbarOverlayDragLayer extends public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == ACTION_UP && event.getKeyCode() == KEYCODE_BACK) { AbstractFloatingView topView = AbstractFloatingView.getTopOpenView(mActivity); if (topView != null && topView.onBackPressed()) { if (topView != null && topView.canHandleBack()) { topView.onBackInvoked(); return true; } } Loading quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +33 −3 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.LauncherState; import com.android.launcher3.OnBackPressedHandler; import com.android.launcher3.QuickstepAccessibilityDelegate; import com.android.launcher3.QuickstepTransitionManager; import com.android.launcher3.R; Loading Loading @@ -638,20 +639,49 @@ public class QuickstepLauncher extends Launcher { getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, new OnBackAnimationCallback() { @Nullable OnBackPressedHandler mActiveOnBackPressedHandler; @Override public void onBackStarted(@NonNull BackEvent backEvent) { if (mActiveOnBackPressedHandler != null) { mActiveOnBackPressedHandler.onBackCancelled(); } mActiveOnBackPressedHandler = getOnBackPressedHandler(); mActiveOnBackPressedHandler.onBackStarted(); } @Override public void onBackInvoked() { onBackPressed(); // Recreate mActiveOnBackPressedHandler if necessary to avoid NPE because: // 1. b/260636433: In 3-button-navigation mode, onBackStarted() is not // called on ACTION_DOWN before onBackInvoked() is called in ACTION_UP. // 2. Launcher#onBackPressed() will call onBackInvoked() without calling // onBackInvoked() beforehand. if (mActiveOnBackPressedHandler == null) { mActiveOnBackPressedHandler = getOnBackPressedHandler(); } mActiveOnBackPressedHandler.onBackInvoked(); mActiveOnBackPressedHandler = null; TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "onBackInvoked"); } @Override public void onBackProgressed(@NonNull BackEvent backEvent) { QuickstepLauncher.this.onBackProgressed(backEvent.getProgress()); if (!FeatureFlags.IS_STUDIO_BUILD && mActiveOnBackPressedHandler == null) { return; } mActiveOnBackPressedHandler .onBackProgressed(backEvent.getProgress()); } @Override public void onBackCancelled() { QuickstepLauncher.this.onBackCancelled(); if (!FeatureFlags.IS_STUDIO_BUILD && mActiveOnBackPressedHandler == null) { return; } mActiveOnBackPressedHandler.onBackCancelled(); mActiveOnBackPressedHandler = null; } }); } Loading quickstep/src/com/android/quickstep/views/AllAppsEduView.java +0 −5 Original line number Diff line number Diff line Loading @@ -111,11 +111,6 @@ public class AllAppsEduView extends AbstractFloatingView { return (type & TYPE_ALL_APPS_EDU) != 0; } @Override public boolean onBackPressed() { return true; } @Override public boolean canInterceptEventsInSystemGestureRegion() { return true; Loading src/com/android/launcher3/AbstractFloatingView.java +9 −4 Original line number Diff line number Diff line Loading @@ -46,7 +46,8 @@ import java.lang.annotation.RetentionPolicy; /** * Base class for a View which shows a floating UI on top of the launcher UI. */ public abstract class AbstractFloatingView extends LinearLayout implements TouchController { public abstract class AbstractFloatingView extends LinearLayout implements TouchController, OnBackPressedHandler { @IntDef(flag = true, value = { TYPE_FOLDER, Loading Loading @@ -165,12 +166,16 @@ public abstract class AbstractFloatingView extends LinearLayout implements Touch protected abstract boolean isOfType(@FloatingViewType int type); /** @return Whether the back is consumed. If false, Launcher will handle the back as well. */ public boolean onBackPressed() { close(true); /** Return true if this view can consume back press. */ public boolean canHandleBack() { return true; } @Override public void onBackInvoked() { close(true); } @Override public boolean onControllerTouchEvent(MotionEvent ev) { return false; Loading Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java +2 −1 Original line number Diff line number Diff line Loading @@ -194,7 +194,8 @@ public class TaskbarDragLayer extends BaseDragLayer<TaskbarActivityContext> { public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == ACTION_UP && event.getKeyCode() == KEYCODE_BACK) { AbstractFloatingView topView = AbstractFloatingView.getTopOpenView(mActivity); if (topView != null && topView.onBackPressed()) { if (topView != null && topView.canHandleBack()) { topView.onBackInvoked(); // Handled by the floating view. return true; } Loading
quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayDragLayer.java +2 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,8 @@ public class TaskbarOverlayDragLayer extends public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == ACTION_UP && event.getKeyCode() == KEYCODE_BACK) { AbstractFloatingView topView = AbstractFloatingView.getTopOpenView(mActivity); if (topView != null && topView.onBackPressed()) { if (topView != null && topView.canHandleBack()) { topView.onBackInvoked(); return true; } } Loading
quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +33 −3 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.LauncherState; import com.android.launcher3.OnBackPressedHandler; import com.android.launcher3.QuickstepAccessibilityDelegate; import com.android.launcher3.QuickstepTransitionManager; import com.android.launcher3.R; Loading Loading @@ -638,20 +639,49 @@ public class QuickstepLauncher extends Launcher { getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, new OnBackAnimationCallback() { @Nullable OnBackPressedHandler mActiveOnBackPressedHandler; @Override public void onBackStarted(@NonNull BackEvent backEvent) { if (mActiveOnBackPressedHandler != null) { mActiveOnBackPressedHandler.onBackCancelled(); } mActiveOnBackPressedHandler = getOnBackPressedHandler(); mActiveOnBackPressedHandler.onBackStarted(); } @Override public void onBackInvoked() { onBackPressed(); // Recreate mActiveOnBackPressedHandler if necessary to avoid NPE because: // 1. b/260636433: In 3-button-navigation mode, onBackStarted() is not // called on ACTION_DOWN before onBackInvoked() is called in ACTION_UP. // 2. Launcher#onBackPressed() will call onBackInvoked() without calling // onBackInvoked() beforehand. if (mActiveOnBackPressedHandler == null) { mActiveOnBackPressedHandler = getOnBackPressedHandler(); } mActiveOnBackPressedHandler.onBackInvoked(); mActiveOnBackPressedHandler = null; TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "onBackInvoked"); } @Override public void onBackProgressed(@NonNull BackEvent backEvent) { QuickstepLauncher.this.onBackProgressed(backEvent.getProgress()); if (!FeatureFlags.IS_STUDIO_BUILD && mActiveOnBackPressedHandler == null) { return; } mActiveOnBackPressedHandler .onBackProgressed(backEvent.getProgress()); } @Override public void onBackCancelled() { QuickstepLauncher.this.onBackCancelled(); if (!FeatureFlags.IS_STUDIO_BUILD && mActiveOnBackPressedHandler == null) { return; } mActiveOnBackPressedHandler.onBackCancelled(); mActiveOnBackPressedHandler = null; } }); } Loading
quickstep/src/com/android/quickstep/views/AllAppsEduView.java +0 −5 Original line number Diff line number Diff line Loading @@ -111,11 +111,6 @@ public class AllAppsEduView extends AbstractFloatingView { return (type & TYPE_ALL_APPS_EDU) != 0; } @Override public boolean onBackPressed() { return true; } @Override public boolean canInterceptEventsInSystemGestureRegion() { return true; Loading
src/com/android/launcher3/AbstractFloatingView.java +9 −4 Original line number Diff line number Diff line Loading @@ -46,7 +46,8 @@ import java.lang.annotation.RetentionPolicy; /** * Base class for a View which shows a floating UI on top of the launcher UI. */ public abstract class AbstractFloatingView extends LinearLayout implements TouchController { public abstract class AbstractFloatingView extends LinearLayout implements TouchController, OnBackPressedHandler { @IntDef(flag = true, value = { TYPE_FOLDER, Loading Loading @@ -165,12 +166,16 @@ public abstract class AbstractFloatingView extends LinearLayout implements Touch protected abstract boolean isOfType(@FloatingViewType int type); /** @return Whether the back is consumed. If false, Launcher will handle the back as well. */ public boolean onBackPressed() { close(true); /** Return true if this view can consume back press. */ public boolean canHandleBack() { return true; } @Override public void onBackInvoked() { close(true); } @Override public boolean onControllerTouchEvent(MotionEvent ev) { return false; Loading