Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f81e6ea authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Handle UserHandle.CURRENT in BroadcastDispatcher"

parents 5905bab2 2c9b3b47
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -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
+18 −1
Original line number Diff line number Diff line
@@ -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,