Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a5a9269 authored by Tony Wickham's avatar Tony Wickham
Browse files

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
parent 00841576
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -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);
        }
    }

    /**
+12 −6
Original line number Diff line number Diff line
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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();
        }
+2 −2
Original line number Diff line number Diff line
@@ -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 */);
        }
    }

+6 −3
Original line number Diff line number Diff line
@@ -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() {
Loading