summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fabian Kozynski <kozynski@google.com> 2019-10-16 19:56:11 +0000
committer Fabian Kozynski <kozynski@google.com> 2019-11-04 10:53:26 -0500
commit5ca7a51c11f4b2f41ca95861fb04863de8db0332 (patch)
tree2caba9142358b7d043867988c1938d121f443a63
parent3e900e92c5548044f81468f8d28af8c0f6f78741 (diff)
Finish migrating to BroadcastDispatcher
This CL migrates most of the remaining classes to use BroadcastDispatcher. Some classes left are Views or created before the BroadcastDispatcher can be injected. Adds docs for instructions on using the BroadcastDispatcher. Using the broadcast dispatcher, the time system_server spends dispatching common intents to SystemUI like SCREEN_OFF and SCREEN_ON can be seen to decrease from ~70-150ms (in a Q build) to ~2-4ms. Additionally, once a broadcast is received by the dispatcher, time until it is fully dispatched inside SystemUI is not impacted greatly. Most broadcasts are fully dispatched after ~20ms with a few of them taking ~100ms. Test: atest SystemUITests no regressions Test: build and boot Test: tried some random broadcasts and they are properly dispatched Test: BroadcastDispatch dump Test: adb shell dumpsys activity broadcasts Bug: 134566046 Change-Id: I26a592be66b053f25669b5481b58bf7f07bfd0da
-rw-r--r--packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java13
-rw-r--r--packages/SystemUI/docs/broadcasts.md89
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java10
-rw-r--r--packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/BatteryMeterView.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/LatencyTester.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/ScreenDecorations.java19
-rw-r--r--packages/SystemUI/src/com/android/systemui/SliceBroadcastRelayHandler.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistManager.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java29
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/PipUI.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/tv/PipNotification.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt12
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSPanel.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java18
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/settings/CurrentUserObservable.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/settings/CurrentUserTracker.java19
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ManagedProfileControllerImpl.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java28
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java24
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java14
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java20
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt18
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java41
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java3
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java6
81 files changed, 689 insertions, 252 deletions
diff --git a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java
index b2859f6e719e..3acbc3a00d57 100644
--- a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java
+++ b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java
@@ -92,6 +92,7 @@ import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.tv.TvStatusBar;
+import com.android.systemui.theme.ThemeOverlayController;
import com.android.systemui.util.InjectionInflationController;
import com.android.systemui.util.leak.GarbageMonitor;
import com.android.systemui.volume.VolumeUI;
@@ -182,6 +183,18 @@ public abstract class CarSystemUIBinder {
public abstract SystemUI bindsSizeCompatModeActivityController(
SizeCompatModeActivityController sysui);
+ /** Inject into SliceBroadcastRelayHandler. */
+ @Binds
+ @IntoMap
+ @ClassKey(SliceBroadcastRelayHandler.class)
+ public abstract SystemUI bindSliceBroadcastRelayHandler(SliceBroadcastRelayHandler sysui);
+
+ /** Inject into ThemeOverlayController. */
+ @Binds
+ @IntoMap
+ @ClassKey(ThemeOverlayController.class)
+ public abstract SystemUI bindThemeOverlayController(ThemeOverlayController sysui);
+
/** Inject into StatusBar. */
@Binds
@IntoMap
diff --git a/packages/SystemUI/docs/broadcasts.md b/packages/SystemUI/docs/broadcasts.md
new file mode 100644
index 000000000000..56a637fe588c
--- /dev/null
+++ b/packages/SystemUI/docs/broadcasts.md
@@ -0,0 +1,89 @@
+# Using SystemUI's BroadcastDispatcher
+
+## What is this dispatcher?
+
+This is an internal dispatcher class for global broadcasts that SystemUI components want to receive. The dispatcher consolidates most `BroadcastReceiver` that exist in SystemUI by merging the `IntentFilter` and subscribing a single `BroadcastReceiver` per user with the system.
+
+## Why use the dispatcher?
+
+Having a single `BroadcastReceiver` in SystemUI improves the multi dispatch situation that occurs whenever many classes are filtering for the same intent action. In particular:
+* All supported `BroadcastReceiver` will be aggregated into one single receiver per user.
+* Whenever there is a broadcast, the number of IPC calls from `system_server` into SystemUI will be reduced to one per user (plus one for `USER_ALL`). This is meaninful for actions that are filtered by `BroadcastReceiver` in multiple classes.
+*There could be more than one per user in the case of unsupported filters.*
+* The dispatcher immediately moves out of the main thread upon broadcast, giving back control to `system_server`. This improves the total dispatch time for broadcasts and prevents from timing out.
+* The dispatcher significantly reduces time spent in main thread by handling most operations in a background thread and only using the main thread for subscribing/unsubscribind and dispatching where appropriate.
+
+## Should I use the dispatcher?
+
+The dispatcher supports `BroadcastReceiver` dynamic subscriptions in the following cases:
+
+* The `IntentFilter` contains at least one action.
+* The `IntentFilter` may or may not contain categories.
+* The `IntentFilter` **does not** contain data types, data schemes, data authorities or data paths.
+* The broadcast **is not** gated behind a permission.
+
+Additionally, the dispatcher supports the following:
+
+* Subscriptions can be done in any thread.
+* Broadcasts will be dispatched on the main thread (same as `system_server`) by default but a `Handler` can be specified for dispatching
+* A `UserHandle` can be provided to filter the broadcasts by user.
+
+If introducing a new `BroadcastReceiver` (not declared in `AndroidManifest`) that satisfies the constraints above, use the dispatcher to reduce the load on `system_server`.
+
+Do not use the dispatcher to obtain the last broadcast (by passing a null `BroadcastReceiver`). `BroadcastDispatcher#registerReceiver` **does not** return the last sticky Intent.
+
+Additionally, if listening to some broadcast is latency critical (beyond 100ms of latency), consider registering with Context instead.
+
+## How do I use the dispatcher?
+
+Acquire the dispatcher by using `@Inject` to obtain a `BroadcastDispatcher`. Then, use the following methods in that instance.
+
+### Subscribe
+
+```kotlin
+/**
+ * Register a receiver for broadcast with the dispatcher
+ *
+ * @param receiver A receiver to dispatch the [Intent]
+ * @param filter A filter to determine what broadcasts should be dispatched to this receiver.
+ * It will only take into account actions and categories for filtering. It must
+ * have at least one action.
+ * @param handler A handler to dispatch [BroadcastReceiver.onReceive]. By default, it is the
+ * main handler. Pass `null` to use the default.
+ * @param user A user handle to determine which broadcast should be dispatched to this receiver.
+ * By default, it is the current user.
+ * @throws IllegalArgumentException if the filter has other constraints that are not actions or
+ * categories or the filter has no actions.
+ */
+@JvmOverloads
+fun registerReceiver(BroadcastReceiver, IntentFilter, Handler? = mainHandler, UserHandle = context.user)
+```
+
+All subscriptions are done with the same overloaded method. As specified in the doc, in order to pass a `UserHandle` with the default `Handler`, pass `null` for the `Handler`.
+
+In the same way as with `Context`, subscribing the same `BroadcastReceiver` for the same user using different filters will result on two subscriptions, not in replacing the filter.
+
+### Unsubscribe
+
+There are two methods to unsubscribe a given `BroadcastReceiver`. One that will remove it for all users and another where the user can be specified. This allows using separate subscriptions of the same receiver for different users and manipulating them separately.
+
+```kotlin
+/**
+ * Unregister receiver for all users.
+ * <br>
+ * This will remove every registration of [receiver], not those done just with [UserHandle.ALL].
+ *
+ * @param receiver The receiver to unregister. It will be unregistered for all users.
+ */
+fun unregisterReceiver(BroadcastReceiver)
+
+/**
+ * Unregister receiver for a particular user.
+ *
+ * @param receiver The receiver to unregister. It will be unregistered for all users.
+ * @param user The user associated to the registered [receiver]. It can be [UserHandle.ALL].
+ */
+fun unregisterReceiverForUser(BroadcastReceiver, UserHandle)
+```
+
+Unregistering can be done even if the `BroadcastReceiver` has never been registered with `BroadcastDispatcher`. In that case, it is a No-Op.
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 8373fb24ee4f..6685db130d4a 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -102,6 +102,7 @@ import com.android.systemui.DejankUtils;
import com.android.systemui.DumpController;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.MainLooper;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.TaskStackChangeListener;
@@ -1502,6 +1503,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
@VisibleForTesting
@Inject
protected KeyguardUpdateMonitor(Context context, @MainLooper Looper mainLooper,
+ BroadcastDispatcher broadcastDispatcher,
DumpController dumpController) {
mContext = context;
mSubscriptionManager = SubscriptionManager.from(context);
@@ -1645,12 +1647,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
- context.registerReceiver(mBroadcastReceiver, filter, null, mHandler);
+ broadcastDispatcher.registerReceiver(mBroadcastReceiver, filter, mHandler);
final IntentFilter bootCompleteFilter = new IntentFilter();
bootCompleteFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
bootCompleteFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
- context.registerReceiver(mBroadcastReceiver, bootCompleteFilter, null, mHandler);
+ broadcastDispatcher.registerReceiver(mBroadcastReceiver, bootCompleteFilter, mHandler);
final IntentFilter allUserFilter = new IntentFilter();
allUserFilter.addAction(Intent.ACTION_USER_INFO_CHANGED);
@@ -1661,8 +1663,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
allUserFilter.addAction(ACTION_USER_UNLOCKED);
allUserFilter.addAction(ACTION_USER_STOPPED);
allUserFilter.addAction(ACTION_USER_REMOVED);
- context.registerReceiverAsUser(mBroadcastAllReceiver, UserHandle.ALL, allUserFilter,
- null, mHandler);
+ broadcastDispatcher.registerReceiver(mBroadcastAllReceiver, allUserFilter, mHandler,
+ UserHandle.ALL);
mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener);
try {
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
index 9e2464ea4fbb..dfabe696cf71 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
@@ -32,6 +32,7 @@ import android.view.LayoutInflater;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Observer;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManager.DockEventListener;
@@ -125,9 +126,9 @@ public final class ClockManager {
@Inject
public ClockManager(Context context, InjectionInflationController injectionInflater,
PluginManager pluginManager, SysuiColorExtractor colorExtractor,
- @Nullable DockManager dockManager) {
+ @Nullable DockManager dockManager, BroadcastDispatcher broadcastDispatcher) {
this(context, injectionInflater, pluginManager, colorExtractor,
- context.getContentResolver(), new CurrentUserObservable(context),
+ context.getContentResolver(), new CurrentUserObservable(broadcastDispatcher),
new SettingsWrapper(context.getContentResolver()), dockManager);
}
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
index fef9198d670a..2afcb12da730 100644
--- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
+++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
@@ -51,6 +51,7 @@ import androidx.annotation.StyleRes;
import com.android.settingslib.Utils;
import com.android.settingslib.graph.ThemedBatteryDrawable;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.settings.CurrentUserTracker;
@@ -112,16 +113,13 @@ public class BatteryMeterView extends LinearLayout implements
private int mNonAdaptedForegroundColor;
private int mNonAdaptedBackgroundColor;
- public BatteryMeterView(Context context) {
- this(context, null, 0);
- }
-
public BatteryMeterView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public BatteryMeterView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+ BroadcastDispatcher broadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
setOrientation(LinearLayout.HORIZONTAL);
setGravity(Gravity.CENTER_VERTICAL | Gravity.START);
@@ -161,7 +159,7 @@ public class BatteryMeterView extends LinearLayout implements
// Init to not dark at all.
onDarkChanged(new Rect(), 0, DarkIconDispatcher.DEFAULT_ICON_TINT);
- mUserTracker = new CurrentUserTracker(mContext) {
+ mUserTracker = new CurrentUserTracker(broadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
mUser = newUserId;
diff --git a/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java b/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java
index 3a8536b8127e..4afa96987499 100644
--- a/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java
+++ b/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java
@@ -32,6 +32,7 @@ import android.provider.Settings;
import android.util.Log;
import android.view.WindowManagerGlobal;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.phone.SystemUIDialog;
/**
@@ -45,10 +46,14 @@ public class GuestResumeSessionReceiver extends BroadcastReceiver {
private Dialog mNewSessionDialog;
- public void register(Context context) {
+ /**
+ * Register this receiver with the {@link BroadcastDispatcher}
+ *
+ * @param broadcastDispatcher to register the receiver.
+ */
+ public void register(BroadcastDispatcher broadcastDispatcher) {
IntentFilter f = new IntentFilter(Intent.ACTION_USER_SWITCHED);
- context.registerReceiverAsUser(this, UserHandle.SYSTEM,
- f, null /* permission */, null /* scheduler */);
+ broadcastDispatcher.registerReceiver(this, f, null /* handler */, UserHandle.SYSTEM);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/LatencyTester.java b/packages/SystemUI/src/com/android/systemui/LatencyTester.java
index 30a60abfcd86..1a47daceafcc 100644
--- a/packages/SystemUI/src/com/android/systemui/LatencyTester.java
+++ b/packages/SystemUI/src/com/android/systemui/LatencyTester.java
@@ -29,6 +29,7 @@ import android.os.SystemClock;
import com.android.internal.util.LatencyTracker;
import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import javax.inject.Inject;
@@ -49,13 +50,16 @@ public class LatencyTester extends SystemUI {
"com.android.systemui.latency.ACTION_TURN_ON_SCREEN";
private final BiometricUnlockController mBiometricUnlockController;
private final PowerManager mPowerManager;
+ private final BroadcastDispatcher mBroadcastDispatcher;
@Inject
public LatencyTester(Context context, BiometricUnlockController biometricUnlockController,
- PowerManager powerManager) {
+ PowerManager powerManager, BroadcastDispatcher broadcastDispatcher) {
super(context);
+
mBiometricUnlockController = biometricUnlockController;
mPowerManager = powerManager;
+ mBroadcastDispatcher = broadcastDispatcher;
}
@Override
@@ -67,7 +71,7 @@ public class LatencyTester extends SystemUI {
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_FINGERPRINT_WAKE);
filter.addAction(ACTION_TURN_ON_SCREEN);
- mContext.registerReceiver(new BroadcastReceiver() {
+ mBroadcastDispatcher.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
index 8a99e451934e..ab7eec52a959 100644
--- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
+++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
@@ -67,6 +67,8 @@ import androidx.annotation.VisibleForTesting;
import com.android.internal.util.Preconditions;
import com.android.systemui.RegionInterceptingFrameLayout.RegionInterceptableView;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.dagger.qualifiers.MainHandler;
import com.android.systemui.fragments.FragmentHostManager;
import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
import com.android.systemui.plugins.qs.QS;
@@ -103,6 +105,9 @@ public class ScreenDecorations extends SystemUI implements Tunable {
private final Lazy<StatusBar> mStatusBarLazy;
private DisplayManager mDisplayManager;
+ private final BroadcastDispatcher mBroadcastDispatcher;
+ private final Handler mMainHandler;
+ private final TunerService mTunerService;
private DisplayManager.DisplayListener mDisplayListener;
@VisibleForTesting
@@ -140,9 +145,16 @@ public class ScreenDecorations extends SystemUI implements Tunable {
}
@Inject
- public ScreenDecorations(Context context, Lazy<StatusBar> statusBarLazy) {
+ public ScreenDecorations(Context context,
+ Lazy<StatusBar> statusBarLazy,
+ @MainHandler Handler handler,
+ BroadcastDispatcher broadcastDispatcher,
+ TunerService tunerService) {
super(context);
mStatusBarLazy = statusBarLazy;
+ mMainHandler = handler;
+ mBroadcastDispatcher = broadcastDispatcher;
+ mTunerService = tunerService;
}
@Override
@@ -239,8 +251,7 @@ public class ScreenDecorations extends SystemUI implements Tunable {
mWindowManager.getDefaultDisplay().getMetrics(metrics);
mDensity = metrics.density;
- Dependency.get(Dependency.MAIN_HANDLER).post(
- () -> Dependency.get(TunerService.class).addTunable(this, SIZE));
+ mMainHandler.post(() -> mTunerService.addTunable(this, SIZE));
// Watch color inversion and invert the overlay as needed.
mColorInversionSetting = new SecureSetting(mContext, mHandler,
@@ -255,7 +266,7 @@ public class ScreenDecorations extends SystemUI implements Tunable {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_SWITCHED);
- mContext.registerReceiver(mIntentReceiver, filter, null /* permission */, mHandler);
+ mBroadcastDispatcher.registerReceiver(mIntentReceiver, filter, mHandler);
mOverlay.addOnLayoutChangeListener(new OnLayoutChangeListener() {
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/SliceBroadcastRelayHandler.java b/packages/SystemUI/src/com/android/systemui/SliceBroadcastRelayHandler.java
index 92fbd259b471..7a4ef2b7bbf2 100644
--- a/packages/SystemUI/src/com/android/systemui/SliceBroadcastRelayHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/SliceBroadcastRelayHandler.java
@@ -28,19 +28,27 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.SliceBroadcastRelay;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
/**
* Allows settings to register certain broadcasts to launch the settings app for pinned slices.
* @see SliceBroadcastRelay
*/
+@Singleton
public class SliceBroadcastRelayHandler extends SystemUI {
private static final String TAG = "SliceBroadcastRelay";
private static final boolean DEBUG = false;
private final ArrayMap<Uri, BroadcastRelay> mRelays = new ArrayMap<>();
+ private final BroadcastDispatcher mBroadcastDispatcher;
- public SliceBroadcastRelayHandler(Context context) {
+ @Inject
+ public SliceBroadcastRelayHandler(Context context, BroadcastDispatcher broadcastDispatcher) {
super(context);
+ mBroadcastDispatcher = broadcastDispatcher;
}
@Override
@@ -48,9 +56,10 @@ public class SliceBroadcastRelayHandler extends SystemUI {
if (DEBUG) Log.d(TAG, "Start");
IntentFilter filter = new IntentFilter(SliceBroadcastRelay.ACTION_REGISTER);
filter.addAction(SliceBroadcastRelay.ACTION_UNREGISTER);
- mContext.registerReceiver(mReceiver, filter);
+ mBroadcastDispatcher.registerReceiver(mReceiver, filter);
}
+ // This does not use BroadcastDispatcher as the filter may have schemas or mime types.
@VisibleForTesting
void handleIntent(Intent intent) {
if (SliceBroadcastRelay.ACTION_REGISTER.equals(intent.getAction())) {
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java
index 3ff1b97c3753..9a277e8fa77c 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java
@@ -34,6 +34,7 @@ import androidx.slice.Clock;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -161,6 +162,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController {
private final Lazy<SysUiState> mSysUiFlagContainer;
private final Lazy<WakefulnessLifecycle> mWakefulnessLifecycle;
private final Lazy<PackageManagerWrapper> mPackageManagerWrapper;
+ private final Lazy<BroadcastDispatcher> mBroadcastDispatcher;
private boolean mOnLockscreen;
private boolean mIsDozing;
@@ -193,7 +195,8 @@ final class AssistHandleReminderExpBehavior implements BehaviorController {
Lazy<OverviewProxyService> overviewProxyService,
Lazy<SysUiState> sysUiFlagContainer,
Lazy<WakefulnessLifecycle> wakefulnessLifecycle,
- Lazy<PackageManagerWrapper> packageManagerWrapper) {
+ Lazy<PackageManagerWrapper> packageManagerWrapper,
+ Lazy<BroadcastDispatcher> broadcastDispatcher) {
mClock = clock;
mHandler = handler;
mPhenotypeHelper = phenotypeHelper;
@@ -207,6 +210,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController {
for (String action : DEFAULT_HOME_CHANGE_ACTIONS) {
mDefaultHomeIntentFilter.addAction(action);
}
+ mBroadcastDispatcher = broadcastDispatcher;
}
@Override
@@ -215,7 +219,8 @@ final class AssistHandleReminderExpBehavior implements BehaviorController {
mAssistHandleCallbacks = callbacks;
mConsecutiveTaskSwitches = 0;
mDefaultHome = getCurrentDefaultHome();
- context.registerReceiver(mDefaultHomeBroadcastReceiver, mDefaultHomeIntentFilter);
+ mBroadcastDispatcher.get()
+ .registerReceiver(mDefaultHomeBroadcastReceiver, mDefaultHomeIntentFilter);
mOnLockscreen = onLockscreen(mStatusBarStateController.get().getState());
mIsDozing = mStatusBarStateController.get().isDozing();
mStatusBarStateController.get().addCallback(mStatusBarStateListener);
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
index b7a6167df6bc..398826c552bd 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
@@ -45,6 +45,7 @@ import com.android.systemui.ConfigurationChangedReceiver;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.assist.ui.DefaultUiController;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -161,14 +162,15 @@ public class AssistManager implements ConfigurationChangedReceiver {
Context context,
AssistUtils assistUtils,
AssistHandleBehaviorController handleController,
- CommandQueue commandQueue) {
+ CommandQueue commandQueue,
+ BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mDeviceProvisionedController = controller;
mCommandQueue = commandQueue;
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
mAssistUtils = assistUtils;
mAssistDisclosure = new AssistDisclosure(context, new Handler());
- mPhoneStateMonitor = new PhoneStateMonitor(context);
+ mPhoneStateMonitor = new PhoneStateMonitor(context, broadcastDispatcher);
mHandleController = handleController;
registerVoiceInteractionSessionListener();
diff --git a/packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java b/packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java
index e73dc4a57bd7..95d611a605d2 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java
@@ -29,6 +29,7 @@ import androidx.annotation.Nullable;
import com.android.systemui.Dependency;
import com.android.systemui.SysUiServiceProvider;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.PackageManagerWrapper;
@@ -67,7 +68,7 @@ final class PhoneStateMonitor {
private boolean mLauncherShowing;
@Nullable private ComponentName mDefaultHome;
- PhoneStateMonitor(Context context) {
+ PhoneStateMonitor(Context context, BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mStatusBarStateController = Dependency.get(StatusBarStateController.class);
@@ -77,7 +78,7 @@ final class PhoneStateMonitor {
for (String action : DEFAULT_HOME_CHANGE_ACTIONS) {
intentFilter.addAction(action);
}
- mContext.registerReceiver(new BroadcastReceiver() {
+ broadcastDispatcher.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
mDefaultHome = getCurrentDefaultHome();
diff --git a/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt b/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt
index ddda95ad8fda..24357a740331 100644
--- a/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt
+++ b/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt
@@ -31,6 +31,7 @@ import com.android.systemui.Dumpable
import java.io.FileDescriptor
import java.io.PrintWriter
import java.util.concurrent.atomic.AtomicBoolean
+import java.util.concurrent.atomic.AtomicInteger
private const val MSG_REGISTER_RECEIVER = 0
private const val MSG_UNREGISTER_RECEIVER = 1
@@ -50,6 +51,13 @@ class UserBroadcastDispatcher(
private val bgLooper: Looper
) : BroadcastReceiver(), Dumpable {
+ companion object {
+ // Used only for debugging. If not debugging, this variable will not be accessed and all
+ // received broadcasts will be tagged with 0. However, as DEBUG is false, nothing will be
+ // logged
+ val index = AtomicInteger(0)
+ }
+
private val bgHandler = object : Handler(bgLooper) {
override fun handleMessage(msg: Message) {
when (msg.what) {
@@ -97,7 +105,10 @@ class UserBroadcastDispatcher(
private val receiverToReceiverData = ArrayMap<BroadcastReceiver, MutableSet<ReceiverData>>()
override fun onReceive(context: Context, intent: Intent) {
- bgHandler.post(HandleBroadcastRunnable(actionsToReceivers, context, intent, pendingResult))
+ val id = if (DEBUG) index.getAndIncrement() else 0
+ if (DEBUG) Log.w(TAG, "[$id] Received $intent")
+ bgHandler.post(
+ HandleBroadcastRunnable(actionsToReceivers, context, intent, pendingResult, id))
}
/**
@@ -161,17 +172,19 @@ class UserBroadcastDispatcher(
val actionsToReceivers: Map<String, Set<ReceiverData>>,
val context: Context,
val intent: Intent,
- val pendingResult: PendingResult
+ val pendingResult: PendingResult,
+ val index: Int
) : Runnable {
override fun run() {
- if (DEBUG) Log.w(TAG, "Dispatching $intent")
+ if (DEBUG) Log.w(TAG, "[$index] Dispatching $intent")
actionsToReceivers.get(intent.action)
?.filter {
it.filter.hasAction(intent.action) &&
it.filter.matchCategories(intent.categories) == null }
?.forEach {
it.handler.post {
- if (DEBUG) Log.w(TAG, "Dispatching to ${it.receiver}")
+ if (DEBUG) Log.w(TAG,
+ "[$index] Dispatching ${intent.action} to ${it.receiver}")
it.receiver.pendingResult = pendingResult
it.receiver.onReceive(context, intent)
}
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java
index 61ded138134c..4593164869fd 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java
@@ -19,7 +19,11 @@ package com.android.systemui.dagger;
import android.app.Activity;
import com.android.systemui.ForegroundServicesDialog;
+import com.android.systemui.keyguard.WorkLockActivity;
+import com.android.systemui.settings.BrightnessDialog;
import com.android.systemui.tuner.TunerActivity;
+import com.android.systemui.usb.UsbDebuggingActivity;
+import com.android.systemui.usb.UsbDebuggingSecondaryUserActivity;
import dagger.Binds;
import dagger.Module;
@@ -42,4 +46,29 @@ public abstract class DefaultActivityBinder {
@IntoMap
@ClassKey(ForegroundServicesDialog.class)
public abstract Activity bindForegroundServicesDialog(ForegroundServicesDialog activity);
+
+ /** Inject into WorkLockActivity. */
+ @Binds
+ @IntoMap
+ @ClassKey(WorkLockActivity.class)
+ public abstract Activity bindWorkLockActivity(WorkLockActivity activity);
+
+ /** Inject into BrightnessDialog. */
+ @Binds
+ @IntoMap
+ @ClassKey(BrightnessDialog.class)
+ public abstract Activity bindBrightnessDialog(BrightnessDialog activity);
+
+ /** Inject into UsbDebuggingActivity. */
+ @Binds
+ @IntoMap
+ @ClassKey(UsbDebuggingActivity.class)
+ public abstract Activity bindUsbDebuggingActivity(UsbDebuggingActivity activity);
+
+ /** Inject into UsbDebuggingSecondaryUserActivity. */
+ @Binds
+ @IntoMap
+ @ClassKey(UsbDebuggingSecondaryUserActivity.class)
+ public abstract Activity bindUsbDebuggingSecondaryUserActivity(
+ UsbDebuggingSecondaryUserActivity activity);
}
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
index 248bf62230dd..6d61b2fb9990 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
@@ -35,6 +35,7 @@ import android.view.LayoutInflater;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.widget.LockPatternUtils;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.BgHandler;
import com.android.systemui.dagger.qualifiers.BgLooper;
import com.android.systemui.dagger.qualifiers.MainHandler;
@@ -226,8 +227,8 @@ public class DependencyProvider {
@Singleton
@Provides
public DeviceProvisionedController provideDeviceProvisionedController(Context context,
- @MainHandler Handler mainHandler) {
- return new DeviceProvisionedControllerImpl(context, mainHandler);
+ @MainHandler Handler mainHandler, BroadcastDispatcher broadcastDispatcher) {
+ return new DeviceProvisionedControllerImpl(context, mainHandler, broadcastDispatcher);
}
/** */
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java
index 88ec76c7706b..4f429d3fd9c2 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java
@@ -30,6 +30,7 @@ import com.android.systemui.ForegroundServiceController;
import com.android.systemui.LatencyTester;
import com.android.systemui.ScreenDecorations;
import com.android.systemui.SizeCompatModeActivityController;
+import com.android.systemui.SliceBroadcastRelayHandler;
import com.android.systemui.SystemUI;
import com.android.systemui.UiOffloadThread;
import com.android.systemui.appops.AppOpsController;
@@ -98,6 +99,7 @@ import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.tv.TvStatusBar;
+import com.android.systemui.theme.ThemeOverlayController;
import com.android.systemui.util.InjectionInflationController;
import com.android.systemui.util.leak.GarbageMonitor;
import com.android.systemui.volume.VolumeUI;
@@ -184,12 +186,24 @@ public abstract class SystemUIBinder {
public abstract SystemUI bindsSizeCompatModeActivityController(
SizeCompatModeActivityController sysui);
+ /** Inject into SliceBroadcastRelayHandler. */
+ @Binds
+ @IntoMap
+ @ClassKey(SliceBroadcastRelayHandler.class)
+ public abstract SystemUI bindSliceBroadcastRelayHandler(SliceBroadcastRelayHandler sysui);
+
/** Inject into StatusBar. */
@Binds
@IntoMap
@ClassKey(StatusBar.class)
public abstract SystemUI bindsStatusBar(StatusBar sysui);
+ /** Inject into ThemeOverlayController. */
+ @Binds
+ @IntoMap
+ @ClassKey(ThemeOverlayController.class)
+ public abstract SystemUI bindThemeOverlayController(ThemeOverlayController sysui);
+
/** Inject into TvStatusBar. */
@Binds
@IntoMap
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java
index 33f68cfc1492..eaa72dc4fb8c 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java
@@ -29,6 +29,7 @@ import android.os.Handler;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R;
import com.android.systemui.SystemUIApplication;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dock.DockManager;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.FalsingManager;
@@ -58,6 +59,7 @@ public class DozeFactory {
private final DelayedWakeLock.Builder mDelayedWakeLockBuilder;
private final Handler mHandler;
private final BiometricUnlockController mBiometricUnlockController;
+ private final BroadcastDispatcher mBroadcastDispatcher;
@Inject
public DozeFactory(FalsingManager falsingManager, DozeLog dozeLog,
@@ -67,7 +69,8 @@ public class DozeFactory {
DockManager dockManager, @Nullable IWallpaperManager wallpaperManager,
ProximitySensor proximitySensor,
DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler,
- BiometricUnlockController biometricUnlockController) {
+ BiometricUnlockController biometricUnlockController,
+ BroadcastDispatcher broadcastDispatcher) {
mFalsingManager = falsingManager;
mDozeLog = dozeLog;
mDozeParameters = dozeParameters;
@@ -82,6 +85,7 @@ public class DozeFactory {
mDelayedWakeLockBuilder = delayedWakeLockBuilder;
mHandler = handler;
mBiometricUnlockController = biometricUnlockController;
+ mBroadcastDispatcher = broadcastDispatcher;
}
/** Creates a DozeMachine with its parts for {@code dozeService}. */
@@ -123,8 +127,8 @@ public class DozeFactory {
DozeParameters params, Handler handler) {
Sensor sensor = DozeSensors.findSensorWithType(sensorManager,
context.getString(R.string.doze_brightness_sensor_type));
- return new DozeScreenBrightness(context, service, sensorManager, sensor, host, handler,
- params.getPolicy());
+ return new DozeScreenBrightness(context, service, sensorManager, sensor,
+ mBroadcastDispatcher, host, handler, params.getPolicy());
}
private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager,
@@ -134,7 +138,7 @@ public class DozeFactory {
boolean allowPulseTriggers = true;
return new DozeTriggers(context, machine, host, alarmManager, config, params,
sensorManager, handler, wakeLock, allowPulseTriggers, dockManager,
- mProximitySensor, dozeLog);
+ mProximitySensor, dozeLog, mBroadcastDispatcher);
}
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
index bd6882c01bbd..39a256248aae 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
@@ -31,6 +31,7 @@ import android.os.UserHandle;
import android.provider.Settings;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.broadcast.BroadcastDispatcher;
/**
* Controls the screen brightness when dozing.
@@ -49,6 +50,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
private final Handler mHandler;
private final SensorManager mSensorManager;
private final Sensor mLightSensor;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private final int[] mSensorToBrightness;
private final int[] mSensorToScrimOpacity;
private final boolean mDebuggable;
@@ -69,13 +71,15 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
@VisibleForTesting
public DozeScreenBrightness(Context context, DozeMachine.Service service,
- SensorManager sensorManager, Sensor lightSensor, DozeHost host,
+ SensorManager sensorManager, Sensor lightSensor,
+ BroadcastDispatcher broadcastDispatcher, DozeHost host,
Handler handler, int defaultDozeBrightness, int[] sensorToBrightness,
int[] sensorToScrimOpacity, boolean debuggable) {
mContext = context;
mDozeService = service;
mSensorManager = sensorManager;
mLightSensor = lightSensor;
+ mBroadcastDispatcher = broadcastDispatcher;
mDozeHost = host;
mHandler = handler;
mDebuggable = debuggable;
@@ -87,14 +91,15 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
if (mDebuggable) {
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_AOD_BRIGHTNESS);
- mContext.registerReceiverAsUser(this, UserHandle.ALL, filter, null, handler);
+ mBroadcastDispatcher.registerReceiver(this, filter, handler, UserHandle.ALL);
}
}
public DozeScreenBrightness(Context context, DozeMachine.Service service,
- SensorManager sensorManager, Sensor lightSensor, DozeHost host,
- Handler handler, AlwaysOnDisplayPolicy policy) {
- this(context, service, sensorManager, lightSensor, host, handler,
+ SensorManager sensorManager, Sensor lightSensor,
+ BroadcastDispatcher broadcastDispatcher, DozeHost host, Handler handler,
+ AlwaysOnDisplayPolicy policy) {
+ this(context, service, sensorManager, lightSensor, broadcastDispatcher, host, handler,
context.getResources().getInteger(
com.android.internal.R.integer.config_screenBrightnessDoze),
policy.screenBrightnessArray, policy.dimmingScrimArray, DEBUG_AOD_BRIGHTNESS);
@@ -127,7 +132,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
private void onDestroy() {
setLightSensorEnabled(false);
if (mDebuggable) {
- mContext.unregisterReceiver(this);
+ mBroadcastDispatcher.unregisterReceiver(this);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
index b212884ebb98..1134268aa5c6 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
@@ -36,6 +36,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.Dependency;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.Assert;
@@ -80,6 +81,7 @@ public class DozeTriggers implements DozeMachine.Part {
private final DockEventListener mDockEventListener = new DockEventListener();
private final DockManager mDockManager;
private final ProximitySensor.ProximityCheck mProxCheck;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private long mNotificationPulseTime;
private boolean mPulsePending;
@@ -91,7 +93,7 @@ public class DozeTriggers implements DozeMachine.Part {
DozeParameters dozeParameters, AsyncSensorManager sensorManager, Handler handler,
WakeLock wakeLock, boolean allowPulseTriggers, DockManager dockManager,
ProximitySensor proximitySensor,
- DozeLog dozeLog) {
+ DozeLog dozeLog, BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mMachine = machine;
mDozeHost = dozeHost;
@@ -107,6 +109,7 @@ public class DozeTriggers implements DozeMachine.Part {
mDockManager = dockManager;
mProxCheck = new ProximitySensor.ProximityCheck(proximitySensor, handler);
mDozeLog = dozeLog;
+ mBroadcastDispatcher = broadcastDispatcher;
}
private void onNotification(Runnable onPulseSuppressedListener) {
@@ -299,7 +302,7 @@ public class DozeTriggers implements DozeMachine.Part {
public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
switch (newState) {
case INITIALIZED:
- mBroadcastReceiver.register(mContext);
+ mBroadcastReceiver.register(mBroadcastDispatcher);
mDozeHost.addCallback(mHostCallback);
if (mDockManager != null) {
mDockManager.addListener(mDockEventListener);
@@ -334,7 +337,7 @@ public class DozeTriggers implements DozeMachine.Part {
mDozeSensors.updateListening();
break;
case FINISH:
- mBroadcastReceiver.unregister(mContext);
+ mBroadcastReceiver.unregister(mBroadcastDispatcher);
mDozeHost.removeCallback(mHostCallback);
if (mDockManager != null) {
mDockManager.removeListener(mDockEventListener);
@@ -437,22 +440,22 @@ public class DozeTriggers implements DozeMachine.Part {
}
}
- public void register(Context context) {
+ public void register(BroadcastDispatcher broadcastDispatcher) {
if (mRegistered) {
return;
}
IntentFilter filter = new IntentFilter(PULSE_ACTION);
filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE);
filter.addAction(Intent.ACTION_USER_SWITCHED);
- context.registerReceiver(this, filter);
+ broadcastDispatcher.registerReceiver(this, filter);
mRegistered = true;
}
- public void unregister(Context context) {
+ public void unregister(BroadcastDispatcher broadcastDispatcher) {
if (!mRegistered) {
return;
}
- context.unregisterReceiver(this);
+ broadcastDispatcher.unregisterReceiver(this);
mRegistered = false;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index 1bef56179479..bb2d142c11a1 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -146,6 +146,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private final DevicePolicyManager mDevicePolicyManager;
private final LockPatternUtils mLockPatternUtils;
private final KeyguardManager mKeyguardManager;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private ArrayList<Action> mItems;
private ActionsDialog mDialog;
@@ -183,13 +184,14 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
Context.DEVICE_POLICY_SERVICE);
mLockPatternUtils = new LockPatternUtils(mContext);
mKeyguardManager = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
+ mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
// receive broadcasts
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
- Dependency.get(BroadcastDispatcher.class).registerReceiver(mBroadcastReceiver, filter);
+ mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter);
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
@@ -901,7 +903,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mAdapter.notifyDataSetChanged();
if (mShowSilentToggle) {
IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
- mContext.registerReceiver(mRingerModeReceiver, filter);
+ mBroadcastDispatcher.registerReceiver(mRingerModeReceiver, filter);
}
}
@@ -919,7 +921,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mWindowManagerFuncs.onGlobalActionsHidden();
if (mShowSilentToggle) {
try {
- mContext.unregisterReceiver(mRingerModeReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mRingerModeReceiver);
} catch (IllegalArgumentException ie) {
// ignore this
Log.w(TAG, ie);
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 411bf9a80dca..3b1edcca5b74 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -87,6 +87,7 @@ import com.android.systemui.R;
import com.android.systemui.SystemUI;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.UiOffloadThread;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -319,6 +320,7 @@ public class KeyguardViewMediator extends SystemUI {
*/
private boolean mWaitingUntilKeyguardVisible = false;
private final LockPatternUtils mLockPatternUtils;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private boolean mKeyguardDonePending = false;
private boolean mHideAnimationRun = false;
private boolean mHideAnimationRunning = false;
@@ -685,8 +687,10 @@ public class KeyguardViewMediator extends SystemUI {
public KeyguardViewMediator(
Context context,
FalsingManager falsingManager,
- LockPatternUtils lockPatternUtils) {
- this(context, falsingManager, lockPatternUtils, SystemUIFactory.getInstance());
+ LockPatternUtils lockPatternUtils,
+ BroadcastDispatcher broadcastDispatcher) {
+ this(context, falsingManager, lockPatternUtils, broadcastDispatcher,
+ SystemUIFactory.getInstance());
}
@VisibleForTesting
@@ -694,10 +698,12 @@ public class KeyguardViewMediator extends SystemUI {
Context context,
FalsingManager falsingManager,
LockPatternUtils lockPatternUtils,
+ BroadcastDispatcher broadcastDispatcher,
SystemUIFactory systemUIFactory) {
super(context);
mFalsingManager = falsingManager;
mLockPatternUtils = lockPatternUtils;
+ mBroadcastDispatcher = broadcastDispatcher;
mStatusBarKeyguardViewManager = systemUIFactory.createStatusBarKeyguardViewManager(
mContext,
mViewMediatorCallback,
@@ -722,7 +728,7 @@ public class KeyguardViewMediator extends SystemUI {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SHUTDOWN);
- mContext.registerReceiver(mBroadcastReceiver, filter);
+ mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter);
final IntentFilter delayedActionFilter = new IntentFilter();
delayedActionFilter.addAction(DELAYED_KEYGUARD_ACTION);
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java
index 4d061e18ebba..86c532cdb773 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java
@@ -36,6 +36,9 @@ import android.view.View;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+
+import javax.inject.Inject;
/**
* Bouncer between work activities and the activity used to confirm credentials before unlocking
@@ -67,14 +70,21 @@ public class WorkLockActivity extends Activity {
* @see KeyguardManager
*/
private KeyguardManager mKgm;
+ private final BroadcastDispatcher mBroadcastDispatcher;
+
+ @Inject
+ public WorkLockActivity(BroadcastDispatcher broadcastDispatcher) {
+ super();
+ mBroadcastDispatcher = broadcastDispatcher;
+ }
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- registerReceiverAsUser(mLockEventReceiver, UserHandle.ALL,
- new IntentFilter(Intent.ACTION_DEVICE_LOCKED_CHANGED), /* permission */ null,
- /* scheduler */ null);
+ mBroadcastDispatcher.registerReceiver(mLockEventReceiver,
+ new IntentFilter(Intent.ACTION_DEVICE_LOCKED_CHANGED), null /* handler */,
+ UserHandle.ALL);
// Once the receiver is registered, check whether anything happened between now and the time
// when this activity was launched. If it did and the user is unlocked now, just quit.
diff --git a/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java b/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java
index 05be4259dd3b..75e260e7fa70 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java
@@ -19,10 +19,12 @@ package com.android.systemui.pip;
import android.content.Context;
import android.content.res.Configuration;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+
import java.io.PrintWriter;
public interface BasePipManager {
- void initialize(Context context);
+ void initialize(Context context, BroadcastDispatcher broadcastDispatcher);
void showPictureInPictureMenu();
default void expandPip() {}
default void hidePipMenu(Runnable onStartCallback, Runnable onEndCallback) {}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
index feb5d1917384..583ce67e26d4 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
@@ -26,6 +26,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import com.android.systemui.SystemUI;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.CommandQueue;
import java.io.FileDescriptor;
@@ -42,12 +43,15 @@ public class PipUI extends SystemUI implements CommandQueue.Callbacks {
private final CommandQueue mCommandQueue;
private BasePipManager mPipManager;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private boolean mSupportsPip;
@Inject
- public PipUI(Context context, CommandQueue commandQueue) {
+ public PipUI(Context context, CommandQueue commandQueue,
+ BroadcastDispatcher broadcastDispatcher) {
super(context);
+ mBroadcastDispatcher = broadcastDispatcher;
mCommandQueue = commandQueue;
}
@@ -68,7 +72,7 @@ public class PipUI extends SystemUI implements CommandQueue.Callbacks {
mPipManager = pm.hasSystemFeature(FEATURE_LEANBACK_ONLY)
? com.android.systemui.pip.tv.PipManager.getInstance()
: com.android.systemui.pip.phone.PipManager.getInstance();
- mPipManager.initialize(mContext);
+ mPipManager.initialize(mContext, mBroadcastDispatcher);
mCommandQueue.addCallback(this);
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
index 369073c6564d..c33b8d9fbd90 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
@@ -37,6 +37,7 @@ import android.view.IPinnedStackController;
import com.android.systemui.Dependency;
import com.android.systemui.UiOffloadThread;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.pip.BasePipManager;
import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.shared.system.ActivityManagerWrapper;
@@ -200,7 +201,7 @@ public class PipManager implements BasePipManager {
/**
* Initializes {@link PipManager}.
*/
- public void initialize(Context context) {
+ public void initialize(Context context, BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mActivityManager = ActivityManager.getService();
mActivityTaskManager = ActivityTaskManager.getService();
@@ -214,7 +215,7 @@ public class PipManager implements BasePipManager {
mPipBoundsHandler = new PipBoundsHandler(context);
mInputConsumerController = InputConsumerController.getPipInputConsumer();
- mMediaController = new PipMediaController(context, mActivityManager);
+ mMediaController = new PipMediaController(context, mActivityManager, broadcastDispatcher);
mMenuController = new PipMenuActivityController(context, mActivityManager, mMediaController,
mInputConsumerController);
mTouchHandler = new PipTouchHandler(context, mActivityManager, mActivityTaskManager,
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java
index 174a7ef19cbd..e57b4166937f 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java
@@ -37,6 +37,7 @@ import android.os.UserHandle;
import com.android.systemui.Dependency;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.policy.UserInfoController;
import java.util.ArrayList;
@@ -109,7 +110,8 @@ public class PipMediaController {
private ArrayList<ActionListener> mListeners = new ArrayList<>();
- public PipMediaController(Context context, IActivityManager activityManager) {
+ public PipMediaController(Context context, IActivityManager activityManager,
+ BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mActivityManager = activityManager;
IntentFilter mediaControlFilter = new IntentFilter();
@@ -117,7 +119,7 @@ public class PipMediaController {
mediaControlFilter.addAction(ACTION_PAUSE);
mediaControlFilter.addAction(ACTION_NEXT);
mediaControlFilter.addAction(ACTION_PREV);
- mContext.registerReceiver(mPlayPauseActionReceiver, mediaControlFilter);
+ broadcastDispatcher.registerReceiver(mPlayPauseActionReceiver, mediaControlFilter);
createMediaActions();
mMediaSessionManager =
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
index 81d6973efb2a..195fca85a314 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
@@ -48,6 +48,7 @@ import android.view.DisplayInfo;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.UiOffloadThread;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.pip.BasePipManager;
import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.shared.system.ActivityManagerWrapper;
@@ -227,7 +228,7 @@ public class PipManager implements BasePipManager {
/**
* Initializes {@link PipManager}.
*/
- public void initialize(Context context) {
+ public void initialize(Context context, BroadcastDispatcher broadcastDispatcher) {
if (mInitialized) {
return;
}
@@ -238,8 +239,8 @@ public class PipManager implements BasePipManager {
ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_MEDIA_RESOURCE_GRANTED);
- mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, intentFilter,
- null, null);
+ broadcastDispatcher.registerReceiver(mBroadcastReceiver, intentFilter,
+ null /* handler */, UserHandle.ALL);
if (sSettingsPackageAndClassNamePairList == null) {
String[] settings = mContext.getResources().getStringArray(
@@ -286,7 +287,7 @@ public class PipManager implements BasePipManager {
Log.e(TAG, "Failed to register pinned stack listener", e);
}
- mPipNotification = new PipNotification(context);
+ mPipNotification = new PipNotification(context, broadcastDispatcher);
}
private void loadConfigurationsAndApply(Configuration newConfig) {
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipNotification.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipNotification.java
index d50f294e4999..ca1513128e56 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipNotification.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipNotification.java
@@ -34,6 +34,7 @@ import android.util.Log;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.util.NotificationChannels;
/**
@@ -143,7 +144,7 @@ public class PipNotification {
}
};
- public PipNotification(Context context) {
+ public PipNotification(Context context, BroadcastDispatcher broadcastDispatcher) {
mNotificationManager = (NotificationManager) context.getSystemService(
Context.NOTIFICATION_SERVICE);
@@ -161,7 +162,7 @@ public class PipNotification {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_MENU);
intentFilter.addAction(ACTION_CLOSE);
- context.registerReceiver(mEventReceiver, intentFilter);
+ broadcastDispatcher.registerReceiver(mEventReceiver, intentFilter);
onConfigurationChanged(context);
}
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt
index ca16e84fbe0d..d592492820c1 100644
--- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt
+++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt
@@ -34,6 +34,7 @@ import com.android.systemui.Dumpable
import com.android.systemui.R
import com.android.systemui.appops.AppOpItem
import com.android.systemui.appops.AppOpsController
+import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.dagger.qualifiers.BgHandler
import com.android.systemui.dagger.qualifiers.MainHandler
import java.io.FileDescriptor
@@ -47,10 +48,11 @@ fun isPermissionsHubEnabled() = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_P
@Singleton
class PrivacyItemController @Inject constructor(
- val context: Context,
+ private val context: Context,
private val appOpsController: AppOpsController,
@MainHandler private val uiHandler: Handler,
- @BgHandler private val bgHandler: Handler
+ @BgHandler private val bgHandler: Handler,
+ private val broadcastDispatcher: BroadcastDispatcher
) : Dumpable {
@VisibleForTesting
@@ -138,15 +140,15 @@ class PrivacyItemController @Inject constructor(
}
private fun unregisterReceiver() {
- context.unregisterReceiver(userSwitcherReceiver)
+ broadcastDispatcher.unregisterReceiver(userSwitcherReceiver)
}
private fun registerReceiver() {
- context.registerReceiverAsUser(userSwitcherReceiver, UserHandle.ALL, IntentFilter().apply {
+ broadcastDispatcher.registerReceiver(userSwitcherReceiver, IntentFilter().apply {
intents.forEach {
addAction(it)
}
- }, null, null)
+ }, null /* handler */, UserHandle.ALL)
}
private fun update(updateUsers: Boolean) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 39f08650bf2c..cac90257cd43 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -50,6 +50,7 @@ import com.android.systemui.Dependency;
import com.android.systemui.DumpController;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTileView;
@@ -125,12 +126,13 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
public QSPanel(Context context, AttributeSet attrs, DumpController dumpController) {
- this(context, attrs, dumpController, null);
+ this(context, attrs, dumpController, null, Dependency.get(BroadcastDispatcher.class));
}
@Inject
public QSPanel(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
- DumpController dumpController, PluginManager pluginManager) {
+ DumpController dumpController, PluginManager pluginManager,
+ BroadcastDispatcher broadcastDispatcher) {
super(context, attrs);
mContext = context;
@@ -177,7 +179,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
updateResources();
mBrightnessController = new BrightnessController(getContext(),
- findViewById(R.id.brightness_slider));
+ findViewById(R.id.brightness_slider), broadcastDispatcher);
mDumpController = dumpController;
mPluginManager = pluginManager;
if (mPluginManager != null && Settings.System.getInt(
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
index b395c3c336d3..6d434b19d3a3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
@@ -34,6 +34,7 @@ import com.android.systemui.DumpController;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.SysUiServiceProvider;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.BgLooper;
import com.android.systemui.dagger.qualifiers.MainHandler;
import com.android.systemui.plugins.PluginListener;
@@ -80,6 +81,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
private final TunerService mTunerService;
private final PluginManager mPluginManager;
private final DumpController mDumpController;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private final List<Callback> mCallbacks = new ArrayList<>();
private AutoTileManager mAutoTiles;
@@ -99,14 +101,16 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
PluginManager pluginManager,
TunerService tunerService,
Provider<AutoTileManager> autoTiles,
- DumpController dumpController) {
+ DumpController dumpController,
+ BroadcastDispatcher broadcastDispatcher) {
mIconController = iconController;
mContext = context;
mTunerService = tunerService;
mPluginManager = pluginManager;
mDumpController = dumpController;
+ mBroadcastDispatcher = broadcastDispatcher;
- mServices = new TileServices(this, bgLooper);
+ mServices = new TileServices(this, bgLooper, mBroadcastDispatcher);
defaultFactory.setHost(this);
mQsFactories.add(defaultFactory);
@@ -334,7 +338,8 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
Intent intent = new Intent().setComponent(component);
TileLifecycleManager lifecycleManager = new TileLifecycleManager(new Handler(),
mContext, mServices, new Tile(), intent,
- new UserHandle(ActivityManager.getCurrentUser()));
+ new UserHandle(ActivityManager.getCurrentUser()),
+ mBroadcastDispatcher);
lifecycleManager.onStopListening();
lifecycleManager.onTileRemoved();
TileLifecycleManager.setTileAdded(mContext, component, false);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index 24ac27e2e77b..19af235b4f68 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -61,6 +61,7 @@ import com.android.settingslib.Utils;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.DualToneHandler;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
@@ -150,6 +151,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
private boolean mPermissionsHubEnabled;
private PrivacyItemController mPrivacyItemController;
+ private BroadcastDispatcher mBroadcastDispatcher;
private final BroadcastReceiver mRingerReceiver = new BroadcastReceiver() {
@Override
@@ -189,7 +191,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
NextAlarmController nextAlarmController, ZenModeController zenModeController,
StatusBarIconController statusBarIconController,
ActivityStarter activityStarter, PrivacyItemController privacyItemController,
- CommandQueue commandQueue) {
+ CommandQueue commandQueue, BroadcastDispatcher broadcastDispatcher) {
super(context, attrs);
mAlarmController = nextAlarmController;
mZenController = zenModeController;
@@ -198,6 +200,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
mPrivacyItemController = privacyItemController;
mDualToneHandler = new DualToneHandler(
new ContextThemeWrapper(context, R.style.QSHeaderTheme));
+ mBroadcastDispatcher = broadcastDispatcher;
mCommandQueue = commandQueue;
}
@@ -551,14 +554,14 @@ public class QuickStatusBarHeader extends RelativeLayout implements
if (listening) {
mZenController.addCallback(this);
mAlarmController.addCallback(this);
- mContext.registerReceiver(mRingerReceiver,
+ mBroadcastDispatcher.registerReceiver(mRingerReceiver,
new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
mPrivacyItemController.addCallback(mPICCallback);
} else {
mZenController.removeCallback(this);
mAlarmController.removeCallback(this);
mPrivacyItemController.removeCallback(mPICCallback);
- mContext.unregisterReceiver(mRingerReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mRingerReceiver);
mPrivacyChipLogged = false;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
index f59e0c2d9bc2..926141297add 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
@@ -38,6 +38,8 @@ import android.util.Log;
import androidx.annotation.VisibleForTesting;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+
import java.util.Objects;
import java.util.Set;
@@ -72,6 +74,7 @@ public class TileLifecycleManager extends BroadcastReceiver implements
private final UserHandle mUser;
private final IBinder mToken = new Binder();
private final PackageManagerAdapter mPackageManagerAdapter;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private Set<Integer> mQueuedMessages = new ArraySet<>();
private QSTileServiceWrapper mWrapper;
@@ -88,13 +91,15 @@ public class TileLifecycleManager extends BroadcastReceiver implements
private boolean mIsBound;
public TileLifecycleManager(Handler handler, Context context, IQSService service, Tile tile,
- Intent intent, UserHandle user) {
- this(handler, context, service, tile, intent, user, new PackageManagerAdapter(context));
+ Intent intent, UserHandle user, BroadcastDispatcher broadcastDispatcher) {
+ this(handler, context, service, tile, intent, user, new PackageManagerAdapter(context),
+ broadcastDispatcher);
}
@VisibleForTesting
TileLifecycleManager(Handler handler, Context context, IQSService service, Tile tile,
- Intent intent, UserHandle user, PackageManagerAdapter packageManagerAdapter) {
+ Intent intent, UserHandle user, PackageManagerAdapter packageManagerAdapter,
+ BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mHandler = handler;
mIntent = intent;
@@ -102,6 +107,7 @@ public class TileLifecycleManager extends BroadcastReceiver implements
mIntent.putExtra(TileService.EXTRA_TOKEN, mToken);
mUser = user;
mPackageManagerAdapter = packageManagerAdapter;
+ mBroadcastDispatcher = broadcastDispatcher;
if (DEBUG) Log.d(TAG, "Creating " + mIntent + " " + mUser);
}
@@ -306,13 +312,14 @@ public class TileLifecycleManager extends BroadcastReceiver implements
filter.addDataScheme("package");
mContext.registerReceiverAsUser(this, mUser, filter, null, mHandler);
filter = new IntentFilter(Intent.ACTION_USER_UNLOCKED);
- mContext.registerReceiverAsUser(this, mUser, filter, null, mHandler);
+ mBroadcastDispatcher.registerReceiver(this, filter, mHandler, mUser);
mReceiverRegistered = true;
}
private void stopPackageListening() {
if (DEBUG) Log.d(TAG, "stopPackageListening");
mContext.unregisterReceiver(this);
+ mBroadcastDispatcher.unregisterReceiver(this);
mReceiverRegistered = false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
index 0b4e6485551c..1902d655abc3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
@@ -34,6 +34,7 @@ import android.util.Log;
import androidx.annotation.VisibleForTesting;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.qs.external.TileLifecycleManager.TileChangeListener;
import java.util.List;
@@ -72,10 +73,10 @@ public class TileServiceManager {
private boolean mStarted = false;
TileServiceManager(TileServices tileServices, Handler handler, ComponentName component,
- Tile tile) {
+ Tile tile, BroadcastDispatcher broadcastDispatcher) {
this(tileServices, handler, new TileLifecycleManager(handler,
tileServices.getContext(), tileServices, tile, new Intent().setComponent(component),
- new UserHandle(ActivityManager.getCurrentUser())));
+ new UserHandle(ActivityManager.getCurrentUser()), broadcastDispatcher));
}
@VisibleForTesting
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
index 13cfa78b7c1e..db7c6ad69d23 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
@@ -37,6 +37,7 @@ import android.util.Log;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.systemui.Dependency;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -60,13 +61,15 @@ public class TileServices extends IQSService.Stub {
private final Handler mHandler;
private final Handler mMainHandler;
private final QSTileHost mHost;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private int mMaxBound = DEFAULT_MAX_BOUND;
- public TileServices(QSTileHost host, Looper looper) {
+ public TileServices(QSTileHost host, Looper looper, BroadcastDispatcher broadcastDispatcher) {
mHost = host;
mContext = mHost.getContext();
- mContext.registerReceiver(mRequestListeningReceiver,
+ mBroadcastDispatcher = broadcastDispatcher;
+ mBroadcastDispatcher.registerReceiver(mRequestListeningReceiver,
new IntentFilter(TileService.ACTION_REQUEST_LISTENING));
mHandler = new Handler(looper);
mMainHandler = new Handler(Looper.getMainLooper());
@@ -82,7 +85,8 @@ public class TileServices extends IQSService.Stub {
public TileServiceManager getTileWrapper(CustomTile tile) {
ComponentName component = tile.getComponent();
- TileServiceManager service = onCreateTileService(component, tile.getQsTile());
+ TileServiceManager service = onCreateTileService(component, tile.getQsTile(),
+ mBroadcastDispatcher);
synchronized (mServices) {
mServices.put(tile, service);
mTiles.put(component, tile);
@@ -93,8 +97,10 @@ public class TileServices extends IQSService.Stub {
return service;
}
- protected TileServiceManager onCreateTileService(ComponentName component, Tile tile) {
- return new TileServiceManager(this, mHandler, component, tile);
+ protected TileServiceManager onCreateTileService(ComponentName component, Tile tile,
+ BroadcastDispatcher broadcastDispatcher) {
+ return new TileServiceManager(this, mHandler, component, tile,
+ broadcastDispatcher);
}
public void freeService(CustomTile tile, TileServiceManager service) {
@@ -323,7 +329,7 @@ public class TileServices extends IQSService.Stub {
public void destroy() {
synchronized (mServices) {
mServices.values().forEach(service -> service.handleDestroy());
- mContext.unregisterReceiver(mRequestListeningReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mRequestListeningReceiver);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
index 19e20a93ce66..da74663191f2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
@@ -33,6 +33,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.qs.GlobalSetting;
@@ -46,13 +47,16 @@ public class AirplaneModeTile extends QSTileImpl<BooleanState> {
private final Icon mIcon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_airplane);
private final GlobalSetting mSetting;
private final ActivityStarter mActivityStarter;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private boolean mListening;
@Inject
- public AirplaneModeTile(QSHost host, ActivityStarter activityStarter) {
+ public AirplaneModeTile(QSHost host, ActivityStarter activityStarter,
+ BroadcastDispatcher broadcastDispatcher) {
super(host);
mActivityStarter = activityStarter;
+ mBroadcastDispatcher = broadcastDispatcher;
mSetting = new GlobalSetting(mContext, mHandler, Global.AIRPLANE_MODE_ON) {
@Override
@@ -133,9 +137,9 @@ public class AirplaneModeTile extends QSTileImpl<BooleanState> {
if (listening) {
final IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
- mContext.registerReceiver(mReceiver, filter);
+ mBroadcastDispatcher.registerReceiver(mReceiver, filter);
} else {
- mContext.unregisterReceiver(mReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mReceiver);
}
mSetting.setListening(listening);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
index 869fa6b18245..52d1a5b3b991 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -52,6 +52,7 @@ import com.android.settingslib.notification.EnableZenModeDialog;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.SysUIToast;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
@@ -78,6 +79,7 @@ public class DndTile extends QSTileImpl<BooleanState> {
private final ZenModeController mController;
private final DndDetailAdapter mDetailAdapter;
private final ActivityStarter mActivityStarter;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private boolean mListening;
private boolean mShowingDetail;
@@ -85,12 +87,13 @@ public class DndTile extends QSTileImpl<BooleanState> {
@Inject
public DndTile(QSHost host, ZenModeController zenModeController,
- ActivityStarter activityStarter) {
+ ActivityStarter activityStarter, BroadcastDispatcher broadcastDispatcher) {
super(host);
mController = zenModeController;
mActivityStarter = activityStarter;
mDetailAdapter = new DndDetailAdapter();
- mContext.registerReceiver(mReceiver, new IntentFilter(ACTION_SET_VISIBLE));
+ mBroadcastDispatcher = broadcastDispatcher;
+ broadcastDispatcher.registerReceiver(mReceiver, new IntentFilter(ACTION_SET_VISIBLE));
mReceiverRegistered = true;
mController.observe(getLifecycle(), mZenCallback);
}
@@ -99,7 +102,7 @@ public class DndTile extends QSTileImpl<BooleanState> {
protected void handleDestroy() {
super.handleDestroy();
if (mReceiverRegistered) {
- mContext.unregisterReceiver(mReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mReceiver);
mReceiverRegistered = false;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
index 476a239de721..8bbfd243bd42 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
@@ -29,6 +29,7 @@ import android.widget.Switch;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -39,12 +40,14 @@ import javax.inject.Inject;
public class NfcTile extends QSTileImpl<BooleanState> {
private NfcAdapter mAdapter;
+ private BroadcastDispatcher mBroadcastDispatcher;
private boolean mListening;
@Inject
- public NfcTile(QSHost host) {
+ public NfcTile(QSHost host, BroadcastDispatcher broadcastDispatcher) {
super(host);
+ mBroadcastDispatcher = broadcastDispatcher;
}
@Override
@@ -56,10 +59,10 @@ public class NfcTile extends QSTileImpl<BooleanState> {
public void handleSetListening(boolean listening) {
mListening = listening;
if (mListening) {
- mContext.registerReceiver(mNfcReceiver,
+ mBroadcastDispatcher.registerReceiver(mNfcReceiver,
new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED));
} else {
- mContext.unregisterReceiver(mNfcReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mNfcReceiver);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
index 176676fcb9b3..b1f1f3844cac 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
@@ -44,6 +44,7 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.systemui.Dependency;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import java.util.ArrayList;
@@ -281,12 +282,13 @@ public class BrightnessController implements ToggleSlider.Listener {
}
};
- public BrightnessController(Context context, ToggleSlider control) {
+ public BrightnessController(Context context, ToggleSlider control,
+ BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mControl = control;
mControl.setMax(GAMMA_SPACE_MAX);
mBackgroundHandler = new Handler((Looper) Dependency.get(Dependency.BG_LOOPER));
- mUserTracker = new CurrentUserTracker(mContext) {
+ mUserTracker = new CurrentUserTracker(broadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
mBackgroundHandler.post(mUpdateModeRunnable);
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
index d8b4df5e94d8..70c2531ca6d4 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
@@ -28,11 +28,21 @@ import android.view.WindowManager;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+
+import javax.inject.Inject;
/** A dialog that provides controls for adjusting the screen brightness. */
public class BrightnessDialog extends Activity {
private BrightnessController mBrightnessController;
+ private final BroadcastDispatcher mBroadcastDispatcher;
+
+ @Inject
+ public BrightnessDialog(BroadcastDispatcher broadcastDispatcher) {
+ mBroadcastDispatcher = broadcastDispatcher;
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -49,7 +59,7 @@ public class BrightnessDialog extends Activity {
setContentView(v);
final ToggleSliderView slider = findViewById(R.id.brightness_slider);
- mBrightnessController = new BrightnessController(this, slider);
+ mBrightnessController = new BrightnessController(this, slider, mBroadcastDispatcher);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/settings/CurrentUserObservable.java b/packages/SystemUI/src/com/android/systemui/settings/CurrentUserObservable.java
index 3cf08b4b866e..3cdc01d95f58 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/CurrentUserObservable.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/CurrentUserObservable.java
@@ -16,11 +16,11 @@
package com.android.systemui.settings;
-import android.content.Context;
-
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+
/**
* A class that has an observable for the current user.
*/
@@ -42,8 +42,8 @@ public class CurrentUserObservable {
}
};
- public CurrentUserObservable(Context context) {
- mTracker = new CurrentUserTracker(context) {
+ public CurrentUserObservable(BroadcastDispatcher broadcastDispatcher) {
+ mTracker = new CurrentUserTracker(broadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
mCurrentUser.setValue(newUserId);
diff --git a/packages/SystemUI/src/com/android/systemui/settings/CurrentUserTracker.java b/packages/SystemUI/src/com/android/systemui/settings/CurrentUserTracker.java
index 0b89dc1070e1..9f79785be56e 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/CurrentUserTracker.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/CurrentUserTracker.java
@@ -23,6 +23,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import java.util.ArrayList;
import java.util.List;
@@ -33,8 +34,8 @@ public abstract class CurrentUserTracker {
private Consumer<Integer> mCallback = this::onUserSwitched;
- public CurrentUserTracker(Context context) {
- this(UserReceiver.getInstance(context));
+ public CurrentUserTracker(BroadcastDispatcher broadcastDispatcher) {
+ this(UserReceiver.getInstance(broadcastDispatcher));
}
@VisibleForTesting
@@ -60,20 +61,20 @@ public abstract class CurrentUserTracker {
static class UserReceiver extends BroadcastReceiver {
private static UserReceiver sInstance;
- private Context mAppContext;
private boolean mReceiverRegistered;
private int mCurrentUserId;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private List<Consumer<Integer>> mCallbacks = new ArrayList<>();
@VisibleForTesting
- UserReceiver(Context context) {
- mAppContext = context.getApplicationContext();
+ UserReceiver(BroadcastDispatcher broadcastDispatcher) {
+ mBroadcastDispatcher = broadcastDispatcher;
}
- static UserReceiver getInstance(Context context) {
+ static UserReceiver getInstance(BroadcastDispatcher broadcastDispatcher) {
if (sInstance == null) {
- sInstance = new UserReceiver(context);
+ sInstance = new UserReceiver(broadcastDispatcher);
}
return sInstance;
}
@@ -96,7 +97,7 @@ public abstract class CurrentUserTracker {
if (!mReceiverRegistered) {
mCurrentUserId = ActivityManager.getCurrentUser();
IntentFilter filter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
- mAppContext.registerReceiver(this, filter);
+ mBroadcastDispatcher.registerReceiver(this, filter);
mReceiverRegistered = true;
}
}
@@ -105,7 +106,7 @@ public abstract class CurrentUserTracker {
if (mCallbacks.contains(callback)) {
mCallbacks.remove(callback);
if (mCallbacks.size() == 0 && mReceiverRegistered) {
- mAppContext.unregisterReceiver(this);
+ mBroadcastDispatcher.unregisterReceiver(this);
mReceiverRegistered = false;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java
index 7adf7af89f0d..571d3d7a11be 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java
@@ -46,6 +46,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
import com.android.systemui.recents.OverviewProxyService;
@@ -90,6 +91,7 @@ public class NotificationLockscreenUserManagerImpl implements
private final UserManager mUserManager;
private final IStatusBarService mBarService;
private final List<UserChangedListener> mListeners = new ArrayList<>();
+ private final BroadcastDispatcher mBroadcastDispatcher;
private boolean mShowLockscreenNotifications;
private boolean mAllowLockscreenRemoteInput;
@@ -180,7 +182,8 @@ public class NotificationLockscreenUserManagerImpl implements
}
@Inject
- public NotificationLockscreenUserManagerImpl(Context context) {
+ public NotificationLockscreenUserManagerImpl(Context context,
+ BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mDevicePolicyManager = (DevicePolicyManager) mContext.getSystemService(
Context.DEVICE_POLICY_SERVICE);
@@ -191,6 +194,7 @@ public class NotificationLockscreenUserManagerImpl implements
Dependency.get(StatusBarStateController.class).addCallback(this);
mLockPatternUtils = new LockPatternUtils(context);
mKeyguardManager = context.getSystemService(KeyguardManager.class);
+ mBroadcastDispatcher = broadcastDispatcher;
}
public void setUpWithPresenter(NotificationPresenter presenter) {
@@ -244,15 +248,15 @@ public class NotificationLockscreenUserManagerImpl implements
UserHandle.USER_ALL);
}
- mContext.registerReceiverAsUser(mAllUsersReceiver, UserHandle.ALL,
+ mBroadcastDispatcher.registerReceiver(mAllUsersReceiver,
new IntentFilter(ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED),
- null, null);
+ null /* handler */, UserHandle.ALL);
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_SWITCHED);
filter.addAction(Intent.ACTION_USER_ADDED);
filter.addAction(Intent.ACTION_USER_UNLOCKED);
- mContext.registerReceiver(mBaseBroadcastReceiver, filter);
+ mBroadcastDispatcher.registerReceiver(mBaseBroadcastReceiver, filter);
IntentFilter internalFilter = new IntentFilter();
internalFilter.addAction(NOTIFICATION_UNLOCKED_BY_WORK_CHALLENGE_ACTION);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ManagedProfileControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ManagedProfileControllerImpl.java
index fbd8d8a76d26..07e9f944b802 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ManagedProfileControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ManagedProfileControllerImpl.java
@@ -24,6 +24,8 @@ import android.content.pm.UserInfo;
import android.os.UserHandle;
import android.os.UserManager;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -40,6 +42,7 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {
private final Context mContext;
private final UserManager mUserManager;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private final LinkedList<UserInfo> mProfiles;
private boolean mListening;
private int mCurrentUser;
@@ -47,9 +50,10 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {
/**
*/
@Inject
- public ManagedProfileControllerImpl(Context context) {
+ public ManagedProfileControllerImpl(Context context, BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mUserManager = UserManager.get(mContext);
+ mBroadcastDispatcher = broadcastDispatcher;
mProfiles = new LinkedList<UserInfo>();
}
@@ -129,9 +133,10 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {
filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
- mContext.registerReceiverAsUser(mReceiver, UserHandle.ALL, filter, null, null);
+ mBroadcastDispatcher.registerReceiver(
+ mReceiver, filter, null /* handler */, UserHandle.ALL);
} else {
- mContext.unregisterReceiver(mReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mReceiver);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 0645423f531b..01cd2b49d059 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -41,6 +41,7 @@ import com.android.internal.telephony.TelephonyIntents;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.UiOffloadThread;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.privacy.PrivacyItem;
import com.android.systemui.privacy.PrivacyItemController;
import com.android.systemui.privacy.PrivacyItemControllerKt;
@@ -138,7 +139,7 @@ public class PhoneStatusBarPolicy
private AlarmManager.AlarmClockInfo mNextAlarm;
public PhoneStatusBarPolicy(Context context, StatusBarIconController iconController,
- CommandQueue commandQueue) {
+ CommandQueue commandQueue, BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mIconController = iconController;
mCast = Dependency.get(CastController.class);
@@ -184,7 +185,7 @@ public class PhoneStatusBarPolicy
filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
- mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);
+ broadcastDispatcher.registerReceiver(mIntentReceiver, filter, mHandler);
// listen for user / profile change.
try {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 2125d126752a..8f13741f9fc8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -847,8 +847,8 @@ public class StatusBar extends SystemUI implements DemoMode,
if (mWallpaperSupported) {
// Make sure we always have the most current wallpaper info.
IntentFilter wallpaperChangedFilter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED);
- mContext.registerReceiverAsUser(mWallpaperChangedReceiver, UserHandle.ALL,
- wallpaperChangedFilter, null /* broadcastPermission */, null /* scheduler */);
+ mBroadcastDispatcher.registerReceiver(mWallpaperChangedReceiver, wallpaperChangedFilter,
+ null /* handler */, UserHandle.ALL);
mWallpaperChangedReceiver.onReceive(mContext, null);
} else if (DEBUG) {
Log.v(TAG, "start(): no wallpaper service ");
@@ -912,7 +912,8 @@ public class StatusBar extends SystemUI implements DemoMode,
// end old BaseStatusBar.start().
// Lastly, call to the icon policy to install/update all the icons.
- mIconPolicy = new PhoneStatusBarPolicy(mContext, mIconController, mCommandQueue);
+ mIconPolicy = new PhoneStatusBarPolicy(mContext, mIconController, mCommandQueue,
+ mBroadcastDispatcher);
mSignalPolicy = new StatusBarSignalPolicy(mContext, mIconController);
mKeyguardStateController.addCallback(this);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
index 3fc9b44f3850..f0f94201f3af 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
@@ -34,6 +34,7 @@ import com.android.settingslib.fuelgauge.BatterySaverUtils;
import com.android.settingslib.fuelgauge.Estimate;
import com.android.settingslib.utils.PowerUtil;
import com.android.systemui.Dependency;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.power.EnhancedEstimates;
import java.io.FileDescriptor;
@@ -58,6 +59,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
private static final int UPDATE_GRANULARITY_MSEC = 1000 * 60;
private final EnhancedEstimates mEstimates;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private final ArrayList<BatteryController.BatteryStateChangeCallback> mChangeCallbacks = new ArrayList<>();
private final ArrayList<EstimateFetchCompletion> mFetchCallbacks = new ArrayList<>();
private final PowerManager mPowerManager;
@@ -76,17 +78,20 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
private boolean mFetchingEstimate = false;
@Inject
- public BatteryControllerImpl(Context context, EnhancedEstimates enhancedEstimates) {
- this(context, enhancedEstimates, context.getSystemService(PowerManager.class));
+ public BatteryControllerImpl(Context context, EnhancedEstimates enhancedEstimates,
+ BroadcastDispatcher broadcastDispatcher) {
+ this(context, enhancedEstimates, context.getSystemService(PowerManager.class),
+ broadcastDispatcher);
}
@VisibleForTesting
BatteryControllerImpl(Context context, EnhancedEstimates enhancedEstimates,
- PowerManager powerManager) {
+ PowerManager powerManager, BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mHandler = new Handler();
mPowerManager = powerManager;
mEstimates = enhancedEstimates;
+ mBroadcastDispatcher = broadcastDispatcher;
registerReceiver();
updatePowerSave();
@@ -99,7 +104,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING);
filter.addAction(ACTION_LEVEL_TEST);
- mContext.registerReceiver(this, filter);
+ mBroadcastDispatcher.registerReceiver(this, filter);
}
@Override
@@ -306,7 +311,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
public void dispatchDemoCommand(String command, Bundle args) {
if (!mDemoMode && command.equals(COMMAND_ENTER)) {
mDemoMode = true;
- mContext.unregisterReceiver(this);
+ mBroadcastDispatcher.unregisterReceiver(this);
} else if (mDemoMode && command.equals(COMMAND_EXIT)) {
mDemoMode = false;
registerReceiver();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
index 568f5906c11c..dba3b923db4f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
@@ -16,8 +16,6 @@
package com.android.systemui.statusbar.policy;
-import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;
-
import android.app.StatusBarManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -62,9 +60,6 @@ import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;
-import javax.inject.Inject;
-import javax.inject.Named;
-
/**
* Digital clock for the status bar.
*/
@@ -116,19 +111,12 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
private final BroadcastDispatcher mBroadcastDispatcher;
public Clock(Context context, AttributeSet attrs) {
- this(context, attrs, null, Dependency.get(CommandQueue.class));
- }
-
- @Inject
- public Clock(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
- BroadcastDispatcher broadcastDispatcher, CommandQueue commandQueue) {
- this(context, attrs, 0, broadcastDispatcher, commandQueue);
+ this(context, attrs, 0);
}
- public Clock(Context context, AttributeSet attrs, int defStyle,
- BroadcastDispatcher broadcastDispatcher, CommandQueue commandQueue) {
+ public Clock(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
- mCommandQueue = commandQueue;
+ mCommandQueue = Dependency.get(CommandQueue.class);
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.Clock,
@@ -140,13 +128,13 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
} finally {
a.recycle();
}
- mCurrentUserTracker = new CurrentUserTracker(context) {
+ mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
+ mCurrentUserTracker = new CurrentUserTracker(mBroadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
mCurrentUserId = newUserId;
}
};
- mBroadcastDispatcher = broadcastDispatcher;
}
@Override
@@ -197,8 +185,8 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
filter.addAction(Intent.ACTION_USER_SWITCHED);
- getContext().registerReceiverAsUser(mIntentReceiver, UserHandle.ALL, filter,
- null, Dependency.get(Dependency.TIME_TICK_HANDLER));
+ mBroadcastDispatcher.registerReceiver(mIntentReceiver, filter,
+ Dependency.get(Dependency.TIME_TICK_HANDLER), UserHandle.ALL);
Dependency.get(TunerService.class).addTunable(this, CLOCK_SECONDS,
StatusBarIconController.ICON_BLACKLIST);
mCommandQueue.addCallback(this);
@@ -225,7 +213,7 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (mAttached) {
- getContext().unregisterReceiver(mIntentReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mIntentReceiver);
mAttached = false;
Dependency.get(TunerService.class).removeTunable(this);
mCommandQueue.removeCallback(this);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
index 74a30fa8094f..d48876778590 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
@@ -29,6 +29,7 @@ import android.widget.TextView;
import com.android.systemui.Dependency;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import java.util.Date;
import java.util.Locale;
@@ -41,6 +42,7 @@ public class DateView extends TextView {
private DateFormat mDateFormat;
private String mLastText;
private String mDatePattern;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
@@ -75,6 +77,7 @@ public class DateView extends TextView {
if (mDatePattern == null) {
mDatePattern = getContext().getString(R.string.system_ui_date_pattern);
}
+ mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
}
@Override
@@ -86,7 +89,7 @@ public class DateView extends TextView {
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
filter.addAction(Intent.ACTION_LOCALE_CHANGED);
- getContext().registerReceiver(mIntentReceiver, filter, null,
+ mBroadcastDispatcher.registerReceiver(mIntentReceiver, filter,
Dependency.get(Dependency.TIME_TICK_HANDLER));
updateClock();
@@ -97,7 +100,7 @@ public class DateView extends TextView {
super.onDetachedFromWindow();
mDateFormat = null; // reload the locale next time
- getContext().unregisterReceiver(mIntentReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mIntentReceiver);
}
protected void updateClock() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.java
index 0a40b3c4831c..b6ffd58be816 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.java
@@ -24,6 +24,7 @@ import android.provider.Settings.Global;
import android.provider.Settings.Secure;
import android.util.Log;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.MainHandler;
import com.android.systemui.settings.CurrentUserTracker;
@@ -49,8 +50,9 @@ public class DeviceProvisionedControllerImpl extends CurrentUserTracker implemen
/**
*/
@Inject
- public DeviceProvisionedControllerImpl(Context context, @MainHandler Handler mainHandler) {
- super(context);
+ public DeviceProvisionedControllerImpl(Context context, @MainHandler Handler mainHandler,
+ BroadcastDispatcher broadcastDispatcher) {
+ super(broadcastDispatcher);
mContext = context;
mContentResolver = context.getContentResolver();
mDeviceProvisionedUri = Global.getUriFor(Global.DEVICE_PROVISIONED);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java
index 5a97eedd9b2c..3d51be7c02f4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java
@@ -35,6 +35,7 @@ import android.provider.Settings;
import androidx.annotation.VisibleForTesting;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.BgLooper;
import com.android.systemui.util.Utils;
@@ -57,6 +58,7 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
private AppOpsManager mAppOpsManager;
private StatusBarManager mStatusBarManager;
+ private BroadcastDispatcher mBroadcastDispatcher;
private boolean mAreActiveLocationRequests;
@@ -65,14 +67,16 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
private final H mHandler = new H();
@Inject
- public LocationControllerImpl(Context context, @BgLooper Looper bgLooper) {
+ public LocationControllerImpl(Context context, @BgLooper Looper bgLooper,
+ BroadcastDispatcher broadcastDispatcher) {
mContext = context;
+ mBroadcastDispatcher = broadcastDispatcher;
// Register to listen for changes in location settings.
IntentFilter filter = new IntentFilter();
filter.addAction(LocationManager.HIGH_POWER_REQUEST_CHANGE_ACTION);
filter.addAction(LocationManager.MODE_CHANGED_ACTION);
- context.registerReceiverAsUser(this, UserHandle.ALL, filter, null, new Handler(bgLooper));
+ mBroadcastDispatcher.registerReceiver(this, filter, new Handler(bgLooper), UserHandle.ALL);
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
mStatusBarManager
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index 60784c91ee62..e5898eded11e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -64,6 +64,7 @@ import com.android.systemui.ConfigurationChangedReceiver;
import com.android.systemui.DemoMode;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.BgLooper;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
@@ -109,6 +110,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
private final SubscriptionDefaults mSubDefaults;
private final DataSaverController mDataSaverController;
private final CurrentUserTracker mUserTracker;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private final Object mLock = new Object();
private Config mConfig;
@@ -170,7 +172,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
*/
@Inject
public NetworkControllerImpl(Context context, @BgLooper Looper bgLooper,
- DeviceProvisionedController deviceProvisionedController) {
+ DeviceProvisionedController deviceProvisionedController,
+ BroadcastDispatcher broadcastDispatcher) {
this(context, (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE),
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE),
(WifiManager) context.getSystemService(Context.WIFI_SERVICE),
@@ -179,7 +182,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
new AccessPointControllerImpl(context),
new DataUsageController(context),
new SubscriptionDefaults(),
- deviceProvisionedController);
+ deviceProvisionedController,
+ broadcastDispatcher);
mReceiverHandler.post(mRegisterListeners);
}
@@ -191,12 +195,14 @@ public class NetworkControllerImpl extends BroadcastReceiver
AccessPointControllerImpl accessPointController,
DataUsageController dataUsageController,
SubscriptionDefaults defaultsHandler,
- DeviceProvisionedController deviceProvisionedController) {
+ DeviceProvisionedController deviceProvisionedController,
+ BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mConfig = config;
mReceiverHandler = new Handler(bgLooper);
mCallbackHandler = callbackHandler;
mDataSaverController = new DataSaverControllerImpl(context);
+ mBroadcastDispatcher = broadcastDispatcher;
mSubscriptionManager = subManager;
mSubDefaults = defaultsHandler;
@@ -229,7 +235,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
// AIRPLANE_MODE_CHANGED is sent at boot; we've probably already missed it
updateAirplaneMode(true /* force callback */);
- mUserTracker = new CurrentUserTracker(mContext) {
+ mUserTracker = new CurrentUserTracker(broadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
NetworkControllerImpl.this.onUserSwitched(newUserId);
@@ -315,7 +321,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
filter.addAction(Intent.ACTION_BOOT_COMPLETED);
filter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
- mContext.registerReceiver(this, filter, null, mReceiverHandler);
+ mBroadcastDispatcher.registerReceiver(this, filter, mReceiverHandler);
mListening = true;
updateMobileControllers();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java
index 0c68383649ab..c1614587ea35 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java
@@ -48,6 +48,7 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.net.LegacyVpnInfo;
import com.android.internal.net.VpnConfig;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.BgHandler;
import com.android.systemui.settings.CurrentUserTracker;
@@ -100,13 +101,14 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
/**
*/
@Inject
- public SecurityControllerImpl(Context context, @BgHandler Handler bgHandler) {
- this(context, bgHandler, null);
+ public SecurityControllerImpl(Context context, @BgHandler Handler bgHandler,
+ BroadcastDispatcher broadcastDispatcher) {
+ this(context, bgHandler, broadcastDispatcher, null);
}
public SecurityControllerImpl(Context context, Handler bgHandler,
- SecurityControllerCallback callback) {
- super(context);
+ BroadcastDispatcher broadcastDispatcher, SecurityControllerCallback callback) {
+ super(broadcastDispatcher);
mContext = context;
mBgHandler = bgHandler;
mDevicePolicyManager = (DevicePolicyManager)
@@ -124,8 +126,7 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
IntentFilter filter = new IntentFilter();
filter.addAction(KeyChain.ACTION_TRUST_STORE_CHANGED);
filter.addAction(Intent.ACTION_USER_UNLOCKED);
- context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null,
- bgHandler);
+ broadcastDispatcher.registerReceiver(mBroadcastReceiver, filter, bgHandler, UserHandle.ALL);
// TODO: re-register network callback on user change.
mConnectivityManager.registerNetworkCallback(REQUEST, mNetworkCallback);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
index 2c996684f437..075c6d40ca31 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
@@ -59,6 +59,7 @@ import com.android.systemui.Prefs;
import com.android.systemui.Prefs.Key;
import com.android.systemui.R;
import com.android.systemui.SystemUISecondaryUserService;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.MainHandler;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.DetailAdapter;
@@ -96,6 +97,7 @@ public class UserSwitcherController implements Dumpable {
private final KeyguardStateController mKeyguardStateController;
protected final Handler mHandler;
private final ActivityStarter mActivityStarter;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private ArrayList<UserRecord> mUsers = new ArrayList<>();
private Dialog mExitGuestDialog;
@@ -111,10 +113,12 @@ public class UserSwitcherController implements Dumpable {
@Inject
public UserSwitcherController(Context context, KeyguardStateController keyguardStateController,
- @MainHandler Handler handler, ActivityStarter activityStarter) {
+ @MainHandler Handler handler, ActivityStarter activityStarter,
+ BroadcastDispatcher broadcastDispatcher) {
mContext = context;
+ mBroadcastDispatcher = broadcastDispatcher;
if (!UserManager.isGuestUserEphemeral()) {
- mGuestResumeSessionReceiver.register(context);
+ mGuestResumeSessionReceiver.register(mBroadcastDispatcher);
}
mKeyguardStateController = keyguardStateController;
mHandler = handler;
@@ -127,8 +131,8 @@ public class UserSwitcherController implements Dumpable {
filter.addAction(Intent.ACTION_USER_SWITCHED);
filter.addAction(Intent.ACTION_USER_STOPPED);
filter.addAction(Intent.ACTION_USER_UNLOCKED);
- mContext.registerReceiverAsUser(mReceiver, UserHandle.SYSTEM, filter,
- null /* permission */, null /* scheduler */);
+ mBroadcastDispatcher.registerReceiver(
+ mReceiver, filter, null /* handler */, UserHandle.SYSTEM);
mSecondaryUserServiceIntent = new Intent(context, SystemUISecondaryUserService.class);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
index 1c7a1951b27d..a2028e6c0c33 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
@@ -39,6 +39,7 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.Dumpable;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.MainHandler;
import com.android.systemui.qs.GlobalSetting;
import com.android.systemui.settings.CurrentUserTracker;
@@ -77,8 +78,9 @@ public class ZenModeControllerImpl extends CurrentUserTracker
private NotificationManager.Policy mConsolidatedNotificationPolicy;
@Inject
- public ZenModeControllerImpl(Context context, @MainHandler Handler handler) {
- super(context);
+ public ZenModeControllerImpl(Context context, @MainHandler Handler handler,
+ BroadcastDispatcher broadcastDispatcher) {
+ super(broadcastDispatcher);
mContext = context;
mModeSetting = new GlobalSetting(mContext, handler, Global.ZEN_MODE) {
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
index 9a58a355c586..128bb213c9d1 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
+++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
@@ -36,6 +36,7 @@ import android.util.Log;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.SystemUI;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.google.android.collect.Sets;
@@ -45,6 +46,9 @@ import org.json.JSONObject;
import java.util.Map;
import java.util.Set;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
/**
* Controls the application of theme overlays across the system for all users.
* This service is responsible for:
@@ -54,15 +58,19 @@ import java.util.Set;
* - Observing work profile changes and applying overlays from the primary user to their
* associated work profiles
*/
+@Singleton
public class ThemeOverlayController extends SystemUI {
private static final String TAG = "ThemeOverlayController";
private static final boolean DEBUG = false;
private ThemeOverlayManager mThemeManager;
private UserManager mUserManager;
+ private BroadcastDispatcher mBroadcastDispatcher;
- public ThemeOverlayController(Context context) {
+ @Inject
+ public ThemeOverlayController(Context context, BroadcastDispatcher broadcastDispatcher) {
super(context);
+ mBroadcastDispatcher = broadcastDispatcher;
}
@Override
@@ -78,13 +86,13 @@ public class ThemeOverlayController extends SystemUI {
final IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_SWITCHED);
filter.addAction(Intent.ACTION_MANAGED_PROFILE_ADDED);
- mContext.registerReceiverAsUser(new BroadcastReceiver() {
+ mBroadcastDispatcher.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (DEBUG) Log.d(TAG, "Updating overlays for user switch / profile added.");
updateThemeOverlays();
}
- }, UserHandle.ALL, filter, null, bgHandler);
+ }, filter, bgHandler, UserHandle.ALL);
mContext.getContentResolver().registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES),
false,
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java
index 2d6027cb324d..ce0032e619e7 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java
@@ -34,6 +34,7 @@ import android.util.ArraySet;
import com.android.internal.util.ArrayUtils;
import com.android.systemui.DejankUtils;
import com.android.systemui.DemoMode;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.MainHandler;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.settings.CurrentUserTracker;
@@ -82,7 +83,7 @@ public class TunerServiceImpl extends TunerService {
*/
@Inject
public TunerServiceImpl(Context context, @MainHandler Handler mainHandler,
- LeakDetector leakDetector) {
+ LeakDetector leakDetector, BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mContentResolver = mContext.getContentResolver();
mLeakDetector = leakDetector;
@@ -95,7 +96,7 @@ public class TunerServiceImpl extends TunerService {
}
mCurrentUser = ActivityManager.getCurrentUser();
- mUserTracker = new CurrentUserTracker(mContext) {
+ mUserTracker = new CurrentUserTracker(broadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
mCurrentUser = newUserId;
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
index 4d12cc9ebcff..2f13f395d057 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
@@ -42,6 +42,9 @@ import android.widget.Toast;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+
+import javax.inject.Inject;
public class UsbDebuggingActivity extends AlertActivity
implements DialogInterface.OnClickListener {
@@ -49,12 +52,20 @@ public class UsbDebuggingActivity extends AlertActivity
private CheckBox mAlwaysAllow;
private UsbDisconnectedReceiver mDisconnectedReceiver;
+ private final BroadcastDispatcher mBroadcastDispatcher;
private String mKey;
+ @Inject
+ public UsbDebuggingActivity(BroadcastDispatcher broadcastDispatcher) {
+ super();
+ mBroadcastDispatcher = broadcastDispatcher;
+ }
+
@Override
public void onCreate(Bundle icicle) {
Window window = getWindow();
- window.addSystemFlags(WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+ window.addSystemFlags(
+ WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
super.onCreate(icicle);
@@ -138,13 +149,13 @@ public class UsbDebuggingActivity extends AlertActivity
public void onStart() {
super.onStart();
IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_STATE);
- registerReceiver(mDisconnectedReceiver, filter);
+ mBroadcastDispatcher.registerReceiver(mDisconnectedReceiver, filter);
}
@Override
protected void onStop() {
if (mDisconnectedReceiver != null) {
- unregisterReceiver(mDisconnectedReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mDisconnectedReceiver);
}
super.onStop();
}
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java
index bafd1f1c25a4..032b72ebff7d 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java
@@ -29,10 +29,19 @@ import android.os.SystemProperties;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+
+import javax.inject.Inject;
public class UsbDebuggingSecondaryUserActivity extends AlertActivity
implements DialogInterface.OnClickListener {
private UsbDisconnectedReceiver mDisconnectedReceiver;
+ private final BroadcastDispatcher mBroadcastDispatcher;
+
+ @Inject
+ public UsbDebuggingSecondaryUserActivity(BroadcastDispatcher broadcastDispatcher) {
+ mBroadcastDispatcher = broadcastDispatcher;
+ }
@Override
public void onCreate(Bundle icicle) {
@@ -74,13 +83,13 @@ public class UsbDebuggingSecondaryUserActivity extends AlertActivity
super.onStart();
IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_STATE);
- registerReceiver(mDisconnectedReceiver, filter);
+ mBroadcastDispatcher.registerReceiver(mDisconnectedReceiver, filter);
}
@Override
protected void onStop() {
if (mDisconnectedReceiver != null) {
- unregisterReceiver(mDisconnectedReceiver);
+ mBroadcastDispatcher.unregisterReceiver(mDisconnectedReceiver);
}
super.onStop();
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java b/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java
index 5ed027d37def..60d76789ff63 100644
--- a/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java
+++ b/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java
@@ -37,7 +37,6 @@ import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.phone.LockIcon;
import com.android.systemui.statusbar.phone.NotificationPanelView;
-import com.android.systemui.statusbar.policy.Clock;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -179,11 +178,6 @@ public class InjectionInflationController {
* Creates the QSCustomizer.
*/
QSCustomizer createQSCustomizer();
-
- /**
- * Creates a Clock.
- */
- Clock createClock();
}
/**
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index 7d283924a0ca..c1da53b09cfc 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -26,6 +26,7 @@ import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.never;
@@ -37,6 +38,7 @@ import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.BiometricSourceType;
@@ -44,6 +46,8 @@ import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.UserHandle;
import android.os.UserManager;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
@@ -58,6 +62,7 @@ import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.systemui.DumpController;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import org.junit.Assert;
@@ -109,6 +114,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
private KeyguardBypassController mKeyguardBypassController;
@Mock
private SubscriptionManager mSubscriptionManager;
+ @Mock
+ private BroadcastDispatcher mBroadcastDispatcher;
private TestableLooper mTestableLooper;
private TestableKeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -143,6 +150,16 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
}
@Test
+ public void testReceiversRegistered() {
+ verify(mBroadcastDispatcher, atLeastOnce()).registerReceiver(
+ eq(mKeyguardUpdateMonitor.mBroadcastReceiver),
+ any(IntentFilter.class), any(Handler.class));
+ verify(mBroadcastDispatcher, atLeastOnce()).registerReceiver(
+ eq(mKeyguardUpdateMonitor.mBroadcastAllReceiver),
+ any(IntentFilter.class), any(Handler.class), eq(UserHandle.ALL));
+ }
+
+ @Test
public void testIgnoresSimStateCallback_rebroadcast() {
Intent intent = new Intent(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
@@ -518,10 +535,9 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
AtomicBoolean mSimStateChanged = new AtomicBoolean(false);
protected TestableKeyguardUpdateMonitor(Context context) {
- super(context, TestableLooper.get(KeyguardUpdateMonitorTest.this)
- .getLooper(), mDumpController);
- context.unregisterReceiver(mBroadcastReceiver);
- context.unregisterReceiver(mBroadcastAllReceiver);
+ super(context,
+ TestableLooper.get(KeyguardUpdateMonitorTest.this).getLooper(),
+ mBroadcastDispatcher, mDumpController);
mStrongAuthTracker = KeyguardUpdateMonitorTest.this.mStrongAuthTracker;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
index 7359fdce462d..1e9000b76c3f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
@@ -50,6 +50,7 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.R.dimen;
import com.android.systemui.ScreenDecorations.TunablePaddingTagListener;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.fragments.FragmentHostManager;
import com.android.systemui.fragments.FragmentService;
import com.android.systemui.statusbar.phone.StatusBar;
@@ -79,9 +80,13 @@ public class ScreenDecorationsTest extends SysuiTestCase {
private WindowManager mWindowManager;
private FragmentService mFragmentService;
private FragmentHostManager mFragmentHostManager;
- private TunerService mTunerService;
private StatusBarWindowView mView;
private TunablePaddingService mTunablePaddingService;
+ private Handler mMainHandler;
+ @Mock
+ private TunerService mTunerService;
+ @Mock
+ private BroadcastDispatcher mBroadcastDispatcher;
@Mock private Lazy<StatusBar> mStatusBarLazy;
@Before
@@ -89,10 +94,8 @@ public class ScreenDecorationsTest extends SysuiTestCase {
MockitoAnnotations.initMocks(this);
mTestableLooper = TestableLooper.get(this);
- mDependency.injectTestDependency(Dependency.MAIN_HANDLER,
- new Handler(mTestableLooper.getLooper()));
+ mMainHandler = new Handler(mTestableLooper.getLooper());
mTunablePaddingService = mDependency.injectMockDependency(TunablePaddingService.class);
- mTunerService = mDependency.injectMockDependency(TunerService.class);
mFragmentService = mDependency.injectMockDependency(FragmentService.class);
mWindowManager = mock(WindowManager.class);
@@ -108,7 +111,8 @@ public class ScreenDecorationsTest extends SysuiTestCase {
when(mFragmentService.getFragmentHostManager(any())).thenReturn(mFragmentHostManager);
- mScreenDecorations = new ScreenDecorations(mContext, mStatusBarLazy) {
+ mScreenDecorations = new ScreenDecorations(mContext, mStatusBarLazy, mMainHandler,
+ mBroadcastDispatcher, mTunerService) {
@Override
public void start() {
super.start();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java
index a766885297fa..7d556236b518 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java
@@ -17,6 +17,7 @@ package com.android.systemui;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
@@ -34,11 +35,14 @@ import android.testing.AndroidTestingRunner;
import androidx.test.filters.SmallTest;
import com.android.settingslib.SliceBroadcastRelay;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
@RunWith(AndroidTestingRunner.class)
@SmallTest
@@ -47,11 +51,15 @@ public class SliceBroadcastRelayHandlerTest extends SysuiTestCase {
private static final String TEST_ACTION = "com.android.systemui.action.TEST_ACTION";
private SliceBroadcastRelayHandler mRelayHandler;
private Context mSpyContext;
+ @Mock
+ private BroadcastDispatcher mBroadcastDispatcher;
+
@Before
public void setup() {
+ MockitoAnnotations.initMocks(this);
mSpyContext = spy(mContext);
- mRelayHandler = new SliceBroadcastRelayHandler(mSpyContext);
+ mRelayHandler = new SliceBroadcastRelayHandler(mSpyContext, mBroadcastDispatcher);
}
@Test
@@ -136,6 +144,16 @@ public class SliceBroadcastRelayHandlerTest extends SysuiTestCase {
verify(Receiver.sReceiver, timeout(2000)).onReceive(any(), any());
}
+ @Test
+ public void testRegisteredWithDispatcher() {
+ mRelayHandler.start();
+
+ verify(mBroadcastDispatcher)
+ .registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class));
+ verify(mSpyContext, never())
+ .registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class));
+ }
+
public static class Receiver extends BroadcastReceiver {
private static BroadcastReceiver sReceiver;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
index 316b891080ce..2ed0b4ffa0f4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
@@ -45,6 +45,7 @@ import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.util.sensors.FakeSensorManager;
import org.junit.Before;
@@ -66,6 +67,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
FakeSensorManager mSensorManager;
@Mock
DozeHost mDozeHost;
+ @Mock
+ BroadcastDispatcher mBroadcastDispatcher;
DozeScreenBrightness mScreen;
@Before
@@ -82,7 +85,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
mSensorManager = new FakeSensorManager(mContext);
mSensor = mSensorManager.getFakeLightSensor();
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
- mSensor.getSensor(), mDozeHost, null /* handler */,
+ mSensor.getSensor(), mBroadcastDispatcher, mDozeHost, null /* handler */,
DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY,
true /* debuggable */);
}
@@ -185,7 +188,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
@Test
public void testNullSensor() throws Exception {
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
- null /* sensor */, mDozeHost, null /* handler */,
+ null /* sensor */, mBroadcastDispatcher, mDozeHost, null /* handler */,
DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY,
true /* debuggable */);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
index 756227e58ec2..226bf6b3abce 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
@@ -39,6 +39,7 @@ import android.testing.TestableLooper.RunWithLooper;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.sensors.AsyncSensorManager;
@@ -66,6 +67,8 @@ public class DozeTriggersTest extends SysuiTestCase {
private DozeHost mHost;
@Mock
private AlarmManager mAlarmManager;
+ @Mock
+ private BroadcastDispatcher mBroadcastDispatcher;
private DozeTriggers mTriggers;
private FakeSensorManager mSensors;
private Sensor mTapSensor;
@@ -87,7 +90,7 @@ public class DozeTriggersTest extends SysuiTestCase {
mTriggers = new DozeTriggers(mContext, mMachine, mHost, mAlarmManager, config, parameters,
asyncSensorManager, Handler.createAsync(Looper.myLooper()), wakeLock, true,
- mDockManagerFake, mProximitySensor, mock(DozeLog.class));
+ mDockManagerFake, mProximitySensor, mock(DozeLog.class), mBroadcastDispatcher);
waitForSensorManager();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
index 9312ed26c217..c8152792be91 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -37,6 +37,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.classifier.FalsingManagerFake;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
@@ -60,6 +61,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private @Mock StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private @Mock StatusBarWindowController mStatusBarWindowController;
private @Mock SystemUIFactory mSystemUIFactory;
+ private @Mock BroadcastDispatcher mBroadcastDispatcher;
private FalsingManagerFake mFalsingManager;
@@ -81,7 +83,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
TestableLooper.get(this).runWithLooper(() -> {
mViewMediator = new KeyguardViewMediator(
- mContext, mFalsingManager, mLockPatternUtils, mSystemUIFactory);
+ mContext, mFalsingManager, mLockPatternUtils, mBroadcastDispatcher,
+ mSystemUIFactory);
});
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java
index 6e726cf6bf8d..187c72a065a7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java
@@ -35,6 +35,7 @@ import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.keyguard.WorkLockActivity;
import org.junit.Before;
@@ -55,12 +56,13 @@ public class WorkLockActivityTest extends SysuiTestCase {
private @Mock DevicePolicyManager mDevicePolicyManager;
private @Mock KeyguardManager mKeyguardManager;
private @Mock Context mContext;
+ private @Mock BroadcastDispatcher mBroadcastDispatcher;
private WorkLockActivity mActivity;
private static class WorkLockActivityTestable extends WorkLockActivity {
- WorkLockActivityTestable(Context baseContext) {
- super();
+ WorkLockActivityTestable(Context baseContext, BroadcastDispatcher broadcastDispatcher) {
+ super(broadcastDispatcher);
attachBaseContext(baseContext);
}
}
@@ -77,7 +79,7 @@ public class WorkLockActivityTest extends SysuiTestCase {
if (Looper.myLooper() == null) {
Looper.prepare();
}
- mActivity = new WorkLockActivityTestable(mContext);
+ mActivity = new WorkLockActivityTestable(mContext, mBroadcastDispatcher);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt
index 462c82ee0b36..098521fbda51 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt
@@ -36,6 +36,7 @@ import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.appops.AppOpItem
import com.android.systemui.appops.AppOpsController
+import com.android.systemui.broadcast.BroadcastDispatcher
import org.hamcrest.Matchers.hasItem
import org.hamcrest.Matchers.not
import org.hamcrest.Matchers.nullValue
@@ -62,7 +63,6 @@ import org.mockito.Mockito.doReturn
import org.mockito.Mockito.mock
import org.mockito.Mockito.never
import org.mockito.Mockito.reset
-import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
import org.mockito.MockitoAnnotations
@@ -89,6 +89,8 @@ class PrivacyItemControllerTest : SysuiTestCase() {
private lateinit var callback: PrivacyItemController.Callback
@Mock
private lateinit var userManager: UserManager
+ @Mock
+ private lateinit var broadcastDispatcher: BroadcastDispatcher
@Captor
private lateinit var argCaptor: ArgumentCaptor<List<PrivacyItem>>
@Captor
@@ -99,7 +101,7 @@ class PrivacyItemControllerTest : SysuiTestCase() {
private lateinit var handler: Handler
fun PrivacyItemController(context: Context) =
- PrivacyItemController(context, appOpsController, handler, handler)
+ PrivacyItemController(context, appOpsController, handler, handler, broadcastDispatcher)
@Before
fun setup() {
@@ -180,14 +182,12 @@ class PrivacyItemControllerTest : SysuiTestCase() {
@Test
fun testRegisterReceiver_allUsers() {
- val spiedContext = spy(mContext)
- val itemController = PrivacyItemController(spiedContext)
- itemController.addCallback(callback)
+ privacyItemController.addCallback(callback)
testableLooper.processAllMessages()
- verify(spiedContext, atLeastOnce()).registerReceiverAsUser(
- eq(itemController.userSwitcherReceiver), eq(UserHandle.ALL), any(), eq(null),
- eq(null))
- verify(spiedContext, never()).unregisterReceiver(eq(itemController.userSwitcherReceiver))
+ verify(broadcastDispatcher, atLeastOnce()).registerReceiver(
+ eq(privacyItemController.userSwitcherReceiver), any(), eq(null), eq(UserHandle.ALL))
+ verify(broadcastDispatcher, never())
+ .unregisterReceiver(eq(privacyItemController.userSwitcherReceiver))
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
index ca30bed3892c..a31fc3a611cf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
@@ -39,6 +39,7 @@ import com.android.systemui.DumpController;
import com.android.systemui.R;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.SysuiBaseFragmentTest;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.tileimpl.QSFactoryImpl;
import com.android.systemui.shared.plugins.PluginManager;
@@ -98,7 +99,8 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
QSTileHost host = new QSTileHost(mContext, mock(StatusBarIconController.class),
mock(QSFactoryImpl.class), new Handler(), Looper.myLooper(),
mock(PluginManager.class), mock(TunerService.class),
- () -> mock(AutoTileManager.class), mock(DumpController.class));
+ () -> mock(AutoTileManager.class), mock(DumpController.class),
+ mock(BroadcastDispatcher.class));
qs.setHost(host);
qs.setListening(true);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
index 77520140b1a3..0247c2f79ee7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
@@ -41,6 +41,7 @@ import com.android.internal.util.CollectionUtils;
import com.android.systemui.DumpController;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.qs.QSFactory;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.qs.tileimpl.QSFactoryImpl;
@@ -84,6 +85,8 @@ public class QSTileHostTest extends SysuiTestCase {
@Mock
private DumpController mDumpController;
@Mock
+ private BroadcastDispatcher mBroadcastDispatcher;
+ @Mock
private QSTile.State mMockState;
private Handler mHandler;
private TestableLooper mLooper;
@@ -96,7 +99,7 @@ public class QSTileHostTest extends SysuiTestCase {
mHandler = new Handler(mLooper.getLooper());
mQSTileHost = new TestQSTileHost(mContext, mIconController, mDefaultFactory, mHandler,
mLooper.getLooper(),
- mPluginManager, mTunerService, mAutoTiles, mDumpController);
+ mPluginManager, mTunerService, mAutoTiles, mDumpController, mBroadcastDispatcher);
setUpTileFactory();
Settings.Secure.putStringForUser(mContext.getContentResolver(), QSTileHost.TILES_SETTING,
"", ActivityManager.getCurrentUser());
@@ -168,9 +171,10 @@ public class QSTileHostTest extends SysuiTestCase {
TestQSTileHost(Context context, StatusBarIconController iconController,
QSFactoryImpl defaultFactory, Handler mainHandler, Looper bgLooper,
PluginManager pluginManager, TunerService tunerService,
- Provider<AutoTileManager> autoTiles, DumpController dumpController) {
+ Provider<AutoTileManager> autoTiles, DumpController dumpController,
+ BroadcastDispatcher broadcastDispatcher) {
super(context, iconController, defaultFactory, mainHandler, bgLooper, pluginManager,
- tunerService, autoTiles, dumpController);
+ tunerService, autoTiles, dumpController, broadcastDispatcher);
}
@Override
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
index 11b0c69e8a41..9e5e582bf5e7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
@@ -45,6 +45,7 @@ import android.test.suitebuilder.annotation.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import org.junit.After;
import org.junit.Before;
@@ -59,6 +60,8 @@ public class TileLifecycleManagerTest extends SysuiTestCase {
private final PackageManagerAdapter mMockPackageManagerAdapter =
Mockito.mock(PackageManagerAdapter.class);
+ private final BroadcastDispatcher mMockBroadcastDispatcher =
+ Mockito.mock(BroadcastDispatcher.class);
private final IQSTileService.Stub mMockTileService = Mockito.mock(IQSTileService.Stub.class);
private ComponentName mTileServiceComponentName;
private Intent mTileServiceIntent;
@@ -87,7 +90,8 @@ public class TileLifecycleManagerTest extends SysuiTestCase {
Mockito.mock(IQSService.class), new Tile(),
mTileServiceIntent,
mUser,
- mMockPackageManagerAdapter);
+ mMockPackageManagerAdapter,
+ mMockBroadcastDispatcher);
}
@After
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
index d18cebba62b4..824c50dc82bb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
@@ -32,6 +32,7 @@ import android.testing.TestableLooper.RunWithLooper;
import com.android.systemui.DumpController;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.qs.tileimpl.QSFactoryImpl;
import com.android.systemui.shared.plugins.PluginManager;
@@ -45,7 +46,9 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
@@ -57,21 +60,37 @@ public class TileServicesTest extends SysuiTestCase {
private TileServices mTileService;
private ArrayList<TileServiceManager> mManagers;
+ @Mock
+ private BroadcastDispatcher mBroadcastDispatcher;
+ @Mock
+ private StatusBarIconController mStatusBarIconController;
+ @Mock
+ private QSFactoryImpl mQSFactory;
+ @Mock
+ private PluginManager mPluginManager;
+ @Mock
+ private TunerService mTunerService;
+ @Mock
+ private AutoTileManager mAutoTileManager;
+ @Mock
+ private DumpController mDumpController;
@Before
public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
mDependency.injectMockDependency(BluetoothController.class);
mManagers = new ArrayList<>();
QSTileHost host = new QSTileHost(mContext,
- mock(StatusBarIconController.class),
- mock(QSFactoryImpl.class),
+ mStatusBarIconController,
+ mQSFactory,
new Handler(),
Looper.myLooper(),
- mock(PluginManager.class),
- mock(TunerService.class),
- () -> mock(AutoTileManager.class),
- mock(DumpController.class));
- mTileService = new TestTileServices(host, Looper.getMainLooper());
+ mPluginManager,
+ mTunerService,
+ () -> mAutoTileManager,
+ mDumpController,
+ mBroadcastDispatcher);
+ mTileService = new TestTileServices(host, Looper.getMainLooper(), mBroadcastDispatcher);
}
@After
@@ -138,12 +157,14 @@ public class TileServicesTest extends SysuiTestCase {
}
private class TestTileServices extends TileServices {
- public TestTileServices(QSTileHost host, Looper looper) {
- super(host, looper);
+ TestTileServices(QSTileHost host, Looper looper,
+ BroadcastDispatcher broadcastDispatcher) {
+ super(host, looper, broadcastDispatcher);
}
@Override
- protected TileServiceManager onCreateTileService(ComponentName component, Tile qsTile) {
+ protected TileServiceManager onCreateTileService(ComponentName component, Tile qsTile,
+ BroadcastDispatcher broadcastDispatcher) {
TileServiceManager manager = mock(TileServiceManager.class);
mManagers.add(manager);
when(manager.isLifecycleStarted()).thenReturn(true);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java b/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java
index 4162bc1da479..1b515c6bbdbd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java
@@ -21,9 +21,12 @@ import android.content.Intent;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
/**
* Testing functionality of the current user tracker
@@ -33,10 +36,13 @@ public class CurrentUserTrackerTest extends SysuiTestCase {
private CurrentUserTracker mTracker;
private CurrentUserTracker.UserReceiver mReceiver;
+ @Mock
+ private BroadcastDispatcher mBroadcastDispatcher;
@Before
public void setUp() {
- mReceiver = new CurrentUserTracker.UserReceiver(getContext());
+ MockitoAnnotations.initMocks(this);
+ mReceiver = new CurrentUserTracker.UserReceiver(mBroadcastDispatcher);
mTracker = new CurrentUserTracker(mReceiver) {
@Override
public void onUserSwitched(int newUserId) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java
index 85a0fbd74550..548f7a86adf3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java
@@ -47,6 +47,7 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationData;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -74,6 +75,7 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase {
@Mock private NotificationData mNotificationData;
@Mock private DeviceProvisionedController mDeviceProvisionedController;
@Mock private StatusBarKeyguardViewManager mKeyguardViewManager;
+ @Mock private BroadcastDispatcher mBroadcastDispatcher;
private int mCurrentUserId;
private TestNotificationLockscreenUserManager mLockscreenUserManager;
@@ -194,7 +196,7 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase {
private class TestNotificationLockscreenUserManager
extends NotificationLockscreenUserManagerImpl {
public TestNotificationLockscreenUserManager(Context context) {
- super(context);
+ super(context, mBroadcastDispatcher);
}
public BroadcastReceiver getBaseBroadcastReceiverForTest() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
index e626d083d366..48ed4ba2224c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
@@ -27,6 +27,7 @@ import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.power.EnhancedEstimates;
import org.junit.Assert;
@@ -44,13 +45,15 @@ public class BatteryControllerTest extends SysuiTestCase {
@Mock
private PowerManager mPowerManager;
+ @Mock
+ private BroadcastDispatcher mBroadcastDispatcher;
private BatteryControllerImpl mBatteryController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mBatteryController = new BatteryControllerImpl(getContext(), mock(EnhancedEstimates.class),
- mPowerManager);
+ mPowerManager, mBroadcastDispatcher);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java
index 3dcb34aac814..5f772b2548ff 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java
@@ -27,6 +27,7 @@ import android.testing.TestableLooper.RunWithLooper;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.policy.LocationController.LocationChangeCallback;
import org.junit.Before;
@@ -44,7 +45,8 @@ public class LocationControllerImplTest extends SysuiTestCase {
@Before
public void setup() {
mLocationController = spy(new LocationControllerImpl(mContext,
- TestableLooper.get(this).getLooper()));
+ TestableLooper.get(this).getLooper(),
+ mock(BroadcastDispatcher.class)));
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
index c03f07e59129..4d866136c915 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
@@ -56,6 +56,7 @@ import com.android.settingslib.graph.SignalDrawable;
import com.android.settingslib.net.DataUsageController;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
@@ -93,6 +94,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
protected WifiManager mMockWm;
protected SubscriptionManager mMockSm;
protected TelephonyManager mMockTm;
+ protected BroadcastDispatcher mMockBd;
protected Config mConfig;
protected CallbackHandler mCallbackHandler;
protected SubscriptionDefaults mMockSubDefaults;
@@ -130,6 +132,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mMockTm = mock(TelephonyManager.class);
mMockSm = mock(SubscriptionManager.class);
mMockCm = mock(ConnectivityManager.class);
+ mMockBd = mock(BroadcastDispatcher.class);
mMockSubDefaults = mock(SubscriptionDefaults.class);
mNetCapabilities = new NetworkCapabilities();
when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
@@ -157,7 +160,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
mConfig, TestableLooper.get(this).getLooper(), mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
- mMockSubDefaults, mMockProvisionController);
+ mMockSubDefaults, mMockProvisionController, mMockBd);
setupNetworkController();
// Trigger blank callbacks to always get the current state (some tests don't trigger
@@ -208,7 +211,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mConfig, TestableLooper.get(this).getLooper(), mCallbackHandler,
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class), mMockSubDefaults,
- mock(DeviceProvisionedController.class));
+ mock(DeviceProvisionedController.class), mMockBd);
setupNetworkController();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
index aa4723acba62..ab74caa95e61 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
@@ -108,7 +108,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
mConfig, Looper.getMainLooper(), mCallbackHandler,
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class), mMockSubDefaults,
- mock(DeviceProvisionedController.class));
+ mock(DeviceProvisionedController.class), mMockBd);
setupNetworkController();
setupDefaultSignal();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
index 0b53c486356f..57dcbf21e147 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
@@ -61,7 +61,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
mConfig, Looper.getMainLooper(), mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
- mMockSubDefaults, mock(DeviceProvisionedController.class));
+ mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd);
setupNetworkController();
verifyLastMobileDataIndicators(false, -1, 0);
@@ -123,7 +123,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
mConfig, Looper.getMainLooper(), mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
- mMockSubDefaults, mock(DeviceProvisionedController.class));
+ mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd);
setupNetworkController();
// No Subscriptions.
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java
index 97542a9e5966..0c9130d08d6d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java
@@ -45,6 +45,7 @@ import android.test.suitebuilder.annotation.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.policy.SecurityController.SecurityControllerCallback;
import org.junit.After;
@@ -99,7 +100,7 @@ public class SecurityControllerTest extends SysuiTestCase implements SecurityCon
// TODO: Migrate this test to TestableLooper and use a handler attached
// to that.
mSecurityController = new SecurityControllerImpl(mContext,
- new Handler(Looper.getMainLooper()), this);
+ new Handler(Looper.getMainLooper()), mock(BroadcastDispatcher.class), this);
}
@After
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java
index 47e449212fa5..dcf0ef781b07 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java
@@ -33,6 +33,7 @@ import android.testing.TestableLooper.RunWithLooper;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.policy.ZenModeController.Callback;
import org.junit.Before;
@@ -51,6 +52,8 @@ public class ZenModeControllerImplTest extends SysuiTestCase {
NotificationManager mNm;
@Mock
ZenModeConfig mConfig;
+ @Mock
+ BroadcastDispatcher mBroadcastDispatcher;
private ZenModeControllerImpl mController;
@@ -60,7 +63,8 @@ public class ZenModeControllerImplTest extends SysuiTestCase {
mContext.addMockSystemService(NotificationManager.class, mNm);
when(mNm.getZenModeConfig()).thenReturn(mConfig);
- mController = new ZenModeControllerImpl(mContext, Handler.createAsync(Looper.myLooper()));
+ mController = new ZenModeControllerImpl(mContext, Handler.createAsync(Looper.myLooper()),
+ mBroadcastDispatcher);
}
@Test