diff options
| author | 2024-10-22 13:11:52 -0700 | |
|---|---|---|
| committer | 2024-10-23 12:20:26 -0700 | |
| commit | 2aabf4967a4f31a8c47d667f2fabe3d0c243d307 (patch) | |
| tree | 5f576604154e460cdf9ba0d65929b1c793564a05 | |
| parent | 01ccb45fe40cca005f87af261ebaa4a2584f851c (diff) | |
Use Assisted Injection for EdgeBackGestureHandler
Test: atest SystemUITests
Bug: 304583132
Flag: EXEMPT changing from @Inject to @AssistedInject
Change-Id: Ic21e4cec8817b196f495ce97dc864b940807f2e5
3 files changed, 32 insertions, 159 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarModule.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarModule.java index a8b979e05276..914e0f74e4a0 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarModule.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarModule.java @@ -28,7 +28,6 @@ import com.android.app.viewcapture.ViewCapture;  import com.android.app.viewcapture.ViewCaptureAwareWindowManager;  import com.android.systemui.dagger.qualifiers.DisplayId;  import com.android.systemui.navigationbar.NavigationBarComponent.NavigationBarScope; -import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;  import com.android.systemui.navigationbar.views.NavigationBarFrame;  import com.android.systemui.navigationbar.views.NavigationBarView;  import com.android.systemui.res.R; @@ -64,14 +63,6 @@ public interface NavigationBarModule {          return barView.findViewById(R.id.navigation_bar_view);      } -    /** */ -    @Provides -    @NavigationBarScope -    static EdgeBackGestureHandler provideEdgeBackGestureHandler( -            EdgeBackGestureHandler.Factory factory, @DisplayId Context context) { -        return factory.create(context); -    } -      /** A WindowManager specific to the display's context. */      @Provides      @NavigationBarScope diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt index 7e07e4d5097f..44c828731e24 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt @@ -41,11 +41,11 @@ import com.android.systemui.plugins.NavigationEdgeBackPlugin  import com.android.systemui.statusbar.VibratorHelper  import com.android.systemui.statusbar.policy.ConfigurationController  import com.android.systemui.util.ViewController -import com.android.systemui.util.concurrency.BackPanelUiThread -import com.android.systemui.util.concurrency.UiThreadContext  import com.android.systemui.util.time.SystemClock +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject  import java.io.PrintWriter -import javax.inject.Inject  import kotlin.math.abs  import kotlin.math.max  import kotlin.math.min @@ -82,11 +82,12 @@ private const val POP_ON_INACTIVE_VELOCITY = -1.5f  private const val DEBUG = false  class BackPanelController -internal constructor( -    context: Context, +@AssistedInject +constructor( +    @Assisted context: Context,      private val windowManager: ViewCaptureAwareWindowManager,      private val viewConfiguration: ViewConfiguration, -    private val mainHandler: Handler, +    @Assisted private val mainHandler: Handler,      private val systemClock: SystemClock,      private val vibratorHelper: VibratorHelper,      private val configurationController: ConfigurationController, @@ -94,40 +95,9 @@ internal constructor(      private val interactionJankMonitor: InteractionJankMonitor,  ) : ViewController<BackPanel>(BackPanel(context, latencyTracker)), NavigationEdgeBackPlugin { -    /** -     * Injectable instance to create a new BackPanelController. -     * -     * Necessary because EdgeBackGestureHandler sometimes needs to create new instances of -     * BackPanelController, and we need to match EdgeBackGestureHandler's context. -     */ -    class Factory -    @Inject -    constructor( -        private val windowManager: ViewCaptureAwareWindowManager, -        private val viewConfiguration: ViewConfiguration, -        @BackPanelUiThread private val uiThreadContext: UiThreadContext, -        private val systemClock: SystemClock, -        private val vibratorHelper: VibratorHelper, -        private val configurationController: ConfigurationController, -        private val latencyTracker: LatencyTracker, -        private val interactionJankMonitor: InteractionJankMonitor, -    ) { -        /** Construct a [BackPanelController]. */ -        fun create(context: Context): BackPanelController { -            uiThreadContext.isCurrentThread() -            return BackPanelController( -                    context, -                    windowManager, -                    viewConfiguration, -                    uiThreadContext.handler, -                    systemClock, -                    vibratorHelper, -                    configurationController, -                    latencyTracker, -                    interactionJankMonitor, -                ) -                .also { it.init() } -        } +    @AssistedFactory +    interface Factory { +        fun create(context: Context, handler: Handler): BackPanelController      }      @VisibleForTesting internal var params: EdgePanelParams = EdgePanelParams(resources) 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 b3463bdc2949..53177de89733 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -103,6 +103,10 @@ import com.android.wm.shell.back.BackAnimation;  import com.android.wm.shell.desktopmode.DesktopMode;  import com.android.wm.shell.pip.Pip; +import dagger.assisted.Assisted; +import dagger.assisted.AssistedFactory; +import dagger.assisted.AssistedInject; +  import kotlinx.coroutines.Job;  import java.io.PrintWriter; @@ -117,7 +121,6 @@ import java.util.concurrent.Executor;  import java.util.concurrent.atomic.AtomicBoolean;  import java.util.function.Consumer; -import javax.inject.Inject;  import javax.inject.Provider;  /** @@ -414,8 +417,21 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack          }      }; +    /** +     * Factory for EdgeBackGestureHandler. Necessary because per-display contexts can't be injected. +     * With this, you can pass in a specific context that knows what display it is in. +     */ +    @AssistedFactory +    public interface Factory { +        /** +         * Creates a new EdgeBackGestureHandler with the given context. +         */ +        EdgeBackGestureHandler create(Context context); +    } + +    @AssistedInject      EdgeBackGestureHandler( -            Context context, +            @Assisted Context context,              OverviewProxyService overviewProxyService,              SysUiState sysUiState,              PluginManager pluginManager, @@ -751,7 +767,10 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack      }      private void resetEdgeBackPlugin() { -        setEdgeBackPlugin(mBackPanelControllerFactory.create(mContext)); +        BackPanelController backPanelController = mBackPanelControllerFactory.create(mContext, +                mUiThreadContext.getHandler()); +        backPanelController.init(); +        setEdgeBackPlugin(backPanelController);      }      private void setEdgeBackPlugin(NavigationEdgeBackPlugin edgeBackPlugin) { @@ -1329,113 +1348,6 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack          }      } -    /** -     * Injectable instance to create a new EdgeBackGestureHandler. -     * -     * Necessary because we don't have good handling of per-display contexts at the moment. With -     * this, you can pass in a specific context that knows what display it is in. -     */ -    public static class Factory { -        private final OverviewProxyService mOverviewProxyService; -        private final SysUiState mSysUiState; -        private final PluginManager mPluginManager; -        private final UiThreadContext mUiThreadContext; -        private final Executor mBackgroundExecutor; -        private final Handler mBgHandler; -        private final UserTracker mUserTracker; -        private final NavigationModeController mNavigationModeController; -        private final BackPanelController.Factory mBackPanelControllerFactory; -        private final ViewConfiguration mViewConfiguration; -        private final WindowManager mWindowManager; -        private final IWindowManager mWindowManagerService; -        private final InputManager mInputManager; -        private final Optional<Pip> mPipOptional; -        private final Optional<DesktopMode> mDesktopModeOptional; -        private final FalsingManager mFalsingManager; -        private final Provider<BackGestureTfClassifierProvider> -                mBackGestureTfClassifierProviderProvider; -        private final Provider<LightBarController> mLightBarControllerProvider; -        private final NotificationShadeWindowController mNotificationShadeWindowController; - -        private final GestureInteractor mGestureInteractor; - -        private final JavaAdapter mJavaAdapter; - -        @Inject -        public Factory(OverviewProxyService overviewProxyService, -                        SysUiState sysUiState, -                        PluginManager pluginManager, -                        @BackPanelUiThread UiThreadContext uiThreadContext, -                        @Background Executor backgroundExecutor, -                        @Background Handler bgHandler, -                        UserTracker userTracker, -                        NavigationModeController navigationModeController, -                        BackPanelController.Factory backPanelControllerFactory, -                        ViewConfiguration viewConfiguration, -                        WindowManager windowManager, -                        IWindowManager windowManagerService, -                        InputManager inputManager, -                        Optional<Pip> pipOptional, -                        Optional<DesktopMode> desktopModeOptional, -                        FalsingManager falsingManager, -                        Provider<BackGestureTfClassifierProvider> -                                backGestureTfClassifierProviderProvider, -                        Provider<LightBarController> lightBarControllerProvider, -                        NotificationShadeWindowController notificationShadeWindowController, -                        GestureInteractor gestureInteractor, -                        JavaAdapter javaAdapter) { -            mOverviewProxyService = overviewProxyService; -            mSysUiState = sysUiState; -            mPluginManager = pluginManager; -            mUiThreadContext = uiThreadContext; -            mBackgroundExecutor = backgroundExecutor; -            mBgHandler = bgHandler; -            mUserTracker = userTracker; -            mNavigationModeController = navigationModeController; -            mBackPanelControllerFactory = backPanelControllerFactory; -            mViewConfiguration = viewConfiguration; -            mWindowManager = windowManager; -            mWindowManagerService = windowManagerService; -            mInputManager = inputManager; -            mPipOptional = pipOptional; -            mDesktopModeOptional = desktopModeOptional; -            mFalsingManager = falsingManager; -            mBackGestureTfClassifierProviderProvider = backGestureTfClassifierProviderProvider; -            mLightBarControllerProvider = lightBarControllerProvider; -            mNotificationShadeWindowController = notificationShadeWindowController; -            mGestureInteractor = gestureInteractor; -            mJavaAdapter = javaAdapter; -        } - -        /** Construct a {@link EdgeBackGestureHandler}. */ -        public EdgeBackGestureHandler create(Context context) { -            return mUiThreadContext.runWithScissors( -                    () -> new EdgeBackGestureHandler( -                            context, -                            mOverviewProxyService, -                            mSysUiState, -                            mPluginManager, -                            mUiThreadContext, -                            mBackgroundExecutor, -                            mBgHandler, -                            mUserTracker, -                            mNavigationModeController, -                            mBackPanelControllerFactory, -                            mViewConfiguration, -                            mWindowManager, -                            mWindowManagerService, -                            mInputManager, -                            mPipOptional, -                            mDesktopModeOptional, -                            mFalsingManager, -                            mBackGestureTfClassifierProviderProvider, -                            mLightBarControllerProvider, -                            mNotificationShadeWindowController, -                            mGestureInteractor, -                            mJavaAdapter)); -        } -    } -      private static class LogArray extends ArrayDeque<String> {          private final int mLength;  |