diff --git a/services/core/java/com/android/server/notification/InlineReplyUriRecord.java b/services/core/java/com/android/server/notification/InlineReplyUriRecord.java index 76cfb032aaf4b..fa5c09ba0e348 100644 --- a/services/core/java/com/android/server/notification/InlineReplyUriRecord.java +++ b/services/core/java/com/android/server/notification/InlineReplyUriRecord.java @@ -16,9 +16,11 @@ package com.android.server.notification; +import android.app.ActivityManager; import android.net.Uri; import android.os.IBinder; import android.os.UserHandle; +import android.os.UserManager; import android.util.ArraySet; /** @@ -74,7 +76,9 @@ public final class InlineReplyUriRecord { */ public int getUserId() { int userId = mUser.getIdentifier(); - if (userId == UserHandle.USER_ALL) { + if (UserManager.isHeadlessSystemUserMode() && userId == UserHandle.USER_ALL) { + return ActivityManager.getCurrentUser(); + } else if (userId == UserHandle.USER_ALL) { return UserHandle.USER_SYSTEM; } else { return userId; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 70ba2cf17880b..6e63d0397cc5f 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -232,6 +232,7 @@ import java.util.function.Consumer; @RunWithLooper public class NotificationManagerServiceTest extends UiServiceTestCase { private static final String TEST_CHANNEL_ID = "NotificationManagerServiceTestChannelId"; + private static final int UID_HEADLESS = 1000000; private final int mUid = Binder.getCallingUid(); private TestableNotificationManagerService mService; @@ -6739,7 +6740,11 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test public void testGrantInlineReplyUriPermission_recordExists() throws Exception { - NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel, 0); + int userId = UserManager.isHeadlessSystemUserMode() + ? UserHandle.getUserId(UID_HEADLESS) + : USER_SYSTEM; + + NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel, userId); mBinderService.enqueueNotificationWithTag(PKG, PKG, "tag", nr.getSbn().getId(), nr.getSbn().getNotification(), nr.getSbn().getUserId()); waitForIdle(); @@ -6764,7 +6769,11 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test public void testGrantInlineReplyUriPermission_noRecordExists() throws Exception { - NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel, 0); + int userId = UserManager.isHeadlessSystemUserMode() + ? UserHandle.getUserId(UID_HEADLESS) + : USER_SYSTEM; + + NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel, userId); waitForIdle(); // No notifications exist for the given record @@ -6808,7 +6817,9 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { // Target user for the grant is USER_ALL instead of USER_SYSTEM verify(mUgm, times(1)).grantUriPermissionFromOwner(any(), eq(nr.getSbn().getUid()), eq(nr.getSbn().getPackageName()), eq(uri), anyInt(), - anyInt(), eq(UserHandle.USER_SYSTEM)); + anyInt(), UserManager.isHeadlessSystemUserMode() + ? eq(UserHandle.getUserId(UID_HEADLESS)) + : eq(USER_SYSTEM)); } @Test @@ -6851,7 +6862,11 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test public void testClearInlineReplyUriPermission_uriRecordExists() throws Exception { - NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel, 0); + int userId = UserManager.isHeadlessSystemUserMode() + ? UserHandle.getUserId(UID_HEADLESS) + : USER_SYSTEM; + + NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel, userId); reset(mPackageManager); Uri uri1 = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 1); @@ -6913,7 +6928,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { // permissionOwner destroyed for USER_SYSTEM, not USER_ALL verify(mUgmInternal, times(1)).revokeUriPermissionFromOwner( - eq(record.getPermissionOwner()), eq(null), eq(~0), eq(USER_SYSTEM)); + eq(record.getPermissionOwner()), eq(null), eq(~0), + UserManager.isHeadlessSystemUserMode() + ? eq(UserHandle.getUserId(UID_HEADLESS)) + : eq(USER_SYSTEM)); } @Test @@ -7406,6 +7424,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test public void createConversationNotificationChannel() throws Exception { + int userId = UserManager.isHeadlessSystemUserMode() + ? UserHandle.getUserId(UID_HEADLESS) + : USER_SYSTEM; + NotificationChannel original = new NotificationChannel("a", "a", IMPORTANCE_HIGH); original.setAllowBubbles(!original.canBubble()); original.setShowBadge(!original.canShowBadge()); @@ -7424,7 +7446,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { PKG, mUid, orig, "friend"); NotificationChannel friendChannel = mBinderService.getConversationNotificationChannel( - PKG, 0, PKG, original.getId(), false, "friend"); + PKG, userId, PKG, original.getId(), false, "friend"); assertEquals(original.getName(), friendChannel.getName()); assertEquals(original.getId(), friendChannel.getParentChannelId());