summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Darrell Shi <darrellshi@google.com> 2023-04-03 23:03:02 +0000
committer Darrell Shi <darrellshi@google.com> 2023-04-24 23:44:44 +0000
commitbfbfff43272f53dba17619c390db044b04a9df9c (patch)
tree0f562f4efe35953924739bd1540daa368484ebc2
parent1d8d37bb35795b5b2991b7eb34da96756fb424e1 (diff)
Conditions Monitor as singleton.
This change refactors Monitor usage across SystemUI to be singleton to prevent duplicate monitoring of the same conditions. This monitor by default requires the process is running as the system user. Test: add local logging to verify Monitor only constructed once Bug: 276475674 Change-Id: I344da95f985f7380f2ca2e5d8266449f366f59ae
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/condition/Monitor.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/complication/ComplicationTypesUpdater.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/complication/DreamClockTimeComplication.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/complication/DreamHomeControlsComplication.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/complication/SmartSpaceComplication.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/qualifiers/SystemUser.kt20
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/AssistantAttentionMonitor.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/DreamMonitor.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayRegistrant.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java26
11 files changed, 54 insertions, 48 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/condition/Monitor.java b/packages/SystemUI/shared/src/com/android/systemui/shared/condition/Monitor.java
index 209d5e80e2d2..43df08df9f45 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/condition/Monitor.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/condition/Monitor.java
@@ -32,8 +32,10 @@ import java.util.concurrent.Executor;
import javax.inject.Inject;
/**
- * {@link Monitor} takes in a set of conditions, monitors whether all of them have
- * been fulfilled, and informs any registered listeners.
+ * {@link Monitor} allows {@link Subscription}s to a set of conditions and monitors whether all of
+ * them have been fulfilled.
+ * <p>
+ * This class should be used as a singleton, to prevent duplicate monitoring of the same conditions.
*/
public class Monitor {
private final String mTag = getClass().getSimpleName();
diff --git a/packages/SystemUI/src/com/android/systemui/complication/ComplicationTypesUpdater.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationTypesUpdater.java
index 016891df4b3b..a334c1ed2338 100644
--- a/packages/SystemUI/src/com/android/systemui/complication/ComplicationTypesUpdater.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationTypesUpdater.java
@@ -16,8 +16,6 @@
package com.android.systemui.complication;
-import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
-
import android.database.ContentObserver;
import android.os.UserHandle;
import android.provider.Settings;
@@ -25,6 +23,7 @@ import android.provider.Settings;
import com.android.settingslib.dream.DreamBackend;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dagger.qualifiers.SystemUser;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.util.condition.ConditionalCoreStartable;
@@ -33,7 +32,6 @@ import com.android.systemui.util.settings.SecureSettings;
import java.util.concurrent.Executor;
import javax.inject.Inject;
-import javax.inject.Named;
/**
* {@link ComplicationTypesUpdater} observes the state of available complication types set by the
@@ -53,7 +51,7 @@ public class ComplicationTypesUpdater extends ConditionalCoreStartable {
@Main Executor executor,
SecureSettings secureSettings,
DreamOverlayStateController dreamOverlayStateController,
- @Named(DREAM_PRETEXT_MONITOR) Monitor monitor) {
+ @SystemUser Monitor monitor) {
super(monitor);
mDreamBackend = dreamBackend;
mExecutor = executor;
diff --git a/packages/SystemUI/src/com/android/systemui/complication/DreamClockTimeComplication.java b/packages/SystemUI/src/com/android/systemui/complication/DreamClockTimeComplication.java
index 5020480f8d60..9c3448b91b39 100644
--- a/packages/SystemUI/src/com/android/systemui/complication/DreamClockTimeComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/DreamClockTimeComplication.java
@@ -18,11 +18,11 @@ package com.android.systemui.complication;
import static com.android.systemui.complication.dagger.DreamClockTimeComplicationModule.DREAM_CLOCK_TIME_COMPLICATION_VIEW;
import static com.android.systemui.complication.dagger.RegisteredComplicationsModule.DREAM_CLOCK_TIME_COMPLICATION_LAYOUT_PARAMS;
-import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
import android.view.View;
import com.android.systemui.CoreStartable;
+import com.android.systemui.dagger.qualifiers.SystemUser;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.util.condition.ConditionalCoreStartable;
@@ -74,7 +74,7 @@ public class DreamClockTimeComplication implements Complication {
public Registrant(
DreamOverlayStateController dreamOverlayStateController,
DreamClockTimeComplication dreamClockTimeComplication,
- @Named(DREAM_PRETEXT_MONITOR) Monitor monitor) {
+ @SystemUser Monitor monitor) {
super(monitor);
mDreamOverlayStateController = dreamOverlayStateController;
mComplication = dreamClockTimeComplication;
diff --git a/packages/SystemUI/src/com/android/systemui/complication/DreamHomeControlsComplication.java b/packages/SystemUI/src/com/android/systemui/complication/DreamHomeControlsComplication.java
index 8f192de8c4a5..f973aeef0e6b 100644
--- a/packages/SystemUI/src/com/android/systemui/complication/DreamHomeControlsComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/DreamHomeControlsComplication.java
@@ -21,7 +21,6 @@ import static com.android.systemui.complication.dagger.RegisteredComplicationsMo
import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.AVAILABLE;
import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.AVAILABLE_AFTER_UNLOCK;
import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.UNAVAILABLE;
-import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
import android.content.Context;
import android.content.Intent;
@@ -40,6 +39,7 @@ import com.android.systemui.controls.dagger.ControlsComponent;
import com.android.systemui.controls.management.ControlsListingController;
import com.android.systemui.controls.ui.ControlsActivity;
import com.android.systemui.controls.ui.ControlsUiController;
+import com.android.systemui.dagger.qualifiers.SystemUser;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.shared.condition.Monitor;
@@ -108,7 +108,7 @@ public class DreamHomeControlsComplication implements Complication {
public Registrant(DreamHomeControlsComplication complication,
DreamOverlayStateController dreamOverlayStateController,
ControlsComponent controlsComponent,
- @Named(DREAM_PRETEXT_MONITOR) Monitor monitor) {
+ @SystemUser Monitor monitor) {
super(monitor);
mComplication = complication;
mControlsComponent = controlsComponent;
diff --git a/packages/SystemUI/src/com/android/systemui/complication/SmartSpaceComplication.java b/packages/SystemUI/src/com/android/systemui/complication/SmartSpaceComplication.java
index 2f5ef6da6912..b98794ef8026 100644
--- a/packages/SystemUI/src/com/android/systemui/complication/SmartSpaceComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/SmartSpaceComplication.java
@@ -17,7 +17,6 @@
package com.android.systemui.complication;
import static com.android.systemui.complication.dagger.RegisteredComplicationsModule.DREAM_SMARTSPACE_LAYOUT_PARAMS;
-import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
import android.content.Context;
import android.os.Parcelable;
@@ -26,6 +25,7 @@ import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.android.systemui.CoreStartable;
+import com.android.systemui.dagger.qualifiers.SystemUser;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.dreams.smartspace.DreamSmartspaceController;
import com.android.systemui.flags.FeatureFlags;
@@ -88,7 +88,7 @@ public class SmartSpaceComplication implements Complication {
DreamOverlayStateController dreamOverlayStateController,
SmartSpaceComplication smartSpaceComplication,
DreamSmartspaceController smartSpaceController,
- @Named(DREAM_PRETEXT_MONITOR) Monitor monitor,
+ @SystemUser Monitor monitor,
FeatureFlags featureFlags) {
super(monitor);
mDreamOverlayStateController = dreamOverlayStateController;
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
index dff2c0e91f1f..8e6e0dd37a90 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
@@ -42,6 +42,7 @@ import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayModule;
import com.android.systemui.complication.dagger.ComplicationComponent;
import com.android.systemui.controls.dagger.ControlsModule;
import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dagger.qualifiers.SystemUser;
import com.android.systemui.demomode.dagger.DemoModeModule;
import com.android.systemui.doze.dagger.DozeComponent;
import com.android.systemui.dreams.dagger.DreamModule;
@@ -60,6 +61,7 @@ import com.android.systemui.people.PeopleModule;
import com.android.systemui.plugins.BcSmartspaceConfigPlugin;
import com.android.systemui.plugins.BcSmartspaceDataPlugin;
import com.android.systemui.privacy.PrivacyModule;
+import com.android.systemui.process.condition.SystemProcessCondition;
import com.android.systemui.qrcodescanner.dagger.QRCodeScannerModule;
import com.android.systemui.qs.FgsManagerController;
import com.android.systemui.qs.FgsManagerControllerImpl;
@@ -74,6 +76,7 @@ import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeModule;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolatorImpl;
+import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.smartspace.dagger.SmartspaceModule;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
@@ -126,6 +129,7 @@ import dagger.BindsOptionalOf;
import dagger.Module;
import dagger.Provides;
+import java.util.Collections;
import java.util.Optional;
import java.util.concurrent.Executor;
@@ -232,6 +236,17 @@ public abstract class SystemUIModule {
return state;
}
+ /**
+ * Provides the monitor for SystemUI that requires the process running as the system user.
+ */
+ @SysUISingleton
+ @Provides
+ @SystemUser
+ static Monitor provideSystemUserMonitor(@Main Executor executor,
+ SystemProcessCondition systemProcessCondition) {
+ return new Monitor(executor, Collections.singleton(systemProcessCondition));
+ }
+
@BindsOptionalOf
abstract CommandQueue optionalCommandQueue();
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/SystemUser.kt b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/SystemUser.kt
new file mode 100644
index 000000000000..6878a52b672d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/SystemUser.kt
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.dagger.qualifiers
+
+import javax.inject.Qualifier
+
+@Qualifier @MustBeDocumented @Retention(AnnotationRetention.RUNTIME) annotation class SystemUser
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/AssistantAttentionMonitor.java b/packages/SystemUI/src/com/android/systemui/dreams/AssistantAttentionMonitor.java
index 49d7f7810740..822cfb89e706 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/AssistantAttentionMonitor.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/AssistantAttentionMonitor.java
@@ -19,6 +19,7 @@ package com.android.systemui.dreams;
import android.util.Log;
import com.android.systemui.CoreStartable;
+import com.android.systemui.dagger.qualifiers.SystemUser;
import com.android.systemui.dreams.callbacks.AssistantAttentionCallback;
import com.android.systemui.dreams.conditions.AssistantAttentionCondition;
import com.android.systemui.shared.condition.Monitor;
@@ -38,7 +39,7 @@ public class AssistantAttentionMonitor implements CoreStartable {
@Inject
public AssistantAttentionMonitor(
- Monitor monitor,
+ @SystemUser Monitor monitor,
AssistantAttentionCondition assistantAttentionCondition,
AssistantAttentionCallback callback) {
mConditionMonitor = monitor;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamMonitor.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamMonitor.java
index 7f567aa334a6..e9ebd3b9c91d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamMonitor.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamMonitor.java
@@ -16,11 +16,10 @@
package com.android.systemui.dreams;
-import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
-
import android.util.Log;
import com.android.systemui.CoreStartable;
+import com.android.systemui.dagger.qualifiers.SystemUser;
import com.android.systemui.dreams.callbacks.DreamStatusBarStateCallback;
import com.android.systemui.dreams.conditions.DreamCondition;
import com.android.systemui.flags.RestartDozeListener;
@@ -28,7 +27,6 @@ import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.util.condition.ConditionalCoreStartable;
import javax.inject.Inject;
-import javax.inject.Named;
/**
* A {@link CoreStartable} to retain a monitor for tracking dreaming.
@@ -42,13 +40,11 @@ public class DreamMonitor extends ConditionalCoreStartable {
private final DreamStatusBarStateCallback mCallback;
private RestartDozeListener mRestartDozeListener;
-
@Inject
- public DreamMonitor(Monitor monitor, DreamCondition dreamCondition,
- @Named(DREAM_PRETEXT_MONITOR) Monitor pretextMonitor,
+ public DreamMonitor(@SystemUser Monitor monitor, DreamCondition dreamCondition,
DreamStatusBarStateCallback callback,
RestartDozeListener restartDozeListener) {
- super(pretextMonitor);
+ super(monitor);
mConditionMonitor = monitor;
mDreamCondition = dreamCondition;
mCallback = callback;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayRegistrant.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayRegistrant.java
index a2dcdf52ad3c..80e68cfbff21 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayRegistrant.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayRegistrant.java
@@ -17,7 +17,6 @@
package com.android.systemui.dreams;
import static com.android.systemui.dreams.dagger.DreamModule.DREAM_OVERLAY_SERVICE_COMPONENT;
-import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -35,6 +34,7 @@ import android.service.dreams.IDreamManager;
import android.util.Log;
import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dagger.qualifiers.SystemUser;
import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.util.condition.ConditionalCoreStartable;
@@ -105,7 +105,7 @@ public class DreamOverlayRegistrant extends ConditionalCoreStartable {
@Inject
public DreamOverlayRegistrant(Context context, @Main Resources resources,
@Named(DREAM_OVERLAY_SERVICE_COMPONENT) ComponentName dreamOverlayServiceComponent,
- @Named(DREAM_PRETEXT_MONITOR) Monitor monitor) {
+ @SystemUser Monitor monitor) {
super(monitor);
mContext = context;
mResources = resources;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
index 1271645dac4e..c61b47758ab7 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
@@ -31,22 +31,14 @@ import com.android.systemui.dreams.DreamOverlayNotificationCountProvider;
import com.android.systemui.dreams.DreamOverlayService;
import com.android.systemui.dreams.complication.dagger.ComplicationComponent;
import com.android.systemui.dreams.touch.scrim.dagger.ScrimModule;
-import com.android.systemui.process.condition.SystemProcessCondition;
-import com.android.systemui.shared.condition.Condition;
-import com.android.systemui.shared.condition.Monitor;
-import dagger.Binds;
import dagger.Module;
import dagger.Provides;
-import dagger.multibindings.IntoSet;
import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.Executor;
import javax.inject.Named;
-
/**
* Dagger Module providing Dream-related functionality.
*/
@@ -65,11 +57,8 @@ public interface DreamModule {
String DREAM_OVERLAY_ENABLED = "dream_overlay_enabled";
String DREAM_SUPPORTED = "dream_supported";
- String DREAM_PRETEXT_CONDITIONS = "dream_pretext_conditions";
- String DREAM_PRETEXT_MONITOR = "dream_prtext_monitor";
String DREAM_OVERLAY_WINDOW_TITLE = "dream_overlay_window_title";
-
/**
* Provides the dream component
*/
@@ -129,21 +118,6 @@ public interface DreamModule {
}
/** */
- @Binds
- @IntoSet
- @Named(DREAM_PRETEXT_CONDITIONS)
- Condition bindSystemProcessCondition(SystemProcessCondition condition);
-
- /** */
- @Provides
- @Named(DREAM_PRETEXT_MONITOR)
- static Monitor providesDockerPretextMonitor(
- @Main Executor executor,
- @Named(DREAM_PRETEXT_CONDITIONS) Set<Condition> pretextConditions) {
- return new Monitor(executor, pretextConditions);
- }
-
- /** */
@Provides
@Named(DREAM_OVERLAY_WINDOW_TITLE)
static String providesDreamOverlayWindowTitle(@Main Resources resources) {