<lambda>null1 package com.android.systemui.settings
2
3 import android.app.IActivityManager
4 import android.content.Context
5 import android.content.Intent
6 import android.content.pm.UserInfo
7 import android.os.Handler
8 import android.os.UserHandle
9 import android.os.UserManager
10 import androidx.concurrent.futures.DirectExecutor
11 import androidx.test.filters.SmallTest
12 import com.android.systemui.SysuiTestCase
13 import com.android.systemui.dump.DumpManager
14 import com.android.systemui.flags.FakeFeatureFlagsClassic
15 import com.android.systemui.util.mockito.any
16 import com.android.systemui.util.mockito.capture
17 import com.google.common.truth.Truth.assertThat
18 import java.util.concurrent.Executor
19 import kotlinx.coroutines.test.StandardTestDispatcher
20 import kotlinx.coroutines.test.runTest
21 import org.junit.Before
22 import org.junit.Test
23 import org.junit.runner.RunWith
24 import org.junit.runners.Parameterized
25 import org.mockito.ArgumentCaptor
26 import org.mockito.ArgumentMatchers
27 import org.mockito.ArgumentMatchers.anyInt
28 import org.mockito.Captor
29 import org.mockito.Mock
30 import org.mockito.Mockito.times
31 import org.mockito.Mockito.verify
32 import org.mockito.Mockito.`when`
33 import org.mockito.MockitoAnnotations
34
35 @SmallTest
36 @RunWith(Parameterized::class)
37 class UserTrackerImplReceiveTest : SysuiTestCase() {
38
39 companion object {
40
41 @JvmStatic
42 @Parameterized.Parameters
43 fun data(): Iterable<String> =
44 listOf(
45 Intent.ACTION_LOCALE_CHANGED,
46 Intent.ACTION_USER_INFO_CHANGED,
47 Intent.ACTION_MANAGED_PROFILE_AVAILABLE,
48 Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE,
49 Intent.ACTION_MANAGED_PROFILE_ADDED,
50 Intent.ACTION_MANAGED_PROFILE_REMOVED,
51 Intent.ACTION_MANAGED_PROFILE_UNLOCKED
52 )
53 }
54
55 private val executor: Executor = DirectExecutor.INSTANCE
56
57 @Mock private lateinit var context: Context
58 @Mock private lateinit var userManager: UserManager
59 @Mock private lateinit var iActivityManager: IActivityManager
60 @Mock(stubOnly = true) private lateinit var dumpManager: DumpManager
61 @Mock(stubOnly = true) private lateinit var handler: Handler
62
63 @Parameterized.Parameter lateinit var intentAction: String
64 @Mock private lateinit var callback: UserTracker.Callback
65 @Captor private lateinit var captor: ArgumentCaptor<List<UserInfo>>
66
67 private val fakeFeatures = FakeFeatureFlagsClassic()
68 private val testDispatcher = StandardTestDispatcher()
69
70 private lateinit var tracker: UserTrackerImpl
71
72 @Before
73 fun setUp() {
74 MockitoAnnotations.initMocks(this)
75
76 `when`(context.user).thenReturn(UserHandle.SYSTEM)
77 `when`(context.createContextAsUser(ArgumentMatchers.any(), anyInt())).thenReturn(context)
78 }
79
80 @Test
81 fun callsCallbackAndUpdatesProfilesWhenAnIntentReceived() = runTest {
82 `when`(userManager.getProfiles(anyInt())).thenAnswer { invocation ->
83 val id = invocation.getArgument<Int>(0)
84 val info = UserInfo(id, "", UserInfo.FLAG_FULL)
85 val infoProfile =
86 UserInfo(
87 id + 10,
88 "",
89 "",
90 UserInfo.FLAG_MANAGED_PROFILE,
91 UserManager.USER_TYPE_PROFILE_MANAGED
92 )
93 infoProfile.profileGroupId = id
94 listOf(info, infoProfile)
95 }
96
97 tracker =
98 UserTrackerImpl(
99 context,
100 { fakeFeatures },
101 userManager,
102 iActivityManager,
103 dumpManager,
104 this,
105 testDispatcher,
106 handler
107 )
108 tracker.initialize(0)
109 tracker.addCallback(callback, executor)
110 val profileID = tracker.userId + 10
111
112 tracker.onReceive(context, Intent(intentAction))
113
114 verify(callback, times(0)).onUserChanged(anyInt(), any())
115 verify(callback, times(1)).onProfilesChanged(capture(captor))
116 assertThat(captor.value.map { it.id }).containsExactly(0, profileID)
117 }
118 }
119