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