Merge "AccountManagerService send pkg uid when creating notification channel"
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 5ea2480..43cad5b 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -57,6 +57,7 @@
 
     void createNotificationChannelGroups(String pkg, in ParceledListSlice channelGroupList);
     void createNotificationChannels(String pkg, in ParceledListSlice channelsList);
+    void createNotificationChannelsForPackage(String pkg, int uid, in ParceledListSlice channelsList);
     ParceledListSlice getNotificationChannelGroupsForPackage(String pkg, int uid, boolean includeDeleted);
     NotificationChannelGroup getNotificationChannelGroupForPackage(String groupId, String pkg, int uid);
     void updateNotificationChannelForPackage(String pkg, int uid, in NotificationChannel channel);
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 097df31..75998f2 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -453,19 +453,6 @@
     }
 
     /**
-     * @hide
-     */
-    public void createNotificationChannelsForPackage(String pkg,
-            @NonNull List<NotificationChannel> channels) {
-        INotificationManager service = getService();
-        try {
-            service.createNotificationChannels(pkg, new ParceledListSlice(channels));
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /**
      * Returns the notification channel settings for a given channel id.
      */
     public NotificationChannel getNotificationChannel(String channelId) {
diff --git a/core/java/com/android/internal/notification/SystemNotificationChannels.java b/core/java/com/android/internal/notification/SystemNotificationChannels.java
index c840f26..ef20750 100644
--- a/core/java/com/android/internal/notification/SystemNotificationChannels.java
+++ b/core/java/com/android/internal/notification/SystemNotificationChannels.java
@@ -14,10 +14,13 @@
 
 package com.android.internal.notification;
 
+import android.app.INotificationManager;
 import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.content.Context;
+import android.content.pm.ParceledListSlice;
+import android.os.RemoteException;
 import android.provider.Settings;
 
 import com.android.internal.R;
@@ -69,6 +72,8 @@
                 context.getString(R.string.notification_channel_car_mode),
                 NotificationManager.IMPORTANCE_LOW));
 
+        channelsList.add(newAccountChannel(context));
+
         channelsList.add(new NotificationChannel(
                 DEVELOPER,
                 context.getString(R.string.notification_channel_developer),
@@ -121,15 +126,23 @@
                 NotificationManager.IMPORTANCE_MIN));
 
         nm.createNotificationChannels(channelsList);
-        createAccountChannelForPackage(context.getPackageName(), context);
     }
 
-    public static void createAccountChannelForPackage(String pkg, Context context) {
-        final NotificationManager nm = context.getSystemService(NotificationManager.class);
-        nm.createNotificationChannelsForPackage(pkg, Arrays.asList(new NotificationChannel(
+    public static void createAccountChannelForPackage(String pkg, int uid, Context context) {
+        final INotificationManager iNotificationManager = NotificationManager.getService();
+        try {
+            iNotificationManager.createNotificationChannelsForPackage(pkg, uid,
+                    new ParceledListSlice(Arrays.asList(newAccountChannel(context))));
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    private static NotificationChannel newAccountChannel(Context context) {
+        return new NotificationChannel(
                 ACCOUNT,
                 context.getString(R.string.notification_channel_account),
-                NotificationManager.IMPORTANCE_LOW)));
+                NotificationManager.IMPORTANCE_LOW);
     }
 
     private SystemNotificationChannels() {}
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 490e63d..df292ad 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -5677,7 +5677,7 @@
             synchronized (mUsers) {
                 userAccounts = mUsers.get(userId);
             }
-            SystemNotificationChannels.createAccountChannelForPackage(packageName, mContext);
+            SystemNotificationChannels.createAccountChannelForPackage(packageName, uid, mContext);
             doNotification(userAccounts, account, null, intent, packageName, userId);
         }
 
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 7e10a09..53a4036 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -1633,22 +1633,34 @@
             savePolicyFile();
         }
 
-        @Override
-        public void createNotificationChannels(String pkg,
-                ParceledListSlice channelsList) throws RemoteException {
-            checkCallerIsSystemOrSameApp(pkg);
+        private void createNotificationChannelsImpl(String pkg, int uid,
+                ParceledListSlice channelsList) {
             List<NotificationChannel> channels = channelsList.getList();
             final int channelsSize = channels.size();
             for (int i = 0; i < channelsSize; i++) {
                 final NotificationChannel channel = channels.get(i);
                 Preconditions.checkNotNull(channel, "channel in list is null");
-                mRankingHelper.createNotificationChannel(pkg, Binder.getCallingUid(), channel,
+                mRankingHelper.createNotificationChannel(pkg, uid, channel,
                         true /* fromTargetApp */);
             }
             savePolicyFile();
         }
 
         @Override
+        public void createNotificationChannels(String pkg,
+                ParceledListSlice channelsList) throws RemoteException {
+            checkCallerIsSystemOrSameApp(pkg);
+            createNotificationChannelsImpl(pkg, Binder.getCallingUid(), channelsList);
+        }
+
+        @Override
+        public void createNotificationChannelsForPackage(String pkg, int uid,
+                ParceledListSlice channelsList) throws RemoteException {
+            checkCallerIsSystem();
+            createNotificationChannelsImpl(pkg, uid, channelsList);
+        }
+
+        @Override
         public NotificationChannel getNotificationChannel(String pkg, String channelId) {
             checkCallerIsSystemOrSameApp(pkg);
             return mRankingHelper.getNotificationChannel(