Merge "DO NOT MERGE: Ensure zen SystemConditions are subscribed" into pi-dev
am: 6b188c070e
Change-Id: Ie33e07277cef28558f8213cee8b01a9082f46d23
This commit is contained in:
@@ -19,7 +19,6 @@ package com.android.server.notification;
|
||||
import android.content.ComponentName;
|
||||
import android.net.Uri;
|
||||
import android.service.notification.Condition;
|
||||
import android.service.notification.IConditionListener;
|
||||
import android.service.notification.IConditionProvider;
|
||||
import android.service.notification.ZenModeConfig;
|
||||
import android.service.notification.ZenModeConfig.ZenRule;
|
||||
@@ -27,6 +26,8 @@ import android.util.ArrayMap;
|
||||
import android.util.ArraySet;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -36,7 +37,9 @@ public class ZenModeConditions implements ConditionProviders.Callback {
|
||||
|
||||
private final ZenModeHelper mHelper;
|
||||
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;
|
||||
|
||||
@@ -152,7 +155,8 @@ public class ZenModeConditions implements ConditionProviders.Callback {
|
||||
if (current != null) {
|
||||
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 (mConditionProviders.subscribeIfNecessary(rule.component, rule.conditionId)) {
|
||||
synchronized (mSubscriptions) {
|
||||
|
||||
@@ -102,7 +102,7 @@ public class ZenModeHelper {
|
||||
private final ZenModeFiltering mFiltering;
|
||||
protected final RingerModeDelegate mRingerModeDelegate = new
|
||||
RingerModeDelegate();
|
||||
private final ZenModeConditions mConditions;
|
||||
@VisibleForTesting protected final ZenModeConditions mConditions;
|
||||
private final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>();
|
||||
private final Metrics mMetrics = new Metrics();
|
||||
private final ConditionProviders.Config mServiceConfig;
|
||||
|
||||
@@ -38,6 +38,7 @@ import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.AppGlobals;
|
||||
import android.app.AppOpsManager;
|
||||
import android.app.NotificationManager;
|
||||
import android.content.ComponentName;
|
||||
@@ -49,8 +50,10 @@ import android.media.AudioManager;
|
||||
import android.media.AudioManagerInternal;
|
||||
import android.media.VolumePolicy;
|
||||
import android.media.AudioSystem;
|
||||
import android.net.Uri;
|
||||
import android.provider.Settings;
|
||||
import android.provider.Settings.Global;
|
||||
import android.service.notification.Condition;
|
||||
import android.service.notification.ZenModeConfig;
|
||||
import android.service.notification.ZenModeConfig.ScheduleInfo;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
@@ -61,6 +64,7 @@ import android.util.Xml;
|
||||
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
|
||||
import com.android.server.notification.ManagedServices.UserProfiles;
|
||||
import com.android.internal.util.FastXmlSerializer;
|
||||
import com.android.server.UiServiceTestCase;
|
||||
import android.util.Slog;
|
||||
@@ -83,7 +87,7 @@ import java.io.ByteArrayOutputStream;
|
||||
@TestableLooper.RunWithLooper
|
||||
public class ZenModeHelperTest extends UiServiceTestCase {
|
||||
|
||||
@Mock ConditionProviders mConditionProviders;
|
||||
ConditionProviders mConditionProviders;
|
||||
@Mock NotificationManager mNotificationManager;
|
||||
@Mock private Resources mResources;
|
||||
private TestableLooper mTestableLooper;
|
||||
@@ -103,6 +107,9 @@ public class ZenModeHelperTest extends UiServiceTestCase {
|
||||
when(mResources.getString(R.string.zen_mode_default_events_name)).thenReturn("events");
|
||||
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(),
|
||||
mConditionProviders));
|
||||
}
|
||||
@@ -813,6 +820,30 @@ public class ZenModeHelperTest extends UiServiceTestCase {
|
||||
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() {
|
||||
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
||||
mZenModeHelperSpy.mConfig.allowAlarms = false;
|
||||
|
||||
Reference in New Issue
Block a user