Merge "Recreate taskbar when dark mode changes" into sc-v2-dev

This commit is contained in:
Tony Wickham
2021-10-29 17:13:57 +00:00
committed by Android (Google) Code Review
6 changed files with 28 additions and 17 deletions

View File

@@ -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);
}
}
/**

View File

@@ -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) {

View File

@@ -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();
}

View File

@@ -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 */);
}
}

View File

@@ -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() {

View File

@@ -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);
}
/**