From c5629d1efa4639a6ceec7ee893f625a9b6995f59 Mon Sep 17 00:00:00 2001 From: Yuri Lin Date: Wed, 19 Apr 2023 14:49:55 -0400 Subject: [PATCH] Remove spy() from ZenModeHelper in ZenModeHelperTest In addition to spying the object one is testing to be not a great idea, this was messing up some operations (changing the config would be operating on two different objects under the hood). This change removes the spied version of the object in favor of just having a regular ZenModeHelper under test and changes relevant tests to check the operations on the AppOpsManager mock instead. Also changes setupZenConfig() to default to setting zen mode to OFF. It's not technically a correct state for a config to be in ZEN_MODE_IMPORTANT_INTERRUPTIONS without any active zen rules (manual or automatic). Because this method is primarily used in XML tests (where the manual rule isn't expected to be restored anyway), it is more correct to default to starting in the "off" state. Fixes: 278914182 Test: atest ZenModeHelperTest Change-Id: Ib107394134c0babe9ac40befc56245d637e7925a --- .../notification/ZenModeHelperTest.java | 808 +++++++++--------- 1 file changed, 409 insertions(+), 399 deletions(-) diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java index b2a54010e75ee..cb41769c3619b 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java @@ -55,14 +55,13 @@ import static junit.framework.TestCase.fail; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; -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.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.notNull; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; @@ -149,7 +148,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { @Mock PackageManager mPackageManager; private Resources mResources; private TestableLooper mTestableLooper; - private ZenModeHelper mZenModeHelperSpy; + private ZenModeHelper mZenModeHelper; private ContentResolver mContentResolver; @Mock AppOpsManager mAppOps; private WrappedSysUiStatsEvent.WrappedBuilderFactory mStatsEventBuilderFactory; @@ -176,8 +175,8 @@ public class ZenModeHelperTest extends UiServiceTestCase { mConditionProviders = new ConditionProviders(mContext, new UserProfiles(), AppGlobals.getPackageManager()); mConditionProviders.addSystemProvider(new CountdownConditionProvider()); - mZenModeHelperSpy = spy(new ZenModeHelper(mContext, mTestableLooper.getLooper(), - mConditionProviders, mStatsEventBuilderFactory)); + mZenModeHelper = new ZenModeHelper(mContext, mTestableLooper.getLooper(), + mConditionProviders, mStatsEventBuilderFactory); ResolveInfo ri = new ResolveInfo(); ri.activityInfo = new ActivityInfo(); @@ -187,7 +186,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { .thenReturn(CUSTOM_PKG_UID); when(mPackageManager.getPackagesForUid(anyInt())).thenReturn( new String[] {pkg}); - mZenModeHelperSpy.mPm = mPackageManager; + mZenModeHelper.mPm = mPackageManager; } private XmlResourceParser getDefaultConfigParser() throws IOException, XmlPullParserException { @@ -221,10 +220,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { ByteArrayOutputStream baos = new ByteArrayOutputStream(); serializer.setOutput(new BufferedOutputStream(baos), "utf-8"); serializer.startDocument(null, true); - mZenModeHelperSpy.writeXml(serializer, false, version, UserHandle.USER_ALL); + mZenModeHelper.writeXml(serializer, false, version, UserHandle.USER_ALL); serializer.endDocument(); serializer.flush(); - mZenModeHelperSpy.setConfig(new ZenModeConfig(), null, "writing xml"); + mZenModeHelper.setConfig(new ZenModeConfig(), null, "writing xml"); return baos; } @@ -234,12 +233,12 @@ public class ZenModeHelperTest extends UiServiceTestCase { ByteArrayOutputStream baos = new ByteArrayOutputStream(); serializer.setOutput(new BufferedOutputStream(baos), "utf-8"); serializer.startDocument(null, true); - mZenModeHelperSpy.writeXml(serializer, true, version, userId); + mZenModeHelper.writeXml(serializer, true, version, userId); serializer.endDocument(); serializer.flush(); ZenModeConfig newConfig = new ZenModeConfig(); newConfig.user = userId; - mZenModeHelperSpy.setConfig(newConfig, null, "writing xml"); + mZenModeHelper.setConfig(newConfig, null, "writing xml"); return baos; } @@ -277,209 +276,209 @@ public class ZenModeHelperTest extends UiServiceTestCase { return customRule; } + // Verify that the appropriate appOpps operations are called for the restrictions requested. + // Note that this method assumes that priority only DND exempt packages is set to something + // in order to be able to distinguish it from the null case, so callers should make sure + // setPriorityOnlyDndExemptPackages has been called bofre this verify statement. + private void verifyApplyRestrictions(boolean zenPriorityOnly, boolean mute, int usage) { + int expectedMode = mute ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED; + verify(mAppOps, atLeastOnce()).setRestriction(eq(AppOpsManager.OP_VIBRATE), eq(usage), + eq(expectedMode), zenPriorityOnly ? notNull() : eq(null)); + verify(mAppOps, atLeastOnce()).setRestriction(eq(AppOpsManager.OP_PLAY_AUDIO), eq(usage), + eq(expectedMode), zenPriorityOnly ? notNull() : eq(null)); + } + @Test public void testZenOff_NoMuteApplied() { - mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_OFF; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS | - PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.mZenMode = Settings.Global.ZEN_MODE_OFF; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS + | PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); - doNothing().when(mZenModeHelperSpy).applyRestrictions(eq(false), anyBoolean(), anyInt()); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, false, - AudioAttributes.USAGE_ALARM); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, false, - AudioAttributes.USAGE_MEDIA); + // Check that we call through to applyRestrictions with usages USAGE_ALARM and USAGE_MEDIA + verifyApplyRestrictions(false, false, AudioAttributes.USAGE_ALARM); + verifyApplyRestrictions(false, false, AudioAttributes.USAGE_MEDIA); } @Test public void testZenOn_NotificationApplied() { - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); // The most permissive policy - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS | - PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES + mZenModeHelper.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS + | PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES | PRIORITY_CATEGORY_CONVERSATIONS | PRIORITY_CATEGORY_CALLS | PRIORITY_CATEGORY_ALARMS | PRIORITY_CATEGORY_EVENTS | PRIORITY_CATEGORY_REMINDERS | PRIORITY_CATEGORY_REPEAT_CALLERS | PRIORITY_CATEGORY_SYSTEM, PRIORITY_SENDERS_ANY, PRIORITY_SENDERS_ANY, 0, CONVERSATION_SENDERS_ANYONE); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.applyRestrictions(); - doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyBoolean(), anyInt()); - verify(mZenModeHelperSpy).applyRestrictions(true, true, - AudioAttributes.USAGE_NOTIFICATION); - verify(mZenModeHelperSpy).applyRestrictions(true, true, - AudioAttributes.USAGE_NOTIFICATION_EVENT); - verify(mZenModeHelperSpy).applyRestrictions(true, true, + verifyApplyRestrictions(true, true, AudioAttributes.USAGE_NOTIFICATION); + verifyApplyRestrictions(true, true, AudioAttributes.USAGE_NOTIFICATION_EVENT); + verifyApplyRestrictions(true, true, AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_DELAYED); - verify(mZenModeHelperSpy).applyRestrictions(true, true, + verifyApplyRestrictions(true, true, AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT); } @Test public void testZenOn_StarredCallers_CallTypesBlocked() { - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); // The most permissive policy - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS | - PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES + mZenModeHelper.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS + | PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES | PRIORITY_CATEGORY_CONVERSATIONS | PRIORITY_CATEGORY_CALLS | PRIORITY_CATEGORY_ALARMS | PRIORITY_CATEGORY_EVENTS | PRIORITY_CATEGORY_REMINDERS | PRIORITY_CATEGORY_SYSTEM, PRIORITY_SENDERS_STARRED, PRIORITY_SENDERS_ANY, 0, CONVERSATION_SENDERS_ANYONE); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.applyRestrictions(); - doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyBoolean(), anyInt()); - verify(mZenModeHelperSpy).applyRestrictions(true, true, + verifyApplyRestrictions(true, true, AudioAttributes.USAGE_NOTIFICATION_RINGTONE); - verify(mZenModeHelperSpy).applyRestrictions(true, true, + verifyApplyRestrictions(true, true, AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST); } @Test public void testZenOn_AllCallers_CallTypesAllowed() { - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); // The most permissive policy - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS | - PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES + mZenModeHelper.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS + | PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES | PRIORITY_CATEGORY_CONVERSATIONS | PRIORITY_CATEGORY_CALLS | PRIORITY_CATEGORY_ALARMS | PRIORITY_CATEGORY_EVENTS | PRIORITY_CATEGORY_REMINDERS | PRIORITY_CATEGORY_REPEAT_CALLERS | PRIORITY_CATEGORY_SYSTEM, PRIORITY_SENDERS_ANY, PRIORITY_SENDERS_ANY, 0, CONVERSATION_SENDERS_ANYONE); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.applyRestrictions(); - doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyBoolean(), anyInt()); - verify(mZenModeHelperSpy).applyRestrictions(true, false, - AudioAttributes.USAGE_NOTIFICATION_RINGTONE); - verify(mZenModeHelperSpy).applyRestrictions(true, false, + verifyApplyRestrictions(true, false, AudioAttributes.USAGE_NOTIFICATION_RINGTONE); + verifyApplyRestrictions(true, false, AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST); } @Test public void testZenOn_AllowAlarmsMedia_NoAlarmMediaMuteApplied() { - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS | - PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0); + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS + | PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, false, - AudioAttributes.USAGE_ALARM); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, false, - AudioAttributes.USAGE_MEDIA); + mZenModeHelper.applyRestrictions(); + verifyApplyRestrictions(true, false, AudioAttributes.USAGE_ALARM); + verifyApplyRestrictions(true, false, AudioAttributes.USAGE_MEDIA); } @Test public void testZenOn_DisallowAlarmsMedia_AlarmMediaMuteApplied() { - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, true, - AudioAttributes.USAGE_ALARM); + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); + verifyApplyRestrictions(true, true, AudioAttributes.USAGE_ALARM); // Media is a catch-all that includes games - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, true, - AudioAttributes.USAGE_MEDIA); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, true, - AudioAttributes.USAGE_GAME); + verifyApplyRestrictions(true, true, AudioAttributes.USAGE_MEDIA); + verifyApplyRestrictions(true, true, AudioAttributes.USAGE_GAME); } @Test public void testTotalSilence() { - mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_NO_INTERRUPTIONS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS | - PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.mZenMode = Settings.Global.ZEN_MODE_NO_INTERRUPTIONS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS + | PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); // Total silence will silence alarms, media and system noises (but not vibrations) - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, true, - AudioAttributes.USAGE_ALARM); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, true, - AudioAttributes.USAGE_MEDIA); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, true, - AudioAttributes.USAGE_GAME); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, true, - AudioAttributes.USAGE_ASSISTANCE_SONIFICATION, AppOpsManager.OP_PLAY_AUDIO); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, false, - AudioAttributes.USAGE_ASSISTANCE_SONIFICATION, AppOpsManager.OP_VIBRATE); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, true, - AudioAttributes.USAGE_UNKNOWN); + verifyApplyRestrictions(false, true, AudioAttributes.USAGE_ALARM); + verifyApplyRestrictions(false, true, AudioAttributes.USAGE_MEDIA); + verifyApplyRestrictions(false, true, AudioAttributes.USAGE_GAME); + verify(mAppOps, atLeastOnce()).setRestriction(AppOpsManager.OP_PLAY_AUDIO, + AudioAttributes.USAGE_ASSISTANCE_SONIFICATION, AppOpsManager.MODE_IGNORED, null); + verify(mAppOps, atLeastOnce()).setRestriction(AppOpsManager.OP_VIBRATE, + AudioAttributes.USAGE_ASSISTANCE_SONIFICATION, AppOpsManager.MODE_ALLOWED, null); + verifyApplyRestrictions(false, true, AudioAttributes.USAGE_UNKNOWN); } @Test public void testAlarmsOnly_alarmMediaMuteNotApplied() { - mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.mZenMode = Settings.Global.ZEN_MODE_ALARMS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); // Alarms only mode will not silence alarms - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, false, - AudioAttributes.USAGE_ALARM); + verifyApplyRestrictions(false, false, AudioAttributes.USAGE_ALARM); // Alarms only mode will not silence media - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, false, - AudioAttributes.USAGE_MEDIA); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, false, - AudioAttributes.USAGE_GAME); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, false, - AudioAttributes.USAGE_UNKNOWN); + verifyApplyRestrictions(false, false, AudioAttributes.USAGE_MEDIA); + verifyApplyRestrictions(false, false, AudioAttributes.USAGE_GAME); + verifyApplyRestrictions(false, false, AudioAttributes.USAGE_UNKNOWN); // Alarms only will silence system noises (but not vibrations) - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, true, - AudioAttributes.USAGE_ASSISTANCE_SONIFICATION, AppOpsManager.OP_PLAY_AUDIO); + verify(mAppOps, atLeastOnce()).setRestriction(AppOpsManager.OP_PLAY_AUDIO, + AudioAttributes.USAGE_ASSISTANCE_SONIFICATION, AppOpsManager.MODE_IGNORED, null); } @Test public void testAlarmsOnly_callsMuteApplied() { - mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.mZenMode = Settings.Global.ZEN_MODE_ALARMS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); // Alarms only mode will silence calls despite priority-mode config - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, true, - AudioAttributes.USAGE_NOTIFICATION_RINGTONE); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, true, + verifyApplyRestrictions(false, true, AudioAttributes.USAGE_NOTIFICATION_RINGTONE); + verifyApplyRestrictions(false, true, AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST); } @Test public void testAlarmsOnly_allZenConfigToggledCannotBypass_alarmMuteNotApplied() { // Only audio attributes with SUPPRESIBLE_NEVER can bypass - mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.mZenMode = Settings.Global.ZEN_MODE_ALARMS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, false, - AudioAttributes.USAGE_ALARM); + verifyApplyRestrictions(false, false, AudioAttributes.USAGE_ALARM); } @Test public void testZenAllCannotBypass() { // Only audio attributes with SUPPRESIBLE_NEVER can bypass // with special case USAGE_ASSISTANCE_SONIFICATION - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); for (int usage : AudioAttributes.SDK_USAGES) { if (usage == AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) { // only mute audio, not vibrations - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, true, usage, - AppOpsManager.OP_PLAY_AUDIO); - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, false, usage, - AppOpsManager.OP_VIBRATE); + verify(mAppOps, atLeastOnce()).setRestriction(eq(AppOpsManager.OP_PLAY_AUDIO), + eq(usage), eq(AppOpsManager.MODE_IGNORED), notNull()); + verify(mAppOps, atLeastOnce()).setRestriction(eq(AppOpsManager.OP_VIBRATE), + eq(usage), eq(AppOpsManager.MODE_ALLOWED), notNull()); } else { boolean shouldMute = AudioAttributes.SUPPRESSIBLE_USAGES.get(usage) != AudioAttributes.SUPPRESSIBLE_NEVER; - verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, shouldMute, usage); + verifyApplyRestrictions(true, shouldMute, usage); } } } @Test public void testApplyRestrictions_whitelist_priorityOnlyMode() { - mZenModeHelperSpy.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); for (int usage : AudioAttributes.SDK_USAGES) { verify(mAppOps).setRestriction( @@ -491,10 +490,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { @Test public void testApplyRestrictions_whitelist_alarmsOnlyMode() { - mZenModeHelperSpy.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); - mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_ALARMS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mZenMode = Global.ZEN_MODE_ALARMS; + mZenModeHelper.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); for (int usage : AudioAttributes.SDK_USAGES) { verify(mAppOps).setRestriction( @@ -506,10 +505,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { @Test public void testApplyRestrictions_whitelist_totalSilenceMode() { - mZenModeHelperSpy.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); - mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_NO_INTERRUPTIONS; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); - mZenModeHelperSpy.applyRestrictions(); + mZenModeHelper.setPriorityOnlyDndExemptPackages(new String[] {PKG_O}); + mZenModeHelper.mZenMode = Global.ZEN_MODE_NO_INTERRUPTIONS; + mZenModeHelper.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); + mZenModeHelper.applyRestrictions(); for (int usage : AudioAttributes.SDK_USAGES) { verify(mAppOps).setRestriction( @@ -533,11 +532,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { // and we're setting zen mode on Settings.Secure.putInt(mContentResolver, Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 1); Settings.Secure.putInt(mContentResolver, Settings.Secure.ZEN_SETTINGS_UPDATED, 0); - mZenModeHelperSpy.mIsBootComplete = true; - mZenModeHelperSpy.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); - mZenModeHelperSpy.setZenModeSetting(ZEN_MODE_IMPORTANT_INTERRUPTIONS); + mZenModeHelper.mIsBootComplete = true; + mZenModeHelper.mConsolidatedPolicy = new Policy(0, 0, 0, 0, 0, 0); + mZenModeHelper.setZenModeSetting(ZEN_MODE_IMPORTANT_INTERRUPTIONS); - verify(mZenModeHelperSpy, times(1)).createZenUpgradeNotification(); verify(mNotificationManager, times(1)).notify(eq(ZenModeHelper.TAG), eq(SystemMessage.NOTE_ZEN_UPGRADE), any()); assertEquals(0, Settings.Secure.getInt(mContentResolver, @@ -549,10 +547,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { // doesn't show upgrade notification if stored settings says don't show Settings.Secure.putInt(mContentResolver, Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 0); Settings.Secure.putInt(mContentResolver, Settings.Secure.ZEN_SETTINGS_UPDATED, 0); - mZenModeHelperSpy.mIsBootComplete = true; - mZenModeHelperSpy.setZenModeSetting(ZEN_MODE_IMPORTANT_INTERRUPTIONS); + mZenModeHelper.mIsBootComplete = true; + mZenModeHelper.setZenModeSetting(ZEN_MODE_IMPORTANT_INTERRUPTIONS); - verify(mZenModeHelperSpy, never()).createZenUpgradeNotification(); verify(mNotificationManager, never()).notify(eq(ZenModeHelper.TAG), eq(SystemMessage.NOTE_ZEN_UPGRADE), any()); } @@ -562,10 +559,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { // doesn't show upgrade notification since zen was already updated Settings.Secure.putInt(mContentResolver, Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 0); Settings.Secure.putInt(mContentResolver, Settings.Secure.ZEN_SETTINGS_UPDATED, 1); - mZenModeHelperSpy.mIsBootComplete = true; - mZenModeHelperSpy.setZenModeSetting(ZEN_MODE_IMPORTANT_INTERRUPTIONS); + mZenModeHelper.mIsBootComplete = true; + mZenModeHelper.setZenModeSetting(ZEN_MODE_IMPORTANT_INTERRUPTIONS); - verify(mZenModeHelperSpy, never()).createZenUpgradeNotification(); verify(mNotificationManager, never()).notify(eq(ZenModeHelper.TAG), eq(SystemMessage.NOTE_ZEN_UPGRADE), any()); } @@ -573,41 +569,41 @@ public class ZenModeHelperTest extends UiServiceTestCase { @Test public void testZenSetInternalRinger_AllPriorityNotificationSoundsMuted() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); - mZenModeHelperSpy.mAudioManager = mAudioManager; + mZenModeHelper.mAudioManager = mAudioManager; Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, Integer.toString(AudioManager.RINGER_MODE_NORMAL)); // 1. Current ringer is normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_NORMAL); // Set zen to priority-only with all notification sounds muted (so ringer will be muted) - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConfig.allowReminders = false; - mZenModeHelperSpy.mConfig.allowCalls = false; - mZenModeHelperSpy.mConfig.allowMessages = false; - mZenModeHelperSpy.mConfig.allowEvents = false; - mZenModeHelperSpy.mConfig.allowRepeatCallers = false; - mZenModeHelperSpy.mConfig.allowConversations = false; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mConfig.allowReminders = false; + mZenModeHelper.mConfig.allowCalls = false; + mZenModeHelper.mConfig.allowMessages = false; + mZenModeHelper.mConfig.allowEvents = false; + mZenModeHelper.mConfig.allowRepeatCallers = false; + mZenModeHelper.mConfig.allowConversations = false; // 2. apply priority only zen - verify ringer is unchanged - mZenModeHelperSpy.applyZenToRingerMode(); + mZenModeHelper.applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_SILENT, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); // 3. apply zen off - verify zen is set to previous ringer (normal) when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); - mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; - mZenModeHelperSpy.applyZenToRingerMode(); + mZenModeHelper.mZenMode = Global.ZEN_MODE_OFF; + mZenModeHelper.applyZenToRingerMode(); verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); } @Test public void testRingerAffectedStreamsTotalSilence() { // in total silence: // ringtone, notification, system, alarm, streams, music are affected by ringer mode - mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_NO_INTERRUPTIONS; + mZenModeHelper.mZenMode = Settings.Global.ZEN_MODE_NO_INTERRUPTIONS; ZenModeHelper.RingerModeDelegate ringerModeDelegate = - mZenModeHelperSpy.new RingerModeDelegate(); + mZenModeHelper.new RingerModeDelegate(); int ringerModeAffectedStreams = ringerModeDelegate.getRingerModeAffectedStreams(0); assertTrue((ringerModeAffectedStreams & (1 << AudioSystem.STREAM_RING)) != 0); assertTrue((ringerModeAffectedStreams & (1 << AudioSystem.STREAM_NOTIFICATION)) @@ -622,11 +618,11 @@ public class ZenModeHelperTest extends UiServiceTestCase { public void testRingerAffectedStreamsPriorityOnly() { // in priority only mode: // ringtone, notification and system streams are affected by ringer mode - mZenModeHelperSpy.mConfig.allowAlarms = true; - mZenModeHelperSpy.mConfig.allowReminders = true; - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mConfig.allowAlarms = true; + mZenModeHelper.mConfig.allowReminders = true; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; ZenModeHelper.RingerModeDelegate ringerModeDelegateRingerMuted = - mZenModeHelperSpy.new RingerModeDelegate(); + mZenModeHelper.new RingerModeDelegate(); int ringerModeAffectedStreams = ringerModeDelegateRingerMuted.getRingerModeAffectedStreams(0); @@ -640,15 +636,15 @@ public class ZenModeHelperTest extends UiServiceTestCase { // even when ringer is muted (since all ringer sounds cannot bypass DND), // system stream is still affected by ringer mode - mZenModeHelperSpy.mConfig.allowSystem = false; - mZenModeHelperSpy.mConfig.allowReminders = false; - mZenModeHelperSpy.mConfig.allowCalls = false; - mZenModeHelperSpy.mConfig.allowMessages = false; - mZenModeHelperSpy.mConfig.allowEvents = false; - mZenModeHelperSpy.mConfig.allowRepeatCallers = false; - mZenModeHelperSpy.mConfig.allowConversations = false; + mZenModeHelper.mConfig.allowSystem = false; + mZenModeHelper.mConfig.allowReminders = false; + mZenModeHelper.mConfig.allowCalls = false; + mZenModeHelper.mConfig.allowMessages = false; + mZenModeHelper.mConfig.allowEvents = false; + mZenModeHelper.mConfig.allowRepeatCallers = false; + mZenModeHelper.mConfig.allowConversations = false; ZenModeHelper.RingerModeDelegate ringerModeDelegateRingerNotMuted = - mZenModeHelperSpy.new RingerModeDelegate(); + mZenModeHelper.new RingerModeDelegate(); int ringerMutedRingerModeAffectedStreams = ringerModeDelegateRingerNotMuted.getRingerModeAffectedStreams(0); @@ -665,74 +661,74 @@ public class ZenModeHelperTest extends UiServiceTestCase { @Test public void testZenSetInternalRinger_NotAllPriorityNotificationSoundsMuted_StartNormal() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); - mZenModeHelperSpy.mAudioManager = mAudioManager; + mZenModeHelper.mAudioManager = mAudioManager; Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, Integer.toString(AudioManager.RINGER_MODE_NORMAL)); // 1. Current ringer is normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_NORMAL); - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConfig.allowReminders = true; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mConfig.allowReminders = true; // 2. apply priority only zen - verify ringer is normal - mZenModeHelperSpy.applyZenToRingerMode(); + mZenModeHelper.applyZenToRingerMode(); verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); // 3. apply zen off - verify ringer remains normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_NORMAL); - mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; - mZenModeHelperSpy.applyZenToRingerMode(); + mZenModeHelper.mZenMode = Global.ZEN_MODE_OFF; + mZenModeHelper.applyZenToRingerMode(); verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); } @Test public void testZenSetInternalRinger_NotAllPriorityNotificationSoundsMuted_StartSilent() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); - mZenModeHelperSpy.mAudioManager = mAudioManager; + mZenModeHelper.mAudioManager = mAudioManager; Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, Integer.toString(AudioManager.RINGER_MODE_SILENT)); // 1. Current ringer is silent when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConfig.allowReminders = true; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mConfig.allowReminders = true; // 2. apply priority only zen - verify ringer is silent - mZenModeHelperSpy.applyZenToRingerMode(); + mZenModeHelper.applyZenToRingerMode(); verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_SILENT, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); // 3. apply zen-off - verify ringer is still silent when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); - mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; - mZenModeHelperSpy.applyZenToRingerMode(); + mZenModeHelper.mZenMode = Global.ZEN_MODE_OFF; + mZenModeHelper.applyZenToRingerMode(); verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_SILENT, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); } @Test public void testZenSetInternalRinger_NotAllPriorityNotificationSoundsMuted_RingerChanges() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); - mZenModeHelperSpy.mAudioManager = mAudioManager; + mZenModeHelper.mAudioManager = mAudioManager; Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, Integer.toString(AudioManager.RINGER_MODE_NORMAL)); // 1. Current ringer is normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_NORMAL); // Set zen to priority-only with all notification sounds muted (so ringer will be muted) - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConfig.allowReminders = true; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mConfig.allowReminders = true; // 2. apply priority only zen - verify zen will still be normal - mZenModeHelperSpy.applyZenToRingerMode(); + mZenModeHelper.applyZenToRingerMode(); verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); // 3. change ringer from normal to silent, verify previous ringer set to new ringer (silent) ZenModeHelper.RingerModeDelegate ringerModeDelegate = - mZenModeHelperSpy.new RingerModeDelegate(); + mZenModeHelper.new RingerModeDelegate(); ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, AudioManager.RINGER_MODE_SILENT, "test", AudioManager.RINGER_MODE_NORMAL, VolumePolicy.DEFAULT); @@ -741,41 +737,40 @@ public class ZenModeHelperTest extends UiServiceTestCase { // 4. apply zen off - verify ringer still silenced when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); - mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; - mZenModeHelperSpy.applyZenToRingerMode(); + mZenModeHelper.mZenMode = Global.ZEN_MODE_OFF; + mZenModeHelper.applyZenToRingerMode(); verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_SILENT, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); } @Test public void testSilentRingerSavedInZenOff_startsZenOff() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); - mZenModeHelperSpy.mConfig = new ZenModeConfig(); - mZenModeHelperSpy.mAudioManager = mAudioManager; + mZenModeHelper.mConfig = new ZenModeConfig(); + mZenModeHelper.mAudioManager = mAudioManager; // apply zen off multiple times - verify ringer is not set to normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); - mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; - mZenModeHelperSpy.mConfig = null; // will evaluate config to zen mode off + mZenModeHelper.mZenMode = Global.ZEN_MODE_OFF; + mZenModeHelper.mConfig = null; // will evaluate config to zen mode off for (int i = 0; i < 3; i++) { // if zen doesn't change, zen should not reapply itself to the ringer - mZenModeHelperSpy.evaluateZenMode("test", true); + mZenModeHelper.evaluateZenMode("test", true); } - verify(mZenModeHelperSpy, never()).applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); } @Test public void testSilentRingerSavedOnZenOff_startsZenOn() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); - mZenModeHelperSpy.mAudioManager = mAudioManager; - mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; - mZenModeHelperSpy.mConfig = new ZenModeConfig(); + mZenModeHelper.mAudioManager = mAudioManager; + mZenModeHelper.mZenMode = Global.ZEN_MODE_OFF; + mZenModeHelper.mConfig = new ZenModeConfig(); // previously set silent ringer ZenModeHelper.RingerModeDelegate ringerModeDelegate = - mZenModeHelperSpy.new RingerModeDelegate(); + mZenModeHelper.new RingerModeDelegate(); ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, AudioManager.RINGER_MODE_SILENT, "test", AudioManager.RINGER_MODE_NORMAL, VolumePolicy.DEFAULT); @@ -784,26 +779,25 @@ public class ZenModeHelperTest extends UiServiceTestCase { // apply zen off multiple times - verify ringer is not set to normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; for (int i = 0; i < 3; i++) { // if zen doesn't change, zen should not reapply itself to the ringer - mZenModeHelperSpy.evaluateZenMode("test", true); + mZenModeHelper.evaluateZenMode("test", true); } - verify(mZenModeHelperSpy, times(1)).applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); } @Test public void testVibrateRingerSavedOnZenOff_startsZenOn() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); - mZenModeHelperSpy.mAudioManager = mAudioManager; - mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; - mZenModeHelperSpy.mConfig = new ZenModeConfig(); + mZenModeHelper.mAudioManager = mAudioManager; + mZenModeHelper.mZenMode = Global.ZEN_MODE_OFF; + mZenModeHelper.mConfig = new ZenModeConfig(); // previously set silent ringer ZenModeHelper.RingerModeDelegate ringerModeDelegate = - mZenModeHelperSpy.new RingerModeDelegate(); + mZenModeHelper.new RingerModeDelegate(); ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, AudioManager.RINGER_MODE_VIBRATE, "test", AudioManager.RINGER_MODE_NORMAL, VolumePolicy.DEFAULT); @@ -812,89 +806,88 @@ public class ZenModeHelperTest extends UiServiceTestCase { // apply zen off multiple times - verify ringer is not set to normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE); - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; for (int i = 0; i < 3; i++) { // if zen doesn't change, zen should not reapply itself to the ringer - mZenModeHelperSpy.evaluateZenMode("test", true); + mZenModeHelper.evaluateZenMode("test", true); } - verify(mZenModeHelperSpy, times(1)).applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, - mZenModeHelperSpy.TAG); + mZenModeHelper.TAG); } @Test public void testParcelConfig() { - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConfig.allowAlarms = false; - mZenModeHelperSpy.mConfig.allowMedia = false; - mZenModeHelperSpy.mConfig.allowSystem = false; - mZenModeHelperSpy.mConfig.allowReminders = true; - mZenModeHelperSpy.mConfig.allowCalls = true; - mZenModeHelperSpy.mConfig.allowMessages = true; - mZenModeHelperSpy.mConfig.allowEvents = true; - mZenModeHelperSpy.mConfig.allowRepeatCallers = true; - mZenModeHelperSpy.mConfig.allowConversations = true; - mZenModeHelperSpy.mConfig.allowConversationsFrom = ZenPolicy.CONVERSATION_SENDERS_ANYONE; - mZenModeHelperSpy.mConfig.suppressedVisualEffects = SUPPRESSED_EFFECT_BADGE; - mZenModeHelperSpy.mConfig.manualRule = new ZenModeConfig.ZenRule(); - mZenModeHelperSpy.mConfig.manualRule.component = new ComponentName("a", "a"); - mZenModeHelperSpy.mConfig.manualRule.enabled = true; - mZenModeHelperSpy.mConfig.manualRule.snoozing = true; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mConfig.allowAlarms = false; + mZenModeHelper.mConfig.allowMedia = false; + mZenModeHelper.mConfig.allowSystem = false; + mZenModeHelper.mConfig.allowReminders = true; + mZenModeHelper.mConfig.allowCalls = true; + mZenModeHelper.mConfig.allowMessages = true; + mZenModeHelper.mConfig.allowEvents = true; + mZenModeHelper.mConfig.allowRepeatCallers = true; + mZenModeHelper.mConfig.allowConversations = true; + mZenModeHelper.mConfig.allowConversationsFrom = ZenPolicy.CONVERSATION_SENDERS_ANYONE; + mZenModeHelper.mConfig.suppressedVisualEffects = SUPPRESSED_EFFECT_BADGE; + mZenModeHelper.mConfig.manualRule = new ZenModeConfig.ZenRule(); + mZenModeHelper.mConfig.manualRule.component = new ComponentName("a", "a"); + mZenModeHelper.mConfig.manualRule.enabled = true; + mZenModeHelper.mConfig.manualRule.snoozing = true; - ZenModeConfig actual = mZenModeHelperSpy.mConfig.copy(); + ZenModeConfig actual = mZenModeHelper.mConfig.copy(); - assertEquals(mZenModeHelperSpy.mConfig, actual); + assertEquals(mZenModeHelper.mConfig, actual); } @Test public void testWriteXml() throws Exception { - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConfig.allowAlarms = false; - mZenModeHelperSpy.mConfig.allowMedia = false; - mZenModeHelperSpy.mConfig.allowSystem = false; - mZenModeHelperSpy.mConfig.allowReminders = true; - mZenModeHelperSpy.mConfig.allowCalls = true; - mZenModeHelperSpy.mConfig.allowMessages = true; - mZenModeHelperSpy.mConfig.allowEvents = true; - mZenModeHelperSpy.mConfig.allowRepeatCallers = true; - mZenModeHelperSpy.mConfig.allowConversations = true; - mZenModeHelperSpy.mConfig.allowConversationsFrom = ZenPolicy.CONVERSATION_SENDERS_ANYONE; - mZenModeHelperSpy.mConfig.suppressedVisualEffects = SUPPRESSED_EFFECT_BADGE; - mZenModeHelperSpy.mConfig.manualRule = new ZenModeConfig.ZenRule(); - mZenModeHelperSpy.mConfig.manualRule.zenMode = + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mConfig.allowAlarms = false; + mZenModeHelper.mConfig.allowMedia = false; + mZenModeHelper.mConfig.allowSystem = false; + mZenModeHelper.mConfig.allowReminders = true; + mZenModeHelper.mConfig.allowCalls = true; + mZenModeHelper.mConfig.allowMessages = true; + mZenModeHelper.mConfig.allowEvents = true; + mZenModeHelper.mConfig.allowRepeatCallers = true; + mZenModeHelper.mConfig.allowConversations = true; + mZenModeHelper.mConfig.allowConversationsFrom = ZenPolicy.CONVERSATION_SENDERS_ANYONE; + mZenModeHelper.mConfig.suppressedVisualEffects = SUPPRESSED_EFFECT_BADGE; + mZenModeHelper.mConfig.manualRule = new ZenModeConfig.ZenRule(); + mZenModeHelper.mConfig.manualRule.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConfig.manualRule.component = new ComponentName("a", "a"); - mZenModeHelperSpy.mConfig.manualRule.pkg = "a"; - mZenModeHelperSpy.mConfig.manualRule.enabled = true; + mZenModeHelper.mConfig.manualRule.component = new ComponentName("a", "a"); + mZenModeHelper.mConfig.manualRule.pkg = "a"; + mZenModeHelper.mConfig.manualRule.enabled = true; - ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy(); + ZenModeConfig expected = mZenModeHelper.mConfig.copy(); ByteArrayOutputStream baos = writeXmlAndPurge(null); TypedXmlPullParser parser = getParserForByteStream(baos); - mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); + mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL); assertEquals("Config mismatch: current vs expected: " - + new ZenModeDiff.ConfigDiff(mZenModeHelperSpy.mConfig, expected), expected, - mZenModeHelperSpy.mConfig); + + new ZenModeDiff.ConfigDiff(mZenModeHelper.mConfig, expected), expected, + mZenModeHelper.mConfig); } @Test public void testProto() { - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; + mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; // existence of manual rule means it should be in output - mZenModeHelperSpy.mConfig.manualRule = new ZenModeConfig.ZenRule(); - mZenModeHelperSpy.mConfig.manualRule.pkg = "android"; // system + mZenModeHelper.mConfig.manualRule = new ZenModeConfig.ZenRule(); + mZenModeHelper.mConfig.manualRule.pkg = "android"; // system - int n = mZenModeHelperSpy.mConfig.automaticRules.size(); + int n = mZenModeHelper.mConfig.automaticRules.size(); List ids = new ArrayList<>(n); - for (ZenModeConfig.ZenRule rule : mZenModeHelperSpy.mConfig.automaticRules.values()) { + for (ZenModeConfig.ZenRule rule : mZenModeHelper.mConfig.automaticRules.values()) { ids.add(rule.id); } ids.add(ZenModeConfig.MANUAL_RULE_ID); ids.add(""); // for ROOT_CONFIG, logged with empty string as id List events = new LinkedList<>(); - mZenModeHelperSpy.pullRules(events); + mZenModeHelper.pullRules(events); assertEquals(n + 2, events.size()); // automatic rules + manual rule + root config for (WrappedSysUiStatsEvent.WrappedBuilder builder : mStatsEventBuilderFactory.builders) { if (builder.getAtomId() == DND_MODE_RULE) { @@ -918,10 +911,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { public void testProtoWithAutoRule() throws Exception { setupZenConfig(); // one enabled automatic rule - mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules(ZEN_MODE_FOR_TESTING); + mZenModeHelper.mConfig.automaticRules = getCustomAutomaticRules(ZEN_MODE_FOR_TESTING); List events = new LinkedList<>(); - mZenModeHelperSpy.pullRules(events); + mZenModeHelper.pullRules(events); boolean foundCustomEvent = false; for (WrappedSysUiStatsEvent.WrappedBuilder builder : mStatsEventBuilderFactory.builders) { @@ -942,23 +935,23 @@ public class ZenModeHelperTest extends UiServiceTestCase { public void ruleUidsCached() throws Exception { setupZenConfig(); // one enabled automatic rule - mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules(); + mZenModeHelper.mConfig.automaticRules = getCustomAutomaticRules(); List events = new LinkedList<>(); // first time retrieving uid: - mZenModeHelperSpy.pullRules(events); + mZenModeHelper.pullRules(events); verify(mPackageManager, atLeastOnce()).getPackageUidAsUser(anyString(), anyInt()); // second time retrieving uid: reset(mPackageManager); - mZenModeHelperSpy.pullRules(events); + mZenModeHelper.pullRules(events); verify(mPackageManager, never()).getPackageUidAsUser(anyString(), anyInt()); // new rule from same package + user added reset(mPackageManager); ZenModeConfig.ZenRule rule = createCustomAutomaticRule(ZEN_MODE_IMPORTANT_INTERRUPTIONS, CUSTOM_RULE_ID + "2"); - mZenModeHelperSpy.mConfig.automaticRules.put(rule.id, rule); - mZenModeHelperSpy.pullRules(events); + mZenModeHelper.mConfig.automaticRules.put(rule.id, rule); + mZenModeHelper.pullRules(events); verify(mPackageManager, never()).getPackageUidAsUser(anyString(), anyInt()); } @@ -969,23 +962,23 @@ public class ZenModeHelperTest extends UiServiceTestCase { setupZenConfig(); // one enabled automatic rule - mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules(); + mZenModeHelper.mConfig.automaticRules = getCustomAutomaticRules(); List events = new LinkedList<>(); - mZenModeHelperSpy.pullRules(events); - mZenModeHelperSpy.removeAutomaticZenRule(CUSTOM_RULE_ID, "test"); + mZenModeHelper.pullRules(events); + mZenModeHelper.removeAutomaticZenRule(CUSTOM_RULE_ID, "test"); assertTrue(-1 - == mZenModeHelperSpy.mRulesUidCache.getOrDefault(CUSTOM_PKG_NAME + "|" + 0, -1)); + == mZenModeHelper.mRulesUidCache.getOrDefault(CUSTOM_PKG_NAME + "|" + 0, -1)); } @Test public void testProtoRedactsIds() throws Exception { setupZenConfig(); // one enabled automatic rule - mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules(); + mZenModeHelper.mConfig.automaticRules = getCustomAutomaticRules(); List events = new LinkedList<>(); - mZenModeHelperSpy.pullRules(events); + mZenModeHelper.pullRules(events); boolean foundCustomEvent = false; for (WrappedSysUiStatsEvent.WrappedBuilder builder : mStatsEventBuilderFactory.builders) { @@ -999,12 +992,12 @@ public class ZenModeHelperTest extends UiServiceTestCase { @Test public void testProtoWithManualRule() throws Exception { setupZenConfig(); - mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules(); - mZenModeHelperSpy.mConfig.manualRule = new ZenModeConfig.ZenRule(); - mZenModeHelperSpy.mConfig.manualRule.enabled = true; + mZenModeHelper.mConfig.automaticRules = getCustomAutomaticRules(); + mZenModeHelper.mConfig.manualRule = new ZenModeConfig.ZenRule(); + mZenModeHelper.mConfig.manualRule.enabled = true; List events = new LinkedList<>(); - mZenModeHelperSpy.pullRules(events); + mZenModeHelper.pullRules(events); boolean foundManualRule = false; for (WrappedSysUiStatsEvent.WrappedBuilder builder : mStatsEventBuilderFactory.builders) { @@ -1020,50 +1013,50 @@ public class ZenModeHelperTest extends UiServiceTestCase { public void testWriteXml_onlyBackupsTargetUser() throws Exception { // Setup configs for user 10 and 11. setupZenConfig(); - ZenModeConfig config10 = mZenModeHelperSpy.mConfig.copy(); + ZenModeConfig config10 = mZenModeHelper.mConfig.copy(); config10.user = 10; config10.allowAlarms = true; config10.allowMedia = true; - mZenModeHelperSpy.setConfig(config10, null, "writeXml"); - ZenModeConfig config11 = mZenModeHelperSpy.mConfig.copy(); + mZenModeHelper.setConfig(config10, null, "writeXml"); + ZenModeConfig config11 = mZenModeHelper.mConfig.copy(); config11.user = 11; config11.allowAlarms = false; config11.allowMedia = false; - mZenModeHelperSpy.setConfig(config11, null, "writeXml"); + mZenModeHelper.setConfig(config11, null, "writeXml"); // Backup user 10 and reset values. ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, 10); ZenModeConfig newConfig11 = new ZenModeConfig(); newConfig11.user = 11; - mZenModeHelperSpy.mConfigs.put(11, newConfig11); + mZenModeHelper.mConfigs.put(11, newConfig11); // Parse backup data. TypedXmlPullParser parser = getParserForByteStream(baos); - mZenModeHelperSpy.readXml(parser, true, 10); - mZenModeHelperSpy.readXml(parser, true, 11); + mZenModeHelper.readXml(parser, true, 10); + mZenModeHelper.readXml(parser, true, 11); - ZenModeConfig actual = mZenModeHelperSpy.mConfigs.get(10); + ZenModeConfig actual = mZenModeHelper.mConfigs.get(10); assertEquals( "Config mismatch: current vs expected: " + new ZenModeDiff.ConfigDiff(actual, config10), config10, actual); - assertNotEquals("Expected config mismatch", config11, mZenModeHelperSpy.mConfigs.get(11)); + assertNotEquals("Expected config mismatch", config11, mZenModeHelper.mConfigs.get(11)); } @Test public void testReadXmlRestore_forSystemUser() throws Exception { setupZenConfig(); // one enabled automatic rule - mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules(); - ZenModeConfig original = mZenModeHelperSpy.mConfig.copy(); + mZenModeHelper.mConfig.automaticRules = getCustomAutomaticRules(); + ZenModeConfig original = mZenModeHelper.mConfig.copy(); ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, UserHandle.USER_SYSTEM); TypedXmlPullParser parser = getParserForByteStream(baos); - mZenModeHelperSpy.readXml(parser, true, UserHandle.USER_SYSTEM); + mZenModeHelper.readXml(parser, true, UserHandle.USER_SYSTEM); assertEquals("Config mismatch: current vs original: " - + new ZenModeDiff.ConfigDiff(mZenModeHelperSpy.mConfig, original), - original, mZenModeHelperSpy.mConfig); - assertEquals(original.hashCode(), mZenModeHelperSpy.mConfig.hashCode()); + + new ZenModeDiff.ConfigDiff(mZenModeHelper.mConfig, original), + original, mZenModeHelper.mConfig); + assertEquals(original.hashCode(), mZenModeHelper.mConfig.hashCode()); } /** Restore should ignore the data's user id and restore for the target user. */ @@ -1071,24 +1064,24 @@ public class ZenModeHelperTest extends UiServiceTestCase { public void testReadXmlRestore_forNonSystemUser() throws Exception { // Setup config. setupZenConfig(); - mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules(); - ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy(); + mZenModeHelper.mConfig.automaticRules = getCustomAutomaticRules(); + ZenModeConfig expected = mZenModeHelper.mConfig.copy(); // Backup data for user 0. ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, UserHandle.USER_SYSTEM); // Restore data for user 10. TypedXmlPullParser parser = getParserForByteStream(baos); - mZenModeHelperSpy.readXml(parser, true, 10); + mZenModeHelper.readXml(parser, true, 10); - ZenModeConfig actual = mZenModeHelperSpy.mConfigs.get(10); + ZenModeConfig actual = mZenModeHelper.mConfigs.get(10); expected.user = 10; assertEquals("Config mismatch: current vs original: " + new ZenModeDiff.ConfigDiff(actual, expected), expected, actual); assertEquals(expected.hashCode(), actual.hashCode()); expected.user = 0; - assertNotEquals(expected, mZenModeHelperSpy.mConfig); + assertNotEquals(expected, mZenModeHelper.mConfig); } @Test @@ -1119,19 +1112,19 @@ public class ZenModeHelperTest extends UiServiceTestCase { .allowReminders(false) .build(); automaticRules.put("customRule", customRule); - mZenModeHelperSpy.mConfig.automaticRules = automaticRules; + mZenModeHelper.mConfig.automaticRules = automaticRules; - ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy(); + ZenModeConfig expected = mZenModeHelper.mConfig.copy(); ByteArrayOutputStream baos = writeXmlAndPurge(null); TypedXmlPullParser parser = Xml.newFastPullParser(); parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); + mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL); ZenModeConfig.ZenRule original = expected.automaticRules.get(ruleId); - ZenModeConfig.ZenRule current = mZenModeHelperSpy.mConfig.automaticRules.get(ruleId); + ZenModeConfig.ZenRule current = mZenModeHelper.mConfig.automaticRules.get(ruleId); assertEquals("Automatic rules mismatch", original, current); } @@ -1160,16 +1153,16 @@ public class ZenModeHelperTest extends UiServiceTestCase { .allowReminders(true) .build(); automaticRules.put(ruleId, customRule); - mZenModeHelperSpy.mConfig.automaticRules = automaticRules; + mZenModeHelper.mConfig.automaticRules = automaticRules; - ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy(); + ZenModeConfig expected = mZenModeHelper.mConfig.copy(); ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, UserHandle.USER_SYSTEM); TypedXmlPullParser parser = getParserForByteStream(baos); - mZenModeHelperSpy.readXml(parser, true, UserHandle.USER_SYSTEM); + mZenModeHelper.readXml(parser, true, UserHandle.USER_SYSTEM); ZenModeConfig.ZenRule original = expected.automaticRules.get(ruleId); - ZenModeConfig.ZenRule current = mZenModeHelperSpy.mConfig.automaticRules.get(ruleId); + ZenModeConfig.ZenRule current = mZenModeHelper.mConfig.automaticRules.get(ruleId); assertEquals("Automatic rules mismatch", original, current); } @@ -1188,7 +1181,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { customRule.conditionId = ZenModeConfig.toScheduleConditionId(weeknights); customRule.component = new ComponentName("android", "ScheduleConditionProvider"); enabledAutoRule.put("customRule", customRule); - mZenModeHelperSpy.mConfig.automaticRules = enabledAutoRule; + mZenModeHelper.mConfig.automaticRules = enabledAutoRule; // set previous version ByteArrayOutputStream baos = writeXmlAndPurge(5); @@ -1196,9 +1189,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); + mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL); - assertTrue(mZenModeHelperSpy.mConfig.automaticRules.containsKey("customRule")); + assertTrue(mZenModeHelper.mConfig.automaticRules.containsKey("customRule")); setupZenConfigMaintained(); } @@ -1216,9 +1209,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(xml.getBytes())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); + mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL); - assertEquals(0, mZenModeHelperSpy.mConfig.suppressedVisualEffects); + assertEquals(0, mZenModeHelper.mConfig.suppressedVisualEffects); xml = "\n" + "\n" + "\n" + "(); + mZenModeHelper.mConfig.automaticRules = new ArrayMap<>(); // set previous version ByteArrayOutputStream baos = writeXmlAndPurge(5); @@ -1328,10 +1321,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); + mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL); // check default rules - ArrayMap rules = mZenModeHelperSpy.mConfig.automaticRules; + ArrayMap rules = mZenModeHelper.mConfig.automaticRules; assertTrue(rules.size() != 0); for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) { assertTrue(rules.containsKey(defaultId)); @@ -1356,7 +1349,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { customRule.conditionId = ZenModeConfig.toScheduleConditionId(weeknights); customRule.component = new ComponentName("android", "ScheduleConditionProvider"); disabledAutoRule.put("customRule", customRule); - mZenModeHelperSpy.mConfig.automaticRules = disabledAutoRule; + mZenModeHelper.mConfig.automaticRules = disabledAutoRule; // set previous version ByteArrayOutputStream baos = writeXmlAndPurge(5); @@ -1364,10 +1357,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); + mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL); // check default rules - ArrayMap rules = mZenModeHelperSpy.mConfig.automaticRules; + ArrayMap rules = mZenModeHelper.mConfig.automaticRules; assertTrue(rules.size() != 0); for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) { assertTrue(rules.containsKey(defaultId)); @@ -1408,7 +1401,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { defaultScheduleRule.id = ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID; automaticRules.put(ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID, defaultScheduleRule); - mZenModeHelperSpy.mConfig.automaticRules = automaticRules; + mZenModeHelper.mConfig.automaticRules = automaticRules; // set previous version ByteArrayOutputStream baos = writeXmlAndPurge(5); @@ -1416,10 +1409,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); + mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL); // check default rules - ArrayMap rules = mZenModeHelperSpy.mConfig.automaticRules; + ArrayMap rules = mZenModeHelper.mConfig.automaticRules; assertTrue(rules.size() != 0); for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) { assertTrue(rules.containsKey(defaultId)); @@ -1477,7 +1470,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { .build(); automaticRules.put(ZenModeConfig.EVENTS_DEFAULT_RULE_ID, defaultEventRule); - mZenModeHelperSpy.mConfig.automaticRules = automaticRules; + mZenModeHelper.mConfig.automaticRules = automaticRules; // set previous version ByteArrayOutputStream baos = writeXmlAndPurge(5); @@ -1485,10 +1478,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); + mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL); // check default rules - ArrayMap rules = mZenModeHelperSpy.mConfig.automaticRules; + ArrayMap rules = mZenModeHelper.mConfig.automaticRules; assertTrue(rules.size() != 0); for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) { assertTrue(rules.containsKey(defaultId)); @@ -1498,32 +1491,32 @@ public class ZenModeHelperTest extends UiServiceTestCase { setupZenConfigMaintained(); List events = new LinkedList<>(); - mZenModeHelperSpy.pullRules(events); + mZenModeHelper.pullRules(events); assertEquals(4, events.size()); } @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()); + mZenModeHelper.mConfig = config; + mZenModeHelper.mConditions.evaluateConfig(mZenModeHelper.mConfig, null, true); + assertEquals(0, mZenModeHelper.mConditions.mSubscriptions.size()); - mZenModeHelperSpy.mConfig.manualRule = new ZenModeConfig.ZenRule(); + mZenModeHelper.mConfig.manualRule = new ZenModeConfig.ZenRule(); Uri conditionId = ZenModeConfig.toCountdownConditionId(9000000, false); - mZenModeHelperSpy.mConfig.manualRule.conditionId = conditionId; - mZenModeHelperSpy.mConfig.manualRule.component = new ComponentName("android", + mZenModeHelper.mConfig.manualRule.conditionId = conditionId; + mZenModeHelper.mConfig.manualRule.component = new ComponentName("android", CountdownConditionProvider.class.getName()); - mZenModeHelperSpy.mConfig.manualRule.condition = new Condition(conditionId, "", "", "", 0, + mZenModeHelper.mConfig.manualRule.condition = new Condition(conditionId, "", "", "", 0, STATE_TRUE, Condition.FLAG_RELEVANT_NOW); - mZenModeHelperSpy.mConfig.manualRule.enabled = true; - ZenModeConfig originalConfig = mZenModeHelperSpy.mConfig.copy(); + mZenModeHelper.mConfig.manualRule.enabled = true; + ZenModeConfig originalConfig = mZenModeHelper.mConfig.copy(); - mZenModeHelperSpy.mConditions.evaluateConfig(mZenModeHelperSpy.mConfig, null, true); + mZenModeHelper.mConditions.evaluateConfig(mZenModeHelper.mConfig, null, true); assertEquals(true, ZenModeConfig.isValidCountdownConditionId(conditionId)); - assertEquals(originalConfig, mZenModeHelperSpy.mConfig); - assertEquals(1, mZenModeHelperSpy.mConditions.mSubscriptions.size()); + assertEquals(originalConfig, mZenModeHelper.mConfig); + assertEquals(1, mZenModeHelper.mConditions.mSubscriptions.size()); } @Test @@ -1531,9 +1524,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { List events = new LinkedList<>(); ZenModeConfig config = new ZenModeConfig(); config.automaticRules = new ArrayMap<>(); - mZenModeHelperSpy.mConfig = config; - mZenModeHelperSpy.updateDefaultZenRules(); // shouldn't throw null pointer - mZenModeHelperSpy.pullRules(events); // shouldn't throw null pointer + mZenModeHelper.mConfig = config; + mZenModeHelper.updateDefaultZenRules(); // shouldn't throw null pointer + mZenModeHelper.pullRules(events); // shouldn't throw null pointer } @Test @@ -1555,11 +1548,11 @@ public class ZenModeHelperTest extends UiServiceTestCase { ArrayMap autoRules = new ArrayMap<>(); autoRules.put(SCHEDULE_DEFAULT_RULE_ID, updatedDefaultRule); - mZenModeHelperSpy.mConfig.automaticRules = autoRules; + mZenModeHelper.mConfig.automaticRules = autoRules; - mZenModeHelperSpy.updateDefaultZenRules(); + mZenModeHelper.updateDefaultZenRules(); assertEquals(updatedDefaultRule, - mZenModeHelperSpy.mConfig.automaticRules.get(SCHEDULE_DEFAULT_RULE_ID)); + mZenModeHelper.mConfig.automaticRules.get(SCHEDULE_DEFAULT_RULE_ID)); } @Test @@ -1581,11 +1574,11 @@ public class ZenModeHelperTest extends UiServiceTestCase { ArrayMap autoRules = new ArrayMap<>(); autoRules.put(SCHEDULE_DEFAULT_RULE_ID, updatedDefaultRule); - mZenModeHelperSpy.mConfig.automaticRules = autoRules; + mZenModeHelper.mConfig.automaticRules = autoRules; - mZenModeHelperSpy.updateDefaultZenRules(); + mZenModeHelper.updateDefaultZenRules(); assertEquals(updatedDefaultRule, - mZenModeHelperSpy.mConfig.automaticRules.get(SCHEDULE_DEFAULT_RULE_ID)); + mZenModeHelper.mConfig.automaticRules.get(SCHEDULE_DEFAULT_RULE_ID)); } @Test @@ -1608,11 +1601,11 @@ public class ZenModeHelperTest extends UiServiceTestCase { ArrayMap autoRules = new ArrayMap<>(); autoRules.put(SCHEDULE_DEFAULT_RULE_ID, customDefaultRule); - mZenModeHelperSpy.mConfig.automaticRules = autoRules; + mZenModeHelper.mConfig.automaticRules = autoRules; - mZenModeHelperSpy.updateDefaultZenRules(); + mZenModeHelper.updateDefaultZenRules(); ZenModeConfig.ZenRule ruleAfterUpdating = - mZenModeHelperSpy.mConfig.automaticRules.get(SCHEDULE_DEFAULT_RULE_ID); + mZenModeHelper.mConfig.automaticRules.get(SCHEDULE_DEFAULT_RULE_ID); assertEquals(customDefaultRule.enabled, ruleAfterUpdating.enabled); assertEquals(customDefaultRule.modified, ruleAfterUpdating.modified); assertEquals(customDefaultRule.id, ruleAfterUpdating.id); @@ -1633,7 +1626,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); // We need the package name to be something that's not "android" so there aren't any // existing rules under that package. - String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule("pkgname", zenRule, "test"); assertNotNull(id); } try { @@ -1643,7 +1636,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule("pkgname", zenRule, "test"); fail("allowed too many rules to be created"); } catch (IllegalArgumentException e) { // yay @@ -1663,7 +1656,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.toScheduleConditionId(si), new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule("pkgname", zenRule, "test"); assertNotNull(id); } try { @@ -1673,7 +1666,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule("pkgname", zenRule, "test"); fail("allowed too many rules to be created"); } catch (IllegalArgumentException e) { // yay @@ -1693,7 +1686,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.toScheduleConditionId(si), new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule("pkgname", zenRule, "test"); assertNotNull(id); } try { @@ -1703,7 +1696,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule("pkgname", zenRule, "test"); fail("allowed too many rules to be created"); } catch (IllegalArgumentException e) { // yay @@ -1718,10 +1711,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule("android", zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule("android", zenRule, "test"); assertTrue(id != null); - ZenModeConfig.ZenRule ruleInConfig = mZenModeHelperSpy.mConfig.automaticRules.get(id); + ZenModeConfig.ZenRule ruleInConfig = mZenModeHelper.mConfig.automaticRules.get(id); assertTrue(ruleInConfig != null); assertEquals(zenRule.isEnabled(), ruleInConfig.enabled); assertEquals(zenRule.isModified(), ruleInConfig.modified); @@ -1738,10 +1731,10 @@ public class ZenModeHelperTest extends UiServiceTestCase { new ComponentName("android", "ScheduleConditionProvider"), ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule("android", zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule("android", zenRule, "test"); assertTrue(id != null); - ZenModeConfig.ZenRule ruleInConfig = mZenModeHelperSpy.mConfig.automaticRules.get(id); + ZenModeConfig.ZenRule ruleInConfig = mZenModeHelper.mConfig.automaticRules.get(id); assertTrue(ruleInConfig != null); assertEquals(zenRule.isEnabled(), ruleInConfig.enabled); assertEquals(zenRule.isModified(), ruleInConfig.modified); @@ -1761,11 +1754,11 @@ public class ZenModeHelperTest extends UiServiceTestCase { new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule(null, zenRule, "test"); - mZenModeHelperSpy.setAutomaticZenRuleState(zenRule.getConditionId(), + String id = mZenModeHelper.addAutomaticZenRule(null, zenRule, "test"); + mZenModeHelper.setAutomaticZenRuleState(zenRule.getConditionId(), new Condition(zenRule.getConditionId(), "", STATE_TRUE)); - ZenModeConfig.ZenRule ruleInConfig = mZenModeHelperSpy.mConfig.automaticRules.get(id); + ZenModeConfig.ZenRule ruleInConfig = mZenModeHelper.mConfig.automaticRules.get(id); assertEquals(STATE_TRUE, ruleInConfig.condition.state); } @@ -1778,7 +1771,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule(null, zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule(null, zenRule, "test"); AutomaticZenRule zenRule2 = new AutomaticZenRule("NEW", null, @@ -1787,9 +1780,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - mZenModeHelperSpy.updateAutomaticZenRule(id, zenRule2, ""); + mZenModeHelper.updateAutomaticZenRule(id, zenRule2, ""); - ZenModeConfig.ZenRule ruleInConfig = mZenModeHelperSpy.mConfig.automaticRules.get(id); + ZenModeConfig.ZenRule ruleInConfig = mZenModeHelper.mConfig.automaticRules.get(id); assertEquals("NEW", ruleInConfig.name); } @@ -1802,15 +1795,15 @@ public class ZenModeHelperTest extends UiServiceTestCase { new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule(null, zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule(null, zenRule, "test"); assertTrue(id != null); - ZenModeConfig.ZenRule ruleInConfig = mZenModeHelperSpy.mConfig.automaticRules.get(id); + ZenModeConfig.ZenRule ruleInConfig = mZenModeHelper.mConfig.automaticRules.get(id); assertTrue(ruleInConfig != null); assertEquals(zenRule.getName(), ruleInConfig.name); - mZenModeHelperSpy.removeAutomaticZenRule(id, "test"); - assertNull(mZenModeHelperSpy.mConfig.automaticRules.get(id)); + mZenModeHelper.removeAutomaticZenRule(id, "test"); + assertNull(mZenModeHelper.mConfig.automaticRules.get(id)); } @Test @@ -1821,15 +1814,15 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), new ZenPolicy.Builder().build(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule(null, zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule(null, zenRule, "test"); assertTrue(id != null); - ZenModeConfig.ZenRule ruleInConfig = mZenModeHelperSpy.mConfig.automaticRules.get(id); + ZenModeConfig.ZenRule ruleInConfig = mZenModeHelper.mConfig.automaticRules.get(id); assertTrue(ruleInConfig != null); assertEquals(zenRule.getName(), ruleInConfig.name); - mZenModeHelperSpy.removeAutomaticZenRules(mContext.getPackageName(), "test"); - assertNull(mZenModeHelperSpy.mConfig.automaticRules.get(id)); + mZenModeHelper.removeAutomaticZenRules(mContext.getPackageName(), "test"); + assertNull(mZenModeHelper.mConfig.automaticRules.get(id)); } @Test @@ -1839,17 +1832,17 @@ public class ZenModeHelperTest extends UiServiceTestCase { new ComponentName("android", "ScheduleConditionProvider"), sharedUri, NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelperSpy.addAutomaticZenRule("android", zenRule, "test"); + String id = mZenModeHelper.addAutomaticZenRule("android", zenRule, "test"); AutomaticZenRule zenRule2 = new AutomaticZenRule("name2", new ComponentName("android", "ScheduleConditionProvider"), sharedUri, NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id2 = mZenModeHelperSpy.addAutomaticZenRule("android", zenRule2, "test"); + String id2 = mZenModeHelper.addAutomaticZenRule("android", zenRule2, "test"); Condition condition = new Condition(sharedUri, "", STATE_TRUE); - mZenModeHelperSpy.setAutomaticZenRuleState(sharedUri, condition); + mZenModeHelper.setAutomaticZenRuleState(sharedUri, condition); - for (ZenModeConfig.ZenRule rule : mZenModeHelperSpy.mConfig.automaticRules.values()) { + for (ZenModeConfig.ZenRule rule : mZenModeHelper.mConfig.automaticRules.values()) { if (rule.id.equals(id)) { assertNotNull(rule.condition); assertTrue(rule.condition.state == STATE_TRUE); @@ -1861,9 +1854,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { } condition = new Condition(sharedUri, "", Condition.STATE_FALSE); - mZenModeHelperSpy.setAutomaticZenRuleState(sharedUri, condition); + mZenModeHelper.setAutomaticZenRuleState(sharedUri, condition); - for (ZenModeConfig.ZenRule rule : mZenModeHelperSpy.mConfig.automaticRules.values()) { + for (ZenModeConfig.ZenRule rule : mZenModeHelper.mConfig.automaticRules.values()) { if (rule.id.equals(id)) { assertNotNull(rule.condition); assertTrue(rule.condition.state == Condition.STATE_FALSE); @@ -1875,31 +1868,48 @@ public class ZenModeHelperTest extends UiServiceTestCase { } } + @Test + public void testSetManualZenMode() { + setupZenConfig(); + + // note that caller=null because that's how it comes in from NMS.setZenMode + mZenModeHelper.setManualZenMode(ZEN_MODE_IMPORTANT_INTERRUPTIONS, null, null, ""); + mTestableLooper.processAllMessages(); + + // confirm that setting zen mode via setManualZenMode changed the zen mode correctly + assertEquals(ZEN_MODE_IMPORTANT_INTERRUPTIONS, mZenModeHelper.mZenMode); + + // and also that it works to turn it back off again + mZenModeHelper.setManualZenMode(Global.ZEN_MODE_OFF, null, null, ""); + mTestableLooper.processAllMessages(); + assertEquals(Global.ZEN_MODE_OFF, mZenModeHelper.mZenMode); + } + private void setupZenConfig() { - mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConfig.allowAlarms = false; - mZenModeHelperSpy.mConfig.allowMedia = false; - mZenModeHelperSpy.mConfig.allowSystem = false; - mZenModeHelperSpy.mConfig.allowReminders = true; - mZenModeHelperSpy.mConfig.allowCalls = true; - mZenModeHelperSpy.mConfig.allowMessages = true; - mZenModeHelperSpy.mConfig.allowEvents = true; - mZenModeHelperSpy.mConfig.allowRepeatCallers= true; - mZenModeHelperSpy.mConfig.suppressedVisualEffects = SUPPRESSED_EFFECT_BADGE; - mZenModeHelperSpy.mConfig.manualRule = null; + mZenModeHelper.mZenMode = Global.ZEN_MODE_OFF; + mZenModeHelper.mConfig.allowAlarms = false; + mZenModeHelper.mConfig.allowMedia = false; + mZenModeHelper.mConfig.allowSystem = false; + mZenModeHelper.mConfig.allowReminders = true; + mZenModeHelper.mConfig.allowCalls = true; + mZenModeHelper.mConfig.allowMessages = true; + mZenModeHelper.mConfig.allowEvents = true; + mZenModeHelper.mConfig.allowRepeatCallers = true; + mZenModeHelper.mConfig.suppressedVisualEffects = SUPPRESSED_EFFECT_BADGE; + mZenModeHelper.mConfig.manualRule = null; } private void setupZenConfigMaintained() { // config is still the same as when it was setup (setupZenConfig) - assertFalse(mZenModeHelperSpy.mConfig.allowAlarms); - assertFalse(mZenModeHelperSpy.mConfig.allowMedia); - assertFalse(mZenModeHelperSpy.mConfig.allowSystem); - assertTrue(mZenModeHelperSpy.mConfig.allowReminders); - assertTrue(mZenModeHelperSpy.mConfig.allowCalls); - assertTrue(mZenModeHelperSpy.mConfig.allowMessages); - assertTrue(mZenModeHelperSpy.mConfig.allowEvents); - assertTrue(mZenModeHelperSpy.mConfig.allowRepeatCallers); - assertEquals(SUPPRESSED_EFFECT_BADGE, mZenModeHelperSpy.mConfig.suppressedVisualEffects); + assertFalse(mZenModeHelper.mConfig.allowAlarms); + assertFalse(mZenModeHelper.mConfig.allowMedia); + assertFalse(mZenModeHelper.mConfig.allowSystem); + assertTrue(mZenModeHelper.mConfig.allowReminders); + assertTrue(mZenModeHelper.mConfig.allowCalls); + assertTrue(mZenModeHelper.mConfig.allowMessages); + assertTrue(mZenModeHelper.mConfig.allowEvents); + assertTrue(mZenModeHelper.mConfig.allowRepeatCallers); + assertEquals(SUPPRESSED_EFFECT_BADGE, mZenModeHelper.mConfig.suppressedVisualEffects); } /**