diff options
9 files changed, 27 insertions, 45 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java index d49a513f6e9f..07f1ebd3f19e 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java @@ -35,6 +35,7 @@ import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARE import android.content.ContentResolver; import android.content.Context; +import android.content.res.Configuration; import android.database.ContentObserver; import android.inputmethodservice.InputMethodService; import android.net.Uri; @@ -73,6 +74,7 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode; import com.android.systemui.statusbar.phone.CentralSurfaces; +import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import dagger.Lazy; @@ -100,7 +102,7 @@ public final class NavBarHelper implements AccessibilityButtonModeObserver.ModeChangedListener, AccessibilityButtonTargetsObserver.TargetsChangedListener, OverviewProxyService.OverviewProxyListener, NavigationModeController.ModeChangedListener, - Dumpable, CommandQueue.Callbacks { + Dumpable, CommandQueue.Callbacks, ConfigurationController.ConfigurationListener { private static final String TAG = NavBarHelper.class.getSimpleName(); private final Handler mHandler = new Handler(Looper.getMainLooper()); @@ -188,6 +190,7 @@ public final class NavBarHelper implements UserTracker userTracker, DisplayTracker displayTracker, NotificationShadeWindowController notificationShadeWindowController, + ConfigurationController configurationController, DumpManager dumpManager, CommandQueue commandQueue, @Main Executor mainExecutor) { @@ -214,6 +217,7 @@ public final class NavBarHelper implements mNavBarMode = navigationModeController.addListener(this); mCommandQueue.addCallback(this); + configurationController.addCallback(this); overviewProxyService.addCallback(this); dumpManager.registerDumpable(this); } @@ -358,6 +362,11 @@ public final class NavBarHelper implements updateA11yState(); } + @Override + public void onConfigChanged(Configuration newConfig) { + mEdgeBackGestureHandler.onConfigurationChanged(newConfig); + } + /** * Updates the current accessibility button state. The accessibility button state is only * used for {@link Secure#ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR} and diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java index 179386132c95..13ba9c360aa3 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java @@ -874,11 +874,6 @@ public class NavigationBar extends ViewController<NavigationBarView> implements refreshLayout(ld); } repositionNavigationBar(rotation); - // NOTE(b/260220098): In some cases, the recreated nav bar will already have the right - // configuration, which means that NavBarView will not receive a configuration change to - // propagate to EdgeBackGestureHandler (which is injected into this and NBV). As such, we - // should also force-update the gesture handler to ensure it updates to the right bounds - mEdgeBackGestureHandler.onConfigurationChanged(newConfig); if (canShowSecondaryHandle()) { if (rotation != mCurrentRotation) { mCurrentRotation = rotation; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java index 152f193be3f9..42a25bd2e78a 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java @@ -160,14 +160,11 @@ public class NavigationBarControllerImpl implements mIsLargeScreen = isLargeScreen(mContext); boolean willApplyConfig = mConfigChanges.applyNewConfig(mContext.getResources()); boolean largeScreenChanged = mIsLargeScreen != isOldConfigLargeScreen; - // TODO(b/243765256): Disable this logging once b/243765256 is fixed. + // TODO(b/332635834): Disable this logging once b/332635834 is fixed. Log.i(DEBUG_MISSING_GESTURE_TAG, "NavbarController: newConfig=" + newConfig + " mTaskbarDelegate initialized=" + mTaskbarDelegate.isInitialized() + " willApplyConfigToNavbars=" + willApplyConfig + " navBarCount=" + mNavigationBars.size()); - if (mTaskbarDelegate.isInitialized()) { - mTaskbarDelegate.onConfigurationChanged(newConfig); - } // If we folded/unfolded while in 3 button, show navbar in folded state, hide in unfolded if (largeScreenChanged && updateNavbarForTaskbar()) { return; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index c5190a21f079..bc0a1da77b4e 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -1026,7 +1026,6 @@ public class NavigationBarView extends FrameLayout { updateIcons(mTmpLastConfiguration); updateRecentsIcon(); updateCurrentRotation(); - mEdgeBackGestureHandler.onConfigurationChanged(mConfiguration); if (uiCarModeChanged || mTmpLastConfiguration.densityDpi != mConfiguration.densityDpi || mTmpLastConfiguration.getLayoutDirection() != mConfiguration.getLayoutDirection()) { // If car mode or density changes, we need to reset the icons. diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java index 5dd1bd80140b..f67973bcd70e 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java @@ -39,7 +39,6 @@ import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode import android.app.StatusBarManager; import android.app.StatusBarManager.WindowVisibleState; import android.content.Context; -import android.content.res.Configuration; import android.graphics.Rect; import android.hardware.display.DisplayManager; import android.inputmethodservice.InputMethodService; @@ -72,7 +71,6 @@ import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.statusbar.AutoHideUiElement; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.AutoHideController; -import com.android.systemui.statusbar.phone.BarTransitions; import com.android.systemui.statusbar.phone.LightBarController; import com.android.systemui.statusbar.phone.LightBarTransitionsController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; @@ -250,8 +248,6 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, mLightBarController.setNavigationBar(mLightBarTransitionsController); mPipOptional.ifPresent(this::addPipExclusionBoundsChangeListener); mEdgeBackGestureHandler.setBackAnimation(mBackAnimation); - mEdgeBackGestureHandler.onConfigurationChanged( - mContext.getResources().getConfiguration()); mTaskStackChangeListeners.registerTaskStackListener(mTaskStackListener); mInitialized = true; } finally { @@ -495,10 +491,6 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, return mBehavior != BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE; } - public void onConfigurationChanged(Configuration configuration) { - mEdgeBackGestureHandler.onConfigurationChanged(configuration); - } - @Override public void setNavigationBarLumaSamplingEnabled(int displayId, boolean enable) { mOverviewProxyService.onNavigationBarLumaSamplingEnabled(displayId, enable); diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index 91c86dff34ea..d40949ff85eb 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -1180,7 +1180,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack updateDisabledForQuickstep(newConfig); } - // TODO(b/243765256): Disable this logging once b/243765256 is fixed. + // TODO(b/332635834): Disable this logging once b/332635834 is fixed. Log.i(DEBUG_MISSING_GESTURE_TAG, "Config changed: newConfig=" + newConfig + " lastReportedConfig=" + mLastReportedConfig); mLastReportedConfig.updateFrom(newConfig); diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java index e5ba569fd1d6..277119d6c298 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java @@ -35,6 +35,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.ComponentName; +import android.content.res.Configuration; import android.view.IWindowManager; import android.view.accessibility.AccessibilityManager; @@ -54,6 +55,8 @@ import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.phone.CentralSurfaces; +import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.FakeConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import org.junit.Before; @@ -116,6 +119,7 @@ public class NavBarHelperTest extends SysuiTestCase { EdgeBackGestureHandler.Factory mEdgeBackGestureHandlerFactory; @Mock NotificationShadeWindowController mNotificationShadeWindowController; + ConfigurationController mConfigurationController = new FakeConfigurationController(); private AccessibilityManager.AccessibilityServicesStateChangeListener mAccessibilityServicesStateChangeListener; @@ -143,9 +147,8 @@ public class NavBarHelperTest extends SysuiTestCase { mSystemActions, mOverviewProxyService, mAssistManagerLazy, () -> Optional.of(mock(CentralSurfaces.class)), mock(KeyguardStateController.class), mNavigationModeController, mEdgeBackGestureHandlerFactory, mWm, mUserTracker, - mDisplayTracker, mNotificationShadeWindowController, mDumpManager, mCommandQueue, - mSynchronousExecutor); - + mDisplayTracker, mNotificationShadeWindowController, mConfigurationController, + mDumpManager, mCommandQueue, mSynchronousExecutor); } @Test @@ -334,6 +337,12 @@ public class NavBarHelperTest extends SysuiTestCase { assertThat(state2.mWindowState).isNotEqualTo(newState); } + @Test + public void configUpdatePropagatesToEdgeBackGestureHandler() { + mConfigurationController.onConfigurationChanged(Configuration.EMPTY); + verify(mEdgeBackGestureHandler, times(1)).onConfigurationChanged(any()); + } + private List<String> createFakeShortcutTargets() { return new ArrayList<>(List.of("a", "b", "c", "d")); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java index 52859cdeb406..df75ea780679 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java @@ -37,11 +37,8 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import android.content.res.Configuration; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import android.util.SparseArray; @@ -292,23 +289,6 @@ public class NavigationBarControllerImplTest extends SysuiTestCase { } @Test - public void testConfigurationChange_taskbarNotInitialized() { - Configuration configuration = mContext.getResources().getConfiguration(); - mNavigationBarController.mIsLargeScreen = true; - mNavigationBarController.onConfigChanged(configuration); - verify(mTaskbarDelegate, never()).onConfigurationChanged(configuration); - } - - @Test - public void testConfigurationChange_taskbarInitialized() { - Configuration configuration = mContext.getResources().getConfiguration(); - mNavigationBarController.mIsLargeScreen = true; - when(mTaskbarDelegate.isInitialized()).thenReturn(true); - mNavigationBarController.onConfigChanged(configuration); - verify(mTaskbarDelegate, times(1)).onConfigurationChanged(configuration); - } - - @Test public void testShouldRenderTaskbar_taskbarNotRenderedOnPhone() { mNavigationBarController.mIsLargeScreen = false; mNavigationBarController.mIsPhone = true; diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java index 31746a2a46a3..23827461ac40 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java @@ -110,6 +110,7 @@ import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.LightBarController; import com.android.systemui.statusbar.phone.LightBarTransitionsController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; +import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.DeviceConfigProxyFake; @@ -274,8 +275,8 @@ public class NavigationBarTest extends SysuiTestCase { mKeyguardStateController, mock(NavigationModeController.class), mEdgeBackGestureHandlerFactory, mock(IWindowManager.class), mock(UserTracker.class), mock(DisplayTracker.class), - mNotificationShadeWindowController, mock(DumpManager.class), - mock(CommandQueue.class), mSynchronousExecutor)); + mNotificationShadeWindowController, mock(ConfigurationController.class), + mock(DumpManager.class), mock(CommandQueue.class), mSynchronousExecutor)); mNavigationBar = createNavBar(mContext); mExternalDisplayNavigationBar = createNavBar(mSysuiTestableContextExternal); }); |