Replaced dnd priority setting page w/ behavior.

Bug: 63077372
Test: manual, make -j20 RunSettingsRoboTests
Change-Id: I79fd431da0cbed1407f0dab38e64f0bdb3ff3feb
This commit is contained in:
Beverly
2017-09-25 14:14:31 -04:00
parent be5e7510dd
commit ad898e6928
12 changed files with 303 additions and 189 deletions

View File

@@ -754,17 +754,17 @@
android:value="true" /> android:value="true" />
</activity> </activity>
<activity android:name="Settings$ZenModePrioritySettingsActivity" <activity android:name="Settings$ZenModeBehaviorSettingsActivity"
android:label="@string/zen_mode_priority_settings_title" android:label="@string/zen_mode_behavior_settings_title"
android:icon="@drawable/ic_settings_notifications" android:icon="@drawable/ic_settings_notifications"
android:exported="true" android:exported="true"
android:taskAffinity=""> android:taskAffinity="">
<intent-filter android:priority="1"> <intent-filter android:priority="1">
<action android:name="android.settings.ZEN_MODE_PRIORITY_SETTINGS" /> <action android:name="android.settings.ZEN_MODE_BEHAVIOR_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter> </intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS" <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.notification.ZenModePrioritySettings" /> android:value="com.android.settings.notification.ZenModeBehaviorSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" /> android:value="true" />
</activity> </activity>

View File

@@ -6693,10 +6693,25 @@
</plurals> </plurals>
<!-- Sound: Title for the Do not Disturb option and associated settings page. [CHAR LIMIT=50]--> <!-- Sound: Title for the Do not Disturb option and associated settings page. [CHAR LIMIT=50]-->
<string name="zen_mode_settings_title">Do Not Disturb preferences</string> <string name="zen_mode_settings_title">Do Not Disturb</string>
<!-- Do not disturb: Title for the Priority interruptions option and associated settings page. [CHAR LIMIT=30] --> <!-- Do not disturb: Title for the behaviors option and associated settings page. [CHAR LIMIT=30] -->
<string name="zen_mode_priority_settings_title">Priority only allows</string> <string name="zen_mode_behavior_settings_title">Behavior</string>
<!-- Do not disturb: Instructions indicating what types of sounds can bypass DND. [CHAR LIMIT=30] -->
<string name="zen_mode_behavior_allow_title">Allow sounds and vibrations from</string>
<!-- Do not disturb: Subtitle for DND behavior indicating no sound will get past DND. [CHAR LIMIT=30] -->
<string name="zen_mode_behavior_no_sound">No sound</string>
<!-- Do not disturb: Subtitle for DND behavior indicating no sound will get past DND due to user and/or API-invoked Total Silence mode. [CHAR LIMIT=30] -->
<string name="zen_mode_behavior_total_silence">No sound (Total Silence)</string>
<!-- Do not disturb: Used before specifying which sounds can bypass DND (ie: No sound except alarms and reminders). [CHAR LIMIT=30] -->
<string name="zen_mode_behavior_no_sound_except">No sound except <xliff:g id="categories" example="alarms, media and system">%1$s</xliff:g></string>
<!-- Do not disturb: Specifies sounds that can bypass DND in user and/or API-invoked Alarms Only mode. [CHAR LIMIT=30] -->
<string name="zen_mode_behavior_alarms_only">No sound except alarms, media and system (Alarms only)</string>
<!-- Do not disturb: Title for the zen mode automation listing. [CHAR LIMIT=30] --> <!-- Do not disturb: Title for the zen mode automation listing. [CHAR LIMIT=30] -->
<string name="zen_mode_automation_settings_title">Automatic rules</string> <string name="zen_mode_automation_settings_title">Automatic rules</string>
@@ -7231,8 +7246,8 @@
<!-- [CHAR LIMIT=50] Zen mode settings: Alarms option --> <!-- [CHAR LIMIT=50] Zen mode settings: Alarms option -->
<string name="zen_mode_alarms">Alarms</string> <string name="zen_mode_alarms">Alarms</string>
<!-- [CHAR LIMIT=50] Zen mode settings: Alarms option summary --> <!-- [CHAR LIMIT=50] Zen mode settings: Media and system sounds option -->
<string name="zen_mode_alarms_summary">Alarms are always a priority and make sound</string> <string name="zen_mode_media_system_other">Media and system sounds</string>
<!-- [CHAR LIMIT=50] Zen mode settings: Reminders option --> <!-- [CHAR LIMIT=50] Zen mode settings: Reminders option -->
<string name="zen_mode_reminders">Reminders</string> <string name="zen_mode_reminders">Reminders</string>
@@ -7250,7 +7265,7 @@
<string name="zen_mode_repeat_callers">Repeat callers</string> <string name="zen_mode_repeat_callers">Repeat callers</string>
<!-- [CHAR LIMIT=200] Zen mode settings: Repeat callers option summary --> <!-- [CHAR LIMIT=200] Zen mode settings: Repeat callers option summary -->
<string name="zen_mode_repeat_callers_summary">If the same person calls a second time within a <xliff:g id="minutes">%d</xliff:g> minute period, allow it</string> <string name="zen_mode_repeat_callers_summary">If the same person calls a second time within a <xliff:g id="minutes">%d</xliff:g> minute period</string>
<!-- [CHAR LIMIT=20] Zen mode settings: When option --> <!-- [CHAR LIMIT=20] Zen mode settings: When option -->
<string name="zen_mode_when">Automatically turn on</string> <string name="zen_mode_when">Automatically turn on</string>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="zen_mode_behavior_settings_page"
android:title="@string/zen_mode_behavior_settings_title" >
<PreferenceCategory
android:title="@string/zen_mode_behavior_allow_title"
android:key="zen_mode_behavior_allow_preferences">
<!-- Alarms -->
<SwitchPreference
android:key="zen_mode_alarms"
android:title="@string/zen_mode_alarms"/>
<!-- Media -->
<SwitchPreference
android:key="zen_mode_media"
android:title="@string/zen_mode_media_system_other"/>
<!-- Reminders -->
<SwitchPreference
android:key="zen_mode_reminders"
android:title="@string/zen_mode_reminders"/>
<!-- Events -->
<SwitchPreference
android:key="zen_mode_events"
android:title="@string/zen_mode_events"/>
<!-- Messages -->
<DropDownPreference
android:key="zen_mode_messages"
android:title="@string/zen_mode_messages"
android:summary="%s" />
<!-- Calls -->
<DropDownPreference
android:key="zen_mode_calls"
android:title="@string/zen_mode_calls"
android:summary="%s" />
<!-- Repeat callers -->
<SwitchPreference
android:key="zen_mode_repeat_callers"
android:title="@string/zen_mode_repeat_callers"/>
</PreferenceCategory>
</PreferenceScreen>

View File

@@ -1,57 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="zen_mode_priority_settings"
android:title="@string/zen_mode_priority_settings_title" >
<!-- Reminders -->
<SwitchPreference
android:key="reminders"
android:title="@string/zen_mode_reminders"/>
<!-- Events -->
<SwitchPreference
android:key="events"
android:title="@string/zen_mode_events"/>
<!-- Alarms -->
<SwitchPreference
android:key="alarms"
android:title="@string/zen_mode_alarms"
android:summary="@string/zen_mode_alarms_summary"
android:enabled="false"
android:defaultValue="true"/>
<!-- Messages -->
<DropDownPreference
android:key="messages"
android:title="@string/zen_mode_messages"
android:summary="%s" />
<!-- Calls -->
<DropDownPreference
android:key="calls"
android:title="@string/zen_mode_calls"
android:summary="%s" />
<!-- Repeat callers -->
<SwitchPreference
android:key="repeat_callers"
android:title="@string/zen_mode_repeat_callers"/>
</PreferenceScreen>

View File

@@ -19,20 +19,19 @@
android:key="zen_mode_settings" android:key="zen_mode_settings"
android:title="@string/zen_mode_settings_title" > android:title="@string/zen_mode_settings_title" >
<!-- Priority only allows -->
<Preference <Preference
android:key="priority_settings" android:key="zen_mode_behavior_settings"
android:title="@string/zen_mode_priority_settings_title" android:title="@string/zen_mode_behavior_settings_title"
android:fragment="com.android.settings.notification.ZenModePrioritySettings" /> android:fragment="com.android.settings.notification.ZenModeBehaviorSettings" />
<!-- Visual interruptions --> <!-- Visual interruptions -->
<Preference <Preference
android:key="visual_interruptions_settings" android:key="zen_mode_visual_interruptions_settings"
android:title="@string/zen_mode_visual_interruptions_settings_title" android:title="@string/zen_mode_visual_interruptions_settings_title"
android:fragment="com.android.settings.notification.ZenModeVisualInterruptionSettings" /> android:fragment="com.android.settings.notification.ZenModeVisualInterruptionSettings" />
<!-- Automatic rules --> <!-- Automatic rules -->
<PreferenceCategory <PreferenceCategory
android:key="automatic_rules" android:key="zen_mode_automatic_rules"
android:title="@string/zen_mode_automation_settings_title" /> android:title="@string/zen_mode_automation_settings_title" />
</PreferenceScreen> </PreferenceScreen>

View File

@@ -123,7 +123,7 @@ public class Settings extends SettingsActivity {
public static class PrintSettingsActivity extends SettingsActivity { /* empty */ } public static class PrintSettingsActivity extends SettingsActivity { /* empty */ }
public static class PrintJobSettingsActivity extends SettingsActivity { /* empty */ } public static class PrintJobSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeSettingsActivity extends SettingsActivity { /* empty */ } public static class ZenModeSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModePrioritySettingsActivity extends SettingsActivity { /* empty */ } public static class ZenModeBehaviorSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeAutomationSettingsActivity extends SettingsActivity { /* empty */ } public static class ZenModeAutomationSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeScheduleRuleSettingsActivity extends SettingsActivity { /* empty */ } public static class ZenModeScheduleRuleSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeEventRuleSettingsActivity extends SettingsActivity { /* empty */ } public static class ZenModeEventRuleSettingsActivity extends SettingsActivity { /* empty */ }

View File

@@ -40,8 +40,8 @@ import com.android.settings.accounts.AccountSyncSettings;
import com.android.settings.accounts.ChooseAccountActivity; import com.android.settings.accounts.ChooseAccountActivity;
import com.android.settings.accounts.ManagedProfileSettings; import com.android.settings.accounts.ManagedProfileSettings;
import com.android.settings.accounts.UserAndAccountDashboardFragment; import com.android.settings.accounts.UserAndAccountDashboardFragment;
import com.android.settings.applications.DefaultAppSettings;
import com.android.settings.applications.AppAndNotificationDashboardFragment; import com.android.settings.applications.AppAndNotificationDashboardFragment;
import com.android.settings.applications.DefaultAppSettings;
import com.android.settings.applications.DrawOverlayDetails; import com.android.settings.applications.DrawOverlayDetails;
import com.android.settings.applications.ExternalSourcesDetails; import com.android.settings.applications.ExternalSourcesDetails;
import com.android.settings.applications.InstalledAppDetails; import com.android.settings.applications.InstalledAppDetails;
@@ -100,15 +100,15 @@ import com.android.settings.network.NetworkDashboardFragment;
import com.android.settings.nfc.AndroidBeam; import com.android.settings.nfc.AndroidBeam;
import com.android.settings.nfc.PaymentSettings; import com.android.settings.nfc.PaymentSettings;
import com.android.settings.notification.AppNotificationSettings; import com.android.settings.notification.AppNotificationSettings;
import com.android.settings.notification.ChannelNotificationSettings;
import com.android.settings.notification.ChannelGroupNotificationSettings; import com.android.settings.notification.ChannelGroupNotificationSettings;
import com.android.settings.notification.ChannelNotificationSettings;
import com.android.settings.notification.ConfigureNotificationSettings; import com.android.settings.notification.ConfigureNotificationSettings;
import com.android.settings.notification.NotificationAccessSettings; import com.android.settings.notification.NotificationAccessSettings;
import com.android.settings.notification.NotificationStation; import com.android.settings.notification.NotificationStation;
import com.android.settings.notification.SoundSettings; import com.android.settings.notification.SoundSettings;
import com.android.settings.notification.ZenAccessSettings; import com.android.settings.notification.ZenAccessSettings;
import com.android.settings.notification.ZenModeBehaviorSettings;
import com.android.settings.notification.ZenModeEventRuleSettings; import com.android.settings.notification.ZenModeEventRuleSettings;
import com.android.settings.notification.ZenModePrioritySettings;
import com.android.settings.notification.ZenModeScheduleRuleSettings; import com.android.settings.notification.ZenModeScheduleRuleSettings;
import com.android.settings.notification.ZenModeSettings; import com.android.settings.notification.ZenModeSettings;
import com.android.settings.notification.ZenModeVisualInterruptionSettings; import com.android.settings.notification.ZenModeVisualInterruptionSettings;
@@ -216,7 +216,7 @@ public class SettingsGateway {
ApnSettings.class.getName(), ApnSettings.class.getName(),
ApnEditor.class.getName(), ApnEditor.class.getName(),
WifiCallingSettings.class.getName(), WifiCallingSettings.class.getName(),
ZenModePrioritySettings.class.getName(), ZenModeBehaviorSettings.class.getName(),
ZenModeScheduleRuleSettings.class.getName(), ZenModeScheduleRuleSettings.class.getName(),
ZenModeEventRuleSettings.class.getName(), ZenModeEventRuleSettings.class.getName(),
ZenModeVisualInterruptionSettings.class.getName(), ZenModeVisualInterruptionSettings.class.getName(),

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2015 The Android Open Source Project * Copyright (C) 2017 The Android Open Source Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@ package com.android.settings.notification;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.NotificationManager.Policy; import android.app.NotificationManager.Policy;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig;
import android.support.v14.preference.SwitchPreference; import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.DropDownPreference; import android.support.v7.preference.DropDownPreference;
@@ -29,14 +30,15 @@ import android.util.Log;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.search.Indexable;
public class ZenModePrioritySettings extends ZenModeSettingsBase { public class ZenModeBehaviorSettings extends ZenModeSettingsBase {
private static final String KEY_REMINDERS = "reminders"; private static final String KEY_ALARMS = "zen_mode_alarms";
private static final String KEY_EVENTS = "events"; private static final String KEY_MEDIA = "zen_mode_media";
private static final String KEY_MESSAGES = "messages"; private static final String KEY_REMINDERS = "zen_mode_reminders";
private static final String KEY_CALLS = "calls"; private static final String KEY_EVENTS = "zen_mode_events";
private static final String KEY_REPEAT_CALLERS = "repeat_callers"; private static final String KEY_MESSAGES = "zen_mode_messages";
private static final String KEY_CALLS = "zen_mode_calls";
private static final String KEY_REPEAT_CALLERS = "zen_mode_repeat_callers";
private static final int SOURCE_NONE = -1; private static final int SOURCE_NONE = -1;
@@ -46,13 +48,15 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase {
private DropDownPreference mMessages; private DropDownPreference mMessages;
private DropDownPreference mCalls; private DropDownPreference mCalls;
private SwitchPreference mRepeatCallers; private SwitchPreference mRepeatCallers;
private SwitchPreference mAlarms;
private SwitchPreference mMediaSystemOther;
private Policy mPolicy; private Policy mPolicy;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.zen_mode_priority_settings); addPreferencesFromResource(R.xml.zen_mode_behavior_settings);
final PreferenceScreen root = getPreferenceScreen(); final PreferenceScreen root = getPreferenceScreen();
mPolicy = NotificationManager.from(mContext).getNotificationPolicy(); mPolicy = NotificationManager.from(mContext).getNotificationPolicy();
@@ -141,19 +145,50 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase {
val); val);
if (DEBUG) Log.d(TAG, "onPrefChange allowRepeatCallers=" + val); if (DEBUG) Log.d(TAG, "onPrefChange allowRepeatCallers=" + val);
int priorityCategories = getNewPriorityCategories(val, int priorityCategories = getNewPriorityCategories(val,
NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS); Policy.PRIORITY_CATEGORY_REPEAT_CALLERS);
savePolicy(priorityCategories, mPolicy.priorityCallSenders, savePolicy(priorityCategories, mPolicy.priorityCallSenders,
mPolicy.priorityMessageSenders, mPolicy.suppressedVisualEffects); mPolicy.priorityMessageSenders, mPolicy.suppressedVisualEffects);
return true; return true;
} }
}); });
mAlarms = (SwitchPreference) root.findPreference(KEY_ALARMS);
mAlarms.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (mDisableListeners) return true;
final boolean val = (Boolean) newValue;
mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_ALARMS, val);
if (DEBUG) Log.d(TAG, "onPrefChange allowAlarms=" + val);
savePolicy(getNewPriorityCategories(val, Policy.PRIORITY_CATEGORY_ALARMS),
mPolicy.priorityCallSenders, mPolicy.priorityMessageSenders,
mPolicy.suppressedVisualEffects);
return true;
}
});
mMediaSystemOther = (SwitchPreference) root.findPreference(KEY_MEDIA);
mMediaSystemOther.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (mDisableListeners) return true;
final boolean val = (Boolean) newValue;
mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_MEDIA, val);
if (DEBUG) Log.d(TAG, "onPrefChange allowMediaSystemOther=" + val);
savePolicy(getNewPriorityCategories(val,
Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER),
mPolicy.priorityCallSenders, mPolicy.priorityMessageSenders,
mPolicy.suppressedVisualEffects);
return true;
}
});
updateControls(); updateControls();
} }
@Override @Override
protected void onZenModeChanged() { protected void onZenModeChanged() {
// don't care updateControls();
} }
@Override @Override
@@ -162,8 +197,7 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase {
updateControls(); updateControls();
} }
private void updateControls() { private void updateControlsPolicy() {
mDisableListeners = true;
if (mCalls != null) { if (mCalls != null) {
mCalls.setValue(Integer.toString( mCalls.setValue(Integer.toString(
isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_CALLS) isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_CALLS)
@@ -172,15 +206,62 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase {
mMessages.setValue(Integer.toString( mMessages.setValue(Integer.toString(
isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_MESSAGES) isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_MESSAGES)
? mPolicy.priorityMessageSenders : SOURCE_NONE)); ? mPolicy.priorityMessageSenders : SOURCE_NONE));
mAlarms.setChecked(isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_ALARMS));
mMediaSystemOther.setChecked(isPriorityCategoryEnabled(
Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER));
mReminders.setChecked(isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_REMINDERS)); mReminders.setChecked(isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_REMINDERS));
mEvents.setChecked(isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_EVENTS)); mEvents.setChecked(isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_EVENTS));
mRepeatCallers.setChecked( mRepeatCallers.setChecked(
isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_REPEAT_CALLERS)); isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_REPEAT_CALLERS));
mRepeatCallers.setVisible(!isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_CALLS) mRepeatCallers.setVisible(!isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_CALLS)
|| mPolicy.priorityCallSenders != Policy.PRIORITY_SENDERS_ANY); || mPolicy.priorityCallSenders != Policy.PRIORITY_SENDERS_ANY);
}
private void updateControls() {
mDisableListeners = true;
switch(mZenMode) {
case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS:
toggleBasicNoInterruptions();
mAlarms.setChecked(false);
mMediaSystemOther.setChecked(false);
setTogglesEnabled(false);
break;
case Settings.Global.ZEN_MODE_ALARMS:
toggleBasicNoInterruptions();
mAlarms.setChecked(true);
mMediaSystemOther.setChecked(true);
setTogglesEnabled(false);
break;
default:
updateControlsPolicy();
setTogglesEnabled(true);
}
mDisableListeners = false; mDisableListeners = false;
} }
private void toggleBasicNoInterruptions() {
if (mCalls != null) {
mCalls.setValue(Integer.toString(SOURCE_NONE));
}
mMessages.setValue(Integer.toString(SOURCE_NONE));
mReminders.setChecked(false);
mEvents.setChecked(false);
mRepeatCallers.setChecked(false);
}
private void setTogglesEnabled(boolean enable) {
if (mCalls != null) {
mCalls.setEnabled(enable);
}
mMessages.setEnabled(enable);
mReminders.setEnabled(enable);
mEvents.setEnabled(enable);
mRepeatCallers.setEnabled(enable);
mAlarms.setEnabled(enable);
mMediaSystemOther.setEnabled(enable);
}
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
return MetricsEvent.NOTIFICATION_ZEN_MODE_PRIORITY; return MetricsEvent.NOTIFICATION_ZEN_MODE_PRIORITY;

View File

@@ -28,14 +28,10 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo; import android.content.pm.ServiceInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings; import android.provider.Settings;
import android.service.notification.ConditionProviderService; import android.service.notification.ConditionProviderService;
import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig;
import com.android.settings.utils.ManagedServiceSettings;
import com.android.settings.utils.ZenServiceListing;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceCategory;
@@ -45,25 +41,27 @@ import android.view.View;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.utils.ManagedServiceSettings;
import com.android.settings.utils.ZenServiceListing;
import com.android.settingslib.TwoTargetPreference; import com.android.settingslib.TwoTargetPreference;
import java.lang.ref.WeakReference; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
public class ZenModeSettings extends ZenModeSettingsBase { public class ZenModeSettings extends ZenModeSettingsBase {
public static final String KEY_VISUAL_SETTINGS = "visual_interruptions_settings"; public static final String KEY_VISUAL_SETTINGS = "zen_mode_visual_interruptions_settings";
private static final String KEY_BEHAVIOR_SETTINGS = "zen_mode_behavior_settings";
private static final String KEY_PRIORITY_SETTINGS = "priority_settings"; private static final String KEY_AUTOMATIC_RULES = "zen_mode_automatic_rules";
private static final String KEY_AUTOMATIC_RULES = "automatic_rules";
static final ManagedServiceSettings.Config CONFIG = getConditionProviderConfig(); static final ManagedServiceSettings.Config CONFIG = getConditionProviderConfig();
private PreferenceCategory mAutomaticRules; private PreferenceCategory mAutomaticRules;
private Preference mPrioritySettings; private Preference mBehaviorSettings;
private Preference mVisualSettings; private Preference mVisualSettings;
private Policy mPolicy; private Policy mPolicy;
private SummaryBuilder mSummaryBuilder; private SummaryBuilder mSummaryBuilder;
@@ -78,7 +76,7 @@ public class ZenModeSettings extends ZenModeSettingsBase {
final PreferenceScreen root = getPreferenceScreen(); final PreferenceScreen root = getPreferenceScreen();
mAutomaticRules = (PreferenceCategory) root.findPreference(KEY_AUTOMATIC_RULES); mAutomaticRules = (PreferenceCategory) root.findPreference(KEY_AUTOMATIC_RULES);
mPrioritySettings = root.findPreference(KEY_PRIORITY_SETTINGS); mBehaviorSettings = root.findPreference(KEY_BEHAVIOR_SETTINGS);
mVisualSettings = root.findPreference(KEY_VISUAL_SETTINGS); mVisualSettings = root.findPreference(KEY_VISUAL_SETTINGS);
mPolicy = NotificationManager.from(mContext).getNotificationPolicy(); mPolicy = NotificationManager.from(mContext).getNotificationPolicy();
mSummaryBuilder = new SummaryBuilder(getContext()); mSummaryBuilder = new SummaryBuilder(getContext());
@@ -113,13 +111,13 @@ public class ZenModeSettings extends ZenModeSettingsBase {
} }
private void updateControls() { private void updateControls() {
updatePrioritySettingsSummary(); updateBehaviorSettingsSummary();
updateVisualSettingsSummary(); updateVisualSettingsSummary();
updateAutomaticRules(); updateAutomaticRules();
} }
private void updatePrioritySettingsSummary() { private void updateBehaviorSettingsSummary() {
mPrioritySettings.setSummary(mSummaryBuilder.getPrioritySettingSummary(mPolicy)); mBehaviorSettings.setSummary(mSummaryBuilder.getBehaviorSettingSummary(mPolicy, mZenMode));
} }
private void updateVisualSettingsSummary() { private void updateVisualSettingsSummary() {
@@ -352,29 +350,44 @@ public class ZenModeSettings extends ZenModeSettingsBase {
mContext = context; mContext = context;
} }
String getPrioritySettingSummary(Policy policy) { private static final int[] ALL_PRIORITY_CATEGORIES = {
String s = mContext.getString(R.string.zen_mode_alarms); Policy.PRIORITY_CATEGORY_ALARMS,
s = prepend(s, isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_EVENTS), Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER,
R.string.zen_mode_events); Policy.PRIORITY_CATEGORY_REMINDERS,
s = prepend(s, isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_REMINDERS), Policy.PRIORITY_CATEGORY_EVENTS,
R.string.zen_mode_reminders); Policy.PRIORITY_CATEGORY_MESSAGES,
if (isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_MESSAGES)) { Policy.PRIORITY_CATEGORY_CALLS,
if (policy.priorityMessageSenders == Policy.PRIORITY_SENDERS_ANY) { Policy.PRIORITY_CATEGORY_REPEAT_CALLERS,
s = append(s, true, R.string.zen_mode_all_messages); };
String getBehaviorSettingSummary(Policy policy, int zenMode) {
List<String> enabledCategories;
if (zenMode == Settings.Global.ZEN_MODE_NO_INTERRUPTIONS) {
return mContext.getString(R.string.zen_mode_behavior_total_silence);
} else if (zenMode == Settings.Global.ZEN_MODE_ALARMS) {
return mContext.getString(R.string.zen_mode_behavior_alarms_only);
} else {
enabledCategories = getEnabledCategories(policy);
}
int numCategories = enabledCategories.size();
if (numCategories == 0) {
return mContext.getString(R.string.zen_mode_behavior_no_sound);
}
String s = enabledCategories.get(0).toLowerCase();
for (int i = 1; i < numCategories; i++) {
if (i == numCategories - 1) {
s = mContext.getString(R.string.join_many_items_last,
s, enabledCategories.get(i).toLowerCase());
} else { } else {
s = append(s, true, R.string.zen_mode_selected_messages); s = mContext.getString(R.string.join_many_items_middle,
s, enabledCategories.get(i).toLowerCase());
} }
} }
if (isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_CALLS)) {
if (policy.priorityCallSenders == Policy.PRIORITY_SENDERS_ANY) { return mContext.getString(R.string.zen_mode_behavior_no_sound_except, s);
s = append(s, true, R.string.zen_mode_all_callers);
} else {
s = append(s, true, R.string.zen_mode_selected_callers);
}
} else if (isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_REPEAT_CALLERS)) {
s = append(s, true, R.string.zen_mode_repeat_callers);
}
return s;
} }
String getVisualSettingSummary(Policy policy) { String getVisualSettingSummary(Policy policy) {
@@ -413,22 +426,45 @@ public class ZenModeSettings extends ZenModeSettingsBase {
return count; return count;
} }
@VisibleForTesting private List<String> getEnabledCategories(Policy policy) {
String append(String s, boolean condition, int resId) { List<String> enabledCategories = new ArrayList<>();
if (condition) { for (int category : ALL_PRIORITY_CATEGORIES) {
return mContext.getString( if (isCategoryEnabled(policy, category)) {
R.string.join_many_items_middle, s, mContext.getString(resId)); if (category == Policy.PRIORITY_CATEGORY_ALARMS) {
enabledCategories.add(mContext.getString(R.string.zen_mode_alarms));
} else if (category == Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER) {
enabledCategories.add(mContext.getString(
R.string.zen_mode_media_system_other));
} else if (category == Policy.PRIORITY_CATEGORY_REMINDERS) {
enabledCategories.add(mContext.getString(R.string.zen_mode_reminders));
} else if (category == Policy.PRIORITY_CATEGORY_EVENTS) {
enabledCategories.add(mContext.getString(R.string.zen_mode_events));
} else if (category == Policy.PRIORITY_CATEGORY_MESSAGES) {
if (policy.priorityMessageSenders == Policy.PRIORITY_SENDERS_ANY) {
enabledCategories.add(mContext.getString(
R.string.zen_mode_all_messages));
} else {
enabledCategories.add(mContext.getString(
R.string.zen_mode_selected_messages));
}
} else if (category == Policy.PRIORITY_CATEGORY_CALLS) {
if (policy.priorityCallSenders == Policy.PRIORITY_SENDERS_ANY) {
enabledCategories.add(mContext.getString(
R.string.zen_mode_all_callers));
} else {
enabledCategories.add(mContext.getString(
R.string.zen_mode_selected_callers));
}
} else if (category == Policy.PRIORITY_CATEGORY_REPEAT_CALLERS) {
if (!enabledCategories.contains(mContext.getString(
R.string.zen_mode_all_callers))) {
enabledCategories.add(mContext.getString(
R.string.zen_mode_repeat_callers));
}
}
}
} }
return s; return enabledCategories;
}
@VisibleForTesting
String prepend(String s, boolean condition, int resId) {
if (condition) {
return mContext.getString(
R.string.join_many_items_middle, mContext.getString(resId), s);
}
return s;
} }
private boolean isCategoryEnabled(Policy policy, int categoryType) { private boolean isCategoryEnabled(Policy policy, int categoryType) {

View File

@@ -74,7 +74,7 @@ import com.android.settings.nfc.PaymentSettings;
import com.android.settings.notification.ChannelImportanceSettings; import com.android.settings.notification.ChannelImportanceSettings;
import com.android.settings.notification.ConfigureNotificationSettings; import com.android.settings.notification.ConfigureNotificationSettings;
import com.android.settings.notification.SoundSettings; import com.android.settings.notification.SoundSettings;
import com.android.settings.notification.ZenModePrioritySettings; import com.android.settings.notification.ZenModeBehaviorSettings;
import com.android.settings.notification.ZenModeSettings; import com.android.settings.notification.ZenModeSettings;
import com.android.settings.notification.ZenModeVisualInterruptionSettings; import com.android.settings.notification.ZenModeVisualInterruptionSettings;
import com.android.settings.print.PrintSettingsFragment; import com.android.settings.print.PrintSettingsFragment;
@@ -152,8 +152,8 @@ public final class SearchIndexableResources {
"android.settings.SOUND_SETTINGS"); "android.settings.SOUND_SETTINGS");
addIndex(ZenModeSettings.class, addIndex(ZenModeSettings.class,
R.xml.zen_mode_settings, R.drawable.ic_settings_notifications); R.xml.zen_mode_settings, R.drawable.ic_settings_notifications);
addIndex(ZenModePrioritySettings.class, addIndex(ZenModeBehaviorSettings.class,
R.xml.zen_mode_priority_settings, R.drawable.ic_settings_notifications); R.xml.zen_mode_behavior_settings, R.drawable.ic_settings_notifications);
addIndex(StorageSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_storage); addIndex(StorageSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_storage);
addIndex(PowerUsageSummary.class, addIndex(PowerUsageSummary.class,
R.xml.power_usage_summary, R.drawable.ic_settings_battery); R.xml.power_usage_summary, R.drawable.ic_settings_battery);

View File

@@ -1,5 +1,4 @@
com.android.settings.location.LocationMode com.android.settings.location.LocationMode
com.android.settings.notification.ZenModePrioritySettings
com.android.settings.notification.ZenModeVisualInterruptionSettings com.android.settings.notification.ZenModeVisualInterruptionSettings
com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment
com.android.settings.deviceinfo.SimStatus com.android.settings.deviceinfo.SimStatus
@@ -70,6 +69,7 @@ com.android.settings.applications.UsageAccessDetails
com.android.settings.applications.AppStorageSettings com.android.settings.applications.AppStorageSettings
com.android.settings.notification.NotificationAccessSettings com.android.settings.notification.NotificationAccessSettings
com.android.settings.notification.ZenModeSettings com.android.settings.notification.ZenModeSettings
com.android.settings.notification.ZenModeBehaviorSettings
com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment
com.android.settings.localepicker.LocaleListEditor com.android.settings.localepicker.LocaleListEditor
com.android.settings.qstile.DevelopmentTileConfigActivity$DevelopmentTileConfigFragment com.android.settings.qstile.DevelopmentTileConfigActivity$DevelopmentTileConfigFragment

View File

@@ -16,12 +16,17 @@
package com.android.settings.notification; package com.android.settings.notification;
import static com.google.common.truth.Truth.assertThat;
import static junit.framework.Assert.assertTrue;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.provider.Settings;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -29,10 +34,6 @@ import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import static com.google.common.truth.Truth.assertThat;
import static junit.framework.Assert.assertTrue;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class ZenModeSettingsTest { public class ZenModeSettingsTest {
@@ -47,54 +48,28 @@ public class ZenModeSettingsTest {
} }
@Test @Test
public void testAppend_conditionFalse_shouldNotAppend() { public void testGetBehaviorSettingSummary_sameOrderAsTargetPage() {
String original = "test";
final String result = mBuilder.append(original, false, R.string.zen_mode_alarms);
assertThat(result).isEqualTo(original);
}
@Test
public void testAppend_conditionTrue_shouldAppend() {
String original = "test";
String alarm = mContext.getString(R.string.zen_mode_alarms);
final String result = mBuilder.append(original, true, R.string.zen_mode_alarms);
assertThat(result).contains(alarm);
assertThat(result).contains(original);
assertTrue(result.indexOf(original) < result.indexOf(alarm));
}
@Test
public void testPrepend() {
String original = mContext.getString(R.string.zen_mode_alarms);
String reminders = mContext.getString(R.string.zen_mode_reminders);
final String result = mBuilder.prepend(original, true, R.string.zen_mode_reminders);
assertThat(result).contains(original);
assertThat(result).contains(reminders);
assertTrue(result.indexOf(reminders) < result.indexOf(original));
}
@Test
public void testGetPrioritySettingSummary_sameOrderAsTargetPage() {
NotificationManager.Policy policy = new NotificationManager.Policy( NotificationManager.Policy policy = new NotificationManager.Policy(
NotificationManager.Policy.PRIORITY_CATEGORY_EVENTS NotificationManager.Policy.PRIORITY_CATEGORY_EVENTS
| NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS, | NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS
| NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS
| NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER,
0, 0); 0, 0);
final String result = mBuilder.getPrioritySettingSummary(policy); final String result = mBuilder.getBehaviorSettingSummary(policy,
Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
String alarms = mContext.getString(R.string.zen_mode_alarms); String alarms = mContext.getString(R.string.zen_mode_alarms).toLowerCase();
String reminders = mContext.getString(R.string.zen_mode_reminders); String reminders = mContext.getString(R.string.zen_mode_reminders).toLowerCase();
String events = mContext.getString(R.string.zen_mode_events); String events = mContext.getString(R.string.zen_mode_events).toLowerCase();
String media = mContext.getString(R.string.zen_mode_media_system_other).toLowerCase();
assertThat(result).contains(alarms); assertThat(result).contains(alarms);
assertThat(result).contains(reminders); assertThat(result).contains(reminders);
assertThat(result).contains(events); assertThat(result).contains(events);
assertTrue(result.indexOf(reminders) < result.indexOf(events) && assertThat(result).contains(media);
result.indexOf(events) < result.indexOf(alarms)); assertTrue(result.indexOf(alarms) < result.indexOf(media)
&& result.indexOf(media) < result.indexOf(reminders)
&& result.indexOf(reminders) < result.indexOf(events));
} }
} }