Loading packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/compose/PreShareToolbar.kt +10 −6 Original line number Diff line number Diff line Loading @@ -27,13 +27,13 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.res.R import com.android.systemui.screencapture.common.shared.model.ScreenCaptureTarget import com.android.systemui.screencapture.common.ui.compose.PrimaryButton import com.android.systemui.screencapture.common.ui.compose.RadioButtonGroup import com.android.systemui.screencapture.common.ui.compose.RadioButtonGroupItem import com.android.systemui.screencapture.common.ui.compose.Toolbar import com.android.systemui.screencapture.common.ui.compose.loadIcon import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.PreShareToolbarViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.ScreenShareTarget @Composable @OptIn(ExperimentalMaterial3ExpressiveApi::class) Loading Loading @@ -61,16 +61,20 @@ fun PreShareToolbar( RadioButtonGroupItem( icon = tabIcon, isSelected = preShareToolbarViewModel.selectedScreenShareTarget == ScreenShareTarget.TAB, onClick = { preShareToolbarViewModel.onTargetSelected(ScreenShareTarget.TAB) }, preShareToolbarViewModel.selectedScreenCaptureTarget is ScreenCaptureTarget.AppContent, onClick = { preShareToolbarViewModel.selectedScreenCaptureTarget = (ScreenCaptureTarget.AppContent(contentId = 0)) }, ), RadioButtonGroupItem( icon = windowIcon, isSelected = preShareToolbarViewModel.selectedScreenShareTarget == ScreenShareTarget.APP_WINDOW, preShareToolbarViewModel.selectedScreenCaptureTarget is ScreenCaptureTarget.App, onClick = { preShareToolbarViewModel.onTargetSelected(ScreenShareTarget.APP_WINDOW) preShareToolbarViewModel.selectedScreenCaptureTarget = (ScreenCaptureTarget.App(displayId = 0, taskId = 0)) }, ), ) Loading packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/viewmodel/PreShareToolbarViewModel.kt +5 −17 Original line number Diff line number Diff line Loading @@ -17,20 +17,16 @@ package com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import com.android.systemui.lifecycle.HydratedActivatable import com.android.systemui.screencapture.common.shared.model.ScreenCaptureTarget import com.android.systemui.screencapture.common.shared.model.ScreenCaptureType import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModel import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModelImpl import com.android.systemui.screencapture.domain.interactor.ScreenCaptureUiInteractor import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import kotlinx.coroutines.flow.MutableStateFlow // TODO(b/423708493): Add FULLSCREEN Sharing target. enum class ScreenShareTarget { APP_WINDOW, TAB, } /** Models UI state for the Screen Share feature. */ class PreShareToolbarViewModel Loading @@ -39,16 +35,8 @@ constructor( private val drawableLoaderViewModelImpl: DrawableLoaderViewModelImpl, private val screenCaptureUiInteractor: ScreenCaptureUiInteractor, ) : HydratedActivatable(), DrawableLoaderViewModel by drawableLoaderViewModelImpl { // The private, mutable source of truth for the selected target. private val selectedScreenShareTargetSource = MutableStateFlow(ScreenShareTarget.APP_WINDOW) val selectedScreenShareTarget by selectedScreenShareTargetSource.hydratedStateOf(traceName = "selectedScreenShareTarget") // Called by the UI when a new sharing target is selected by the user. fun onTargetSelected(target: ScreenShareTarget) { selectedScreenShareTargetSource.value = target } var selectedScreenCaptureTarget: ScreenCaptureTarget by mutableStateOf(ScreenCaptureTarget.AppContent(contentId = 0)) fun onCloseClicked() { screenCaptureUiInteractor.hide(ScreenCaptureType.SHARE_SCREEN) Loading packages/SystemUI/tests/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/viewmodel/PreShareToolbarViewModelTest.kt +5 −11 Original line number Diff line number Diff line Loading @@ -22,12 +22,12 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.kosmos.collectLastValue import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn import com.android.systemui.screencapture.common.shared.model.ScreenCaptureTarget import com.android.systemui.screencapture.common.shared.model.ScreenCaptureType import com.android.systemui.screencapture.common.shared.model.ScreenCaptureUiState import com.android.systemui.screencapture.data.repository.screenCaptureUiRepository import com.android.systemui.testKosmos import com.android.systemui.testKosmosNew import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test Loading @@ -36,7 +36,7 @@ import org.junit.runner.RunWith @SmallTest @RunWith(AndroidJUnit4::class) class PreShareToolbarViewModelTest : SysuiTestCase() { private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val kosmos = testKosmosNew() private val viewModel: PreShareToolbarViewModel by lazy { kosmos.preShareToolbarViewModel } Loading @@ -49,14 +49,8 @@ class PreShareToolbarViewModelTest : SysuiTestCase() { fun initialState() = kosmos.runTest { // Assert that the initial values are as expected upon creation and activation. assertThat(viewModel.selectedScreenShareTarget).isEqualTo(ScreenShareTarget.APP_WINDOW) } @Test fun onTargetSelected_updateScreenShareTarget() = kosmos.runTest { viewModel.onTargetSelected(ScreenShareTarget.TAB) assertThat(viewModel.selectedScreenShareTarget).isEqualTo(ScreenShareTarget.TAB) assertThat(viewModel.selectedScreenCaptureTarget) .isEqualTo(ScreenCaptureTarget.AppContent(contentId = 0)) } @Test Loading Loading
packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/compose/PreShareToolbar.kt +10 −6 Original line number Diff line number Diff line Loading @@ -27,13 +27,13 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.res.R import com.android.systemui.screencapture.common.shared.model.ScreenCaptureTarget import com.android.systemui.screencapture.common.ui.compose.PrimaryButton import com.android.systemui.screencapture.common.ui.compose.RadioButtonGroup import com.android.systemui.screencapture.common.ui.compose.RadioButtonGroupItem import com.android.systemui.screencapture.common.ui.compose.Toolbar import com.android.systemui.screencapture.common.ui.compose.loadIcon import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.PreShareToolbarViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.ScreenShareTarget @Composable @OptIn(ExperimentalMaterial3ExpressiveApi::class) Loading Loading @@ -61,16 +61,20 @@ fun PreShareToolbar( RadioButtonGroupItem( icon = tabIcon, isSelected = preShareToolbarViewModel.selectedScreenShareTarget == ScreenShareTarget.TAB, onClick = { preShareToolbarViewModel.onTargetSelected(ScreenShareTarget.TAB) }, preShareToolbarViewModel.selectedScreenCaptureTarget is ScreenCaptureTarget.AppContent, onClick = { preShareToolbarViewModel.selectedScreenCaptureTarget = (ScreenCaptureTarget.AppContent(contentId = 0)) }, ), RadioButtonGroupItem( icon = windowIcon, isSelected = preShareToolbarViewModel.selectedScreenShareTarget == ScreenShareTarget.APP_WINDOW, preShareToolbarViewModel.selectedScreenCaptureTarget is ScreenCaptureTarget.App, onClick = { preShareToolbarViewModel.onTargetSelected(ScreenShareTarget.APP_WINDOW) preShareToolbarViewModel.selectedScreenCaptureTarget = (ScreenCaptureTarget.App(displayId = 0, taskId = 0)) }, ), ) Loading
packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/viewmodel/PreShareToolbarViewModel.kt +5 −17 Original line number Diff line number Diff line Loading @@ -17,20 +17,16 @@ package com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import com.android.systemui.lifecycle.HydratedActivatable import com.android.systemui.screencapture.common.shared.model.ScreenCaptureTarget import com.android.systemui.screencapture.common.shared.model.ScreenCaptureType import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModel import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModelImpl import com.android.systemui.screencapture.domain.interactor.ScreenCaptureUiInteractor import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import kotlinx.coroutines.flow.MutableStateFlow // TODO(b/423708493): Add FULLSCREEN Sharing target. enum class ScreenShareTarget { APP_WINDOW, TAB, } /** Models UI state for the Screen Share feature. */ class PreShareToolbarViewModel Loading @@ -39,16 +35,8 @@ constructor( private val drawableLoaderViewModelImpl: DrawableLoaderViewModelImpl, private val screenCaptureUiInteractor: ScreenCaptureUiInteractor, ) : HydratedActivatable(), DrawableLoaderViewModel by drawableLoaderViewModelImpl { // The private, mutable source of truth for the selected target. private val selectedScreenShareTargetSource = MutableStateFlow(ScreenShareTarget.APP_WINDOW) val selectedScreenShareTarget by selectedScreenShareTargetSource.hydratedStateOf(traceName = "selectedScreenShareTarget") // Called by the UI when a new sharing target is selected by the user. fun onTargetSelected(target: ScreenShareTarget) { selectedScreenShareTargetSource.value = target } var selectedScreenCaptureTarget: ScreenCaptureTarget by mutableStateOf(ScreenCaptureTarget.AppContent(contentId = 0)) fun onCloseClicked() { screenCaptureUiInteractor.hide(ScreenCaptureType.SHARE_SCREEN) Loading
packages/SystemUI/tests/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/viewmodel/PreShareToolbarViewModelTest.kt +5 −11 Original line number Diff line number Diff line Loading @@ -22,12 +22,12 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.kosmos.collectLastValue import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn import com.android.systemui.screencapture.common.shared.model.ScreenCaptureTarget import com.android.systemui.screencapture.common.shared.model.ScreenCaptureType import com.android.systemui.screencapture.common.shared.model.ScreenCaptureUiState import com.android.systemui.screencapture.data.repository.screenCaptureUiRepository import com.android.systemui.testKosmos import com.android.systemui.testKosmosNew import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test Loading @@ -36,7 +36,7 @@ import org.junit.runner.RunWith @SmallTest @RunWith(AndroidJUnit4::class) class PreShareToolbarViewModelTest : SysuiTestCase() { private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val kosmos = testKosmosNew() private val viewModel: PreShareToolbarViewModel by lazy { kosmos.preShareToolbarViewModel } Loading @@ -49,14 +49,8 @@ class PreShareToolbarViewModelTest : SysuiTestCase() { fun initialState() = kosmos.runTest { // Assert that the initial values are as expected upon creation and activation. assertThat(viewModel.selectedScreenShareTarget).isEqualTo(ScreenShareTarget.APP_WINDOW) } @Test fun onTargetSelected_updateScreenShareTarget() = kosmos.runTest { viewModel.onTargetSelected(ScreenShareTarget.TAB) assertThat(viewModel.selectedScreenShareTarget).isEqualTo(ScreenShareTarget.TAB) assertThat(viewModel.selectedScreenCaptureTarget) .isEqualTo(ScreenCaptureTarget.AppContent(contentId = 0)) } @Test Loading