From 2a00f81327bef58ac370d56a1e7e101d44c14ceb Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 30 Apr 2020 23:03:52 -0700 Subject: [PATCH] Account for various launcher states when setting back button alpha - Previously we only check for the flag which is always true in the normal launcher state, so if the animation starts, we could end up writing the back alpha value without accounting for window focus or any other states that launcher is in that affects back button visibility Bug: 155129739 Test: Open -1 article and hit back Change-Id: I42d27a192b23f394f8565a6893ce092603e31654 --- .../android/launcher3/BaseQuickstepLauncher.java | 15 ++++++++++----- .../statehandlers/BackButtonAlphaHandler.java | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java index 3bb8b0750e..10e3a28088 100644 --- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java @@ -252,13 +252,10 @@ public abstract class BaseQuickstepLauncher extends Launcher super.onActivityFlagsChanged(changeBits); } - /** - * Sets the back button visibility based on the current state/window focus. - */ - private void onLauncherStateOrFocusChanged() { + public boolean shouldBackButtonBeHidden(LauncherState toState) { Mode mode = SysUINavigationMode.getMode(this); boolean shouldBackButtonBeHidden = mode.hasGestures - && getStateManager().getState().hasFlag(FLAG_HIDE_BACK_BUTTON) + && toState.hasFlag(FLAG_HIDE_BACK_BUTTON) && hasWindowFocus() && (getActivityFlags() & ACTIVITY_STATE_TRANSITION_ACTIVE) == 0; if (shouldBackButtonBeHidden) { @@ -266,6 +263,14 @@ public abstract class BaseQuickstepLauncher extends Launcher shouldBackButtonBeHidden = AbstractFloatingView.getTopOpenViewWithType(this, TYPE_ALL & ~TYPE_HIDE_BACK_BUTTON) == null; } + return shouldBackButtonBeHidden; + } + + /** + * Sets the back button visibility based on the current state/window focus. + */ + private void onLauncherStateOrFocusChanged() { + boolean shouldBackButtonBeHidden = shouldBackButtonBeHidden(getStateManager().getState()); UiThreadHelper.setBackButtonAlphaAsync(this, SET_BACK_BUTTON_ALPHA, shouldBackButtonBeHidden ? 0f : 1f, true /* animate */); if (getDragLayer() != null) { diff --git a/quickstep/src/com/android/launcher3/statehandlers/BackButtonAlphaHandler.java b/quickstep/src/com/android/launcher3/statehandlers/BackButtonAlphaHandler.java index 91451919cb..075a4833fa 100644 --- a/quickstep/src/com/android/launcher3/statehandlers/BackButtonAlphaHandler.java +++ b/quickstep/src/com/android/launcher3/statehandlers/BackButtonAlphaHandler.java @@ -61,7 +61,7 @@ public class BackButtonAlphaHandler implements LauncherStateManager.StateHandler mBackAlpha.value = SystemUiProxy.INSTANCE.get(mLauncher).getLastBackButtonAlpha(); animation.setFloat(mBackAlpha, VALUE, - toState.hasFlag(FLAG_HIDE_BACK_BUTTON) ? 0 : 1, LINEAR); + mLauncher.shouldBackButtonBeHidden(toState) ? 0 : 1, LINEAR); } private void updateBackAlpha() {