diff --git a/res/layout/zen_mode_settings_button.xml b/res/layout/zen_mode_settings_button.xml
index 2146e28d7b2..14fe644c568 100644
--- a/res/layout/zen_mode_settings_button.xml
+++ b/res/layout/zen_mode_settings_button.xml
@@ -19,8 +19,24 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:orientation="vertical"
android:paddingVertical="@dimen/zen_mode_button_padding_vertical">
+
+
+
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2f6fe6d1957..b16ab2cfdc6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7605,6 +7605,9 @@
Do Not Disturb
+
+ Only get notified by important people and apps
+
Limit interruptions
@@ -7684,7 +7687,7 @@
Allow visual signals
- When Do Not Disturb is on
+ Allow interruptions that make sound
Restrict notifications
@@ -7825,15 +7828,19 @@
- %d schedules can turn on automatically
-
- Mute device but allow exceptions
-
- Exceptions
-
- Schedule
+
+ Exceptions when Do Not Disturb is on
+
+ People
+
+ Apps
+
+ Alarms & other interruptions
+
+ Schedules
+
+ Silenced notifications
-
- See all exceptions
When Do Not Disturb is on, sound and vibration will be muted, except for the items you allow above.
@@ -8596,6 +8603,8 @@
- %d others
+ Conversations
+
Allow messages
@@ -8636,31 +8645,46 @@
Don\u2019t allow any messages
- Allow alarms
+ Alarms
+
+
+ From timers, alarms, security systems, and other apps
alarms
- Play media sounds
+ Media sounds
+
+
+ From videos, games, and other media
media
- Allow touch sounds
+ Touch sounds
+
+
+ From your keyboard and other buttons
touch sounds
- Allow reminders
+ Reminders
+
+
+ From tasks and reminders
reminders
- Allow events
+ Events
+
+
+ From upcoming calendar events
Allow apps to override
diff --git a/res/xml/zen_mode_calls_settings.xml b/res/xml/zen_mode_calls_settings.xml
index 4616cf8c61d..8366b09e01f 100644
--- a/res/xml/zen_mode_calls_settings.xml
+++ b/res/xml/zen_mode_calls_settings.xml
@@ -21,26 +21,26 @@
android:key="zen_mode_calls_settings_page"
android:title="@string/zen_mode_calls_title" >
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
+
diff --git a/res/xml/zen_mode_custom_rule_configuration.xml b/res/xml/zen_mode_custom_rule_configuration.xml
index c1732a3ac6a..664c09a2776 100644
--- a/res/xml/zen_mode_custom_rule_configuration.xml
+++ b/res/xml/zen_mode_custom_rule_configuration.xml
@@ -36,27 +36,32 @@
+ android:title="@string/zen_mode_alarms"
+ android:summary="@string/zen_mode_alarms_summary"/>
+ android:title="@string/zen_mode_media"
+ android:summary="@string/zen_mode_media_summary"/>
+ android:title="@string/zen_mode_system"
+ android:summary="@string/zen_mode_system_summary"/>
+ android:title="@string/zen_mode_reminders"
+ android:summary="@string/zen_mode_reminders_summary"/>
+ android:title="@string/zen_mode_events"
+ android:summary="@string/zen_mode_events_summary"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/zen_mode_settings.xml b/res/xml/zen_mode_settings.xml
index 1a350312794..13cf945da37 100644
--- a/res/xml/zen_mode_settings.xml
+++ b/res/xml/zen_mode_settings.xml
@@ -19,49 +19,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="zen_mode_settings"
- android:title="@string/zen_mode_settings_title">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:title=" ">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/zen_mode_sound_vibration_settings.xml b/res/xml/zen_mode_sound_vibration_settings.xml
index b43bdcccae7..4aacda3b892 100644
--- a/res/xml/zen_mode_sound_vibration_settings.xml
+++ b/res/xml/zen_mode_sound_vibration_settings.xml
@@ -24,48 +24,35 @@
android:title="@string/zen_mode_settings_category"
android:key="zen_mode_settings_category_sound_vibration">
-
-
-
-
-
-
+ android:title="@string/zen_mode_alarms"
+ android:summary="@string/zen_mode_alarms_summary"/>
+ android:title="@string/zen_mode_media"
+ android:summary="@string/zen_mode_media_summary"/>
+ android:title="@string/zen_mode_system"
+ android:summary="@string/zen_mode_system_summary"/>
+ android:title="@string/zen_mode_reminders"
+ android:summary="@string/zen_mode_reminders_summary"/>
-
-
-
+ android:title="@string/zen_mode_events"
+ android:summary="@string/zen_mode_events_summary"/>
diff --git a/src/com/android/settings/notification/zen/AbstractZenCustomRulePreferenceController.java b/src/com/android/settings/notification/zen/AbstractZenCustomRulePreferenceController.java
index e8675563547..bf700804634 100644
--- a/src/com/android/settings/notification/zen/AbstractZenCustomRulePreferenceController.java
+++ b/src/com/android/settings/notification/zen/AbstractZenCustomRulePreferenceController.java
@@ -19,6 +19,7 @@ package com.android.settings.notification.zen;
import android.app.AutomaticZenRule;
import android.content.Context;
import android.os.Bundle;
+import android.util.Slog;
import androidx.preference.Preference;
diff --git a/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
index 6000eadc4b4..b3630a0a951 100644
--- a/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
@@ -22,6 +22,7 @@ import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
import android.provider.Settings;
+import android.text.TextUtils;
import androidx.annotation.VisibleForTesting;
import androidx.core.text.BidiFormatter;
@@ -121,29 +122,30 @@ public class ZenModeAllBypassingAppsPreferenceController extends AbstractPrefere
mApplicationsState.ensureIcon(entry);
for (NotificationChannel channel : mNotificationBackend
.getNotificationChannelsBypassingDnd(pkg, entry.info.uid).getList()) {
+ if (!TextUtils.isEmpty(channel.getConversationId())) {
+ // conversation channels that bypass dnd will be shown on the People page
+ continue;
+ }
Preference pref = new AppPreference(mPrefContext);
pref.setKey(pkg + "|" + channel.getId());
pref.setTitle(BidiFormatter.getInstance().unicodeWrap(entry.label));
pref.setIcon(entry.icon);
pref.setSummary(BidiFormatter.getInstance().unicodeWrap(channel.getName()));
- pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Bundle args = new Bundle();
- args.putString(AppInfoBase.ARG_PACKAGE_NAME, entry.info.packageName);
- args.putInt(AppInfoBase.ARG_PACKAGE_UID, entry.info.uid);
- args.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
- new SubSettingLauncher(mContext)
- .setDestination(ChannelNotificationSettings.class.getName())
- .setArguments(args)
- .setTitleRes(R.string.notification_channel_title)
- .setResultListener(mHostFragment, 0)
- .setSourceMetricsCategory(
- SettingsEnums.NOTIFICATION_ZEN_MODE_OVERRIDING_APP)
- .launch();
- return true;
- }
+ pref.setOnPreferenceClickListener(preference -> {
+ Bundle args = new Bundle();
+ args.putString(AppInfoBase.ARG_PACKAGE_NAME, entry.info.packageName);
+ args.putInt(AppInfoBase.ARG_PACKAGE_UID, entry.info.uid);
+ args.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
+ new SubSettingLauncher(mContext)
+ .setDestination(ChannelNotificationSettings.class.getName())
+ .setArguments(args)
+ .setTitleRes(R.string.notification_channel_title)
+ .setResultListener(mHostFragment, 0)
+ .setSourceMetricsCategory(
+ SettingsEnums.NOTIFICATION_ZEN_MODE_OVERRIDING_APP)
+ .launch();
+ return true;
});
channelsBypassingDnd.add(pref);
}
diff --git a/src/com/android/settings/notification/zen/ZenModeAllBypassingConversationsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeAllBypassingConversationsPreferenceController.java
new file mode 100644
index 00000000000..309cd428a2f
--- /dev/null
+++ b/src/com/android/settings/notification/zen/ZenModeAllBypassingConversationsPreferenceController.java
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+package com.android.settings.notification.zen;
+
+import android.app.Application;
+import android.app.NotificationChannel;
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.text.TextUtils;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.core.text.BidiFormatter;
+import androidx.fragment.app.Fragment;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.applications.AppInfoBase;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.notification.NotificationBackend;
+import com.android.settings.notification.app.ChannelNotificationSettings;
+import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.widget.apppreference.AppPreference;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Adds a preference to the PreferenceScreen for each conversation notification channel that can
+ * bypass DND.
+ */
+public class ZenModeAllBypassingConversationsPreferenceController extends
+ AbstractPreferenceController implements PreferenceControllerMixin {
+
+ private final String KEY = "zen_mode_settings_category_conversations";
+
+ @VisibleForTesting ApplicationsState mApplicationsState;
+ @VisibleForTesting PreferenceCategory mCategory;
+ @VisibleForTesting Context mPrefContext;
+
+ private ApplicationsState.Session mAppSession;
+ private NotificationBackend mNotificationBackend = new NotificationBackend();
+ private Fragment mHostFragment;
+
+ public ZenModeAllBypassingConversationsPreferenceController(Context context, Application app,
+ Fragment host) {
+
+ this(context, app == null ? null : ApplicationsState.getInstance(app), host);
+ }
+
+ private ZenModeAllBypassingConversationsPreferenceController(Context context,
+ ApplicationsState appState, Fragment host) {
+ super(context);
+ mApplicationsState = appState;
+ mHostFragment = host;
+
+ if (mApplicationsState != null && host != null) {
+ mAppSession = mApplicationsState.newSession(mAppSessionCallbacks, host.getLifecycle());
+ }
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ mCategory = screen.findPreference(KEY);
+ mPrefContext = screen.getContext();
+ updateNotificationChannelList();
+ super.displayPreference(screen);
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return KEY;
+ }
+
+ /**
+ * Call this method to trigger the notification channels list to refresh.
+ */
+ public void updateNotificationChannelList() {
+ if (mAppSession == null) {
+ return;
+ }
+
+ ApplicationsState.AppFilter filter = ApplicationsState.FILTER_ALL_ENABLED;
+ List apps = mAppSession.rebuild(filter,
+ ApplicationsState.ALPHA_COMPARATOR);
+ if (apps != null) {
+ updateNotificationChannelList(apps);
+ }
+ }
+
+ @VisibleForTesting
+ void updateNotificationChannelList(List apps) {
+ if (mCategory == null || apps == null) {
+ return;
+ }
+
+ List channelsBypassingDnd = new ArrayList<>();
+ for (ApplicationsState.AppEntry entry : apps) {
+ String pkg = entry.info.packageName;
+ mApplicationsState.ensureIcon(entry);
+ for (NotificationChannel channel : mNotificationBackend
+ .getNotificationChannelsBypassingDnd(pkg, entry.info.uid).getList()) {
+ if (TextUtils.isEmpty(channel.getConversationId())) {
+ // only conversation channels
+ continue;
+ }
+ Preference pref = new AppPreference(mPrefContext);
+ pref.setKey(pkg + "|" + channel.getId());
+ pref.setTitle(BidiFormatter.getInstance().unicodeWrap(entry.label));
+ // TODO: use badged shortcut icon instead of app icon
+ pref.setIcon(entry.icon);
+ pref.setSummary(BidiFormatter.getInstance().unicodeWrap(channel.getName()));
+
+ pref.setOnPreferenceClickListener(preference -> {
+ Bundle args = new Bundle();
+ args.putString(AppInfoBase.ARG_PACKAGE_NAME, entry.info.packageName);
+ args.putInt(AppInfoBase.ARG_PACKAGE_UID, entry.info.uid);
+ args.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
+ new SubSettingLauncher(mContext)
+ .setDestination(ChannelNotificationSettings.class.getName())
+ .setArguments(args)
+ .setTitleRes(R.string.notification_channel_title)
+ .setResultListener(mHostFragment, 0)
+ .setSourceMetricsCategory(
+ SettingsEnums.NOTIFICATION_ZEN_MODE_OVERRIDING_APP)
+ .launch();
+ return true;
+ });
+ channelsBypassingDnd.add(pref);
+ }
+
+ mCategory.removeAll();
+ if (channelsBypassingDnd.size() > 0) {
+ mCategory.setVisible(true);
+ for (Preference prefToAdd : channelsBypassingDnd) {
+ mCategory.addPreference(prefToAdd);
+ }
+ } else {
+ mCategory.setVisible(false);
+ }
+ }
+ }
+
+ private final ApplicationsState.Callbacks mAppSessionCallbacks =
+ new ApplicationsState.Callbacks() {
+
+ @Override
+ public void onRunningStateChanged(boolean running) {
+ updateNotificationChannelList();
+ }
+
+ @Override
+ public void onPackageListChanged() {
+ updateNotificationChannelList();
+ }
+
+ @Override
+ public void onRebuildComplete(ArrayList apps) {
+ updateNotificationChannelList(apps);
+ }
+
+ @Override
+ public void onPackageIconChanged() {
+ updateNotificationChannelList();
+ }
+
+ @Override
+ public void onPackageSizeChanged(String packageName) {
+ updateNotificationChannelList();
+ }
+
+ @Override
+ public void onAllSizesComputed() { }
+
+ @Override
+ public void onLauncherInfoChanged() {
+ updateNotificationChannelList();
+ }
+
+ @Override
+ public void onLoadEntriesCompleted() {
+ // Add shortcut info
+ updateNotificationChannelList();
+ }
+ };
+}
diff --git a/src/com/android/settings/notification/zen/ZenModeBackend.java b/src/com/android/settings/notification/zen/ZenModeBackend.java
index 1f512db44ee..ac494668095 100644
--- a/src/com/android/settings/notification/zen/ZenModeBackend.java
+++ b/src/com/android/settings/notification/zen/ZenModeBackend.java
@@ -277,7 +277,7 @@ public class ZenModeBackend {
} else if (category == NotificationManager.Policy.PRIORITY_CATEGORY_CALLS){
return R.string.zen_mode_from_none_calls;
}
- return 0;
+ return R.string.zen_mode_from_none;
}
protected int getContactsSummary(int category) {
diff --git a/src/com/android/settings/notification/zen/ZenModeCallsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeCallsPreferenceController.java
index 5f3944931f8..7b97fb1d600 100644
--- a/src/com/android/settings/notification/zen/ZenModeCallsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeCallsPreferenceController.java
@@ -64,4 +64,4 @@ public class ZenModeCallsPreferenceController extends
preference.setSummary(mSummaryBuilder.getCallsSettingSummary(getPolicy()));
}
}
-}
+}
\ No newline at end of file
diff --git a/src/com/android/settings/notification/zen/ZenModeMessagesSettings.java b/src/com/android/settings/notification/zen/ZenModeMessagesSettings.java
deleted file mode 100644
index 04e83101691..00000000000
--- a/src/com/android/settings/notification/zen/ZenModeMessagesSettings.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-package com.android.settings.notification.zen;
-
-import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES;
-
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-
-import com.android.settings.R;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.search.Indexable;
-import com.android.settingslib.search.SearchIndexable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@SearchIndexable
-public class ZenModeMessagesSettings extends ZenModeSettingsBase implements Indexable {
-
- @Override
- protected List createPreferenceControllers(Context context) {
- return buildPreferenceControllers(context, getSettingsLifecycle());
- }
-
- private static List buildPreferenceControllers(Context context,
- Lifecycle lifecycle) {
- List controllers = new ArrayList<>();
- controllers.add(new ZenModePriorityMessagesPreferenceController(context, lifecycle));
- controllers.add(new ZenModeStarredContactsPreferenceController(context, lifecycle,
- PRIORITY_CATEGORY_MESSAGES, "zen_mode_starred_contacts_messages"));
- controllers.add(new ZenModeBehaviorFooterPreferenceController(
- context, lifecycle, R.string.zen_mode_messages_footer));
- return controllers;
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.zen_mode_messages_settings;
- }
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.NOTIFICATION_ZEN_MODE_PRIORITY;
- }
-
- /**
- * For Search.
- */
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.zen_mode_messages_settings) {
-
- @Override
- public List createPreferenceControllers(
- Context context) {
- return buildPreferenceControllers(context, null);
- }
- };
-}
diff --git a/src/com/android/settings/notification/zen/ZenModePeoplePreferenceController.java b/src/com/android/settings/notification/zen/ZenModePeoplePreferenceController.java
new file mode 100644
index 00000000000..a06f023deb6
--- /dev/null
+++ b/src/com/android/settings/notification/zen/ZenModePeoplePreferenceController.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+package com.android.settings.notification.zen;
+
+import android.app.NotificationManager;
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+public class ZenModePeoplePreferenceController extends
+ AbstractZenModePreferenceController implements PreferenceControllerMixin {
+
+ private final String KEY;
+ private final ZenModeSettings.SummaryBuilder mSummaryBuilder;
+
+ public ZenModePeoplePreferenceController(Context context, Lifecycle lifecycle, String key) {
+ super(context, key, lifecycle);
+ KEY = key;
+ mSummaryBuilder = new ZenModeSettings.SummaryBuilder(context);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return KEY;
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+
+ switch (getZenMode()) {
+ case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS:
+ case Settings.Global.ZEN_MODE_ALARMS:
+ preference.setEnabled(false);
+ preference.setSummary(mBackend.getAlarmsTotalSilenceCallsMessagesSummary(
+ NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES));
+ break;
+ default:
+ preference.setEnabled(true);
+ // TODO: How do all of the people options roll up into the summary?
+ //preference.setSummary(mSummaryBuilder.getMessagesSettingSummary(getPolicy()));
+ }
+ }
+}
diff --git a/src/com/android/settings/notification/zen/ZenModeCallsSettings.java b/src/com/android/settings/notification/zen/ZenModePeopleSettings.java
similarity index 60%
rename from src/com/android/settings/notification/zen/ZenModeCallsSettings.java
rename to src/com/android/settings/notification/zen/ZenModePeopleSettings.java
index d2f1c04661c..af3c26bf6f8 100644
--- a/src/com/android/settings/notification/zen/ZenModeCallsSettings.java
+++ b/src/com/android/settings/notification/zen/ZenModePeopleSettings.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2020 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.
@@ -17,10 +17,16 @@
package com.android.settings.notification.zen;
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CALLS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES;
+import android.app.Activity;
+import android.app.Application;
import android.app.settings.SettingsEnums;
import android.content.Context;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+
import com.android.settings.R;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -32,47 +38,60 @@ import java.util.ArrayList;
import java.util.List;
@SearchIndexable
-public class ZenModeCallsSettings extends ZenModeSettingsBase implements Indexable {
+public class ZenModePeopleSettings extends ZenModeSettingsBase implements Indexable {
@Override
protected List createPreferenceControllers(Context context) {
- return buildPreferenceControllers(context, getSettingsLifecycle());
+ final Activity activity = getActivity();
+ final Application app;
+ if (activity != null) {
+ app = activity.getApplication();
+ } else {
+ app = null;
+ }
+ return buildPreferenceControllers(
+ context, getSettingsLifecycle(), app, this, getFragmentManager());
}
private static List buildPreferenceControllers(Context context,
- Lifecycle lifecycle) {
+ Lifecycle lifecycle, Application app, Fragment host, FragmentManager fragmentManager) {
List controllers = new ArrayList<>();
+ controllers.add(new ZenModePriorityMessagesPreferenceController(context, lifecycle));
+ controllers.add(new ZenModeStarredContactsPreferenceController(context, lifecycle,
+ PRIORITY_CATEGORY_MESSAGES, "zen_mode_starred_contacts_messages"));
controllers.add(new ZenModePriorityCallsPreferenceController(context, lifecycle));
controllers.add(new ZenModeStarredContactsPreferenceController(context, lifecycle,
PRIORITY_CATEGORY_CALLS, "zen_mode_starred_contacts_callers"));
controllers.add(new ZenModeRepeatCallersPreferenceController(context, lifecycle,
context.getResources().getInteger(com.android.internal.R.integer
- .config_zen_repeat_callers_threshold)));
- controllers.add(new ZenModeBehaviorFooterPreferenceController(
- context, lifecycle, R.string.zen_mode_calls_footer));
+ .config_zen_repeat_callers_threshold)));
+ controllers.add(
+ new ZenModeAllBypassingConversationsPreferenceController(context, app, host));
+ controllers.add(new ZenModeSettingsFooterPreferenceController(context, lifecycle,
+ fragmentManager));
return controllers;
}
@Override
protected int getPreferenceScreenResId() {
- return R.xml.zen_mode_calls_settings;
+ return R.xml.zen_mode_people_settings;
}
@Override
public int getMetricsCategory() {
- return SettingsEnums.NOTIFICATION_ZEN_MODE_PRIORITY;
+ return SettingsEnums.DND_PEOPLE;
}
/**
* For Search.
*/
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.zen_mode_calls_settings) {
+ new BaseSearchIndexProvider(R.xml.zen_mode_people_settings) {
@Override
public List createPreferenceControllers(
Context context) {
- return buildPreferenceControllers(context, null);
+ return buildPreferenceControllers(context, null, null, null, null);
}
};
}
diff --git a/src/com/android/settings/notification/zen/ZenModeSettings.java b/src/com/android/settings/notification/zen/ZenModeSettings.java
index cdcb55861c6..871974b07a4 100644
--- a/src/com/android/settings/notification/zen/ZenModeSettings.java
+++ b/src/com/android/settings/notification/zen/ZenModeSettings.java
@@ -78,10 +78,9 @@ public class ZenModeSettings extends ZenModeSettingsBase {
private static List buildPreferenceControllers(Context context,
Lifecycle lifecycle, FragmentManager fragmentManager) {
List controllers = new ArrayList<>();
- controllers.add(new ZenModeCallsPreferenceController(context, lifecycle,
- "zen_mode_behavior_calls"));
- controllers.add(new ZenModeMessagesPreferenceController(context, lifecycle,
- "zen_mode_behavior_messages"));
+ controllers.add(new ZenModePeoplePreferenceController(context, lifecycle,
+ "zen_mode_behavior_people"));
+ controllers.add(new ZenModeBypassingAppsPreferenceController(context, lifecycle));
controllers.add(new ZenModeBlockedEffectsPreferenceController(context, lifecycle));
controllers.add(new ZenModeDurationPreferenceController(context, lifecycle));
controllers.add(new ZenModeAutomationPreferenceController(context));
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenModeBehaviorFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenModeBehaviorFooterPreferenceControllerTest.java
index c9af06db438..fd795155a4f 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenModeBehaviorFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenModeBehaviorFooterPreferenceControllerTest.java
@@ -77,7 +77,7 @@ public class ZenModeBehaviorFooterPreferenceControllerTest {
private Context mContext;
private ContentResolver mContentResolver;
- private int mTitleResId = R.string.zen_sound_title;
+ private int mTitleResId = R.string.zen_mode_settings_title;
@Before
public void setup() {
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenModeCallsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenModeCallsPreferenceControllerTest.java
index 25e9747a395..e04436ecdda 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenModeCallsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenModeCallsPreferenceControllerTest.java
@@ -79,4 +79,4 @@ public final class ZenModeCallsPreferenceControllerTest {
mController.updateState(pref);
verify(pref).setSummary(any());
}
-}
+}
\ No newline at end of file