Fix default app notification locking on new devices
- Fresh devices, no restore, create app prefs if app hasn't done
it already
- Apply app level locking to channels created via readxml on restore
Test: atest, factory reset device and verify that default dialer app is
locked without requiring a reboot. restore backup and verify that it's
still locked
Fixes: 127855529
Change-Id: Ieca3e064eb5b5aa5877a4b575bf6223f62259668
diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index 9e16632..627b65c 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -38,6 +38,7 @@
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.Pair;
import android.util.Slog;
import android.util.SparseBooleanArray;
import android.util.proto.ProtoOutputStream;
@@ -236,6 +237,8 @@
} else {
channel.populateFromXml(parser);
}
+ channel.setImportanceLockedByCriticalDeviceFunction(
+ r.defaultAppLockedImportance);
r.channels.put(id, channel);
}
}
@@ -882,7 +885,8 @@
}
}
- public void updateDefaultApps(int userId, ArraySet<String> toRemove, ArraySet<String> toAdd) {
+ public void updateDefaultApps(int userId, ArraySet<String> toRemove,
+ ArraySet<Pair<String, Integer>> toAdd) {
synchronized (mPackagePreferences) {
for (PackagePreferences p : mPackagePreferences.values()) {
if (userId == UserHandle.getUserId(p.uid)) {
@@ -891,11 +895,16 @@
for (NotificationChannel channel : p.channels.values()) {
channel.setImportanceLockedByCriticalDeviceFunction(false);
}
- } else if (toAdd != null && toAdd.contains(p.pkg)) {
- p.defaultAppLockedImportance = true;
- for (NotificationChannel channel : p.channels.values()) {
- channel.setImportanceLockedByCriticalDeviceFunction(true);
- }
+ }
+ }
+ }
+ if (toAdd != null) {
+ for (Pair<String, Integer> approvedApp : toAdd) {
+ PackagePreferences p = getOrCreatePackagePreferencesLocked(approvedApp.first,
+ approvedApp.second);
+ p.defaultAppLockedImportance = true;
+ for (NotificationChannel channel : p.channels.values()) {
+ channel.setImportanceLockedByCriticalDeviceFunction(true);
}
}
}
@@ -1426,8 +1435,22 @@
pw.print(" visibility=");
pw.print(Notification.visibilityToString(r.visibility));
}
- pw.print(" showBadge=");
- pw.print(Boolean.toString(r.showBadge));
+ if (r.showBadge != DEFAULT_SHOW_BADGE) {
+ pw.print(" showBadge=");
+ pw.print(r.showBadge);
+ }
+ if (r.defaultAppLockedImportance != DEFAULT_APP_LOCKED_IMPORTANCE) {
+ pw.print(" defaultAppLocked=");
+ pw.print(r.defaultAppLockedImportance);
+ }
+ if (r.oemLockedImportance != DEFAULT_OEM_LOCKED_IMPORTANCE) {
+ pw.print(" oemLocked=");
+ pw.print(r.oemLockedImportance);
+ }
+ if (!r.futureOemLockedChannels.isEmpty()) {
+ pw.print(" futureLockedChannels=");
+ pw.print(r.futureOemLockedChannels);
+ }
pw.println();
for (NotificationChannel channel : r.channels.values()) {
pw.print(prefix);