Support device effects for manual mode

Test: ZenModesBackendTest
Flag: android.app.modes_ui
Fixes: 333530553
Change-Id: I31c484b73d1dfe0f986fe3c344f3a9a1d8580172
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index 83f4f2e..a26138c 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -102,6 +102,7 @@
         "notification_flags_lib",
         "platform-test-annotations",
         "testables",
+        "android.app.flags-aconfig-java",
     ],
 
     libs: [
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java
index dcd0963..6dca4fc 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java
@@ -31,7 +31,6 @@
 import com.android.settings.homepage.contextualcards.ContextualCard;
 import com.android.settings.testutils.shadow.ShadowNotificationManager;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -92,35 +91,18 @@
 
     private ZenModeConfig getCustomConfig() {
         final ZenModeConfig config = new ZenModeConfig();
-        // Some sounds allowed
-        config.allowAlarms = true;
-        config.allowMedia = false;
-        config.allowSystem = false;
-        config.allowCalls = true;
-        config.allowRepeatCallers = true;
-        config.allowMessages = false;
-        config.allowReminders = false;
-        config.allowEvents = false;
-        config.areChannelsBypassingDnd = false;
-        config.allowCallsFrom = ZenModeConfig.SOURCE_ANYONE;
-        config.allowMessagesFrom = ZenModeConfig.SOURCE_ANYONE;
-        config.suppressedVisualEffects = 0;
+        config.applyNotificationPolicy(new NotificationManager.Policy(
+                NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS
+                        | NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS
+                        |  NotificationManager.Policy.PRIORITY_CATEGORY_CALLS,
+                NotificationManager.Policy.PRIORITY_SENDERS_ANY, 0));
         return config;
     }
 
     private ZenModeConfig getMutedAllConfig() {
         final ZenModeConfig config = new ZenModeConfig();
-        // No sounds allowed
-        config.allowAlarms = false;
-        config.allowMedia = false;
-        config.allowSystem = false;
-        config.allowCalls = false;
-        config.allowRepeatCallers = false;
-        config.allowMessages = false;
-        config.allowReminders = false;
-        config.allowEvents = false;
+        config.applyNotificationPolicy(new NotificationManager.Policy(0, 0, 0));
         config.areChannelsBypassingDnd = false;
-        config.suppressedVisualEffects = 0;
         return config;
     }
 }
diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModesBackendTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModesBackendTest.java
index 75ca741..9483683 100644
--- a/tests/robotests/src/com/android/settings/notification/modes/ZenModesBackendTest.java
+++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModesBackendTest.java
@@ -17,6 +17,12 @@
 package com.android.settings.notification.modes;
 
 import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY;
+import static android.provider.Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+import static android.provider.Settings.Global.ZEN_MODE_OFF;
+import static android.service.notification.Condition.SOURCE_UNKNOWN;
+import static android.service.notification.Condition.STATE_FALSE;
+import static android.service.notification.Condition.STATE_TRUE;
+import static android.service.notification.ZenPolicy.STATE_ALLOW;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -27,13 +33,17 @@
 import static org.mockito.Mockito.when;
 
 import android.app.AutomaticZenRule;
+import android.app.Flags;
 import android.app.NotificationManager;
 import android.app.NotificationManager.Policy;
 import android.content.Context;
 import android.net.Uri;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
 import android.provider.Settings;
 import android.service.notification.Condition;
 import android.service.notification.ZenAdapters;
+import android.service.notification.ZenDeviceEffects;
 import android.service.notification.ZenModeConfig;
 import android.service.notification.ZenPolicy;
 
@@ -42,6 +52,7 @@
 import com.google.common.collect.ImmutableMap;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -54,6 +65,7 @@
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
+@EnableFlags(Flags.FLAG_MODES_UI)
 public class ZenModesBackendTest {
 
     private static final String ZEN_RULE_ID = "rule";
@@ -76,13 +88,22 @@
     private Context mContext;
     private ZenModesBackend mBackend;
 
+    @Rule
+    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(
+            SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT);
+
     // Helper methods to add active/inactive rule state to a config. Returns a copy.
     private ZenModeConfig configWithManualRule(ZenModeConfig base, boolean active) {
         ZenModeConfig out = base.copy();
-        if (!active) {
-            out.manualRule = null;
+
+        if (active) {
+            out.manualRule.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+            out.manualRule.condition =
+                    new Condition(out.manualRule.conditionId, "", STATE_TRUE, SOURCE_UNKNOWN);
         } else {
-            out.manualRule = new ZenModeConfig.ZenRule();
+            out.manualRule.zenMode = ZEN_MODE_OFF;
+            out.manualRule.condition =
+                    new Condition(out.manualRule.conditionId, "", STATE_FALSE, SOURCE_UNKNOWN);
         }
         return out;
     }
@@ -130,7 +151,10 @@
                 Policy.PRIORITY_SENDERS_CONTACTS, Policy.PRIORITY_SENDERS_CONTACTS);
         when(mNm.getAutomaticZenRules()).thenReturn(
                 ImmutableMap.of("rule1", ZEN_RULE, "rule2", rule2));
-        when(mNm.getNotificationPolicy()).thenReturn(dndPolicy);
+        ZenModeConfig config = new ZenModeConfig();
+        config.applyNotificationPolicy(dndPolicy);
+        assertThat(config.manualRule.zenPolicy.getPriorityCategoryAlarms()).isEqualTo(STATE_ALLOW);
+        when(mNm.getZenModeConfig()).thenReturn(config);
 
         List<ZenMode> modes = mBackend.getModes();
 
@@ -154,7 +178,9 @@
     public void getMode_manualDnd_returnsMode() {
         Policy dndPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS,
                 Policy.PRIORITY_SENDERS_CONTACTS, Policy.PRIORITY_SENDERS_CONTACTS);
-        when(mNm.getNotificationPolicy()).thenReturn(dndPolicy);
+        ZenModeConfig config = new ZenModeConfig();
+        config.applyNotificationPolicy(dndPolicy);
+        when(mNm.getZenModeConfig()).thenReturn(config);
 
         ZenMode mode = mBackend.getMode(ZenMode.MANUAL_DND_MODE_ID);
 
@@ -193,11 +219,11 @@
         // Set up a base config with an active rule to make sure we're looking at the correct info
         ZenModeConfig configWithActiveRule = configWithRule(new ZenModeConfig(), ZEN_RULE_ID,
                 ZEN_RULE, true);
-        when(mNm.getZenModeConfig()).thenReturn(configWithActiveRule);
 
         // Equivalent to disallowAllSounds()
         Policy dndPolicy = new Policy(0, 0, 0);
-        when(mNm.getNotificationPolicy()).thenReturn(dndPolicy);
+        configWithActiveRule.applyNotificationPolicy(dndPolicy);
+        when(mNm.getZenModeConfig()).thenReturn(configWithActiveRule);
 
         ZenMode mode = mBackend.getMode(ZenMode.MANUAL_DND_MODE_ID);
 
@@ -233,6 +259,23 @@
     }
 
     @Test
+    public void updateMode_manualDnd_setsDeviceEffects() throws Exception {
+        ZenMode manualDnd = ZenMode.manualDndMode(
+                new AutomaticZenRule.Builder("DND", Uri.EMPTY)
+                        .setZenPolicy(new ZenPolicy())
+                        .setDeviceEffects(new ZenDeviceEffects.Builder()
+                                .setShouldDimWallpaper(true)
+                                .build())
+                        .build(), false);
+
+        mBackend.updateMode(manualDnd);
+
+        verify(mNm).setManualZenRuleDeviceEffects(new ZenDeviceEffects.Builder()
+                .setShouldDimWallpaper(true)
+                .build());
+    }
+
+    @Test
     public void updateMode_manualDnd_setsNotificationPolicy() {
         ZenMode manualDnd = ZenMode.manualDndMode(
                 new AutomaticZenRule.Builder("DND", Uri.EMPTY)
@@ -293,7 +336,7 @@
     public void deactivateMode_manualDnd_setsZenModeOff() {
         mBackend.deactivateMode(ZenMode.manualDndMode(MANUAL_DND_RULE, true));
 
-        verify(mNm).setZenMode(eq(Settings.Global.ZEN_MODE_OFF), eq(null), any(), eq(true));
+        verify(mNm).setZenMode(eq(ZEN_MODE_OFF), eq(null), any(), eq(true));
     }
 
     @Test