From 996c7c1357fb75120faf1cc41091469dc0e167a6 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 24 May 2019 10:25:33 -0400 Subject: [PATCH] Get rid of unnecessary policy file saves The policy file was being saved twice per mPackageIntentReceiver and most of the time no permanent settings are changed in response to this broadcast. Test: monitor logs after changing app timers for an app Bug: 133131877 Change-Id: I0c89e785aa2421fa499e488fc583ab5db71d6010 --- .../NotificationManagerService.java | 8 +++--- .../notification/PreferencesHelper.java | 25 +++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 7c01d63fca032..1160e33aca258 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -1281,7 +1281,6 @@ public class NotificationManagerService extends SystemService { } mHandler.scheduleOnPackageChanged(removingPackage, changeUserId, pkgList, uidList); - handleSavePolicyFile(); } } }; @@ -6264,12 +6263,15 @@ public class NotificationManagerService extends SystemService { private void handleOnPackageChanged(boolean removingPackage, int changeUserId, String[] pkgList, int[] uidList) { + boolean preferencesChanged = removingPackage; mListeners.onPackagesChanged(removingPackage, pkgList, uidList); mAssistants.onPackagesChanged(removingPackage, pkgList, uidList); mConditionProviders.onPackagesChanged(removingPackage, pkgList, uidList); - mPreferencesHelper.onPackagesChanged( + preferencesChanged |= mPreferencesHelper.onPackagesChanged( removingPackage, changeUserId, pkgList, uidList); - handleSavePolicyFile(); + if (preferencesChanged) { + handleSavePolicyFile(); + } } protected class WorkerHandler extends Handler diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java index 0804a738424a6..9886d0aa6a1c1 100644 --- a/services/core/java/com/android/server/notification/PreferencesHelper.java +++ b/services/core/java/com/android/server/notification/PreferencesHelper.java @@ -334,33 +334,35 @@ public class PreferencesHelper implements RankingConfig { return true; } - private void deleteDefaultChannelIfNeededLocked(PackagePreferences r) throws + private boolean deleteDefaultChannelIfNeededLocked(PackagePreferences r) throws PackageManager.NameNotFoundException { if (!r.channels.containsKey(NotificationChannel.DEFAULT_CHANNEL_ID)) { // Not present - return; + return false; } if (shouldHaveDefaultChannel(r)) { // Keep the default channel until upgraded. - return; + return false; } // Remove Default Channel. r.channels.remove(NotificationChannel.DEFAULT_CHANNEL_ID); + + return true; } - private void createDefaultChannelIfNeededLocked(PackagePreferences r) throws + private boolean createDefaultChannelIfNeededLocked(PackagePreferences r) throws PackageManager.NameNotFoundException { if (r.channels.containsKey(NotificationChannel.DEFAULT_CHANNEL_ID)) { r.channels.get(NotificationChannel.DEFAULT_CHANNEL_ID).setName(mContext.getString( com.android.internal.R.string.default_notification_channel_label)); - return; + return false; } if (!shouldHaveDefaultChannel(r)) { // Keep the default channel until upgraded. - return; + return false; } // Create Default Channel @@ -381,6 +383,8 @@ public class PreferencesHelper implements RankingConfig { channel.lockFields(NotificationChannel.USER_LOCKED_VISIBILITY); } r.channels.put(channel.getId(), channel); + + return true; } public void writeXml(XmlSerializer out, boolean forBackup, int userId) throws IOException { @@ -1687,10 +1691,10 @@ public class PreferencesHelper implements RankingConfig { } } - public void onPackagesChanged(boolean removingPackage, int changeUserId, String[] pkgList, + public boolean onPackagesChanged(boolean removingPackage, int changeUserId, String[] pkgList, int[] uidList) { if (pkgList == null || pkgList.length == 0) { - return; // nothing to do + return false; // nothing to do } boolean updated = false; if (removingPackage) { @@ -1727,8 +1731,8 @@ public class PreferencesHelper implements RankingConfig { PackagePreferences fullPackagePreferences = getPackagePreferencesLocked(pkg, mPm.getPackageUidAsUser(pkg, changeUserId)); if (fullPackagePreferences != null) { - createDefaultChannelIfNeededLocked(fullPackagePreferences); - deleteDefaultChannelIfNeededLocked(fullPackagePreferences); + updated |= createDefaultChannelIfNeededLocked(fullPackagePreferences); + updated |= deleteDefaultChannelIfNeededLocked(fullPackagePreferences); } } } catch (PackageManager.NameNotFoundException e) { @@ -1739,6 +1743,7 @@ public class PreferencesHelper implements RankingConfig { if (updated) { updateConfig(); } + return updated; } public void clearData(String pkg, int uid) {