Prevent whitelisted apps from blocking and silencing
Change-Id: I34cb5c2c59d56b68ed1500c8c79cd65676c0af25 Fixes: 35841524 Test: manual
This commit is contained in:
@@ -218,7 +218,7 @@ public class AppNotificationSettings extends NotificationSettingsBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setupBlock() {
|
private void setupBlock() {
|
||||||
if (mAppRow.systemApp) {
|
if (mAppRow.systemApp && !mAppRow.banned) {
|
||||||
setVisible(mBlock, false);
|
setVisible(mBlock, false);
|
||||||
} else {
|
} else {
|
||||||
mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
|
mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
@@ -243,6 +243,9 @@ public class AppNotificationSettings extends NotificationSettingsBase {
|
|||||||
setVisible(category, !banned);
|
setVisible(category, !banned);
|
||||||
}
|
}
|
||||||
setVisible(mBadge, !banned);
|
setVisible(mBadge, !banned);
|
||||||
|
if (mAppRow.systemApp && !mAppRow.banned) {
|
||||||
|
setVisible(mBlock, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Comparator<NotificationChannel> mChannelComparator =
|
private Comparator<NotificationChannel> mChannelComparator =
|
||||||
|
@@ -134,7 +134,9 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
|
|||||||
}
|
}
|
||||||
mLights.setDisabledByAdmin(mSuspendedAppsAdmin);
|
mLights.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
mVibrate.setDisabledByAdmin(mSuspendedAppsAdmin);
|
mVibrate.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
|
if (mImportance.isEnabled()) {
|
||||||
|
mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
|
}
|
||||||
mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
|
mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
mVisibilityOverride.setDisabledByAdmin(mSuspendedAppsAdmin);
|
mVisibilityOverride.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
}
|
}
|
||||||
@@ -185,21 +187,26 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void setupBlockAndImportance() {
|
protected void setupBlockAndImportance() {
|
||||||
mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
|
if (mAppRow.systemApp && mChannel.getImportance() != NotificationManager.IMPORTANCE_NONE) {
|
||||||
mBlock.setChecked(mChannel.getImportance() == NotificationManager.IMPORTANCE_NONE);
|
setVisible(mBlock, false);
|
||||||
mBlock.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
} else {
|
||||||
@Override
|
mBlock.setEnabled(mAppRow.systemApp);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
final boolean value = (Boolean) newValue;
|
mBlock.setChecked(mChannel.getImportance() == NotificationManager.IMPORTANCE_NONE);
|
||||||
int importance = value ? IMPORTANCE_NONE : IMPORTANCE_LOW;
|
mBlock.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||||
mImportance.setValue(String.valueOf(importance));
|
@Override
|
||||||
mChannel.setImportance(importance);
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
mChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
|
final boolean value = (Boolean) newValue;
|
||||||
mBackend.updateChannel(mPkg, mUid, mChannel);
|
int importance = value ? IMPORTANCE_NONE : IMPORTANCE_LOW;
|
||||||
updateDependents();
|
mImportance.setValue(String.valueOf(importance));
|
||||||
return true;
|
mChannel.setImportance(importance);
|
||||||
}
|
mChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
|
||||||
});
|
mBackend.updateChannel(mPkg, mUid, mChannel);
|
||||||
|
updateDependents();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
|
mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
mBadge.setEnabled(mAppRow.showBadge);
|
mBadge.setEnabled(mAppRow.showBadge);
|
||||||
mBadge.setChecked(mChannel.canShowBadge());
|
mBadge.setChecked(mChannel.canShowBadge());
|
||||||
@@ -217,7 +224,8 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
|
|||||||
mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
|
mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
final int numImportances = IMPORTANCE_HIGH - IMPORTANCE_MIN + 1;
|
final int numImportances = IMPORTANCE_HIGH - IMPORTANCE_MIN + 1;
|
||||||
List<String> summaries = new ArrayList<>();
|
List<String> summaries = new ArrayList<>();
|
||||||
List<String> values = new ArrayList<>();;
|
List<String> values = new ArrayList<>();
|
||||||
|
;
|
||||||
for (int i = 0; i < numImportances; i++) {
|
for (int i = 0; i < numImportances; i++) {
|
||||||
int importance = i + 1;
|
int importance = i + 1;
|
||||||
summaries.add(getImportanceSummary(importance));
|
summaries.add(getImportanceSummary(importance));
|
||||||
@@ -232,18 +240,21 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
|
|||||||
mImportance.setEntries(summaries.toArray(new String[0]));
|
mImportance.setEntries(summaries.toArray(new String[0]));
|
||||||
mImportance.setValue(String.valueOf(mChannel.getImportance()));
|
mImportance.setValue(String.valueOf(mChannel.getImportance()));
|
||||||
mImportance.setSummary("%s");
|
mImportance.setSummary("%s");
|
||||||
|
if (mAppRow.lockedImportance) {
|
||||||
mImportance.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
mImportance.setEnabled(false);
|
||||||
@Override
|
} else {
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
mImportance.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||||
int importance = Integer.parseInt((String) newValue);
|
@Override
|
||||||
mChannel.setImportance(importance);
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
mChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
|
int importance = Integer.parseInt((String) newValue);
|
||||||
mBackend.updateChannel(mPkg, mUid, mChannel);
|
mChannel.setImportance(importance);
|
||||||
updateDependents();
|
mChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
|
||||||
return true;
|
mBackend.updateChannel(mPkg, mUid, mChannel);
|
||||||
}
|
updateDependents();
|
||||||
});
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setupPriorityPref(boolean priority) {
|
protected void setupPriorityPref(boolean priority) {
|
||||||
|
@@ -64,7 +64,7 @@ public class NotificationBackend {
|
|||||||
int N = nonBlockablePkgs.length;
|
int N = nonBlockablePkgs.length;
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
if (app.packageName.equals(nonBlockablePkgs[i])) {
|
if (app.packageName.equals(nonBlockablePkgs[i])) {
|
||||||
row.systemApp = true;
|
row.systemApp = row.lockedImportance = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -152,6 +152,7 @@ public class NotificationBackend {
|
|||||||
public boolean banned;
|
public boolean banned;
|
||||||
public boolean first; // first app in section
|
public boolean first; // first app in section
|
||||||
public boolean systemApp;
|
public boolean systemApp;
|
||||||
|
public boolean lockedImportance;
|
||||||
public boolean showBadge;
|
public boolean showBadge;
|
||||||
public int userId;
|
public int userId;
|
||||||
}
|
}
|
||||||
|
@@ -148,7 +148,9 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen
|
|||||||
}
|
}
|
||||||
mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
|
mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
|
||||||
mContext, mPkg, mUserId);
|
mContext, mPkg, mUserId);
|
||||||
mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
|
if (mBlock.isEnabled()) {
|
||||||
|
mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
|
}
|
||||||
mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
|
mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user