Merge "Get rid of unnecessary policy file saves" into qt-dev
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 7c01d63..1160e33 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 @@
                 }
 
                 mHandler.scheduleOnPackageChanged(removingPackage, changeUserId, pkgList, uidList);
-                handleSavePolicyFile();
             }
         }
     };
@@ -6264,12 +6263,15 @@
 
     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 0804a73..9886d0a 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 @@
         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 @@
             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 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 @@
                         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 @@
         if (updated) {
             updateConfig();
         }
+        return updated;
     }
 
     public void clearData(String pkg, int uid) {