Loading core/java/android/view/accessibility/flags/accessibility_flags.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java +35 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(), Loading Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarControllerImpl.java +12 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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, Loading @@ -170,7 +168,7 @@ public class LightBarControllerImpl implements public void stop() { mDumpManager.unregisterDumpable(mDumpableName); mBatteryController.removeCallback(this); mNavModeController.removeListener(mNavigationModeListener); mNavModeController.removeListener(this); } @Override Loading Loading @@ -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 Loading Loading
core/java/android/view/accessibility/flags/accessibility_flags.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java +35 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(), Loading Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarControllerImpl.java +12 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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, Loading @@ -170,7 +168,7 @@ public class LightBarControllerImpl implements public void stop() { mDumpManager.unregisterDumpable(mDumpableName); mBatteryController.removeCallback(this); mNavModeController.removeListener(mNavigationModeListener); mNavModeController.removeListener(this); } @Override Loading Loading @@ -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 Loading