From 30c7663a122f68b0b82527c35504d8ef597cba41 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 7 Feb 2025 18:24:02 +0000 Subject: Move some providers to prevent accidental injection of main-thread elements - Each Choreographer instance is actually thread-local, and moving this to the SysUIConcurrencyModule also helps to ensure that WMShell components can't accidentally inject a non-ShellMainThread Choreographer instance - Also remove the deprecated non-qualified Handler global provider for the same reason Bug: 396003707 Test: m SystemUI TvSystemUI ClockworkSystemUI Flag: EXEMPT bugfix Change-Id: Idb733066d515e80773fb8cc08e9cc13ab1b4229e --- .../Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java | 2 +- .../systemui/accessibility/extradim/ExtraDimDialogManager.kt | 3 ++- .../floatingmenu/AccessibilityFloatingMenuController.java | 3 ++- .../systemui/biometrics/BiometricNotificationService.java | 2 +- .../android/systemui/communal/CommunalBackupRestoreStartable.kt | 3 ++- .../src/com/android/systemui/dagger/FrameworkServicesModule.java | 7 ------- .../src/com/android/systemui/doze/DozeScreenBrightness.java | 3 ++- .../src/com/android/systemui/screenshot/scroll/ImageTileSet.java | 3 ++- .../systemui/statusbar/phone/BiometricUnlockController.java | 3 ++- .../com/android/systemui/statusbar/phone/ScrimController.java | 2 +- .../statusbar/phone/StatusBarNotificationActivityStarter.java | 3 ++- .../statusbar/phone/UnlockedScreenOffAnimationController.kt | 3 ++- .../systemui/util/concurrency/GlobalConcurrencyModule.java | 9 --------- .../android/systemui/util/concurrency/SysUIConcurrencyModule.kt | 8 ++++++++ 14 files changed, 27 insertions(+), 27 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java index aebd94fc173a..34d840eed3f0 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java @@ -92,7 +92,7 @@ public class TvWMShellModule { MultiInstanceHelper multiInstanceHelper, SplitState splitState, @ShellMainThread ShellExecutor mainExecutor, - Handler mainHandler, + @ShellMainThread Handler mainHandler, SystemWindows systemWindows) { return new TvSplitScreenController(context, shellInit, shellCommandHandler, shellController, shellTaskOrganizer, syncQueue, rootTDAOrganizer, displayController, diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/extradim/ExtraDimDialogManager.kt b/packages/SystemUI/src/com/android/systemui/accessibility/extradim/ExtraDimDialogManager.kt index 3f717e282a61..f24c3be0004c 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/extradim/ExtraDimDialogManager.kt +++ b/packages/SystemUI/src/com/android/systemui/accessibility/extradim/ExtraDimDialogManager.kt @@ -20,6 +20,7 @@ import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogTransitionAnimator import com.android.systemui.animation.Expandable import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.plugins.ActivityStarter import com.android.systemui.statusbar.phone.SystemUIDialog import javax.inject.Inject @@ -33,7 +34,7 @@ constructor( private val extraDimDialogDelegateProvider: Provider, private val mActivityStarter: ActivityStarter, private val dialogTransitionAnimator: DialogTransitionAnimator, - private val mainHandler: Handler, + @Main private val mainHandler: Handler, ) { private var dialog: SystemUIDialog? = null diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java index 67aa4ff577b8..f8e4bda15d01 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java @@ -40,6 +40,7 @@ import com.android.systemui.accessibility.AccessibilityButtonModeObserver; import com.android.systemui.accessibility.AccessibilityButtonModeObserver.AccessibilityButtonMode; import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.navigationbar.NavigationModeController; import com.android.systemui.settings.DisplayTracker; import com.android.systemui.util.settings.SecureSettings; @@ -114,7 +115,7 @@ public class AccessibilityFloatingMenuController implements SecureSettings secureSettings, DisplayTracker displayTracker, NavigationModeController navigationModeController, - Handler handler) { + @Main Handler handler) { mContext = context; mWindowManager = windowManager; mViewCaptureAwareWindowManager = viewCaptureAwareWindowManager; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java index e5c22677dbcc..1ec7799a0b94 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java @@ -149,7 +149,7 @@ public class BiometricNotificationService implements CoreStartable { public BiometricNotificationService(@NonNull @Main Context context, @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor, @NonNull KeyguardStateController keyguardStateController, - @NonNull Handler handler, @NonNull NotificationManager notificationManager, + @NonNull @Main Handler handler, @NonNull NotificationManager notificationManager, @NonNull BiometricNotificationBroadcastReceiver biometricNotificationBroadcastReceiver, @NonNull Optional fingerprintReEnrollNotification, @Nullable FingerprintManager fingerprintManager, diff --git a/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt b/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt index 7abad1448318..18d461add52b 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt @@ -29,6 +29,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.communal.domain.interactor.CommunalInteractor import com.android.systemui.communal.widgets.CommunalWidgetModule import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.log.LogBuffer import com.android.systemui.log.core.Logger import com.android.systemui.log.dagger.CommunalLog @@ -43,7 +44,7 @@ constructor( private val communalInteractor: CommunalInteractor, @CommunalLog logBuffer: LogBuffer, private val secureSettings: SecureSettings, - handler: Handler, + @Main handler: Handler, ) : CoreStartable, BroadcastReceiver() { private val logger = Logger(logBuffer, TAG) diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java index 8e0beda9eff7..7354f4096801 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java @@ -212,13 +212,6 @@ public class FrameworkServicesModule { return new UserScopedServiceImpl<>(context, CaptioningManager.class); } - /** */ - @Provides - @Singleton - public Choreographer providesChoreographer() { - return Choreographer.getInstance(); - } - @Provides @Singleton static ColorDisplayManager provideColorDisplayManager(Context context) { diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java index abc810afca98..6b762bacb440 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java @@ -40,6 +40,7 @@ import android.util.IndentingPrintWriter; import android.view.Display; import com.android.internal.R; +import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.dagger.BrightnessSensor; import com.android.systemui.doze.dagger.DozeScope; import com.android.systemui.doze.dagger.WrappedService; @@ -118,7 +119,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi @WrappedService DozeMachine.Service service, AsyncSensorManager sensorManager, @BrightnessSensor Optional[] lightSensorOptional, - DozeHost host, Handler handler, + DozeHost host, @Main Handler handler, AlwaysOnDisplayPolicy alwaysOnDisplayPolicy, WakefulnessLifecycle wakefulnessLifecycle, DozeParameters dozeParameters, diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/scroll/ImageTileSet.java b/packages/SystemUI/src/com/android/systemui/screenshot/scroll/ImageTileSet.java index 76a72f7e4adf..25c38050e95a 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/scroll/ImageTileSet.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/scroll/ImageTileSet.java @@ -29,6 +29,7 @@ import androidx.annotation.UiThread; import com.android.internal.util.CallbackRegistry; import com.android.internal.util.CallbackRegistry.NotifierCallback; +import com.android.systemui.dagger.qualifiers.Main; import java.util.ArrayList; import java.util.Iterator; @@ -49,7 +50,7 @@ class ImageTileSet { private CallbackRegistry mContentListeners; @Inject - ImageTileSet(@UiThread Handler handler) { + ImageTileSet(@Main Handler handler) { mHandler = handler; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java index 04dedb629a15..9aa4c54c4292 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java @@ -275,7 +275,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp DozeScrimController dozeScrimController, KeyguardViewMediator keyguardViewMediator, NotificationShadeWindowController notificationShadeWindowController, - KeyguardStateController keyguardStateController, Handler handler, + KeyguardStateController keyguardStateController, + @Main Handler handler, KeyguardUpdateMonitor keyguardUpdateMonitor, @Main Resources resources, KeyguardBypassController keyguardBypassController, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index b2d337797b53..f89212b73d6f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -328,7 +328,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump DozeParameters dozeParameters, KeyguardStateController keyguardStateController, DelayedWakeLock.Factory delayedWakeLockFactory, - Handler handler, + @Main Handler handler, KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager, ConfigurationController configurationController, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java index ded964d8a1cc..6c8e1825ea0a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java @@ -57,6 +57,7 @@ import com.android.systemui.animation.ActivityTransitionAnimator; import com.android.systemui.assist.AssistManager; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; +import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.power.domain.interactor.PowerInteractor; import com.android.systemui.settings.UserTracker; @@ -155,7 +156,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit @Inject StatusBarNotificationActivityStarter( @ShadeDisplayAware Context context, - Handler mainThreadHandler, + @Main Handler mainThreadHandler, @Background Executor uiBgExecutor, NotificationVisibilityProvider visibilityProvider, HeadsUpManager headsUpManager, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt index 76f10b1c2a8b..0d43789e95a8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt @@ -20,6 +20,7 @@ import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF_SHOW_AOD import com.android.systemui.DejankUtils import com.android.systemui.Flags.lightRevealMigration import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.KeyguardViewMediator import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.shade.ShadeViewController @@ -71,7 +72,7 @@ constructor( private val powerManager: PowerManager, private val shadeLockscreenInteractorLazy: Lazy, private val panelExpansionInteractorLazy: Lazy, - private val handler: Handler = Handler(), + @Main private val handler: Handler, ) : WakefulnessLifecycle.Observer, ScreenOffAnimation { private lateinit var centralSurfaces: CentralSurfaces /** diff --git a/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java b/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java index 70774f13fe6b..c43e7637998c 100644 --- a/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java +++ b/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java @@ -64,15 +64,6 @@ public abstract class GlobalConcurrencyModule { return new Handler(mainLooper); } - /** - * @deprecated Use @Main Handler. - */ - @Deprecated - @Provides - public static Handler provideHandler() { - return new Handler(); - } - /** * Provide an Executor specifically for running UI operations on a separate thread. * diff --git a/packages/SystemUI/src/com/android/systemui/util/concurrency/SysUIConcurrencyModule.kt b/packages/SystemUI/src/com/android/systemui/util/concurrency/SysUIConcurrencyModule.kt index a7abb6b5f1d3..d4cc7d1441a5 100644 --- a/packages/SystemUI/src/com/android/systemui/util/concurrency/SysUIConcurrencyModule.kt +++ b/packages/SystemUI/src/com/android/systemui/util/concurrency/SysUIConcurrencyModule.kt @@ -53,6 +53,14 @@ object SysUIConcurrencyModule { private const val NOTIFICATION_INFLATION_SLOW_DISPATCH_THRESHOLD = 1000L private const val NOTIFICATION_INFLATION_SLOW_DELIVERY_THRESHOLD = 1000L + /** + * Choreographer instance for the main thread. + * TODO(b/395887935): Lets move this to @Main and provide thread-local references + */ + @Provides + @SysUISingleton + fun providesChoreographer(): Choreographer = Choreographer.getInstance() + /** Background Looper */ @Provides @SysUISingleton -- cgit v1.2.3-59-g8ed1b