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

Commit d6fad196 authored by Riley Jones's avatar Riley Jones Committed by Android (Google) Code Review
Browse files

Merge "LightBarController updates button tint on navigation mode change" into main

parents 24c65c78 04b5ac1b
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -212,6 +212,16 @@ flag {
    is_exported: true
}

flag {
    name: "light_bar_update_button_tint_on_nav_mode_change"
    namespace: "accessibility"
    description: "adds logic to update navbar button tint when navigation mode changes"
    bug: "387395420"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "motion_event_observing"
    is_exported: true
+35 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.phone;

import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;

import static com.android.systemui.shared.statusbar.phone.BarTransitions.MODE_TRANSPARENT;

@@ -35,6 +36,8 @@ import static org.mockito.Mockito.when;

import android.graphics.Color;
import android.graphics.Rect;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.testing.TestableLooper;

import androidx.annotation.ColorInt;
@@ -78,7 +81,7 @@ public class LightBarControllerTest extends SysuiTestCase {
    private LightBarTransitionsController mLightBarTransitionsController;
    private LightBarTransitionsController mNavBarController;
    private SysuiDarkIconDispatcher mStatusBarIconController;
    private LightBarController mLightBarController;
    private LightBarControllerImpl mLightBarController;
    private final TestScope mTestScope = TestScopeProvider.getTestScope();
    private final FakeStatusBarModePerDisplayRepository mStatusBarModeRepository =
            new FakeStatusBarModePerDisplayRepository();
@@ -91,12 +94,14 @@ public class LightBarControllerTest extends SysuiTestCase {
        mLightBarTransitionsController = mock(LightBarTransitionsController.class);
        when(mStatusBarIconController.getTransitionsController()).thenReturn(
                mLightBarTransitionsController);
        NavigationModeController navigationModeController = mock(NavigationModeController.class);

        mLightBarController = new LightBarControllerImpl(
                mContext.getDisplayId(),
                mTestScope,
                mStatusBarIconController,
                mock(BatteryController.class),
                mock(NavigationModeController.class),
                navigationModeController,
                mStatusBarModeRepository,
                mock(DumpManager.class),
                mTestScope.getCoroutineContext(),
@@ -430,8 +435,36 @@ public class LightBarControllerTest extends SysuiTestCase {
        verifyNavBarIconsDark(false, /* didFireEvent= */ false);
    }

    @Test
    @EnableFlags(
            android.view.accessibility.Flags.FLAG_LIGHT_BAR_UPDATE_BUTTON_TINT_ON_NAV_MODE_CHANGE)
    public void navModeChanges_3buttonNavigation_setsDark() {
        mLightBarController.setNavigationBar(mNavBarController);
        clearInvocations(mNavBarController);

        mLightBarController.onNavigationModeChanged(NAV_BAR_MODE_3BUTTON);
        verifyNavBarIconsWereChanged();
    }

    @Test
    @DisableFlags(
            android.view.accessibility.Flags.FLAG_LIGHT_BAR_UPDATE_BUTTON_TINT_ON_NAV_MODE_CHANGE)
    public void navModeChanges_3buttonNavigation_doesNotSetDark() {
        mLightBarController.setNavigationBar(mNavBarController);
        clearInvocations(mNavBarController);

        mLightBarController.onNavigationModeChanged(NAV_BAR_MODE_3BUTTON);
        verifyNavBarIconsUnchanged();
    }

    private void verifyNavBarIconsWereChanged() {
        verify(mNavBarController).setIconsDark(anyBoolean(), anyBoolean());
        clearInvocations(mNavBarController);
    }

    private void verifyNavBarIconsUnchanged() {
        verify(mNavBarController, never()).setIconsDark(anyBoolean(), anyBoolean());
        clearInvocations(mNavBarController);
    }

    private void verifyNavBarIconsDarkSetTo(boolean iconsDark) {
+12 −6
Original line number Diff line number Diff line
@@ -60,7 +60,8 @@ import java.util.ArrayList;
 * Controls how light status bar flag applies to the icons.
 */
public class LightBarControllerImpl implements
        BatteryController.BatteryStateChangeCallback, LightBarController {
        BatteryController.BatteryStateChangeCallback, LightBarController,
        NavigationModeController.ModeChangedListener {

    private static final String TAG = "LightBarController";
    private static final boolean DEBUG_NAVBAR = Compile.IS_DEBUG;
@@ -127,9 +128,6 @@ public class LightBarControllerImpl implements

    private final String mDumpableName;

    private final NavigationModeController.ModeChangedListener mNavigationModeListener =
            (mode) -> mNavigationMode = mode;

    @AssistedInject
    public LightBarControllerImpl(
            @Assisted int displayId,
@@ -158,7 +156,7 @@ public class LightBarControllerImpl implements
    public void start() {
        mDumpManager.registerCriticalDumpable(mDumpableName, this);
        mBatteryController.addCallback(this);
        mNavigationMode = mNavModeController.addListener(mNavigationModeListener);
        mNavigationMode = mNavModeController.addListener(this);
        JavaAdapterKt.collectFlow(
                mCoroutineScope,
                mMainContext,
@@ -170,7 +168,7 @@ public class LightBarControllerImpl implements
    public void stop() {
        mDumpManager.unregisterDumpable(mDumpableName);
        mBatteryController.removeCallback(this);
        mNavModeController.removeListener(mNavigationModeListener);
        mNavModeController.removeListener(this);
    }

    @Override
@@ -480,6 +478,14 @@ public class LightBarControllerImpl implements
        }
    }

    @Override
    public void onNavigationModeChanged(int mode) {
        mNavigationMode = mode;
        if (android.view.accessibility.Flags.lightBarUpdateButtonTintOnNavModeChange()) {
            updateNavigation();
        }
    }

    /** Injectable factory for creating a {@link LightBarControllerImpl}. */
    @AssistedFactory
    @FunctionalInterface