Disallow buzz/beep/disturb changes for notifications with locked importance.

If mAppRow.lockedImportance (which comes from the whitelist config_nonBlockableNotificationPackages), don't allow sound, vibration, or override dnd to be changed.

Bug: 38480212
Test: manually verified for now
Change-Id: I04aa7f15f2480472ec6ee487472098e81ab3d99f
This commit is contained in:
Alison Cichowlas
2017-05-31 17:01:24 -04:00
parent 98b67a4e94
commit 9f36db1f4c
2 changed files with 14 additions and 6 deletions

View File

@@ -175,6 +175,7 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
private void setupVibrate() { private void setupVibrate() {
mVibrate = (RestrictedSwitchPreference) findPreference(KEY_VIBRATE); mVibrate = (RestrictedSwitchPreference) findPreference(KEY_VIBRATE);
mVibrate.setDisabledByAdmin(mSuspendedAppsAdmin); mVibrate.setDisabledByAdmin(mSuspendedAppsAdmin);
mVibrate.setEnabled(!(mAppRow.lockedImportance || mVibrate.isDisabledByAdmin()));
mVibrate.setChecked(mChannel.shouldVibrate()); mVibrate.setChecked(mChannel.shouldVibrate());
mVibrate.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { mVibrate.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override @Override
@@ -191,6 +192,7 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
private void setupRingtone() { private void setupRingtone() {
mRingtone = (NotificationSoundPreference) findPreference(KEY_RINGTONE); mRingtone = (NotificationSoundPreference) findPreference(KEY_RINGTONE);
mRingtone.setRingtone(mChannel.getSound()); mRingtone.setRingtone(mChannel.getSound());
mRingtone.setEnabled(!(mAppRow.lockedImportance));
mRingtone.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { mRingtone.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -246,12 +248,15 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
channelArgs.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, true); channelArgs.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, true);
channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg); channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
channelArgs.putString(Settings.EXTRA_CHANNEL_ID, mChannel.getId()); channelArgs.putString(Settings.EXTRA_CHANNEL_ID, mChannel.getId());
mImportance.setEnabled(mSuspendedAppsAdmin == null && !mAppRow.lockedImportance);
// Set up intent to show importance selection only if this setting is enabled.
if (mImportance.isEnabled()) {
Intent channelIntent = Utils.onBuildStartFragmentIntent(getActivity(), Intent channelIntent = Utils.onBuildStartFragmentIntent(getActivity(),
ChannelImportanceSettings.class.getName(), ChannelImportanceSettings.class.getName(),
channelArgs, null, R.string.notification_importance_title, null, channelArgs, null, R.string.notification_importance_title, null,
false, getMetricsCategory()); false, getMetricsCategory());
mImportance.setIntent(channelIntent); mImportance.setIntent(channelIntent);
mImportance.setEnabled(mSuspendedAppsAdmin == null); }
mImportance.setSummary(getImportanceSummary(mChannel.getImportance())); mImportance.setSummary(getImportanceSummary(mChannel.getImportance()));
} }

View File

@@ -293,6 +293,8 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen
private void setupImportanceToggle() { private void setupImportanceToggle() {
mImportanceToggle = (RestrictedSwitchPreference) findPreference(KEY_ALLOW_SOUND); mImportanceToggle = (RestrictedSwitchPreference) findPreference(KEY_ALLOW_SOUND);
mImportanceToggle.setDisabledByAdmin(mSuspendedAppsAdmin); mImportanceToggle.setDisabledByAdmin(mSuspendedAppsAdmin);
mImportanceToggle.setEnabled(!(mAppRow.lockedImportance
|| mImportanceToggle.isDisabledByAdmin()));
mImportanceToggle.setChecked(mChannel.getImportance() >= IMPORTANCE_DEFAULT mImportanceToggle.setChecked(mChannel.getImportance() >= IMPORTANCE_DEFAULT
|| mChannel.getImportance() == IMPORTANCE_UNSPECIFIED); || mChannel.getImportance() == IMPORTANCE_UNSPECIFIED);
mImportanceToggle.setOnPreferenceChangeListener( mImportanceToggle.setOnPreferenceChangeListener(
@@ -313,6 +315,7 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen
protected void setupPriorityPref(boolean priority) { protected void setupPriorityPref(boolean priority) {
mPriority = (RestrictedSwitchPreference) findPreference(KEY_BYPASS_DND); mPriority = (RestrictedSwitchPreference) findPreference(KEY_BYPASS_DND);
mPriority.setDisabledByAdmin(mSuspendedAppsAdmin); mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
mPriority.setEnabled(!(mAppRow.lockedImportance || mPriority.isDisabledByAdmin()));
mPriority.setChecked(priority); mPriority.setChecked(priority);
mPriority.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { mPriority.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override @Override