Settings: Migrate calls & messages priority settings.

Bug: 18635172
Change-Id: Ib5fe3bc80590875bb4a1547013ac3444939ab6fd
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ebef5de..ce56b63 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6160,17 +6160,17 @@
     <!-- [CHAR LIMIT=20] Zen mode settings: Messages option -->
     <string name="zen_mode_messages">Messages</string>
 
-    <!-- [CHAR LIMIT=50] Zen mode settings: From option -->
-    <string name="zen_mode_from">Calls/messages from</string>
+    <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From anyone -->
+    <string name="zen_mode_from_anyone">From anyone</string>
 
-    <!-- [CHAR LIMIT=30] Zen mode settings: From option value: Anyone -->
-    <string name="zen_mode_from_anyone">Anyone</string>
+    <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From contacts only -->
+    <string name="zen_mode_from_contacts">From contacts only</string>
 
-    <!-- [CHAR LIMIT=30] Zen mode settings: From option value: Contacts -->
-    <string name="zen_mode_from_contacts">Contacts only</string>
+    <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From starred contacts only -->
+    <string name="zen_mode_from_starred">From starred contacts only</string>
 
-    <!-- [CHAR LIMIT=30] Zen mode settings: From option value: Starred contacts -->
-    <string name="zen_mode_from_starred">Starred contacts only</string>
+    <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: None -->
+    <string name="zen_mode_from_none">None</string>
 
     <!-- [CHAR LIMIT=50] Zen mode settings: Alarms option -->
     <string name="zen_mode_alarms">Alarms</string>
diff --git a/res/xml/zen_mode_priority_settings.xml b/res/xml/zen_mode_priority_settings.xml
index 5b1dbf8..bfe0871 100644
--- a/res/xml/zen_mode_priority_settings.xml
+++ b/res/xml/zen_mode_priority_settings.xml
@@ -46,26 +46,16 @@
         android:switchTextOn="" />
 
     <!-- Messages -->
-    <SwitchPreference
+    <com.android.settings.DropDownPreference
         android:key="messages"
         android:title="@string/zen_mode_messages"
-        android:persistent="false"
-        android:switchTextOff=""
-        android:switchTextOn="" />
+        android:persistent="false" />
 
     <!-- Calls -->
-    <SwitchPreference
+    <com.android.settings.DropDownPreference
         android:key="calls"
         android:title="@string/zen_mode_calls"
-        android:persistent="false"
-        android:switchTextOff=""
-        android:switchTextOn="" />
-
-    <!-- Messages/calls from -->
-    <com.android.settings.DropDownPreference
-            android:key="starred"
-            android:title="@string/zen_mode_from"
-            android:persistent="false" />
+        android:persistent="false" />
 
     <!-- Repeat callers -->
     <SwitchPreference
diff --git a/src/com/android/settings/notification/ZenModePrioritySettings.java b/src/com/android/settings/notification/ZenModePrioritySettings.java
index 89e9ea3..4907cf0 100644
--- a/src/com/android/settings/notification/ZenModePrioritySettings.java
+++ b/src/com/android/settings/notification/ZenModePrioritySettings.java
@@ -34,15 +34,15 @@
     private static final String KEY_EVENTS = "events";
     private static final String KEY_MESSAGES = "messages";
     private static final String KEY_CALLS = "calls";
-    private static final String KEY_STARRED = "starred";
     private static final String KEY_REPEAT_CALLERS = "repeat_callers";
 
+    private static final int SOURCE_NONE = -1;
+
     private boolean mDisableListeners;
     private SwitchPreference mReminders;
     private SwitchPreference mEvents;
-    private SwitchPreference mMessages;
-    private SwitchPreference mCalls;
-    private DropDownPreference mStarred;
+    private DropDownPreference mMessages;
+    private DropDownPreference mCalls;
     private SwitchPreference mRepeatCallers;
 
     @Override
@@ -79,48 +79,46 @@
             }
         });
 
-        mMessages = (SwitchPreference) root.findPreference(KEY_MESSAGES);
-        mMessages.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-            @Override
-            public boolean onPreferenceChange(Preference preference, Object newValue) {
-                if (mDisableListeners) return true;
-                final boolean val = (Boolean) newValue;
-                if (val == mConfig.allowMessages) return true;
-                if (DEBUG) Log.d(TAG, "onPrefChange allowMessages=" + val);
-                final ZenModeConfig newConfig = mConfig.copy();
-                newConfig.allowMessages = val;
-                return setZenModeConfig(newConfig);
-            }
-        });
-
-        mCalls = (SwitchPreference) root.findPreference(KEY_CALLS);
-        mCalls.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-            @Override
-            public boolean onPreferenceChange(Preference preference, Object newValue) {
-                if (mDisableListeners) return true;
-                final boolean val = (Boolean) newValue;
-                if (val == mConfig.allowCalls) return true;
-                if (DEBUG) Log.d(TAG, "onPrefChange allowCalls=" + val);
-                final ZenModeConfig newConfig = mConfig.copy();
-                newConfig.allowCalls = val;
-                return setZenModeConfig(newConfig);
-            }
-        });
-
-        mStarred = (DropDownPreference) root.findPreference(KEY_STARRED);
-        mStarred.addItem(R.string.zen_mode_from_anyone, ZenModeConfig.SOURCE_ANYONE);
-        mStarred.addItem(R.string.zen_mode_from_contacts, ZenModeConfig.SOURCE_CONTACT);
-        mStarred.addItem(R.string.zen_mode_from_starred, ZenModeConfig.SOURCE_STAR);
-        mStarred.setCallback(new DropDownPreference.Callback() {
+        mMessages = (DropDownPreference) root.findPreference(KEY_MESSAGES);
+        addSources(mMessages);
+        mMessages.setCallback(new DropDownPreference.Callback() {
             @Override
             public boolean onItemSelected(int pos, Object newValue) {
                 if (mDisableListeners) return true;
                 final int val = (Integer) newValue;
-                if (val == mConfig.allowFrom) return true;
-                if (DEBUG) Log.d(TAG, "onPrefChange allowFrom=" +
-                        ZenModeConfig.sourceToString(val));
+                final boolean allowMessages = val != SOURCE_NONE;
+                final int allowMessagesFrom = val == SOURCE_NONE ? mConfig.allowMessagesFrom : val;
+                if (allowMessages == mConfig.allowMessages
+                        && allowMessagesFrom == mConfig.allowMessagesFrom) {
+                    return true;
+                }
+                if (DEBUG) Log.d(TAG, "onPrefChange allowMessages=" + allowMessages
+                        + " allowMessagesFrom=" + ZenModeConfig.sourceToString(allowMessagesFrom));
                 final ZenModeConfig newConfig = mConfig.copy();
-                newConfig.allowFrom = val;
+                newConfig.allowMessages = allowMessages;
+                newConfig.allowMessagesFrom = allowMessagesFrom;
+                return setZenModeConfig(newConfig);
+            }
+        });
+
+        mCalls = (DropDownPreference) root.findPreference(KEY_CALLS);
+        addSources(mCalls);
+        mCalls.setCallback(new DropDownPreference.Callback() {
+            @Override
+            public boolean onItemSelected(int pos, Object newValue) {
+                if (mDisableListeners) return true;
+                final int val = (Integer) newValue;
+                final boolean allowCalls = val != SOURCE_NONE;
+                final int allowCallsFrom = val == SOURCE_NONE ? mConfig.allowCallsFrom : val;
+                if (allowCalls == mConfig.allowCalls
+                        && allowCallsFrom == mConfig.allowCallsFrom) {
+                    return true;
+                }
+                if (DEBUG) Log.d(TAG, "onPrefChange allowCalls=" + allowCalls
+                        + " allowCallsFrom=" + ZenModeConfig.sourceToString(allowCallsFrom));
+                final ZenModeConfig newConfig = mConfig.copy();
+                newConfig.allowCalls = allowCalls;
+                newConfig.allowCallsFrom = allowCallsFrom;
                 return setZenModeConfig(newConfig);
             }
         });
@@ -158,16 +156,14 @@
     private void updateControls() {
         mDisableListeners = true;
         if (mCalls != null) {
-            mCalls.setChecked(mConfig.allowCalls);
+            mCalls.setSelectedValue(mConfig.allowCalls ? mConfig.allowCallsFrom : SOURCE_NONE);
         }
-        mMessages.setChecked(mConfig.allowMessages);
-        mStarred.setSelectedValue(mConfig.allowFrom);
-        mStarred.setEnabled(mConfig.allowCalls || mConfig.allowMessages);
+        mMessages.setSelectedValue(mConfig.allowMessages ? mConfig.allowMessagesFrom : SOURCE_NONE);
         mReminders.setChecked(mConfig.allowReminders);
         mEvents.setChecked(mConfig.allowEvents);
         mRepeatCallers.setChecked(mConfig.allowRepeatCallers);
         mRepeatCallers.setEnabled(!mConfig.allowCalls
-                || mConfig.allowFrom != ZenModeConfig.SOURCE_ANYONE);
+                || mConfig.allowCallsFrom != ZenModeConfig.SOURCE_ANYONE);
         mDisableListeners = false;
     }
 
@@ -176,4 +172,11 @@
         return MetricsLogger.NOTIFICATION_ZEN_MODE_PRIORITY;
     }
 
+    private static void addSources(DropDownPreference pref) {
+        pref.addItem(R.string.zen_mode_from_anyone, ZenModeConfig.SOURCE_ANYONE);
+        pref.addItem(R.string.zen_mode_from_contacts, ZenModeConfig.SOURCE_CONTACT);
+        pref.addItem(R.string.zen_mode_from_starred, ZenModeConfig.SOURCE_STAR);
+        pref.addItem(R.string.zen_mode_from_none, SOURCE_NONE);
+    }
+
 }