Loading packages/SystemUI/src/com/android/systemui/communal/CommunalSourceMonitor.java +7 −4 Original line number Diff line number Diff line Loading @@ -16,12 +16,14 @@ package com.android.systemui.communal; import static com.android.systemui.communal.dagger.CommunalModule.COMMUNAL_CONDITIONS; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.communal.conditions.CommunalConditionsMonitor; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.util.condition.Monitor; import com.google.android.collect.Lists; Loading @@ -31,6 +33,7 @@ import java.util.Iterator; import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Named; /** * A Monitor for reporting a {@link CommunalSource} presence. Loading @@ -42,7 +45,7 @@ public class CommunalSourceMonitor { // A list of {@link Callback} that have registered to receive updates. private final ArrayList<WeakReference<Callback>> mCallbacks = Lists.newArrayList(); private final CommunalConditionsMonitor mConditionsMonitor; private final Monitor mConditionsMonitor; private final Executor mExecutor; private CommunalSource mCurrentSource; Loading @@ -53,7 +56,7 @@ public class CommunalSourceMonitor { // Whether the class is currently listening for condition changes. private boolean mListeningForConditions = false; private final CommunalConditionsMonitor.Callback mConditionsCallback = private final Monitor.Callback mConditionsCallback = allConditionsMet -> { if (mAllCommunalConditionsMet != allConditionsMet) { if (DEBUG) Log.d(TAG, "communal conditions changed: " + allConditionsMet); Loading @@ -66,7 +69,7 @@ public class CommunalSourceMonitor { @VisibleForTesting @Inject public CommunalSourceMonitor(@Main Executor executor, CommunalConditionsMonitor communalConditionsMonitor) { @Named(COMMUNAL_CONDITIONS) Monitor communalConditionsMonitor) { mExecutor = executor; mConditionsMonitor = communalConditionsMonitor; } Loading packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.java +12 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ import com.android.systemui.idle.AmbientLightModeMonitor; import com.android.systemui.idle.LightSensorEventsDebounceAlgorithm; import com.android.systemui.idle.dagger.IdleViewComponent; import com.android.systemui.util.condition.Condition; import com.android.systemui.util.condition.Monitor; import com.android.systemui.util.condition.dagger.MonitorComponent; import java.util.Collections; import java.util.HashSet; Loading Loading @@ -135,4 +137,14 @@ public interface CommunalModule { return Optional.empty(); } } /** */ @Provides @Named(COMMUNAL_CONDITIONS) static Monitor provideCommunalSourceMonitor( @Named(COMMUNAL_CONDITIONS) Set<Condition> communalConditions, MonitorComponent.Factory factory) { final MonitorComponent component = factory.create(communalConditions, new HashSet<>()); return component.getMonitor(); } } packages/SystemUI/src/com/android/systemui/util/condition/Monitor.java +15 −8 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import com.android.systemui.statusbar.policy.CallbackController; import org.jetbrains.annotations.NotNull; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; Loading @@ -38,7 +37,7 @@ import javax.inject.Inject; public class Monitor implements CallbackController<Monitor.Callback> { private final String mTag = getClass().getSimpleName(); private final ArrayList<WeakReference<Callback>> mCallbacks = new ArrayList<>(); private final ArrayList<Callback> mCallbacks = new ArrayList<>(); // Set of all conditions that need to be monitored. private final Set<Condition> mConditions; Loading Loading @@ -66,9 +65,9 @@ public class Monitor implements CallbackController<Monitor.Callback> { mAllConditionsMet = newAllConditionsMet; // Updates all callbacks. final Iterator<WeakReference<Callback>> iterator = mCallbacks.iterator(); final Iterator<Callback> iterator = mCallbacks.iterator(); while (iterator.hasNext()) { final Callback callback = iterator.next().get(); final Callback callback = iterator.next(); if (callback == null) { iterator.remove(); } else { Loading @@ -78,7 +77,7 @@ public class Monitor implements CallbackController<Monitor.Callback> { }; @Inject public Monitor(Set<Condition> conditions) { public Monitor(Set<Condition> conditions, Set<Callback> callbacks) { mConditions = conditions; // If there is no condition, give green pass. Loading @@ -89,12 +88,20 @@ public class Monitor implements CallbackController<Monitor.Callback> { // Initializes the conditions map and registers a callback for each condition. mConditions.forEach((condition -> mConditionsMap.put(condition, false))); if (callbacks == null) { return; } for (Callback callback : callbacks) { addCallback(callback); } } @Override public void addCallback(@NotNull Callback callback) { if (shouldLog()) Log.d(mTag, "adding callback"); mCallbacks.add(new WeakReference<>(callback)); mCallbacks.add(callback); // Updates the callback immediately. callback.onConditionsChanged(mAllConditionsMet); Loading @@ -109,9 +116,9 @@ public class Monitor implements CallbackController<Monitor.Callback> { @Override public void removeCallback(@NotNull Callback callback) { if (shouldLog()) Log.d(mTag, "removing callback"); final Iterator<WeakReference<Callback>> iterator = mCallbacks.iterator(); final Iterator<Callback> iterator = mCallbacks.iterator(); while (iterator.hasNext()) { final Callback cb = iterator.next().get(); final Callback cb = iterator.next(); if (cb == null || cb == callback) { iterator.remove(); } Loading packages/SystemUI/src/com/android/systemui/communal/conditions/CommunalConditionsMonitor.java→packages/SystemUI/src/com/android/systemui/util/condition/dagger/MonitorComponent.java +19 −15 Original line number Diff line number Diff line Loading @@ -14,29 +14,33 @@ * limitations under the License. */ package com.android.systemui.communal.conditions; package com.android.systemui.util.condition.dagger; import static com.android.systemui.communal.dagger.CommunalModule.COMMUNAL_CONDITIONS; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.util.condition.Condition; import com.android.systemui.util.condition.Monitor; import java.util.Set; import javax.inject.Inject; import javax.inject.Named; import dagger.BindsInstance; import dagger.Subcomponent; /** * A concrete implementation of {@Monitor} with conditions for monitoring when communal mode should * be enabled. * Component for {@link Monitor}. */ @Subcomponent public interface MonitorComponent { /** * Factory for {@link MonitorComponent}. */ @SysUISingleton public class CommunalConditionsMonitor extends Monitor { @Inject public CommunalConditionsMonitor( @Named(COMMUNAL_CONDITIONS) Set<Condition> communalConditions) { super(communalConditions); @Subcomponent.Factory interface Factory { MonitorComponent create(@BindsInstance Set<Condition> conditions, @BindsInstance Set<Monitor.Callback> callbacks); } /** * Provides {@link Monitor}. * @return */ Monitor getMonitor(); } packages/SystemUI/src/com/android/systemui/util/dagger/UtilModule.java +4 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.util.dagger; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.RingerModeTrackerImpl; import com.android.systemui.util.condition.dagger.MonitorComponent; import com.android.systemui.util.wrapper.UtilWrapperModule; import dagger.Binds; Loading @@ -26,6 +27,9 @@ import dagger.Module; /** Dagger Module for code in the util package. */ @Module(includes = { UtilWrapperModule.class }, subcomponents = { MonitorComponent.class, }) public interface UtilModule { /** */ Loading Loading
packages/SystemUI/src/com/android/systemui/communal/CommunalSourceMonitor.java +7 −4 Original line number Diff line number Diff line Loading @@ -16,12 +16,14 @@ package com.android.systemui.communal; import static com.android.systemui.communal.dagger.CommunalModule.COMMUNAL_CONDITIONS; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.communal.conditions.CommunalConditionsMonitor; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.util.condition.Monitor; import com.google.android.collect.Lists; Loading @@ -31,6 +33,7 @@ import java.util.Iterator; import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Named; /** * A Monitor for reporting a {@link CommunalSource} presence. Loading @@ -42,7 +45,7 @@ public class CommunalSourceMonitor { // A list of {@link Callback} that have registered to receive updates. private final ArrayList<WeakReference<Callback>> mCallbacks = Lists.newArrayList(); private final CommunalConditionsMonitor mConditionsMonitor; private final Monitor mConditionsMonitor; private final Executor mExecutor; private CommunalSource mCurrentSource; Loading @@ -53,7 +56,7 @@ public class CommunalSourceMonitor { // Whether the class is currently listening for condition changes. private boolean mListeningForConditions = false; private final CommunalConditionsMonitor.Callback mConditionsCallback = private final Monitor.Callback mConditionsCallback = allConditionsMet -> { if (mAllCommunalConditionsMet != allConditionsMet) { if (DEBUG) Log.d(TAG, "communal conditions changed: " + allConditionsMet); Loading @@ -66,7 +69,7 @@ public class CommunalSourceMonitor { @VisibleForTesting @Inject public CommunalSourceMonitor(@Main Executor executor, CommunalConditionsMonitor communalConditionsMonitor) { @Named(COMMUNAL_CONDITIONS) Monitor communalConditionsMonitor) { mExecutor = executor; mConditionsMonitor = communalConditionsMonitor; } Loading
packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.java +12 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ import com.android.systemui.idle.AmbientLightModeMonitor; import com.android.systemui.idle.LightSensorEventsDebounceAlgorithm; import com.android.systemui.idle.dagger.IdleViewComponent; import com.android.systemui.util.condition.Condition; import com.android.systemui.util.condition.Monitor; import com.android.systemui.util.condition.dagger.MonitorComponent; import java.util.Collections; import java.util.HashSet; Loading Loading @@ -135,4 +137,14 @@ public interface CommunalModule { return Optional.empty(); } } /** */ @Provides @Named(COMMUNAL_CONDITIONS) static Monitor provideCommunalSourceMonitor( @Named(COMMUNAL_CONDITIONS) Set<Condition> communalConditions, MonitorComponent.Factory factory) { final MonitorComponent component = factory.create(communalConditions, new HashSet<>()); return component.getMonitor(); } }
packages/SystemUI/src/com/android/systemui/util/condition/Monitor.java +15 −8 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import com.android.systemui.statusbar.policy.CallbackController; import org.jetbrains.annotations.NotNull; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; Loading @@ -38,7 +37,7 @@ import javax.inject.Inject; public class Monitor implements CallbackController<Monitor.Callback> { private final String mTag = getClass().getSimpleName(); private final ArrayList<WeakReference<Callback>> mCallbacks = new ArrayList<>(); private final ArrayList<Callback> mCallbacks = new ArrayList<>(); // Set of all conditions that need to be monitored. private final Set<Condition> mConditions; Loading Loading @@ -66,9 +65,9 @@ public class Monitor implements CallbackController<Monitor.Callback> { mAllConditionsMet = newAllConditionsMet; // Updates all callbacks. final Iterator<WeakReference<Callback>> iterator = mCallbacks.iterator(); final Iterator<Callback> iterator = mCallbacks.iterator(); while (iterator.hasNext()) { final Callback callback = iterator.next().get(); final Callback callback = iterator.next(); if (callback == null) { iterator.remove(); } else { Loading @@ -78,7 +77,7 @@ public class Monitor implements CallbackController<Monitor.Callback> { }; @Inject public Monitor(Set<Condition> conditions) { public Monitor(Set<Condition> conditions, Set<Callback> callbacks) { mConditions = conditions; // If there is no condition, give green pass. Loading @@ -89,12 +88,20 @@ public class Monitor implements CallbackController<Monitor.Callback> { // Initializes the conditions map and registers a callback for each condition. mConditions.forEach((condition -> mConditionsMap.put(condition, false))); if (callbacks == null) { return; } for (Callback callback : callbacks) { addCallback(callback); } } @Override public void addCallback(@NotNull Callback callback) { if (shouldLog()) Log.d(mTag, "adding callback"); mCallbacks.add(new WeakReference<>(callback)); mCallbacks.add(callback); // Updates the callback immediately. callback.onConditionsChanged(mAllConditionsMet); Loading @@ -109,9 +116,9 @@ public class Monitor implements CallbackController<Monitor.Callback> { @Override public void removeCallback(@NotNull Callback callback) { if (shouldLog()) Log.d(mTag, "removing callback"); final Iterator<WeakReference<Callback>> iterator = mCallbacks.iterator(); final Iterator<Callback> iterator = mCallbacks.iterator(); while (iterator.hasNext()) { final Callback cb = iterator.next().get(); final Callback cb = iterator.next(); if (cb == null || cb == callback) { iterator.remove(); } Loading
packages/SystemUI/src/com/android/systemui/communal/conditions/CommunalConditionsMonitor.java→packages/SystemUI/src/com/android/systemui/util/condition/dagger/MonitorComponent.java +19 −15 Original line number Diff line number Diff line Loading @@ -14,29 +14,33 @@ * limitations under the License. */ package com.android.systemui.communal.conditions; package com.android.systemui.util.condition.dagger; import static com.android.systemui.communal.dagger.CommunalModule.COMMUNAL_CONDITIONS; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.util.condition.Condition; import com.android.systemui.util.condition.Monitor; import java.util.Set; import javax.inject.Inject; import javax.inject.Named; import dagger.BindsInstance; import dagger.Subcomponent; /** * A concrete implementation of {@Monitor} with conditions for monitoring when communal mode should * be enabled. * Component for {@link Monitor}. */ @Subcomponent public interface MonitorComponent { /** * Factory for {@link MonitorComponent}. */ @SysUISingleton public class CommunalConditionsMonitor extends Monitor { @Inject public CommunalConditionsMonitor( @Named(COMMUNAL_CONDITIONS) Set<Condition> communalConditions) { super(communalConditions); @Subcomponent.Factory interface Factory { MonitorComponent create(@BindsInstance Set<Condition> conditions, @BindsInstance Set<Monitor.Callback> callbacks); } /** * Provides {@link Monitor}. * @return */ Monitor getMonitor(); }
packages/SystemUI/src/com/android/systemui/util/dagger/UtilModule.java +4 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.util.dagger; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.RingerModeTrackerImpl; import com.android.systemui.util.condition.dagger.MonitorComponent; import com.android.systemui.util.wrapper.UtilWrapperModule; import dagger.Binds; Loading @@ -26,6 +27,9 @@ import dagger.Module; /** Dagger Module for code in the util package. */ @Module(includes = { UtilWrapperModule.class }, subcomponents = { MonitorComponent.class, }) public interface UtilModule { /** */ Loading