summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt19
2 files changed, 26 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt b/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt
index adb288a9ce82..5cc70bc27c2a 100644
--- a/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt
+++ b/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt
@@ -46,7 +46,7 @@ private const val MSG_ADD_RECEIVER = 0
private const val MSG_REMOVE_RECEIVER = 1
private const val MSG_REMOVE_RECEIVER_FOR_USER = 2
private const val TAG = "BroadcastDispatcher"
-private const val DEBUG = false
+private const val DEBUG = true
/**
* SystemUI master Broadcast Dispatcher.
@@ -147,7 +147,13 @@ open class BroadcastDispatcher @Inject constructor (
when (msg.what) {
MSG_ADD_RECEIVER -> {
val data = msg.obj as ReceiverData
- val userId = data.user.identifier
+ // If the receiver asked to be registered under the current user, we register
+ // under the actual current user.
+ val userId = if (data.user.identifier == UserHandle.USER_CURRENT) {
+ context.userId
+ } else {
+ data.user.identifier
+ }
if (userId < UserHandle.USER_ALL) {
if (DEBUG) Log.w(TAG, "Register receiver for invalid user: $userId")
return
diff --git a/packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt
index 2242c1adb1d4..42fbf59fef44 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt
@@ -93,7 +93,7 @@ class BroadcastDispatcherTest : SysuiTestCase() {
// These should be valid filters
`when`(intentFilter.countActions()).thenReturn(1)
`when`(intentFilterOther.countActions()).thenReturn(1)
- `when`(mockContext.user).thenReturn(user0)
+ setUserMock(mockContext, user0)
}
@Test
@@ -140,6 +140,18 @@ class BroadcastDispatcherTest : SysuiTestCase() {
verify(mockUBRUser1, never()).unregisterReceiver(broadcastReceiver)
}
+ @Test
+ fun testRegisterCurrentAsActualUser() {
+ setUserMock(mockContext, user1)
+ broadcastDispatcher.registerReceiver(broadcastReceiver, intentFilter, mockHandler,
+ UserHandle.CURRENT)
+
+ testableLooper.processAllMessages()
+
+ verify(mockUBRUser1).registerReceiver(capture(argumentCaptor))
+ assertSame(broadcastReceiver, argumentCaptor.value.receiver)
+ }
+
@Test(expected = IllegalArgumentException::class)
fun testFilterMustContainActions() {
val testFilter = IntentFilter()
@@ -186,6 +198,11 @@ class BroadcastDispatcherTest : SysuiTestCase() {
broadcastDispatcher.registerReceiver(broadcastReceiver, testFilter)
}
+ private fun setUserMock(mockContext: Context, user: UserHandle) {
+ `when`(mockContext.user).thenReturn(user)
+ `when`(mockContext.userId).thenReturn(user.identifier)
+ }
+
private class TestBroadcastDispatcher(
context: Context,
mainHandler: Handler,