Merge "Prevent whitelisted apps from blocking and silencing"
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index a451786..d12842c 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -218,7 +218,7 @@
}
private void setupBlock() {
- if (mAppRow.systemApp) {
+ if (mAppRow.systemApp && !mAppRow.banned) {
setVisible(mBlock, false);
} else {
mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
@@ -243,6 +243,9 @@
setVisible(category, !banned);
}
setVisible(mBadge, !banned);
+ if (mAppRow.systemApp && !mAppRow.banned) {
+ setVisible(mBlock, false);
+ }
}
private Comparator<NotificationChannel> mChannelComparator =
diff --git a/src/com/android/settings/notification/ChannelNotificationSettings.java b/src/com/android/settings/notification/ChannelNotificationSettings.java
index 1cb2154..18e00f8 100644
--- a/src/com/android/settings/notification/ChannelNotificationSettings.java
+++ b/src/com/android/settings/notification/ChannelNotificationSettings.java
@@ -134,7 +134,9 @@
}
mLights.setDisabledByAdmin(mSuspendedAppsAdmin);
mVibrate.setDisabledByAdmin(mSuspendedAppsAdmin);
- mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
+ if (mImportance.isEnabled()) {
+ mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
+ }
mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
mVisibilityOverride.setDisabledByAdmin(mSuspendedAppsAdmin);
}
@@ -185,21 +187,26 @@
}
protected void setupBlockAndImportance() {
- mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
- mBlock.setChecked(mChannel.getImportance() == NotificationManager.IMPORTANCE_NONE);
- mBlock.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean value = (Boolean) newValue;
- int importance = value ? IMPORTANCE_NONE : IMPORTANCE_LOW;
- mImportance.setValue(String.valueOf(importance));
- mChannel.setImportance(importance);
- mChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
- mBackend.updateChannel(mPkg, mUid, mChannel);
- updateDependents();
- return true;
- }
- });
+ if (mAppRow.systemApp && mChannel.getImportance() != NotificationManager.IMPORTANCE_NONE) {
+ setVisible(mBlock, false);
+ } else {
+ mBlock.setEnabled(mAppRow.systemApp);
+ mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
+ mBlock.setChecked(mChannel.getImportance() == NotificationManager.IMPORTANCE_NONE);
+ mBlock.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final boolean value = (Boolean) newValue;
+ int importance = value ? IMPORTANCE_NONE : IMPORTANCE_LOW;
+ mImportance.setValue(String.valueOf(importance));
+ mChannel.setImportance(importance);
+ mChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
+ mBackend.updateChannel(mPkg, mUid, mChannel);
+ updateDependents();
+ return true;
+ }
+ });
+ }
mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
mBadge.setEnabled(mAppRow.showBadge);
mBadge.setChecked(mChannel.canShowBadge());
@@ -217,7 +224,8 @@
mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
final int numImportances = IMPORTANCE_HIGH - IMPORTANCE_MIN + 1;
List<String> summaries = new ArrayList<>();
- List<String> values = new ArrayList<>();;
+ List<String> values = new ArrayList<>();
+ ;
for (int i = 0; i < numImportances; i++) {
int importance = i + 1;
summaries.add(getImportanceSummary(importance));
@@ -232,18 +240,21 @@
mImportance.setEntries(summaries.toArray(new String[0]));
mImportance.setValue(String.valueOf(mChannel.getImportance()));
mImportance.setSummary("%s");
-
- mImportance.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- int importance = Integer.parseInt((String) newValue);
- mChannel.setImportance(importance);
- mChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
- mBackend.updateChannel(mPkg, mUid, mChannel);
- updateDependents();
- return true;
- }
- });
+ if (mAppRow.lockedImportance) {
+ mImportance.setEnabled(false);
+ } else {
+ mImportance.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ int importance = Integer.parseInt((String) newValue);
+ mChannel.setImportance(importance);
+ mChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
+ mBackend.updateChannel(mPkg, mUid, mChannel);
+ updateDependents();
+ return true;
+ }
+ });
+ }
}
protected void setupPriorityPref(boolean priority) {
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index d201d60..0881eb7 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -64,7 +64,7 @@
int N = nonBlockablePkgs.length;
for (int i = 0; i < N; i++) {
if (app.packageName.equals(nonBlockablePkgs[i])) {
- row.systemApp = true;
+ row.systemApp = row.lockedImportance = true;
}
}
}
@@ -152,6 +152,7 @@
public boolean banned;
public boolean first; // first app in section
public boolean systemApp;
+ public boolean lockedImportance;
public boolean showBadge;
public int userId;
}
diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java
index 38de27e..6a40ea5 100644
--- a/src/com/android/settings/notification/NotificationSettingsBase.java
+++ b/src/com/android/settings/notification/NotificationSettingsBase.java
@@ -148,7 +148,9 @@
}
mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
mContext, mPkg, mUserId);
- mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
+ if (mBlock.isEnabled()) {
+ mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
+ }
mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
}