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

Commit e74569e9 authored by Tony Wickham's avatar Tony Wickham
Browse files

Fix taskbar stash state not persisting properly across recreate

Because we check supportsVisualStashing() in
TaskbarStashController#init(), we need to avoid using
TaskbarUIController to provide that value since TaskbarUIController
isn't initialized until a bit later than the other controllers. So I
moved the logic from supportsVisualStashing() back to
TaskbarStashController, but still allow TaskbarUIController to override
it (e.g. for DesktopTaskbarUIController).

After that fix, I noticed that force stopping launcher (to test the fix)
would briefly show the taskbar background before resetting the stashed
state. This is also due to LauncherTaskbarUIController not being ready
immediately, since that's what sets FLAG_IN_APP due to launcher being
paused. To work around this, I set FLAG_IN_APP to true by default in
TaskbarStashController#init(), since that is the most common case, and
taskbar background/stashed handle isn't shown on home anyway.

Test: Force stop launcher while taskbar is stashed, verify it recreates
as stashed without background flicker; same when changing wallpaper
color on home or in app; also tested when taskbar isn't stashed and in 3
button mode for good measure
Test: testHideTaskbarPersistsOnRecreate
Fixes: 235986838

Change-Id: Ie55bd70e8288d5ad7433dde970f18c176831d747
parent c8e824db
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -43,8 +43,8 @@ public class DesktopTaskbarUIController extends TaskbarUIController {
        mLauncher.getHotseat().setIconsAlpha(1f);
    }

    @Override
    /** Disable taskbar stashing in desktop environment. */
    @Override
    public boolean supportsVisualStashing() {
        return false;
    }
+9 −4
Original line number Diff line number Diff line
@@ -210,7 +210,10 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
                StashedHandleViewController.ALPHA_INDEX_STASHED);
        mTaskbarStashedHandleHintScale = stashedHandleController.getStashedHandleHintScale();

        boolean isManuallyStashedInApp = supportsManualStashing()
        // We use supportsVisualStashing() here instead of supportsManualStashing() because we want
        // it to work properly for tests that recreate taskbar. This check is here just to ensure
        // that taskbar unstashes when going to 3 button mode (supportsVisualStashing() false).
        boolean isManuallyStashedInApp = supportsVisualStashing()
                && mPrefs.getBoolean(SHARED_PREFS_STASHED_KEY, DEFAULT_STASHED_PREF);
        boolean isInSetup = !mActivity.isUserSetupComplete() || setupUIVisible;
        updateStateForFlag(FLAG_STASHED_IN_APP_MANUAL, isManuallyStashedInApp);
@@ -218,7 +221,10 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
        updateStateForFlag(FLAG_IN_SETUP, isInSetup);
        updateStateForFlag(FLAG_STASHED_SMALL_SCREEN, isPhoneMode()
                && !mActivity.isThreeButtonNav());
        applyState();
        // For now, assume we're in an app, since LauncherTaskbarUIController won't be able to tell
        // us that we're paused until a bit later. This avoids flickering upon recreating taskbar.
        updateStateForFlag(FLAG_IN_APP, true);
        applyState(/* duration = */ 0);

        notifyStashChange(/* visible */ false, /* stashed */ isStashedInApp());
    }
@@ -228,8 +234,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
     * state.
     */
    public boolean supportsVisualStashing() {
        return mControllers.uiController.supportsVisualStashing() ||
                (isPhoneMode() && !mActivity.isThreeButtonNav());
        return !mActivity.isThreeButtonNav() && mControllers.uiController.supportsVisualStashing();
    }

    /**
+6 −2
Original line number Diff line number Diff line
@@ -49,9 +49,13 @@ public class TaskbarUIController {
        return true;
    }

    /**
     * This should only be called by TaskbarStashController so that a TaskbarUIController can
     * disable stashing. All other controllers should use
     * {@link TaskbarStashController#supportsVisualStashing()} as the source of truth.
     */
    public boolean supportsVisualStashing() {
        if (mControllers == null) return false;
        return !mControllers.taskbarActivityContext.isThreeButtonNav();
        return true;
    }

    protected void onStashedInAppChanged() { }
+7 −0
Original line number Diff line number Diff line
@@ -67,6 +67,13 @@ public class TaplTestsTaskbar extends AbstractQuickStepTest {
        mLauncher.getLaunchedAppState().showTaskbar();
    }

    @Test
    public void testHideTaskbarPersistsOnRecreate() {
        getTaskbar().hide();
        mLauncher.recreateTaskbar();
        mLauncher.getLaunchedAppState().assertTaskbarHidden();
    }

    @Test
    public void testLaunchApp() throws Exception {
        getTaskbar().getAppIcon(TEST_APP_NAME).launch(TEST_APP_PACKAGE);