From 9da14f77af10489818121eb8022ddfa543d86c43 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Wed, 20 Apr 2022 20:47:23 +0000 Subject: [PATCH 1/2] Revert "Revert "Remove Dep.get(CommandQueue.class) from NavBarView"" This reverts commit f18c6b3cf6695835684001abb3edb18d0d6adc81. Reason for revert: Trying to restore this change. Change-Id: I3080d50046edd490609332c79e65ad93a1540f29 --- .../systemui/navigationbar/NavigationBar.java | 21 ++++++------ .../NavigationBarTransitions.java | 32 ++++++++++--------- .../navigationbar/NavigationBarView.java | 12 +++---- .../navigationbar/TaskbarDelegate.java | 2 +- .../phone/LightBarTransitionsController.java | 3 +- .../navigationbar/NavigationBarTest.java | 4 +-- .../NavigationBarTransitionsTest.java | 15 ++++++--- 7 files changed, 50 insertions(+), 39 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java index 72488f3dc8239..740ecff6b06e5 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java @@ -197,6 +197,7 @@ public class NavigationBar extends ViewController implements private final Optional mPipOptional; private final Optional mRecentsOptional; private final DeviceConfigProxy mDeviceConfigProxy; + private final NavigationBarTransitions mNavigationBarTransitions; private final Optional mBackAnimation; private final Handler mHandler; private final NavigationBarOverlayController mNavbarOverlayController; @@ -513,6 +514,7 @@ public class NavigationBar extends ViewController implements InputMethodManager inputMethodManager, DeadZone deadZone, DeviceConfigProxy deviceConfigProxy, + NavigationBarTransitions navigationBarTransitions, Optional backAnimation) { super(navigationBarView); mFrame = navigationBarFrame; @@ -537,6 +539,7 @@ public class NavigationBar extends ViewController implements mRecentsOptional = recentsOptional; mDeadZone = deadZone; mDeviceConfigProxy = deviceConfigProxy; + mNavigationBarTransitions = navigationBarTransitions; mBackAnimation = backAnimation; mHandler = mainHandler; mNavbarOverlayController = navbarOverlayController; @@ -561,6 +564,7 @@ public class NavigationBar extends ViewController implements public void onInit() { // TODO: A great deal of this code should probably live in onViewAttached. // It should also has corresponding cleanup in onViewDetached. + mView.setBarTransitions(mNavigationBarTransitions); mView.setTouchHandler(mTouchHandler); mView.setNavBarMode(mNavBarMode); mView.updateRotationButton(); @@ -632,7 +636,7 @@ public class NavigationBar extends ViewController implements mView.setOnVerticalChangedListener(this::onVerticalChanged); mView.setOnTouchListener(this::onNavigationTouch); if (mSavedState != null) { - mView.getLightTransitionsController().restoreState(mSavedState); + getBarTransitions().getLightTransitionsController().restoreState(mSavedState); } setNavigationIconHints(mNavigationIconHints); mView.setWindowVisible(isNavBarWindowVisible()); @@ -705,8 +709,7 @@ public class NavigationBar extends ViewController implements mView.getRotationButtonController(); rotationButtonController.setRotationCallback(null); mView.setUpdateActiveTouchRegionsCallback(null); - mView.getBarTransitions().destroy(); - mView.getLightTransitionsController().destroy(mContext); + getBarTransitions().destroy(); mOverviewProxyService.removeCallback(mOverviewProxyListener); mBroadcastDispatcher.unregisterReceiver(mBroadcastReceiver); if (mOrientationHandle != null) { @@ -732,7 +735,7 @@ public class NavigationBar extends ViewController implements outState.putInt(EXTRA_APPEARANCE, mAppearance); outState.putInt(EXTRA_BEHAVIOR, mBehavior); outState.putBoolean(EXTRA_TRANSIENT_STATE, mTransientShown); - mView.getLightTransitionsController().saveState(outState); + getBarTransitions().getLightTransitionsController().saveState(outState); } /** @@ -893,7 +896,7 @@ public class NavigationBar extends ViewController implements pw.println(" mTransientShown=" + mTransientShown); pw.println(" mTransientShownFromGestureOnSystemBar=" + mTransientShownFromGestureOnSystemBar); - dumpBarTransitions(pw, "mNavigationBarView", mView.getBarTransitions()); + dumpBarTransitions(pw, "mNavigationBarView", getBarTransitions()); mView.dump(pw); } @@ -1430,7 +1433,7 @@ public class NavigationBar extends ViewController implements mLightBarController = lightBarController; if (mLightBarController != null) { mLightBarController.setNavigationBar( - mView.getLightTransitionsController()); + getBarTransitions().getLightTransitionsController()); } } @@ -1472,7 +1475,7 @@ public class NavigationBar extends ViewController implements mCentralSurfacesOptionalLazy.get().map(CentralSurfaces::isDeviceInteractive) .orElse(false) && mNavigationBarWindowState != WINDOW_STATE_HIDDEN; - mView.getBarTransitions().transitionTo(mTransitionMode, anim); + getBarTransitions().transitionTo(mTransitionMode, anim); } public void disableAnimationsDuringHide(long delay) { @@ -1492,11 +1495,11 @@ public class NavigationBar extends ViewController implements } public NavigationBarTransitions getBarTransitions() { - return mView.getBarTransitions(); + return mNavigationBarTransitions; } public void finishBarAnimations() { - mView.getBarTransitions().finishAnimations(); + getBarTransitions().finishAnimations(); } private WindowManager.LayoutParams getBarLayoutParams(int rotation) { diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java index 58e07db09c62a..11a4b3bd92748 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java @@ -29,19 +29,20 @@ import android.view.IWallpaperVisibilityListener; import android.view.IWindowManager; import android.view.View; -import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.navigationbar.NavigationBarComponent.NavigationBarScope; import com.android.systemui.navigationbar.buttons.ButtonDispatcher; -import com.android.systemui.plugins.statusbar.StatusBarStateController; -import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.BarTransitions; import com.android.systemui.statusbar.phone.LightBarTransitionsController; -import com.android.systemui.statusbar.policy.KeyguardStateController; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + +/** */ +@NavigationBarScope public final class NavigationBarTransitions extends BarTransitions implements LightBarTransitionsController.DarkIntensityApplier { @@ -60,6 +61,8 @@ public final class NavigationBarTransitions extends BarTransitions implements } private final NavigationBarView mView; + @org.jetbrains.annotations.NotNull + private final IWindowManager mWindowManagerService; private final LightBarTransitionsController mLightTransitionsController; private final boolean mAllowAutoDimWallpaperNotVisible; private boolean mWallpaperVisible; @@ -81,22 +84,21 @@ public final class NavigationBarTransitions extends BarTransitions implements } }; - public NavigationBarTransitions(NavigationBarView view, CommandQueue commandQueue) { + @Inject + public NavigationBarTransitions( + NavigationBarView view, + IWindowManager windowManagerService, + LightBarTransitionsController.Factory lightBarTransitionsControllerFactory) { super(view, R.drawable.nav_background); mView = view; - mLightTransitionsController = new LightBarTransitionsController( - view.getContext(), - this, - commandQueue, - Dependency.get(KeyguardStateController.class), - Dependency.get(StatusBarStateController.class)); + mWindowManagerService = windowManagerService; + mLightTransitionsController = lightBarTransitionsControllerFactory.create(this); mAllowAutoDimWallpaperNotVisible = view.getContext().getResources() .getBoolean(R.bool.config_navigation_bar_enable_auto_dim_no_visible_wallpaper); mDarkIntensityListeners = new ArrayList(); - IWindowManager windowManagerService = Dependency.get(IWindowManager.class); try { - mWallpaperVisible = windowManagerService.registerWallpaperVisibilityListener( + mWallpaperVisible = mWindowManagerService.registerWallpaperVisibilityListener( mWallpaperVisibilityListener, Display.DEFAULT_DISPLAY); } catch (RemoteException e) { } @@ -121,12 +123,12 @@ public final class NavigationBarTransitions extends BarTransitions implements @Override public void destroy() { - IWindowManager windowManagerService = Dependency.get(IWindowManager.class); try { - windowManagerService.unregisterWallpaperVisibilityListener(mWallpaperVisibilityListener, + mWindowManagerService.unregisterWallpaperVisibilityListener(mWallpaperVisibilityListener, Display.DEFAULT_DISPLAY); } catch (RemoteException e) { } + mLightTransitionsController.destroy(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index abff914693d40..8878c2decb877 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -85,7 +85,6 @@ import com.android.systemui.shared.rotation.RotationButtonController; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.shared.system.WindowManagerWrapper; -import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.AutoHideController; import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.LightBarTransitionsController; @@ -140,7 +139,7 @@ public class NavigationBarView extends FrameLayout { private EdgeBackGestureHandler mEdgeBackGestureHandler; private final DeadZone mDeadZone; private boolean mDeadZoneConsuming = false; - private final NavigationBarTransitions mBarTransitions; + private NavigationBarTransitions mBarTransitions; @Nullable private AutoHideController mAutoHideController; @@ -370,7 +369,6 @@ public class NavigationBarView extends FrameLayout { mConfiguration.updateFrom(context.getResources().getConfiguration()); mScreenPinningNotify = new ScreenPinningNotify(mContext); - mBarTransitions = new NavigationBarTransitions(this, Dependency.get(CommandQueue.class)); mButtonDispatchers.put(R.id.back, new ButtonDispatcher(R.id.back)); mButtonDispatchers.put(R.id.home, new ButtonDispatcher(R.id.home)); @@ -418,12 +416,12 @@ public class NavigationBarView extends FrameLayout { } } - public void setAutoHideController(AutoHideController autoHideController) { - mAutoHideController = autoHideController; + void setBarTransitions(NavigationBarTransitions navigationBarTransitions) { + mBarTransitions = navigationBarTransitions; } - public NavigationBarTransitions getBarTransitions() { - return mBarTransitions; + public void setAutoHideController(AutoHideController autoHideController) { + mAutoHideController = autoHideController; } public LightBarTransitionsController getLightTransitionsController() { diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java index cdc6b3b89f0c0..363baaa5ef701 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java @@ -264,7 +264,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, mWindowContext = null; } mAutoHideController.setNavigationBar(null); - mLightBarTransitionsController.destroy(mContext); + mLightBarTransitionsController.destroy(); mLightBarController.setNavigationBar(null); mPipOptional.ifPresent(this::removePipExclusionBoundsChangeListener); mInitialized = false; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java index b6ad9f704bcdf..16fddb420fc4c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java @@ -93,7 +93,8 @@ public class LightBarTransitionsController implements Dumpable, Callbacks, mDisplayId = mContext.getDisplayId(); } - public void destroy(Context context) { + /** Call to cleanup the LightBarTransitionsController when done with it. */ + public void destroy() { mCommandQueue.removeCallback(this); mStatusBarStateController.removeCallback(this); } 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 f5b006d732fdb..4a740f6c55710 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java @@ -205,10 +205,9 @@ public class NavigationBarTest extends SysuiTestCase { when(mNavigationBarView.getAccessibilityButton()).thenReturn(mAccessibilityButton); when(mNavigationBarView.getImeSwitchButton()).thenReturn(mImeSwitchButton); when(mNavigationBarView.getBackButton()).thenReturn(mBackButton); - when(mNavigationBarView.getBarTransitions()).thenReturn(mNavigationBarTransitions); when(mNavigationBarView.getRotationButtonController()) .thenReturn(mRotationButtonController); - when(mNavigationBarView.getLightTransitionsController()) + when(mNavigationBarTransitions.getLightTransitionsController()) .thenReturn(mLightBarTransitionsController); when(mStatusBarKeyguardViewManager.isNavBarVisible()).thenReturn(true); setupSysuiDependency(); @@ -459,6 +458,7 @@ public class NavigationBarTest extends SysuiTestCase { mInputMethodManager, mDeadZone, mDeviceConfigProxyFake, + mNavigationBarTransitions, Optional.of(mock(BackAnimation.class)))); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java index 6a2a78b40d2de..cafd2cf7cea00 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java @@ -21,7 +21,6 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -37,8 +36,8 @@ import com.android.systemui.assist.AssistManager; import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; -import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.BarTransitions; +import com.android.systemui.statusbar.phone.LightBarTransitionsController; import com.android.systemui.statusbar.policy.KeyguardStateController; import org.junit.Before; @@ -52,10 +51,17 @@ import org.mockito.MockitoAnnotations; @SmallTest public class NavigationBarTransitionsTest extends SysuiTestCase { + @Mock + LightBarTransitionsController.Factory mLightBarTransitionsFactory; + @Mock + LightBarTransitionsController mLightBarTransitions; @Mock EdgeBackGestureHandler.Factory mEdgeBackGestureHandlerFactory; @Mock EdgeBackGestureHandler mEdgeBackGestureHandler; + @Mock + IWindowManager mIWindowManager; + private NavigationBarTransitions mTransitions; @Before @@ -64,7 +70,6 @@ public class NavigationBarTransitionsTest extends SysuiTestCase { when(mEdgeBackGestureHandlerFactory.create(any(Context.class))) .thenReturn(mEdgeBackGestureHandler); - mDependency.injectMockDependency(IWindowManager.class); mDependency.injectMockDependency(AssistManager.class); mDependency.injectMockDependency(OverviewProxyService.class); mDependency.injectMockDependency(StatusBarStateController.class); @@ -76,10 +81,12 @@ public class NavigationBarTransitionsTest extends SysuiTestCase { .when(mDependency.injectMockDependency(NavigationModeController.class)) .getCurrentUserContext(); + when(mLightBarTransitionsFactory.create(any())).thenReturn(mLightBarTransitions); NavigationBarView navBar = spy(new NavigationBarView(mContext, null)); when(navBar.getCurrentView()).thenReturn(navBar); when(navBar.findViewById(anyInt())).thenReturn(navBar); - mTransitions = new NavigationBarTransitions(navBar, mock(CommandQueue.class)); + mTransitions = new NavigationBarTransitions( + navBar, mIWindowManager, mLightBarTransitionsFactory); } @Test From 24c2c8536642b726f171afb258ee96374ab9ab00 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Thu, 21 Apr 2022 20:46:39 +0000 Subject: [PATCH 2/2] Tell NavigationBarView when mode changes. We were telling the NavigationBarView what mode it was in when it first connected to the OverviewProxyService, but not alerting it to any updates to the mode thereafter. Fixes: 229413744 Test: manual Change-Id: Iddced03b38032a27790bcf3bbfb710813d6ef139 --- .../com/android/systemui/navigationbar/NavigationBar.java | 4 +++- .../android/systemui/navigationbar/NavigationBarView.java | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java index 740ecff6b06e5..357ff3834fcb2 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java @@ -330,7 +330,8 @@ public class NavigationBar extends ViewController implements @Override public void onConnectionChanged(boolean isConnected) { mView.onOverviewProxyConnectionChange( - mOverviewProxyService.isEnabled(), mOverviewProxyService.shouldShowSwipeUpUI()); + mOverviewProxyService.isEnabled()); + mView.setShouldShowSwipeUpUi(mOverviewProxyService.shouldShowSwipeUpUI()); updateScreenPinningGestures(); } @@ -1657,6 +1658,7 @@ public class NavigationBar extends ViewController implements } if (mView != null) { mView.setNavBarMode(mode); + mView.setShouldShowSwipeUpUi(mOverviewProxyService.shouldShowSwipeUpUI()); } } }; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index 8878c2decb877..f3a3f1018a9fe 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -886,8 +886,11 @@ public class NavigationBarView extends FrameLayout { } } - void onOverviewProxyConnectionChange(boolean enabled, boolean showSwipeUpUi) { + void onOverviewProxyConnectionChange(boolean enabled) { mOverviewProxyEnabled = enabled; + } + + void setShouldShowSwipeUpUi(boolean showSwipeUpUi) { mShowSwipeUpUi = showSwipeUpUi; updateStates(); }