Merge "Notification settings updates"
This commit is contained in:
committed by
Android (Google) Code Review
commit
e0f8db5d64
@@ -6926,7 +6926,7 @@
|
||||
<string name="notification_group_title">Notification category group</string>
|
||||
|
||||
<!-- [CHAR LIMIT=100] Notification importance screen title -->
|
||||
<string name="notification_importance_title">Importance</string>
|
||||
<string name="notification_importance_title">Behavior</string>
|
||||
|
||||
<!-- [CHAR LIMIT=100 BACKUP_MESSAGE_ID=1820188704793497324] Notification Importance: unspecified importance level description -->
|
||||
<string name="notification_importance_unspecified">Allow sound</string>
|
||||
@@ -6991,6 +6991,9 @@
|
||||
<!-- [CHAR LIMIT=100] Notification Importance title: high importance level title -->
|
||||
<string name="notification_channel_summary_high">Urgent importance</string>
|
||||
|
||||
<!-- [CHAR LIMIT=100] Label for on/off toggle -->
|
||||
<string name="notification_switch_label">Show notifications</string>
|
||||
|
||||
<!-- Default Apps > Default notification assistant -->
|
||||
<string name="default_notification_assistant">Notification assistant</string>
|
||||
|
||||
@@ -7087,13 +7090,13 @@
|
||||
<string name="loading_notification_apps">Loading apps...</string>
|
||||
|
||||
<!-- [CHAR LIMIT=NONE] Text appearing when app notifications are off -->
|
||||
<string name="app_notifications_off_desc">Android is blocking this app\'s notifications from appearing on this device</string>
|
||||
<string name="app_notifications_off_desc">At your request, Android is blocking this app\'s notifications from appearing on this device</string>
|
||||
|
||||
<!-- [CHAR LIMIT=NONE] Text appearing when channel notifications are off -->
|
||||
<string name="channel_notifications_off_desc">Android is blocking this category of notifications from appearing on this device</string>
|
||||
<string name="channel_notifications_off_desc">At your request, Android is blocking this category of notifications from appearing on this device</string>
|
||||
|
||||
<!-- [CHAR LIMIT=NONE] Text appearing when channel group notifications are off -->
|
||||
<string name="channel_group_notifications_off_desc">Android is blocking this group of notifications from appearing on this device</string>
|
||||
<string name="channel_group_notifications_off_desc">At your request, Android is blocking this group of notifications from appearing on this device</string>
|
||||
|
||||
<!-- [CHAR LIMIT=NONE] App notification settings: channels title -->
|
||||
<string name="notification_channels">Categories</string>
|
||||
|
@@ -15,7 +15,8 @@
|
||||
-->
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto" >
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
settings:initialExpandedChildrenCount="3">
|
||||
|
||||
<com.android.settings.applications.LayoutPreference
|
||||
android:key="pref_app_header"
|
||||
|
@@ -19,20 +19,15 @@
|
||||
|
||||
<com.android.settings.widget.RadioButtonPreference
|
||||
android:key="importance_high"
|
||||
android:title="@string/notification_importance_high_title"
|
||||
android:summary="@string/notification_importance_high"
|
||||
/>
|
||||
android:title="@string/notification_importance_high" />
|
||||
<com.android.settings.widget.RadioButtonPreference
|
||||
android:key="importance_default"
|
||||
android:title="@string/notification_importance_default_title"
|
||||
android:summary="@string/notification_importance_default" />
|
||||
android:title="@string/notification_importance_default" />
|
||||
<com.android.settings.widget.RadioButtonPreference
|
||||
android:key="importance_low"
|
||||
android:title="@string/notification_importance_low_title"
|
||||
android:summary="@string/notification_importance_low" />
|
||||
android:title="@string/notification_importance_low" />
|
||||
<com.android.settings.widget.RadioButtonPreference
|
||||
android:key="importance_min"
|
||||
android:title="@string/notification_importance_min_title"
|
||||
android:summary="@string/notification_importance_min" />
|
||||
android:title="@string/notification_importance_min" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
@@ -135,7 +135,6 @@ public class AppNotificationSettings extends NotificationSettingsBase {
|
||||
return new ArrayList<>(mControllers);
|
||||
}
|
||||
|
||||
|
||||
private void populateList() {
|
||||
if (!mDynamicPreferences.isEmpty()) {
|
||||
// If there's anything in mChannelGroups, we've called populateChannelList twice.
|
||||
@@ -164,61 +163,41 @@ public class AppNotificationSettings extends NotificationSettingsBase {
|
||||
}
|
||||
|
||||
private void populateGroupList() {
|
||||
PreferenceCategory groupCategory = new PreferenceCategory(getPrefContext());
|
||||
groupCategory.setTitle(R.string.notification_channels);
|
||||
groupCategory.setKey(KEY_GENERAL_CATEGORY);
|
||||
groupCategory.setOrderingAsAdded(true);
|
||||
getPreferenceScreen().addPreference(groupCategory);
|
||||
mDynamicPreferences.add(groupCategory);
|
||||
for (NotificationChannelGroup group : mChannelGroupList) {
|
||||
final List<NotificationChannel> channels = group.getChannels();
|
||||
int N = channels.size();
|
||||
// app defined groups with one channel and channels with no group display the channel
|
||||
// name and no summary and link directly to the channel page unless the group is blocked
|
||||
if ((group.getId() == null || N < 2) && !group.isBlocked()) {
|
||||
Collections.sort(channels, mChannelComparator);
|
||||
for (int i = 0; i < N; i++) {
|
||||
final NotificationChannel channel = channels.get(i);
|
||||
populateSingleChannelPrefs(groupCategory, channel, "");
|
||||
}
|
||||
PreferenceCategory groupCategory = new PreferenceCategory(getPrefContext());
|
||||
groupCategory.setOrderingAsAdded(true);
|
||||
getPreferenceScreen().addPreference(groupCategory);
|
||||
mDynamicPreferences.add(groupCategory);
|
||||
if (group.getId() == null) {
|
||||
groupCategory.setTitle(mChannelGroupList.size() > 1
|
||||
? R.string.notification_channels_other
|
||||
: R.string.notification_channels);
|
||||
groupCategory.setKey(KEY_GENERAL_CATEGORY);
|
||||
} else {
|
||||
populateGroupPreference(groupCategory, group, N);
|
||||
groupCategory.setTitle(group.getName());
|
||||
groupCategory.setKey(group.getId());
|
||||
Bundle groupArgs = new Bundle();
|
||||
groupArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
|
||||
groupArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
|
||||
groupArgs.putString(Settings.EXTRA_CHANNEL_GROUP_ID, group.getId());
|
||||
Intent channelIntent = Utils.onBuildStartFragmentIntent(getActivity(),
|
||||
ChannelGroupNotificationSettings.class.getName(),
|
||||
groupArgs, null, R.string.notification_group_title,
|
||||
null, false, getMetricsCategory());
|
||||
groupCategory.setIntent(channelIntent);
|
||||
populateGroupToggle(groupCategory, group);
|
||||
}
|
||||
|
||||
final List<NotificationChannel> channels = group.getChannels();
|
||||
Collections.sort(channels, mChannelComparator);
|
||||
int N = channels.size();
|
||||
for (int i = 0; i < N; i++) {
|
||||
final NotificationChannel channel = channels.get(i);
|
||||
populateSingleChannelPrefs(groupCategory, channel, group.isBlocked());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void populateGroupPreference(PreferenceGroup parent,
|
||||
final NotificationChannelGroup group, int channelCount) {
|
||||
MasterSwitchPreference groupPref = new MasterSwitchPreference(
|
||||
getPrefContext());
|
||||
groupPref.setSwitchEnabled(mSuspendedAppsAdmin == null
|
||||
&& isChannelGroupBlockable(group));
|
||||
groupPref.setKey(group.getId());
|
||||
groupPref.setTitle(group.getName());
|
||||
groupPref.setChecked(!group.isBlocked());
|
||||
groupPref.setSummary(getResources().getQuantityString(
|
||||
R.plurals.notification_group_summary, channelCount, channelCount));
|
||||
Bundle groupArgs = new Bundle();
|
||||
groupArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
|
||||
groupArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
|
||||
groupArgs.putString(Settings.EXTRA_CHANNEL_GROUP_ID, group.getId());
|
||||
Intent groupIntent = Utils.onBuildStartFragmentIntent(getActivity(),
|
||||
ChannelGroupNotificationSettings.class.getName(),
|
||||
groupArgs, null, R.string.notification_group_title, null, false,
|
||||
getMetricsCategory());
|
||||
groupPref.setIntent(groupIntent);
|
||||
|
||||
groupPref.setOnPreferenceChangeListener(
|
||||
(preference, o) -> {
|
||||
boolean value = (Boolean) o;
|
||||
group.setBlocked(!value);
|
||||
mBackend.updateChannelGroup(mPkg, mUid, group);
|
||||
|
||||
return true;
|
||||
});
|
||||
parent.addPreference(groupPref);
|
||||
}
|
||||
|
||||
private Comparator<NotificationChannelGroup> mChannelGroupComparator =
|
||||
new Comparator<NotificationChannelGroup>() {
|
||||
|
||||
|
@@ -67,6 +67,8 @@ public class BlockPreferenceController extends NotificationPreferenceController
|
||||
LayoutPreference pref = (LayoutPreference) preference;
|
||||
SwitchBar bar = pref.findViewById(R.id.switch_bar);
|
||||
if (bar != null) {
|
||||
bar.setSwitchBarText(R.string.notification_switch_label,
|
||||
R.string.notification_switch_label);
|
||||
bar.show();
|
||||
try {
|
||||
bar.addOnSwitchChangeListener(this);
|
||||
|
@@ -19,7 +19,6 @@ package com.android.settings.notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.content.Context;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
@@ -98,9 +97,7 @@ public class ChannelGroupNotificationSettings extends NotificationSettingsBase {
|
||||
Collections.sort(channels, mChannelComparator);
|
||||
for (NotificationChannel channel : channels) {
|
||||
mDynamicPreferences.add(populateSingleChannelPrefs(
|
||||
getPreferenceScreen(), channel,
|
||||
ImportancePreferenceController.getImportanceSummary(
|
||||
getPrefContext(), channel)));
|
||||
getPreferenceScreen(), channel, mChannelGroup.isBlocked()));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -73,7 +73,8 @@ public class ImportancePreferenceController extends NotificationPreferenceContro
|
||||
if (preference.isEnabled()) {
|
||||
Intent channelIntent = Utils.onBuildStartFragmentIntent(mContext,
|
||||
ChannelImportanceSettings.class.getName(),
|
||||
channelArgs, null, R.string.notification_importance_title, null,
|
||||
channelArgs, null,
|
||||
R.string.notification_importance_title, null,
|
||||
false, getMetricsCategory());
|
||||
preference.setIntent(channelIntent);
|
||||
preference.setSummary(getImportanceSummary(mContext, mChannel));
|
||||
@@ -82,23 +83,19 @@ public class ImportancePreferenceController extends NotificationPreferenceContro
|
||||
}
|
||||
|
||||
protected static String getImportanceSummary(Context context, NotificationChannel channel) {
|
||||
String title;
|
||||
String summary = null;
|
||||
String summary = "";
|
||||
int importance = channel.getImportance();
|
||||
switch (importance) {
|
||||
case IMPORTANCE_UNSPECIFIED:
|
||||
title = context.getString(R.string.notification_importance_unspecified);
|
||||
summary = context.getString(R.string.notification_importance_unspecified);
|
||||
break;
|
||||
case NotificationManager.IMPORTANCE_MIN:
|
||||
title = context.getString(R.string.notification_importance_min_title);
|
||||
summary = context.getString(R.string.notification_importance_min);
|
||||
break;
|
||||
case NotificationManager.IMPORTANCE_LOW:
|
||||
title = context.getString(R.string.notification_importance_low_title);
|
||||
summary = context.getString(R.string.notification_importance_low);
|
||||
break;
|
||||
case NotificationManager.IMPORTANCE_DEFAULT:
|
||||
title = context.getString(R.string.notification_importance_default_title);
|
||||
if (SoundPreferenceController.hasValidSound(channel)) {
|
||||
summary = context.getString(R.string.notification_importance_default);
|
||||
} else {
|
||||
@@ -107,7 +104,6 @@ public class ImportancePreferenceController extends NotificationPreferenceContro
|
||||
break;
|
||||
case NotificationManager.IMPORTANCE_HIGH:
|
||||
case NotificationManager.IMPORTANCE_MAX:
|
||||
title = context.getString(R.string.notification_importance_high_title);
|
||||
if (SoundPreferenceController.hasValidSound(channel)) {
|
||||
summary = context.getString(R.string.notification_importance_high);
|
||||
} else {
|
||||
@@ -118,10 +114,6 @@ public class ImportancePreferenceController extends NotificationPreferenceContro
|
||||
return "";
|
||||
}
|
||||
|
||||
if (summary != null) {
|
||||
return context.getString(R.string.notification_importance_divider, title, summary);
|
||||
} else {
|
||||
return title;
|
||||
}
|
||||
return summary;
|
||||
}
|
||||
}
|
||||
|
@@ -61,6 +61,7 @@ import android.os.UserManager;
|
||||
import android.provider.SearchIndexableResource;
|
||||
import android.provider.Settings;
|
||||
import android.service.notification.NotificationListenerService;
|
||||
import android.support.v14.preference.SwitchPreference;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceGroup;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
@@ -214,7 +215,6 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
|
||||
}
|
||||
for (ResolveInfo ri : resolveInfos) {
|
||||
final ActivityInfo activityInfo = ri.activityInfo;
|
||||
final ApplicationInfo appInfo = activityInfo.applicationInfo;
|
||||
if (mAppRow.settingsIntent != null) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "Ignoring duplicate notification preference activity ("
|
||||
@@ -225,7 +225,8 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
|
||||
}
|
||||
mAppRow.settingsIntent = intent
|
||||
.setPackage(null)
|
||||
.setClassName(activityInfo.packageName, activityInfo.name);
|
||||
.setClassName(activityInfo.packageName, activityInfo.name)
|
||||
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
if (mChannel != null) {
|
||||
mAppRow.settingsIntent.putExtra(Notification.EXTRA_CHANNEL_ID, mChannel.getId());
|
||||
}
|
||||
@@ -257,17 +258,41 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void populateGroupToggle(final PreferenceGroup parent,
|
||||
NotificationChannelGroup group) {
|
||||
RestrictedSwitchPreference preference = new RestrictedSwitchPreference(getPrefContext());
|
||||
preference.setTitle(R.string.notification_switch_label);
|
||||
preference.setEnabled(mSuspendedAppsAdmin == null
|
||||
&& isChannelGroupBlockable(group));
|
||||
preference.setChecked(!group.isBlocked());
|
||||
preference.setOnPreferenceClickListener(preference1 -> {
|
||||
final boolean allowGroup = ((SwitchPreference) preference1).isChecked();
|
||||
group.setBlocked(!allowGroup);
|
||||
mBackend.updateChannelGroup(mAppRow.pkg, mAppRow.uid, group);
|
||||
|
||||
for (int i = 0; i < parent.getPreferenceCount(); i++) {
|
||||
Preference pref = parent.getPreference(i);
|
||||
if (pref instanceof MasterSwitchPreference) {
|
||||
((MasterSwitchPreference) pref).setSwitchEnabled(allowGroup);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
parent.addPreference(preference);
|
||||
}
|
||||
|
||||
protected Preference populateSingleChannelPrefs(PreferenceGroup parent,
|
||||
final NotificationChannel channel, String summary) {
|
||||
final NotificationChannel channel, final boolean groupBlocked) {
|
||||
MasterSwitchPreference channelPref = new MasterSwitchPreference(
|
||||
getPrefContext());
|
||||
channelPref.setSwitchEnabled(mSuspendedAppsAdmin == null
|
||||
&& isChannelBlockable(channel)
|
||||
&& isChannelConfigurable(channel));
|
||||
&& isChannelConfigurable(channel)
|
||||
&& !groupBlocked);
|
||||
channelPref.setKey(channel.getId());
|
||||
channelPref.setTitle(channel.getName());
|
||||
channelPref.setChecked(channel.getImportance() != IMPORTANCE_NONE);
|
||||
channelPref.setSummary(summary);
|
||||
Bundle channelArgs = new Bundle();
|
||||
channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
|
||||
channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
|
||||
@@ -288,7 +313,6 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
|
||||
channel.setImportance(importance);
|
||||
channel.lockFields(
|
||||
NotificationChannel.USER_LOCKED_IMPORTANCE);
|
||||
channelPref.setSummary(summary);
|
||||
mBackend.updateChannel(mPkg, mUid, channel);
|
||||
|
||||
return true;
|
||||
|
Reference in New Issue
Block a user