Loading packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputActionsInteractor.kt +4 −4 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogTransitionAnimator import com.android.systemui.animation.Expandable import com.android.systemui.media.dialog.MediaOutputDialogManager import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlayback import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlaybackState import com.android.systemui.volume.panel.dagger.scope.VolumePanelScope import javax.inject.Inject Loading @@ -33,10 +33,10 @@ constructor( private val mediaOutputDialogManager: MediaOutputDialogManager, ) { fun onBarClick(sessionWithPlayback: SessionWithPlayback?, expandable: Expandable) { if (sessionWithPlayback?.playback?.isActive == true) { fun onBarClick(sessionWithPlaybackState: SessionWithPlaybackState?, expandable: Expandable) { if (sessionWithPlaybackState?.isPlaybackActive == true) { mediaOutputDialogManager.createAndShowWithController( sessionWithPlayback.session.packageName, sessionWithPlaybackState.session.packageName, false, expandable.dialogController() ) Loading packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt +1 −1 Original line number Diff line number Diff line Loading @@ -94,7 +94,7 @@ constructor( /** Currently connected [MediaDevice]. */ val currentConnectedDevice: Flow<MediaDevice?> = localMediaRepository.flatMapLatest { it.currentConnectedDevice } localMediaRepository.flatMapLatest { it.currentConnectedDevice }.distinctUntilChanged() private suspend fun getApplicationLabel(packageName: String): CharSequence? { return try { Loading packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt→packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlaybackState.kt +2 −4 Original line number Diff line number Diff line Loading @@ -16,9 +16,7 @@ package com.android.systemui.volume.panel.component.mediaoutput.shared.model import android.media.session.PlaybackState data class SessionWithPlayback( data class SessionWithPlaybackState( val session: MediaDeviceSession, val playback: PlaybackState, val isPlaybackActive: Boolean, ) packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt +19 −24 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import com.android.systemui.res.R import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaDeviceSessionInteractor import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaOutputActionsInteractor import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaOutputInteractor import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlayback import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlaybackState import com.android.systemui.volume.panel.dagger.scope.VolumePanelScope import com.android.systemui.volume.panel.shared.model.Result import com.android.systemui.volume.panel.ui.VolumePanelUiEvent Loading @@ -35,10 +35,9 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.stateIn /** Models the UI of the Media Output Volume Panel component. */ Loading @@ -55,20 +54,19 @@ constructor( private val uiEventLogger: UiEventLogger, ) { private val sessionWithPlayback: StateFlow<Result<SessionWithPlayback?>> = private val sessionWithPlaybackState: StateFlow<Result<SessionWithPlaybackState?>> = interactor.defaultActiveMediaSession .flatMapLatest { session -> if (session == null) { flowOf(Result.Data<SessionWithPlayback?>(null)) flowOf(Result.Data<SessionWithPlaybackState?>(null)) } else { mediaDeviceSessionInteractor .playbackState(session) .map { playback -> mediaDeviceSessionInteractor.playbackState(session).mapNotNull { playback -> playback?.let { Result.Data<SessionWithPlayback?>(SessionWithPlayback(session, it)) Result.Data<SessionWithPlaybackState?>( SessionWithPlaybackState(session, playback.isActive()) ) } } .filterNotNull() } } .stateIn( Loading @@ -78,14 +76,14 @@ constructor( ) val connectedDeviceViewModel: StateFlow<ConnectedDeviceViewModel?> = combine(sessionWithPlayback, interactor.currentConnectedDevice) { combine(sessionWithPlaybackState, interactor.currentConnectedDevice) { mediaDeviceSession, currentConnectedDevice -> if (mediaDeviceSession !is Result.Data) { return@combine null } ConnectedDeviceViewModel( if (mediaDeviceSession.data?.playback?.isActive == true) { if (mediaDeviceSession.data?.isPlaybackActive == true) { context.getString( R.string.media_output_label_title, mediaDeviceSession.data.session.appLabel Loading @@ -103,19 +101,16 @@ constructor( ) val deviceIconViewModel: StateFlow<DeviceIconViewModel?> = combine(sessionWithPlayback, interactor.currentConnectedDevice) { combine(sessionWithPlaybackState, interactor.currentConnectedDevice) { mediaDeviceSession, currentConnectedDevice -> if (mediaDeviceSession !is Result.Data) { return@combine null } if (mediaDeviceSession.data?.playback?.isActive == true) { val icon = val icon: Icon = currentConnectedDevice?.icon?.let { Icon.Loaded(it, null) } ?: Icon.Resource( com.android.internal.R.drawable.ic_bt_headphones_a2dp, null ) ?: Icon.Resource(R.drawable.ic_media_home_devices, null) if (mediaDeviceSession.data?.isPlaybackActive == true) { DeviceIconViewModel.IsPlaying( icon = icon, iconColor = Loading @@ -125,7 +120,7 @@ constructor( ) } else { DeviceIconViewModel.IsNotPlaying( icon = Icon.Resource(R.drawable.ic_media_home_devices, null), icon = icon, iconColor = Color.Attribute( com.android.internal.R.attr.materialColorOnSurfaceVariant Loading @@ -143,7 +138,7 @@ constructor( fun onBarClick(expandable: Expandable) { uiEventLogger.log(VolumePanelUiEvent.VOLUME_PANEL_MEDIA_OUTPUT_CLICKED) val result = sessionWithPlayback.value val result = sessionWithPlaybackState.value actionsInteractor.onBarClick((result as? Result.Data)?.data, expandable) } } Loading
packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputActionsInteractor.kt +4 −4 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogTransitionAnimator import com.android.systemui.animation.Expandable import com.android.systemui.media.dialog.MediaOutputDialogManager import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlayback import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlaybackState import com.android.systemui.volume.panel.dagger.scope.VolumePanelScope import javax.inject.Inject Loading @@ -33,10 +33,10 @@ constructor( private val mediaOutputDialogManager: MediaOutputDialogManager, ) { fun onBarClick(sessionWithPlayback: SessionWithPlayback?, expandable: Expandable) { if (sessionWithPlayback?.playback?.isActive == true) { fun onBarClick(sessionWithPlaybackState: SessionWithPlaybackState?, expandable: Expandable) { if (sessionWithPlaybackState?.isPlaybackActive == true) { mediaOutputDialogManager.createAndShowWithController( sessionWithPlayback.session.packageName, sessionWithPlaybackState.session.packageName, false, expandable.dialogController() ) Loading
packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt +1 −1 Original line number Diff line number Diff line Loading @@ -94,7 +94,7 @@ constructor( /** Currently connected [MediaDevice]. */ val currentConnectedDevice: Flow<MediaDevice?> = localMediaRepository.flatMapLatest { it.currentConnectedDevice } localMediaRepository.flatMapLatest { it.currentConnectedDevice }.distinctUntilChanged() private suspend fun getApplicationLabel(packageName: String): CharSequence? { return try { Loading
packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt→packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlaybackState.kt +2 −4 Original line number Diff line number Diff line Loading @@ -16,9 +16,7 @@ package com.android.systemui.volume.panel.component.mediaoutput.shared.model import android.media.session.PlaybackState data class SessionWithPlayback( data class SessionWithPlaybackState( val session: MediaDeviceSession, val playback: PlaybackState, val isPlaybackActive: Boolean, )
packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt +19 −24 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import com.android.systemui.res.R import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaDeviceSessionInteractor import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaOutputActionsInteractor import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaOutputInteractor import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlayback import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlaybackState import com.android.systemui.volume.panel.dagger.scope.VolumePanelScope import com.android.systemui.volume.panel.shared.model.Result import com.android.systemui.volume.panel.ui.VolumePanelUiEvent Loading @@ -35,10 +35,9 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.stateIn /** Models the UI of the Media Output Volume Panel component. */ Loading @@ -55,20 +54,19 @@ constructor( private val uiEventLogger: UiEventLogger, ) { private val sessionWithPlayback: StateFlow<Result<SessionWithPlayback?>> = private val sessionWithPlaybackState: StateFlow<Result<SessionWithPlaybackState?>> = interactor.defaultActiveMediaSession .flatMapLatest { session -> if (session == null) { flowOf(Result.Data<SessionWithPlayback?>(null)) flowOf(Result.Data<SessionWithPlaybackState?>(null)) } else { mediaDeviceSessionInteractor .playbackState(session) .map { playback -> mediaDeviceSessionInteractor.playbackState(session).mapNotNull { playback -> playback?.let { Result.Data<SessionWithPlayback?>(SessionWithPlayback(session, it)) Result.Data<SessionWithPlaybackState?>( SessionWithPlaybackState(session, playback.isActive()) ) } } .filterNotNull() } } .stateIn( Loading @@ -78,14 +76,14 @@ constructor( ) val connectedDeviceViewModel: StateFlow<ConnectedDeviceViewModel?> = combine(sessionWithPlayback, interactor.currentConnectedDevice) { combine(sessionWithPlaybackState, interactor.currentConnectedDevice) { mediaDeviceSession, currentConnectedDevice -> if (mediaDeviceSession !is Result.Data) { return@combine null } ConnectedDeviceViewModel( if (mediaDeviceSession.data?.playback?.isActive == true) { if (mediaDeviceSession.data?.isPlaybackActive == true) { context.getString( R.string.media_output_label_title, mediaDeviceSession.data.session.appLabel Loading @@ -103,19 +101,16 @@ constructor( ) val deviceIconViewModel: StateFlow<DeviceIconViewModel?> = combine(sessionWithPlayback, interactor.currentConnectedDevice) { combine(sessionWithPlaybackState, interactor.currentConnectedDevice) { mediaDeviceSession, currentConnectedDevice -> if (mediaDeviceSession !is Result.Data) { return@combine null } if (mediaDeviceSession.data?.playback?.isActive == true) { val icon = val icon: Icon = currentConnectedDevice?.icon?.let { Icon.Loaded(it, null) } ?: Icon.Resource( com.android.internal.R.drawable.ic_bt_headphones_a2dp, null ) ?: Icon.Resource(R.drawable.ic_media_home_devices, null) if (mediaDeviceSession.data?.isPlaybackActive == true) { DeviceIconViewModel.IsPlaying( icon = icon, iconColor = Loading @@ -125,7 +120,7 @@ constructor( ) } else { DeviceIconViewModel.IsNotPlaying( icon = Icon.Resource(R.drawable.ic_media_home_devices, null), icon = icon, iconColor = Color.Attribute( com.android.internal.R.attr.materialColorOnSurfaceVariant Loading @@ -143,7 +138,7 @@ constructor( fun onBarClick(expandable: Expandable) { uiEventLogger.log(VolumePanelUiEvent.VOLUME_PANEL_MEDIA_OUTPUT_CLICKED) val result = sessionWithPlayback.value val result = sessionWithPlaybackState.value actionsInteractor.onBarClick((result as? Result.Data)?.data, expandable) } }