diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt | 10 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt | 19 |
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, |