1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 
17 package com.android.settings.notification;
18 
19 import android.app.NotificationManager;
20 import android.app.NotificationManager.Policy;
21 import android.os.Bundle;
22 import android.support.v7.preference.Preference;
23 import android.support.v7.preference.PreferenceScreen;
24 import android.view.Menu;
25 import android.view.MenuInflater;
26 import android.view.MenuItem;
27 
28 import com.android.internal.logging.MetricsProto.MetricsEvent;
29 import com.android.settings.R;
30 import com.android.settings.SettingsActivity;
31 
32 public class ZenModeSettings extends ZenModeSettingsBase {
33     private static final String KEY_PRIORITY_SETTINGS = "priority_settings";
34     private static final String KEY_VISUAL_SETTINGS = "visual_interruptions_settings";
35 
36     private Preference mPrioritySettings;
37     private Preference mVisualSettings;
38     private Policy mPolicy;
39 
40     @Override
onCreate(Bundle savedInstanceState)41     public void onCreate(Bundle savedInstanceState) {
42         super.onCreate(savedInstanceState);
43 
44         addPreferencesFromResource(R.xml.zen_mode_settings);
45         final PreferenceScreen root = getPreferenceScreen();
46 
47         mPrioritySettings = root.findPreference(KEY_PRIORITY_SETTINGS);
48         mVisualSettings = root.findPreference(KEY_VISUAL_SETTINGS);
49         mPolicy = NotificationManager.from(mContext).getNotificationPolicy();
50     }
51 
52     @Override
onResume()53     public void onResume() {
54         super.onResume();
55         if (isUiRestricted()) {
56             return;
57         }
58     }
59 
60     @Override
getMetricsCategory()61     protected int getMetricsCategory() {
62         return MetricsEvent.NOTIFICATION_ZEN_MODE;
63     }
64 
65     @Override
onZenModeChanged()66     protected void onZenModeChanged() {
67         updateControls();
68     }
69 
70     @Override
onZenModeConfigChanged()71     protected void onZenModeConfigChanged() {
72         mPolicy = NotificationManager.from(mContext).getNotificationPolicy();
73         updateControls();
74     }
75 
updateControls()76     private void updateControls() {
77         updatePrioritySettingsSummary();
78         updateVisualSettingsSummary();
79     }
80 
updatePrioritySettingsSummary()81     private void updatePrioritySettingsSummary() {
82         String s = getResources().getString(R.string.zen_mode_alarms);
83         s = appendLowercase(s, isCategoryEnabled(mPolicy, Policy.PRIORITY_CATEGORY_REMINDERS),
84                 R.string.zen_mode_reminders);
85         s = appendLowercase(s, isCategoryEnabled(mPolicy, Policy.PRIORITY_CATEGORY_EVENTS),
86                 R.string.zen_mode_events);
87         if (isCategoryEnabled(mPolicy, Policy.PRIORITY_CATEGORY_MESSAGES)) {
88             if (mPolicy.priorityMessageSenders == Policy.PRIORITY_SENDERS_ANY) {
89                 s = appendLowercase(s, true, R.string.zen_mode_all_messages);
90             } else {
91                 s = appendLowercase(s, true, R.string.zen_mode_selected_messages);
92             }
93         }
94         if (isCategoryEnabled(mPolicy, Policy.PRIORITY_CATEGORY_CALLS)) {
95             if (mPolicy.priorityCallSenders == Policy.PRIORITY_SENDERS_ANY) {
96                 s = appendLowercase(s, true, R.string.zen_mode_all_callers);
97             } else {
98                 s = appendLowercase(s, true, R.string.zen_mode_selected_callers);
99             }
100         } else if (isCategoryEnabled(mPolicy, Policy.PRIORITY_CATEGORY_REPEAT_CALLERS)) {
101             s = appendLowercase(s, true, R.string.zen_mode_repeat_callers);
102         }
103         mPrioritySettings.setSummary(s);
104     }
105 
updateVisualSettingsSummary()106     private void updateVisualSettingsSummary() {
107         String s = getString(R.string.zen_mode_all_visual_interruptions);
108         if (isEffectSuppressed(Policy.SUPPRESSED_EFFECT_SCREEN_ON)
109                 && isEffectSuppressed(Policy.SUPPRESSED_EFFECT_SCREEN_OFF)) {
110             s = getString(R.string.zen_mode_no_visual_interruptions);
111         } else if (isEffectSuppressed(Policy.SUPPRESSED_EFFECT_SCREEN_ON)) {
112             s = getString(R.string.zen_mode_screen_on_visual_interruptions);
113         } else if (isEffectSuppressed(Policy.SUPPRESSED_EFFECT_SCREEN_OFF)) {
114             s = getString(R.string.zen_mode_screen_off_visual_interruptions);
115         }
116         mVisualSettings.setSummary(s);
117     }
118 
isEffectSuppressed(int effect)119     private boolean isEffectSuppressed(int effect) {
120         return (mPolicy.suppressedVisualEffects & effect) != 0;
121     }
122 
isCategoryEnabled(Policy policy, int categoryType)123     private boolean isCategoryEnabled(Policy policy, int categoryType) {
124         return (policy.priorityCategories & categoryType) != 0;
125     }
126 
appendLowercase(String s, boolean condition, int resId)127     private String appendLowercase(String s, boolean condition, int resId) {
128         if (condition) {
129             return getResources().getString(R.string.join_many_items_middle, s,
130                     getResources().getString(resId).toLowerCase());
131         }
132         return s;
133     }
134 
135     @Override
getHelpResource()136     protected int getHelpResource() {
137         return R.string.help_uri_interruptions;
138     }
139 }
140