From 5a5a926945ccd020ab9bc35da2e1d2956fb18bd6 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Thu, 28 Oct 2021 16:39:32 -0700 Subject: [PATCH] Recreate taskbar when dark mode changes Also dispatch sysui flags to all controllers upon recreate, not just NavbarButtonsViewController. Additionally, tell the controllers to skip the animation due to the flag changes if it's fromInit. Test: Enable themed icons, switch dark theme in quick settings, ensure taskbar updates Fixes: 204403933 Change-Id: Ic43a50cf0456175f9beba5c29360440f051cbd2d --- .../taskbar/NavbarButtonsViewController.java | 8 +++++--- .../taskbar/TaskbarActivityContext.java | 18 ++++++++++++------ .../launcher3/taskbar/TaskbarControllers.java | 2 +- .../launcher3/taskbar/TaskbarManager.java | 4 ++-- .../taskbar/TaskbarScrimViewController.java | 9 ++++++--- .../taskbar/TaskbarStashController.java | 4 ++-- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java index 69804bdd5f..113bd91f00 100644 --- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java @@ -121,10 +121,9 @@ public class NavbarButtonsViewController { /** * Initializes the controller */ - public void init(TaskbarControllers controllers, TaskbarSharedState sharedState) { + public void init(TaskbarControllers controllers) { mControllers = controllers; mNavButtonsView.getLayoutParams().height = mContext.getDeviceProfile().taskbarSize; - parseSystemUiFlags(sharedState.sysuiStateFlags); mNavButtonTranslationYMultiplier.value = 1; mA11yLongClickListener = view -> { @@ -290,12 +289,15 @@ public class NavbarButtonsViewController { } } - public void updateStateForSysuiFlags(int systemUiStateFlags) { + public void updateStateForSysuiFlags(int systemUiStateFlags, boolean skipAnim) { if (systemUiStateFlags == mSysuiStateFlags) { return; } parseSystemUiFlags(systemUiStateFlags); applyState(); + if (skipAnim) { + mPropertyHolders.forEach(StatePropertyHolder::endAnimation); + } } /** diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 172b396bcc..db3156bfb9 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -191,6 +191,7 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ // Initialize controllers after all are constructed. mControllers.init(sharedState); + updateSysuiStateFlags(sharedState.sysuiStateFlags, true /* fromInit */); mWindowManager.addView(mDragLayer, mWindowLayoutParams); } @@ -325,26 +326,28 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ mWindowManager.removeViewImmediate(mDragLayer); } - public void updateSysuiStateFlags(int systemUiStateFlags) { - mControllers.navbarButtonsViewController.updateStateForSysuiFlags(systemUiStateFlags); + public void updateSysuiStateFlags(int systemUiStateFlags, boolean fromInit) { + mControllers.navbarButtonsViewController.updateStateForSysuiFlags(systemUiStateFlags, + fromInit); mControllers.taskbarViewController.setImeIsVisible( mControllers.navbarButtonsViewController.isImeVisible()); int shadeExpandedFlags = SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED | SYSUI_STATE_QUICK_SETTINGS_EXPANDED; - onNotificationShadeExpandChanged((systemUiStateFlags & shadeExpandedFlags) != 0); + onNotificationShadeExpandChanged((systemUiStateFlags & shadeExpandedFlags) != 0, fromInit); mControllers.taskbarViewController.setRecentsButtonDisabled( mControllers.navbarButtonsViewController.isRecentsDisabled()); mControllers.stashedHandleViewController.setIsHomeButtonDisabled( mControllers.navbarButtonsViewController.isHomeDisabled()); mControllers.taskbarKeyguardController.updateStateForSysuiFlags(systemUiStateFlags); - mControllers.taskbarStashController.updateStateForSysuiFlags(systemUiStateFlags); - mControllers.taskbarScrimViewController.updateStateForSysuiFlags(systemUiStateFlags); + mControllers.taskbarStashController.updateStateForSysuiFlags(systemUiStateFlags, fromInit); + mControllers.taskbarScrimViewController.updateStateForSysuiFlags(systemUiStateFlags, + fromInit); } /** * Hides the taskbar icons and background when the notication shade is expanded. */ - private void onNotificationShadeExpandChanged(boolean isExpanded) { + private void onNotificationShadeExpandChanged(boolean isExpanded, boolean skipAnim) { float alpha = isExpanded ? 0 : 1; AnimatorSet anim = new AnimatorSet(); anim.play(mControllers.taskbarViewController.getTaskbarIconAlpha().getProperty( @@ -354,6 +357,9 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ .animateToValue(alpha)); } anim.start(); + if (skipAnim) { + anim.end(); + } } public void onRotationProposal(int rotation, boolean isValid) { diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java index 7b0053e0a9..d739eeac26 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java @@ -79,7 +79,7 @@ public class TaskbarControllers { */ public void init(TaskbarSharedState sharedState) { taskbarDragController.init(this); - navbarButtonsViewController.init(this, sharedState); + navbarButtonsViewController.init(this); if (taskbarActivityContext.isThreeButtonNav()) { rotationButtonController.init(); } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java index 92cee04f37..5986e22fab 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java @@ -101,7 +101,7 @@ public class TaskbarManager implements DisplayController.DisplayInfoChangeListen public void onConfigurationChanged(Configuration newConfig) { int configDiff = mOldConfig.diff(newConfig); int configsRequiringRecreate = ActivityInfo.CONFIG_ASSETS_PATHS - | ActivityInfo.CONFIG_LAYOUT_DIRECTION; + | ActivityInfo.CONFIG_LAYOUT_DIRECTION | ActivityInfo.CONFIG_UI_MODE; if ((configDiff & configsRequiringRecreate) != 0) { // Color has changed, recreate taskbar to reload background color & icons. recreateTaskbar(); @@ -231,7 +231,7 @@ public class TaskbarManager implements DisplayController.DisplayInfoChangeListen public void onSystemUiFlagsChanged(int systemUiStateFlags) { mSharedState.sysuiStateFlags = systemUiStateFlags; if (mTaskbarActivityContext != null) { - mTaskbarActivityContext.updateSysuiStateFlags(systemUiStateFlags); + mTaskbarActivityContext.updateSysuiStateFlags(systemUiStateFlags, false /* fromInit */); } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarScrimViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarScrimViewController.java index e7e55efe63..4b4ee4423c 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarScrimViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarScrimViewController.java @@ -62,7 +62,7 @@ public class TaskbarScrimViewController { /** * Updates the scrim state based on the flags. */ - public void updateStateForSysuiFlags(int stateFlags) { + public void updateStateForSysuiFlags(int stateFlags, boolean skipAnim) { final boolean bubblesExpanded = (stateFlags & SYSUI_STATE_BUBBLES_EXPANDED) != 0; final boolean manageMenuExpanded = (stateFlags & SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED) != 0; @@ -73,15 +73,18 @@ public class TaskbarScrimViewController { // what the total transparency would be. ? (SCRIM_ALPHA + (SCRIM_ALPHA * (1 - SCRIM_ALPHA))) : showScrim ? SCRIM_ALPHA : 0; - showScrim(showScrim, scrimAlpha); + showScrim(showScrim, scrimAlpha, skipAnim); } - private void showScrim(boolean showScrim, float alpha) { + private void showScrim(boolean showScrim, float alpha, boolean skipAnim) { mScrimView.setOnClickListener(showScrim ? (view) -> onClick() : null); mScrimView.setClickable(showScrim); ObjectAnimator anim = mScrimAlpha.animateToValue(showScrim ? alpha : 0); anim.setInterpolator(showScrim ? SCRIM_ALPHA_IN : SCRIM_ALPHA_OUT); anim.start(); + if (skipAnim) { + anim.end(); + } } private void updateScrimAlpha() { diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java index 0dd4ef19b3..d11eb36feb 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java @@ -408,10 +408,10 @@ public class TaskbarStashController { } /** Called when some system ui state has changed. (See SYSUI_STATE_... in QuickstepContract) */ - public void updateStateForSysuiFlags(int systemUiStateFlags) { + public void updateStateForSysuiFlags(int systemUiStateFlags, boolean skipAnim) { updateStateForFlag(FLAG_STASHED_IN_APP_PINNED, hasAnyFlag(systemUiStateFlags, SYSUI_STATE_SCREEN_PINNING)); - applyState(); + applyState(skipAnim ? 0 : TASKBAR_STASH_DURATION); } /**