From 037653b7d3ed324cee2cc15827f75ba42952afe8 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Thu, 23 Apr 2020 12:53:35 -0400 Subject: [PATCH] Notification history should always be accessed as uid 1000 So the files can be created and read Test: manual Fixes: 154823101 Change-Id: I296ef19463f253daacfb9bdaa81c020c9b8bcfe4 --- .../NotificationHistoryDatabase.java | 4 +++- .../NotificationHistoryManager.java | 22 +++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java b/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java index bfc76df90cf37..e846daf7a2e66 100644 --- a/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java +++ b/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java @@ -108,7 +108,9 @@ public class NotificationHistoryDatabase { public void init() { synchronized (mLock) { try { - mHistoryDir.mkdir(); + if (!mHistoryDir.mkdir()) { + throw new IllegalStateException("could not create history directory"); + } mVersionFile.createNewFile(); } catch (Exception e) { Slog.e(TAG, "could not create needed files", e); diff --git a/services/core/java/com/android/server/notification/NotificationHistoryManager.java b/services/core/java/com/android/server/notification/NotificationHistoryManager.java index f7fb9b71ec874..69a7ce90f1c6e 100644 --- a/services/core/java/com/android/server/notification/NotificationHistoryManager.java +++ b/services/core/java/com/android/server/notification/NotificationHistoryManager.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.pm.UserInfo; import android.database.ContentObserver; import android.net.Uri; +import android.os.Binder; import android.os.Environment; import android.os.Handler; import android.os.UserHandle; @@ -37,6 +38,7 @@ import android.util.SparseBooleanArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.FunctionalUtils; import com.android.server.IoThread; import java.io.File; @@ -198,16 +200,18 @@ public class NotificationHistoryManager { } public void addNotification(@NonNull final HistoricalNotification notification) { - synchronized (mLock) { - final NotificationHistoryDatabase userHistory = - getUserHistoryAndInitializeIfNeededLocked(notification.getUserId()); - if (userHistory == null) { - Slog.w(TAG, "Attempted to add notif for locked/gone/disabled user " - + notification.getUserId()); - return; + Binder.withCleanCallingIdentity(() -> { + synchronized (mLock) { + final NotificationHistoryDatabase userHistory = + getUserHistoryAndInitializeIfNeededLocked(notification.getUserId()); + if (userHistory == null) { + Slog.w(TAG, "Attempted to add notif for locked/gone/disabled user " + + notification.getUserId()); + return; + } + userHistory.addNotification(notification); } - userHistory.addNotification(notification); - } + }); } public @NonNull NotificationHistory readNotificationHistory(@UserIdInt int[] userIds) {