From 54dccc246534a3e505c4bcc9f405c240564e0744 Mon Sep 17 00:00:00 2001 From: Vinit Nayak Date: Mon, 16 Aug 2021 20:01:45 -0700 Subject: [PATCH] Respect StatusBarManager back/home disable flags * Also use the same signals provided by SysUi flags instead of directly from the disable API just for consistency. (Disable2 flags still need to be migrated over, so we're keeping the API for now). Bug: 194870114 Test: Locking screen w/ 3 button nav w/ various keyguards Change-Id: I858ea36876061cddf0debbd43e8fcfe1d5712839 --- .../taskbar/NavbarButtonsViewController.java | 25 ++++++++++++++++--- .../taskbar/TaskbarActivityContext.java | 1 - .../taskbar/TaskbarKeyguardController.java | 24 +++++++----------- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java index 08300e29f8..e871c2556d 100644 --- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java @@ -25,8 +25,11 @@ import static com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_IM import static com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_KEYGUARD; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BACK_DISABLED; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; import android.animation.ObjectAnimator; import android.annotation.DrawableRes; @@ -69,6 +72,9 @@ public class NavbarButtonsViewController { private static final int FLAG_A11Y_VISIBLE = 1 << 3; private static final int FLAG_ONLY_BACK_FOR_BOUNCER_VISIBLE = 1 << 4; private static final int FLAG_KEYGUARD_VISIBLE = 1 << 5; + private static final int FLAG_DISABLE_HOME = 1 << 6; + private static final int FLAG_DISABLE_RECENTS = 1 << 7; + private static final int FLAG_DISABLE_BACK = 1 << 8; private static final int MASK_IME_SWITCHER_VISIBLE = FLAG_SWITCHER_SUPPORTED | FLAG_IME_VISIBLE; @@ -169,7 +175,8 @@ public class NavbarButtonsViewController { mBackButton = addButton(R.drawable.ic_sysbar_back, BUTTON_BACK, mNavButtonContainer, mControllers.navButtonController, R.id.back); mPropertyHolders.add(new StatePropertyHolder(mBackButton, - flags -> (flags & FLAG_IME_VISIBLE) == 0)); + flags -> (flags & FLAG_IME_VISIBLE) == 0 && + (flags & FLAG_DISABLE_BACK) == 0)); // Hide when keyguard is showing, show when bouncer is showing mPropertyHolders.add(new StatePropertyHolder(mBackButton, flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0 || @@ -180,12 +187,14 @@ public class NavbarButtonsViewController { navButtonController, R.id.home); mPropertyHolders.add(new StatePropertyHolder(homeButton, flags -> (flags & FLAG_IME_VISIBLE) == 0 && - (flags & FLAG_KEYGUARD_VISIBLE) == 0)); + (flags & FLAG_KEYGUARD_VISIBLE) == 0 && + (flags & FLAG_DISABLE_HOME) == 0)); View recentsButton = addButton(R.drawable.ic_sysbar_recent, BUTTON_RECENTS, navContainer, navButtonController, R.id.recent_apps); mPropertyHolders.add(new StatePropertyHolder(recentsButton, flags -> (flags & FLAG_IME_VISIBLE) == 0 && - (flags & FLAG_KEYGUARD_VISIBLE) == 0)); + (flags & FLAG_KEYGUARD_VISIBLE) == 0 && + (flags & FLAG_DISABLE_RECENTS) == 0)); // A11y button mA11yButton = addButton(R.drawable.ic_sysbar_accessibility_button, BUTTON_A11Y, @@ -202,6 +211,12 @@ public class NavbarButtonsViewController { boolean a11yVisible = (systemUiStateFlags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0; boolean a11yLongClickable = (systemUiStateFlags & SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE) != 0; + boolean isHomeDisabled = + (systemUiStateFlags & SYSUI_STATE_HOME_DISABLED) != 0; + boolean isRecentsDisabled = + (systemUiStateFlags & SYSUI_STATE_OVERVIEW_DISABLED) != 0; + boolean isBackDisabled = + (systemUiStateFlags & SYSUI_STATE_BACK_DISABLED) != 0; if (!forceUpdate && systemUiStateFlags == mSysuiStateFlags) { return; @@ -211,6 +226,10 @@ public class NavbarButtonsViewController { updateStateForFlag(FLAG_IME_VISIBLE, isImeVisible); updateStateForFlag(FLAG_SWITCHER_SUPPORTED, isImeSwitcherShowing); updateStateForFlag(FLAG_A11Y_VISIBLE, a11yVisible); + updateStateForFlag(FLAG_DISABLE_HOME, isHomeDisabled); + updateStateForFlag(FLAG_DISABLE_RECENTS, isRecentsDisabled); + updateStateForFlag(FLAG_DISABLE_BACK, isBackDisabled); + if (mA11yButton != null) { // Only used in 3 button mA11yButton.setLongClickable(a11yLongClickable); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index dbe528f6af..12b9218195 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -234,7 +234,6 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ return; } mControllers.rotationButtonController.onDisable2FlagChanged(state2); - mControllers.taskbarKeyguardController.disableNavbarElements(state1, state2); } public void onSystemBarAttributesChanged(int displayId, int behavior) { diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarKeyguardController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarKeyguardController.java index a2039b6e2d..834cd9cbf3 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarKeyguardController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarKeyguardController.java @@ -1,7 +1,10 @@ package com.android.launcher3.taskbar; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BACK_DISABLED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DEVICE_DOZING; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING; import android.app.KeyguardManager; @@ -9,7 +12,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.view.View; /** * Controller for managing keyguard state for taskbar @@ -17,10 +19,11 @@ import android.view.View; public class TaskbarKeyguardController { private static final int KEYGUARD_SYSUI_FLAGS = SYSUI_STATE_BOUNCER_SHOWING | - SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING | SYSUI_STATE_DEVICE_DOZING; + SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING | SYSUI_STATE_DEVICE_DOZING | + SYSUI_STATE_OVERVIEW_DISABLED | SYSUI_STATE_HOME_DISABLED | + SYSUI_STATE_BACK_DISABLED; private final TaskbarActivityContext mContext; - private int mDisabledNavIcons; private int mKeyguardSysuiFlags; private boolean mBouncerShowing; private NavbarButtonsViewController mNavbarButtonsViewController; @@ -70,22 +73,13 @@ public class TaskbarKeyguardController { mIsScreenOff = false; } - public void disableNavbarElements(int state1, int state2) { - if (mDisabledNavIcons == state1) { - // no change - return; - } - mDisabledNavIcons = state1; - updateIconsForBouncer(); - } - /** * Hides/shows taskbar when keyguard is up */ private void updateIconsForBouncer() { - boolean disableBack = (mDisabledNavIcons & View.STATUS_BAR_DISABLE_BACK) != 0; - boolean disableRecent = (mDisabledNavIcons & View.STATUS_BAR_DISABLE_RECENT) != 0; - boolean disableHome = (mDisabledNavIcons & View.STATUS_BAR_DISABLE_HOME) != 0; + boolean disableBack = (mKeyguardSysuiFlags & SYSUI_STATE_BACK_DISABLED) != 0; + boolean disableRecent = (mKeyguardSysuiFlags & SYSUI_STATE_OVERVIEW_DISABLED) != 0; + boolean disableHome = (mKeyguardSysuiFlags & SYSUI_STATE_HOME_DISABLED) != 0; boolean onlyBackEnabled = !disableBack && disableRecent && disableHome; boolean showBackForBouncer = onlyBackEnabled &&