summaryrefslogtreecommitdiff
path: root/services/core/java/com/android/server/notification/SnoozeHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/core/java/com/android/server/notification/SnoozeHelper.java')
-rw-r--r--services/core/java/com/android/server/notification/SnoozeHelper.java29
1 files changed, 22 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java
index 7f265df3f416..ae7d41389f49 100644
--- a/services/core/java/com/android/server/notification/SnoozeHelper.java
+++ b/services/core/java/com/android/server/notification/SnoozeHelper.java
@@ -62,6 +62,9 @@ import java.util.Set;
public class SnoozeHelper {
public static final int XML_SNOOZED_NOTIFICATION_VERSION = 1;
+ // A safe size for strings to be put in persistent storage, to avoid breaking the XML write.
+ static final int MAX_STRING_LENGTH = 1000;
+
protected static final String XML_TAG_NAME = "snoozed-notifications";
private static final String XML_SNOOZED_NOTIFICATION = "notification";
@@ -142,7 +145,7 @@ public class SnoozeHelper {
ArrayMap<String, Long> snoozed =
mPersistedSnoozedNotifications.get(getPkgKey(userId, pkg));
if (snoozed != null) {
- time = snoozed.get(key);
+ time = snoozed.get(getTrimmedString(key));
}
}
if (time == null) {
@@ -156,7 +159,7 @@ public class SnoozeHelper {
ArrayMap<String, String> snoozed =
mPersistedSnoozedNotificationsWithContext.get(getPkgKey(userId, pkg));
if (snoozed != null) {
- return snoozed.get(key);
+ return snoozed.get(getTrimmedString(key));
}
}
return null;
@@ -241,7 +244,8 @@ public class SnoozeHelper {
scheduleRepost(pkg, key, userId, duration);
Long activateAt = System.currentTimeMillis() + duration;
synchronized (mLock) {
- storeRecordLocked(pkg, key, userId, mPersistedSnoozedNotifications, activateAt);
+ storeRecordLocked(pkg, getTrimmedString(key), userId, mPersistedSnoozedNotifications,
+ activateAt);
}
}
@@ -252,8 +256,10 @@ public class SnoozeHelper {
int userId = record.getUser().getIdentifier();
if (contextId != null) {
synchronized (mLock) {
- storeRecordLocked(record.getSbn().getPackageName(), record.getKey(),
- userId, mPersistedSnoozedNotificationsWithContext, contextId);
+ storeRecordLocked(record.getSbn().getPackageName(),
+ getTrimmedString(record.getKey()),
+ userId, mPersistedSnoozedNotificationsWithContext,
+ getTrimmedString(contextId));
}
}
snooze(record);
@@ -270,6 +276,13 @@ public class SnoozeHelper {
}
}
+ private String getTrimmedString(String key) {
+ if (key != null && key.length() > MAX_STRING_LENGTH) {
+ return key.substring(0, MAX_STRING_LENGTH);
+ }
+ return key;
+ }
+
private <T> void storeRecordLocked(String pkg, String key, Integer userId,
ArrayMap<String, ArrayMap<String, T>> targets, T object) {
@@ -374,12 +387,14 @@ public class SnoozeHelper {
}
protected void repost(String key, int userId, boolean muteOnReturn) {
+ final String trimmedKey = getTrimmedString(key);
+
NotificationRecord record;
synchronized (mLock) {
final String pkg = mPackages.remove(key);
mUsers.remove(key);
- removeRecordLocked(pkg, key, userId, mPersistedSnoozedNotifications);
- removeRecordLocked(pkg, key, userId, mPersistedSnoozedNotificationsWithContext);
+ removeRecordLocked(pkg, trimmedKey, userId, mPersistedSnoozedNotifications);
+ removeRecordLocked(pkg, trimmedKey, userId, mPersistedSnoozedNotificationsWithContext);
ArrayMap<String, NotificationRecord> records =
mSnoozedNotifications.get(getPkgKey(userId, pkg));
if (records == null) {