Prevent displaying duplicated guest notifications.
Bug: 333677801
Test: atest GuestUserInteractorTest#registersBroadcastReceiversOnlyForSystemUser
Test: Manually switch to guest user while at least one secondary user
was running either in background or foreground,
and verify there are no duplicated notifications.
Flag: None
Change-Id: I4ea487bb6dbcfec136c7c8dda77d0b3cde345164
diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/GuestUserInteractor.kt b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/GuestUserInteractor.kt
index bfed0c4..0a1724c 100644
--- a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/GuestUserInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/GuestUserInteractor.kt
@@ -70,8 +70,10 @@
val isGuestUserResetting: Boolean = repository.isGuestUserResetting
init {
- resumeSessionReceiver.register()
- resetOrExitSessionReceiver.register()
+ if (applicationContext.userId == UserHandle.USER_SYSTEM) {
+ resumeSessionReceiver.register()
+ resetOrExitSessionReceiver.register()
+ }
}
/** Notifies that the device has finished booting. */
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt
index 948670f..01795e9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt
@@ -18,6 +18,7 @@
package com.android.systemui.user.domain.interactor
import android.app.admin.DevicePolicyManager
+import android.content.Context
import android.content.pm.UserInfo
import android.os.UserHandle
import android.os.UserManager
@@ -59,6 +60,7 @@
@Mock private lateinit var switchUser: (Int) -> Unit
@Mock private lateinit var resumeSessionReceiver: GuestResumeSessionReceiver
@Mock private lateinit var resetOrExitSessionReceiver: GuestResetOrExitSessionReceiver
+ @Mock private lateinit var otherContext: Context
private lateinit var underTest: GuestUserInteractor
@@ -74,28 +76,30 @@
repository = FakeUserRepository()
repository.setUserInfos(ALL_USERS)
- underTest =
- GuestUserInteractor(
- applicationContext = context,
- applicationScope = scope,
- mainDispatcher = IMMEDIATE,
- backgroundDispatcher = IMMEDIATE,
- manager = manager,
- repository = repository,
- deviceProvisionedController = deviceProvisionedController,
- devicePolicyManager = devicePolicyManager,
- refreshUsersScheduler =
- RefreshUsersScheduler(
- applicationScope = scope,
- mainDispatcher = IMMEDIATE,
- repository = repository,
- ),
- uiEventLogger = uiEventLogger,
- resumeSessionReceiver = resumeSessionReceiver,
- resetOrExitSessionReceiver = resetOrExitSessionReceiver,
- )
+ underTest = initGuestUserInteractor(context)
}
+ private fun initGuestUserInteractor(context: Context) =
+ GuestUserInteractor(
+ applicationContext = context,
+ applicationScope = scope,
+ mainDispatcher = IMMEDIATE,
+ backgroundDispatcher = IMMEDIATE,
+ manager = manager,
+ repository = repository,
+ deviceProvisionedController = deviceProvisionedController,
+ devicePolicyManager = devicePolicyManager,
+ refreshUsersScheduler =
+ RefreshUsersScheduler(
+ applicationScope = scope,
+ mainDispatcher = IMMEDIATE,
+ repository = repository,
+ ),
+ uiEventLogger = uiEventLogger,
+ resumeSessionReceiver = resumeSessionReceiver,
+ resetOrExitSessionReceiver = resetOrExitSessionReceiver,
+ )
+
@Test
fun registersBroadcastReceivers() {
verify(resumeSessionReceiver).register()
@@ -103,6 +107,16 @@
}
@Test
+ fun registersBroadcastReceiversOnlyForSystemUser() {
+ for (i in 1..5) {
+ whenever(otherContext.userId).thenReturn(UserHandle.MIN_SECONDARY_USER_ID + i)
+ initGuestUserInteractor(otherContext)
+ }
+ verify(resumeSessionReceiver).register()
+ verify(resetOrExitSessionReceiver).register()
+ }
+
+ @Test
fun onDeviceBootCompleted_allowedToAdd_createGuest() =
runBlocking(IMMEDIATE) {
setAllowedToAdd()