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

Commit 1f4bce7d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix newlyConnectedKeyboard" into main

parents 00c0e676 c96a4bb7
Loading
Loading
Loading
Loading
+8 −17
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.inputdevice.data.repository.InputDeviceRepository
import com.android.systemui.inputdevice.data.repository.InputDeviceRepository.DeviceAdded
import com.android.systemui.inputdevice.data.repository.InputDeviceRepository.DeviceChange
import com.android.systemui.inputdevice.data.repository.InputDeviceRepository.DeviceRemoved
import com.android.systemui.inputdevice.data.repository.InputDeviceRepository.FreshStart
import com.android.systemui.keyboard.data.model.Keyboard
@@ -78,24 +77,16 @@ constructor(
    inputDeviceRepository: InputDeviceRepository
) : KeyboardRepository {

    private val keyboardsChange: Flow<Pair<Collection<Int>, DeviceChange>> =
        inputDeviceRepository.deviceChange
            .map { (ids, change) -> ids.filter { id -> isPhysicalFullKeyboard(id) } to change }
            .filter { (_, change) ->
                when (change) {
                    FreshStart -> true
                    is DeviceAdded -> isPhysicalFullKeyboard(change.deviceId)
                    is DeviceRemoved -> isPhysicalFullKeyboard(change.deviceId)
                }
            }

    @FlowPreview
    override val newlyConnectedKeyboard: Flow<Keyboard> =
        keyboardsChange
        inputDeviceRepository.deviceChange
            .flatMapConcat { (devices, operation) ->
                when (operation) {
                    FreshStart -> devices.asFlow()
                    is DeviceAdded -> flowOf(operation.deviceId)
                    FreshStart -> devices.filter { id -> isPhysicalFullKeyboard(id) }.asFlow()
                    is DeviceAdded -> {
                        if (isPhysicalFullKeyboard(operation.deviceId)) flowOf(operation.deviceId)
                        else emptyFlow()
                    }
                    is DeviceRemoved -> emptyFlow()
                }
            }
@@ -103,8 +94,8 @@ constructor(
            .flowOn(backgroundDispatcher)

    override val isAnyKeyboardConnected: Flow<Boolean> =
        keyboardsChange
            .map { (devices, _) -> devices.isNotEmpty() }
        inputDeviceRepository.deviceChange
            .map { (ids, _) -> ids.any { id -> isPhysicalFullKeyboard(id) } }
            .distinctUntilChanged()
            .flowOn(backgroundDispatcher)