Loading services/core/java/com/android/server/notification/ZenModeConditions.java +7 −3 Original line number Original line Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.server.notification; import android.content.ComponentName; import android.content.ComponentName; import android.net.Uri; import android.net.Uri; import android.service.notification.Condition; import android.service.notification.Condition; import android.service.notification.IConditionListener; import android.service.notification.IConditionProvider; import android.service.notification.IConditionProvider; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig.ZenRule; import android.service.notification.ZenModeConfig.ZenRule; Loading @@ -27,6 +26,8 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.ArraySet; import android.util.Log; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.io.PrintWriter; import java.util.Objects; import java.util.Objects; Loading @@ -36,7 +37,9 @@ public class ZenModeConditions implements ConditionProviders.Callback { private final ZenModeHelper mHelper; private final ZenModeHelper mHelper; private final ConditionProviders mConditionProviders; private final ConditionProviders mConditionProviders; private final ArrayMap<Uri, ComponentName> mSubscriptions = new ArrayMap<>(); @VisibleForTesting protected final ArrayMap<Uri, ComponentName> mSubscriptions = new ArrayMap<>(); private boolean mFirstEvaluation = true; private boolean mFirstEvaluation = true; Loading Loading @@ -152,7 +155,8 @@ public class ZenModeConditions implements ConditionProviders.Callback { if (current != null) { if (current != null) { current.add(id); current.add(id); } } if (processSubscriptions && trigger != null && trigger.equals(rule.component)) { if (processSubscriptions && ((trigger != null && trigger.equals(rule.component)) || isSystemCondition)) { if (DEBUG) Log.d(TAG, "Subscribing to " + rule.component); if (DEBUG) Log.d(TAG, "Subscribing to " + rule.component); if (mConditionProviders.subscribeIfNecessary(rule.component, rule.conditionId)) { if (mConditionProviders.subscribeIfNecessary(rule.component, rule.conditionId)) { synchronized (mSubscriptions) { synchronized (mSubscriptions) { Loading services/core/java/com/android/server/notification/ZenModeHelper.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -102,7 +102,7 @@ public class ZenModeHelper { private final ZenModeFiltering mFiltering; private final ZenModeFiltering mFiltering; protected final RingerModeDelegate mRingerModeDelegate = new protected final RingerModeDelegate mRingerModeDelegate = new RingerModeDelegate(); RingerModeDelegate(); private final ZenModeConditions mConditions; @VisibleForTesting protected final ZenModeConditions mConditions; private final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>(); private final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>(); private final Metrics mMetrics = new Metrics(); private final Metrics mMetrics = new Metrics(); private final ConditionProviders.Config mServiceConfig; private final ConditionProviders.Config mServiceConfig; Loading services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +32 −1 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.Mockito.when; import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.AppOpsManager; import android.app.NotificationManager; import android.app.NotificationManager; import android.content.ComponentName; import android.content.ComponentName; Loading @@ -49,8 +50,10 @@ import android.media.AudioManager; import android.media.AudioManagerInternal; import android.media.AudioManagerInternal; import android.media.VolumePolicy; import android.media.VolumePolicy; import android.media.AudioSystem; import android.media.AudioSystem; import android.net.Uri; import android.provider.Settings; import android.provider.Settings; import android.provider.Settings.Global; import android.provider.Settings.Global; import android.service.notification.Condition; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig.ScheduleInfo; import android.service.notification.ZenModeConfig.ScheduleInfo; import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest; Loading @@ -61,6 +64,7 @@ import android.util.Xml; import com.android.internal.R; import com.android.internal.R; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.server.notification.ManagedServices.UserProfiles; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.FastXmlSerializer; import com.android.server.UiServiceTestCase; import com.android.server.UiServiceTestCase; import android.util.Slog; import android.util.Slog; Loading @@ -83,7 +87,7 @@ import java.io.ByteArrayOutputStream; @TestableLooper.RunWithLooper @TestableLooper.RunWithLooper public class ZenModeHelperTest extends UiServiceTestCase { public class ZenModeHelperTest extends UiServiceTestCase { @Mock ConditionProviders mConditionProviders; ConditionProviders mConditionProviders; @Mock NotificationManager mNotificationManager; @Mock NotificationManager mNotificationManager; @Mock private Resources mResources; @Mock private Resources mResources; private TestableLooper mTestableLooper; private TestableLooper mTestableLooper; Loading @@ -103,6 +107,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { when(mResources.getString(R.string.zen_mode_default_events_name)).thenReturn("events"); when(mResources.getString(R.string.zen_mode_default_events_name)).thenReturn("events"); when(mContext.getSystemService(NotificationManager.class)).thenReturn(mNotificationManager); when(mContext.getSystemService(NotificationManager.class)).thenReturn(mNotificationManager); mConditionProviders = new ConditionProviders(mContext, new UserProfiles(), AppGlobals.getPackageManager()); mConditionProviders.addSystemProvider(new CountdownConditionProvider()); mZenModeHelperSpy = spy(new ZenModeHelper(mContext, mTestableLooper.getLooper(), mZenModeHelperSpy = spy(new ZenModeHelper(mContext, mTestableLooper.getLooper(), mConditionProviders)); mConditionProviders)); } } Loading Loading @@ -813,6 +820,30 @@ public class ZenModeHelperTest extends UiServiceTestCase { setupZenConfigMaintained(); setupZenConfigMaintained(); } } @Test public void testCountdownConditionSubscription() throws Exception { ZenModeConfig config = new ZenModeConfig(); mZenModeHelperSpy.mConfig = config; mZenModeHelperSpy.mConditions.evaluateConfig(mZenModeHelperSpy.mConfig, null, true); assertEquals(0, mZenModeHelperSpy.mConditions.mSubscriptions.size()); mZenModeHelperSpy.mConfig.manualRule = new ZenModeConfig.ZenRule(); Uri conditionId = ZenModeConfig.toCountdownConditionId(9000000, false); mZenModeHelperSpy.mConfig.manualRule.conditionId = conditionId; mZenModeHelperSpy.mConfig.manualRule.component = new ComponentName("android", CountdownConditionProvider.class.getName()); mZenModeHelperSpy.mConfig.manualRule.condition = new Condition(conditionId, "", "", "", 0, Condition.STATE_TRUE, Condition.FLAG_RELEVANT_NOW); mZenModeHelperSpy.mConfig.manualRule.enabled = true; ZenModeConfig originalConfig = mZenModeHelperSpy.mConfig.copy(); mZenModeHelperSpy.mConditions.evaluateConfig(mZenModeHelperSpy.mConfig, null, true); assertEquals(true, ZenModeConfig.isValidCountdownConditionId(conditionId)); assertEquals(originalConfig, mZenModeHelperSpy.mConfig); assertEquals(1, mZenModeHelperSpy.mConditions.mSubscriptions.size()); } private void setupZenConfig() { private void setupZenConfig() { mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; mZenModeHelperSpy.mConfig.allowAlarms = false; mZenModeHelperSpy.mConfig.allowAlarms = false; Loading Loading
services/core/java/com/android/server/notification/ZenModeConditions.java +7 −3 Original line number Original line Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.server.notification; import android.content.ComponentName; import android.content.ComponentName; import android.net.Uri; import android.net.Uri; import android.service.notification.Condition; import android.service.notification.Condition; import android.service.notification.IConditionListener; import android.service.notification.IConditionProvider; import android.service.notification.IConditionProvider; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig.ZenRule; import android.service.notification.ZenModeConfig.ZenRule; Loading @@ -27,6 +26,8 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.ArraySet; import android.util.Log; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.io.PrintWriter; import java.util.Objects; import java.util.Objects; Loading @@ -36,7 +37,9 @@ public class ZenModeConditions implements ConditionProviders.Callback { private final ZenModeHelper mHelper; private final ZenModeHelper mHelper; private final ConditionProviders mConditionProviders; private final ConditionProviders mConditionProviders; private final ArrayMap<Uri, ComponentName> mSubscriptions = new ArrayMap<>(); @VisibleForTesting protected final ArrayMap<Uri, ComponentName> mSubscriptions = new ArrayMap<>(); private boolean mFirstEvaluation = true; private boolean mFirstEvaluation = true; Loading Loading @@ -152,7 +155,8 @@ public class ZenModeConditions implements ConditionProviders.Callback { if (current != null) { if (current != null) { current.add(id); current.add(id); } } if (processSubscriptions && trigger != null && trigger.equals(rule.component)) { if (processSubscriptions && ((trigger != null && trigger.equals(rule.component)) || isSystemCondition)) { if (DEBUG) Log.d(TAG, "Subscribing to " + rule.component); if (DEBUG) Log.d(TAG, "Subscribing to " + rule.component); if (mConditionProviders.subscribeIfNecessary(rule.component, rule.conditionId)) { if (mConditionProviders.subscribeIfNecessary(rule.component, rule.conditionId)) { synchronized (mSubscriptions) { synchronized (mSubscriptions) { Loading
services/core/java/com/android/server/notification/ZenModeHelper.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -102,7 +102,7 @@ public class ZenModeHelper { private final ZenModeFiltering mFiltering; private final ZenModeFiltering mFiltering; protected final RingerModeDelegate mRingerModeDelegate = new protected final RingerModeDelegate mRingerModeDelegate = new RingerModeDelegate(); RingerModeDelegate(); private final ZenModeConditions mConditions; @VisibleForTesting protected final ZenModeConditions mConditions; private final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>(); private final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>(); private final Metrics mMetrics = new Metrics(); private final Metrics mMetrics = new Metrics(); private final ConditionProviders.Config mServiceConfig; private final ConditionProviders.Config mServiceConfig; Loading
services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +32 −1 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.Mockito.when; import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.AppOpsManager; import android.app.NotificationManager; import android.app.NotificationManager; import android.content.ComponentName; import android.content.ComponentName; Loading @@ -49,8 +50,10 @@ import android.media.AudioManager; import android.media.AudioManagerInternal; import android.media.AudioManagerInternal; import android.media.VolumePolicy; import android.media.VolumePolicy; import android.media.AudioSystem; import android.media.AudioSystem; import android.net.Uri; import android.provider.Settings; import android.provider.Settings; import android.provider.Settings.Global; import android.provider.Settings.Global; import android.service.notification.Condition; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig.ScheduleInfo; import android.service.notification.ZenModeConfig.ScheduleInfo; import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest; Loading @@ -61,6 +64,7 @@ import android.util.Xml; import com.android.internal.R; import com.android.internal.R; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.server.notification.ManagedServices.UserProfiles; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.FastXmlSerializer; import com.android.server.UiServiceTestCase; import com.android.server.UiServiceTestCase; import android.util.Slog; import android.util.Slog; Loading @@ -83,7 +87,7 @@ import java.io.ByteArrayOutputStream; @TestableLooper.RunWithLooper @TestableLooper.RunWithLooper public class ZenModeHelperTest extends UiServiceTestCase { public class ZenModeHelperTest extends UiServiceTestCase { @Mock ConditionProviders mConditionProviders; ConditionProviders mConditionProviders; @Mock NotificationManager mNotificationManager; @Mock NotificationManager mNotificationManager; @Mock private Resources mResources; @Mock private Resources mResources; private TestableLooper mTestableLooper; private TestableLooper mTestableLooper; Loading @@ -103,6 +107,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { when(mResources.getString(R.string.zen_mode_default_events_name)).thenReturn("events"); when(mResources.getString(R.string.zen_mode_default_events_name)).thenReturn("events"); when(mContext.getSystemService(NotificationManager.class)).thenReturn(mNotificationManager); when(mContext.getSystemService(NotificationManager.class)).thenReturn(mNotificationManager); mConditionProviders = new ConditionProviders(mContext, new UserProfiles(), AppGlobals.getPackageManager()); mConditionProviders.addSystemProvider(new CountdownConditionProvider()); mZenModeHelperSpy = spy(new ZenModeHelper(mContext, mTestableLooper.getLooper(), mZenModeHelperSpy = spy(new ZenModeHelper(mContext, mTestableLooper.getLooper(), mConditionProviders)); mConditionProviders)); } } Loading Loading @@ -813,6 +820,30 @@ public class ZenModeHelperTest extends UiServiceTestCase { setupZenConfigMaintained(); setupZenConfigMaintained(); } } @Test public void testCountdownConditionSubscription() throws Exception { ZenModeConfig config = new ZenModeConfig(); mZenModeHelperSpy.mConfig = config; mZenModeHelperSpy.mConditions.evaluateConfig(mZenModeHelperSpy.mConfig, null, true); assertEquals(0, mZenModeHelperSpy.mConditions.mSubscriptions.size()); mZenModeHelperSpy.mConfig.manualRule = new ZenModeConfig.ZenRule(); Uri conditionId = ZenModeConfig.toCountdownConditionId(9000000, false); mZenModeHelperSpy.mConfig.manualRule.conditionId = conditionId; mZenModeHelperSpy.mConfig.manualRule.component = new ComponentName("android", CountdownConditionProvider.class.getName()); mZenModeHelperSpy.mConfig.manualRule.condition = new Condition(conditionId, "", "", "", 0, Condition.STATE_TRUE, Condition.FLAG_RELEVANT_NOW); mZenModeHelperSpy.mConfig.manualRule.enabled = true; ZenModeConfig originalConfig = mZenModeHelperSpy.mConfig.copy(); mZenModeHelperSpy.mConditions.evaluateConfig(mZenModeHelperSpy.mConfig, null, true); assertEquals(true, ZenModeConfig.isValidCountdownConditionId(conditionId)); assertEquals(originalConfig, mZenModeHelperSpy.mConfig); assertEquals(1, mZenModeHelperSpy.mConditions.mSubscriptions.size()); } private void setupZenConfig() { private void setupZenConfig() { mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; mZenModeHelperSpy.mConfig.allowAlarms = false; mZenModeHelperSpy.mConfig.allowAlarms = false; Loading