2 * Copyright (C) 2015 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.android.settings.notification;
19 import android.os.Bundle;
20 import android.preference.Preference;
21 import android.preference.Preference.OnPreferenceChangeListener;
22 import android.preference.PreferenceScreen;
23 import android.preference.SwitchPreference;
24 import android.service.notification.ZenModeConfig;
25 import android.util.Log;
27 import com.android.internal.logging.MetricsLogger;
28 import com.android.settings.DropDownPreference;
29 import com.android.settings.R;
30 import com.android.settings.search.Indexable;
32 public class ZenModePrioritySettings extends ZenModeSettingsBase implements Indexable {
33 private static final String KEY_REMINDERS = "reminders";
34 private static final String KEY_EVENTS = "events";
35 private static final String KEY_MESSAGES = "messages";
36 private static final String KEY_CALLS = "calls";
37 private static final String KEY_REPEAT_CALLERS = "repeat_callers";
38 private static final String KEY_ALLOW_LIGHTS = "zen_priority_allow_lights";
40 private static final int SOURCE_NONE = -1;
42 private boolean mDisableListeners;
43 private SwitchPreference mReminders;
44 private SwitchPreference mEvents;
45 private DropDownPreference mMessages;
46 private DropDownPreference mCalls;
47 private SwitchPreference mRepeatCallers;
50 public void onCreate(Bundle savedInstanceState) {
51 super.onCreate(savedInstanceState);
52 addPreferencesFromResource(R.xml.zen_mode_priority_settings);
53 final PreferenceScreen root = getPreferenceScreen();
55 mReminders = (SwitchPreference) root.findPreference(KEY_REMINDERS);
56 mReminders.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
58 public boolean onPreferenceChange(Preference preference, Object newValue) {
59 if (mDisableListeners) return true;
60 final boolean val = (Boolean) newValue;
61 MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_REMINDERS, val);
62 if (val == mConfig.allowReminders) return true;
63 if (DEBUG) Log.d(TAG, "onPrefChange allowReminders=" + val);
64 final ZenModeConfig newConfig = mConfig.copy();
65 newConfig.allowReminders = val;
66 return setZenModeConfig(newConfig);
70 mEvents = (SwitchPreference) root.findPreference(KEY_EVENTS);
71 mEvents.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
73 public boolean onPreferenceChange(Preference preference, Object newValue) {
74 if (mDisableListeners) return true;
75 final boolean val = (Boolean) newValue;
76 MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_EVENTS, val);
77 if (val == mConfig.allowEvents) return true;
78 if (DEBUG) Log.d(TAG, "onPrefChange allowEvents=" + val);
79 final ZenModeConfig newConfig = mConfig.copy();
80 newConfig.allowEvents = val;
81 return setZenModeConfig(newConfig);
85 mMessages = (DropDownPreference) root.findPreference(KEY_MESSAGES);
86 addSources(mMessages);
87 mMessages.setCallback(new DropDownPreference.Callback() {
89 public boolean onItemSelected(int pos, Object newValue) {
90 if (mDisableListeners) return true;
91 final int val = (Integer) newValue;
92 MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_MESSAGES, val);
93 final boolean allowMessages = val != SOURCE_NONE;
94 final int allowMessagesFrom = val == SOURCE_NONE ? mConfig.allowMessagesFrom : val;
95 if (allowMessages == mConfig.allowMessages
96 && allowMessagesFrom == mConfig.allowMessagesFrom) {
99 if (DEBUG) Log.d(TAG, "onPrefChange allowMessages=" + allowMessages
100 + " allowMessagesFrom=" + ZenModeConfig.sourceToString(allowMessagesFrom));
101 final ZenModeConfig newConfig = mConfig.copy();
102 newConfig.allowMessages = allowMessages;
103 newConfig.allowMessagesFrom = allowMessagesFrom;
104 return setZenModeConfig(newConfig);
108 mCalls = (DropDownPreference) root.findPreference(KEY_CALLS);
110 mCalls.setCallback(new DropDownPreference.Callback() {
112 public boolean onItemSelected(int pos, Object newValue) {
113 if (mDisableListeners) return true;
114 final int val = (Integer) newValue;
115 MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_CALLS, val);
116 final boolean allowCalls = val != SOURCE_NONE;
117 final int allowCallsFrom = val == SOURCE_NONE ? mConfig.allowCallsFrom : val;
118 if (allowCalls == mConfig.allowCalls
119 && allowCallsFrom == mConfig.allowCallsFrom) {
122 if (DEBUG) Log.d(TAG, "onPrefChange allowCalls=" + allowCalls
123 + " allowCallsFrom=" + ZenModeConfig.sourceToString(allowCallsFrom));
124 final ZenModeConfig newConfig = mConfig.copy();
125 newConfig.allowCalls = allowCalls;
126 newConfig.allowCallsFrom = allowCallsFrom;
127 return setZenModeConfig(newConfig);
131 mRepeatCallers = (SwitchPreference) root.findPreference(KEY_REPEAT_CALLERS);
132 mRepeatCallers.setSummary(mContext.getString(R.string.zen_mode_repeat_callers_summary,
133 mContext.getResources().getInteger(com.android.internal.R.integer
134 .config_zen_repeat_callers_threshold)));
135 mRepeatCallers.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
137 public boolean onPreferenceChange(Preference preference, Object newValue) {
138 if (mDisableListeners) return true;
139 final boolean val = (Boolean) newValue;
140 MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_REPEAT_CALLS, val);
141 if (val == mConfig.allowRepeatCallers) return true;
142 if (DEBUG) Log.d(TAG, "onPrefChange allowRepeatCallers=" + val);
143 final ZenModeConfig newConfig = mConfig.copy();
144 newConfig.allowRepeatCallers = val;
145 return setZenModeConfig(newConfig);
149 // Remove of the "Allow notification light" setting if LED is not supported
150 if (!getResources().getBoolean(
151 com.android.internal.R.bool.config_intrusiveNotificationLed)) {
152 root.removePreference(findPreference(KEY_ALLOW_LIGHTS));
159 protected void onZenModeChanged() {
164 protected void onZenModeConfigChanged() {
168 private void updateControls() {
169 mDisableListeners = true;
170 if (mCalls != null) {
171 mCalls.setSelectedValue(mConfig.allowCalls ? mConfig.allowCallsFrom : SOURCE_NONE);
173 mMessages.setSelectedValue(mConfig.allowMessages ? mConfig.allowMessagesFrom : SOURCE_NONE);
174 mReminders.setChecked(mConfig.allowReminders);
175 mEvents.setChecked(mConfig.allowEvents);
176 mRepeatCallers.setChecked(mConfig.allowRepeatCallers);
177 mRepeatCallers.setEnabled(!mConfig.allowCalls
178 || mConfig.allowCallsFrom != ZenModeConfig.SOURCE_ANYONE);
179 mDisableListeners = false;
183 protected int getMetricsCategory() {
184 return MetricsLogger.NOTIFICATION_ZEN_MODE_PRIORITY;
187 private static void addSources(DropDownPreference pref) {
188 pref.addItem(R.string.zen_mode_from_anyone, ZenModeConfig.SOURCE_ANYONE);
189 pref.addItem(R.string.zen_mode_from_contacts, ZenModeConfig.SOURCE_CONTACT);
190 pref.addItem(R.string.zen_mode_from_starred, ZenModeConfig.SOURCE_STAR);
191 pref.addItem(R.string.zen_mode_from_none, SOURCE_NONE);