From 58de065b64c9c45cef7486fb5f54195b15a881ba Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Thu, 15 Jul 2021 17:16:45 -0400 Subject: [PATCH] Use Provider for EdgeBackGestureHandler Ensures that EdgeBackGestureHandler is not a singleton. Fixes: 193758967 Test: atest SystemUITests Change-Id: I13f0130b57cf19d2ec8c3c4285a6785aba076486 --- .../src/com/android/systemui/Dependency.java | 17 +++++++++++++++-- .../navigationbar/NavigationBarView.java | 3 ++- .../gestural/EdgeBackGestureHandler.java | 2 -- .../navigationbar/NavigationBarButtonTest.java | 6 +++++- .../navigationbar/NavigationBarTest.java | 4 +++- .../NavigationBarTransitionsTest.java | 5 ++++- .../buttons/NavigationBarContextTest.java | 5 +++++ .../buttons/NearestTouchFrameTest.java | 6 ++++++ 8 files changed, 40 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java index 4b550fe7c6ca5..a52a86b0120b8 100644 --- a/packages/SystemUI/src/com/android/systemui/Dependency.java +++ b/packages/SystemUI/src/com/android/systemui/Dependency.java @@ -141,6 +141,7 @@ import java.util.function.Consumer; import javax.inject.Inject; import javax.inject.Named; +import javax.inject.Provider; import dagger.Lazy; @@ -199,6 +200,12 @@ public class Dependency { */ public static final String ALLOW_NOTIFICATION_LONG_PRESS_NAME = "allow_notif_longpress"; + /** + * A provider of {@link EdgeBackGestureHandler}. + */ + public static final String EDGE_BACK_GESTURE_HANDLER_PROVIDER_NAME = + "edge_back_gesture_handler_provider"; + /** * Key for getting a background Looper for background work. */ @@ -234,6 +241,12 @@ public class Dependency { */ public static final DependencyKey LEAK_REPORT_EMAIL = new DependencyKey<>(LEAK_REPORT_EMAIL_NAME); + /** + * Key for retrieving an Provider. + */ + public static final DependencyKey> + EDGE_BACK_GESTURE_HANDLER_PROVIDER = + new DependencyKey<>(EDGE_BACK_GESTURE_HANDLER_PROVIDER_NAME); private final ArrayMap mDependencies = new ArrayMap<>(); private final ArrayMap mProviders = new ArrayMap<>(); @@ -360,7 +373,7 @@ public class Dependency { @Inject Lazy mTelephonyListenerManager; @Inject Lazy mSystemStatusAnimationSchedulerLazy; @Inject Lazy mPrivacyDotViewControllerLazy; - @Inject Lazy mEdgeBackGestureHandler; + @Inject Provider mEdgeBackGestureHandlerProvider; @Inject Lazy mUiEventLogger; @Inject Lazy mInternetDialogFactory; @Inject Lazy mFeatureFlagsLazy; @@ -576,8 +589,8 @@ public class Dependency { mProviders.put(SystemStatusAnimationScheduler.class, mSystemStatusAnimationSchedulerLazy::get); mProviders.put(PrivacyDotViewController.class, mPrivacyDotViewControllerLazy::get); - mProviders.put(EdgeBackGestureHandler.class, mEdgeBackGestureHandler::get); mProviders.put(InternetDialogFactory.class, mInternetDialogFactory::get); + mProviders.put(EDGE_BACK_GESTURE_HANDLER_PROVIDER, () -> mEdgeBackGestureHandlerProvider); mProviders.put(UiEventLogger.class, mUiEventLogger::get); mProviders.put(FeatureFlags.class, mFeatureFlagsLazy::get); diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index 23c066a75732a..0d91f7b3597a7 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -18,6 +18,7 @@ package com.android.systemui.navigationbar; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL; +import static com.android.systemui.Dependency.EDGE_BACK_GESTURE_HANDLER_PROVIDER; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; @@ -352,7 +353,7 @@ public class NavigationBarView extends FrameLayout implements mNavColorSampleMargin = getResources() .getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin); - mEdgeBackGestureHandler = Dependency.get(EdgeBackGestureHandler.class); + mEdgeBackGestureHandler = Dependency.get(EDGE_BACK_GESTURE_HANDLER_PROVIDER).get(); mEdgeBackGestureHandler.setStateChangeCallback(this::updateStates); mRegionSamplingHelper = new RegionSamplingHelper(this, new RegionSamplingHelper.SamplingCallback() { 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 ff5d0b157c80d..48d2bb91da05c 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -58,7 +58,6 @@ import com.android.internal.policy.GestureNavigationSettingsObserver; import com.android.systemui.R; import com.android.systemui.SystemUIFactory; import com.android.systemui.broadcast.BroadcastDispatcher; -import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.model.SysUiState; import com.android.systemui.navigationbar.NavigationBarView; @@ -92,7 +91,6 @@ import javax.inject.Inject; /** * Utility class to handle edge swipes for back gesture */ -@SysUISingleton public class EdgeBackGestureHandler extends CurrentUserTracker implements PluginListener, ProtoTraceable { diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarButtonTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarButtonTest.java index 0eeb955e6b42e..d25b3e3279f47 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarButtonTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarButtonTest.java @@ -16,8 +16,11 @@ package com.android.systemui.navigationbar; +import static com.android.systemui.Dependency.EDGE_BACK_GESTURE_HANDLER_PROVIDER; + import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; import android.graphics.PixelFormat; import android.hardware.display.DisplayManager; @@ -68,7 +71,8 @@ public class NavigationBarButtonTest extends SysuiTestCase { mDependency.injectMockDependency(OverviewProxyService.class); mDependency.injectMockDependency(KeyguardStateController.class); mDependency.injectMockDependency(NavigationBarController.class); - mDependency.injectMockDependency(EdgeBackGestureHandler.class); + mDependency.injectTestDependency(EDGE_BACK_GESTURE_HANDLER_PROVIDER, + () -> mock(EdgeBackGestureHandler.class)); mNavBar = new NavigationBarView(context, null); } 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 c606a430e325a..744f487d18306 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java @@ -24,6 +24,7 @@ import static android.view.Display.DEFAULT_DISPLAY; import static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.HOME_BUTTON_LONG_PRESS_DURATION_MS; +import static com.android.systemui.Dependency.EDGE_BACK_GESTURE_HANDLER_PROVIDER; import static com.android.systemui.navigationbar.NavigationBar.NavBarActionEvent.NAVBAR_ASSIST_LONGPRESS; import static org.junit.Assert.assertEquals; @@ -135,7 +136,8 @@ public class NavigationBarTest extends SysuiTestCase { mDependency.injectMockDependency(StatusBarStateController.class); mDependency.injectMockDependency(NavigationBarController.class); mOverviewProxyService = mDependency.injectMockDependency(OverviewProxyService.class); - mDependency.injectMockDependency(EdgeBackGestureHandler.class); + mDependency.injectTestDependency(EDGE_BACK_GESTURE_HANDLER_PROVIDER, + () -> mock(EdgeBackGestureHandler.class)); TestableLooper.get(this).runWithLooper(() -> { mNavigationBar = createNavBar(mContext); mExternalDisplayNavigationBar = createNavBar(mSysuiTestableContextExternal); 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 e4d32f4db7095..62871dc6101e0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java @@ -16,6 +16,8 @@ package com.android.systemui.navigationbar; +import static com.android.systemui.Dependency.EDGE_BACK_GESTURE_HANDLER_PROVIDER; + import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.anyInt; @@ -58,7 +60,8 @@ public class NavigationBarTransitionsTest extends SysuiTestCase { mDependency.injectMockDependency(StatusBarStateController.class); mDependency.injectMockDependency(KeyguardStateController.class); mDependency.injectMockDependency(NavigationBarController.class); - mDependency.injectMockDependency(EdgeBackGestureHandler.class); + mDependency.injectTestDependency(EDGE_BACK_GESTURE_HANDLER_PROVIDER, + () -> mock(EdgeBackGestureHandler.class)); doReturn(mContext) .when(mDependency.injectMockDependency(NavigationModeController.class)) .getCurrentUserContext(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/NavigationBarContextTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/NavigationBarContextTest.java index d56aa777706be..671b1bea849f8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/NavigationBarContextTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/NavigationBarContextTest.java @@ -16,6 +16,8 @@ package com.android.systemui.navigationbar.buttons; +import static com.android.systemui.Dependency.EDGE_BACK_GESTURE_HANDLER_PROVIDER; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; @@ -38,6 +40,7 @@ import com.android.systemui.assist.AssistManager; import com.android.systemui.navigationbar.buttons.ContextualButton; import com.android.systemui.navigationbar.buttons.ContextualButtonGroup; import com.android.systemui.navigationbar.buttons.KeyButtonDrawable; +import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler; import org.junit.Before; import org.junit.Ignore; @@ -65,6 +68,8 @@ public class NavigationBarContextTest extends SysuiTestCase { @Before public void setup() { mDependency.injectMockDependency(AssistManager.class); + mDependency.injectTestDependency(EDGE_BACK_GESTURE_HANDLER_PROVIDER, + () -> mock(EdgeBackGestureHandler.class)); mGroup = new ContextualButtonGroup(GROUP_ID); mBtn0 = new ContextualButton(BUTTON_0_ID, mContext, ICON_RES_ID); diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/NearestTouchFrameTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/NearestTouchFrameTest.java index c8f223bdd72f2..2ab2c941e9df2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/NearestTouchFrameTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/NearestTouchFrameTest.java @@ -16,10 +16,13 @@ package com.android.systemui.navigationbar.buttons; +import static com.android.systemui.Dependency.EDGE_BACK_GESTURE_HANDLER_PROVIDER; + import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -36,6 +39,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.navigationbar.buttons.NearestTouchFrame; +import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler; import org.junit.Before; import org.junit.Test; @@ -52,6 +56,8 @@ public class NearestTouchFrameTest extends SysuiTestCase { @Before public void setup() { + mDependency.injectTestDependency(EDGE_BACK_GESTURE_HANDLER_PROVIDER, + () -> mock(EdgeBackGestureHandler.class)); Configuration c = new Configuration(mContext.getResources().getConfiguration()); c.smallestScreenWidthDp = 500; mNearestTouchFrame = new NearestTouchFrame(mContext, null, c);