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

Commit 975c87b5 authored by Danny Wang's avatar Danny Wang
Browse files

Screen Sharing: Replace ScreenShareTarget with ScreenCaptureTarget

Use dummy data 0 to create the target object. Also update the default
target to tab sharing.

BUG: b/443082217 b/442626685
Test: atest SystemUITests:com.android.systemui.screencapture.sharescreen
Flag: com.android.systemui.large_screen_sharing
Change-Id: I4dd0c795b75c0ebc4691a23d3db209246840d22c
parent ff09c42b
Loading
Loading
Loading
Loading
+10 −6
Original line number Original line Diff line number Diff line
@@ -27,13 +27,13 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.dp
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.res.R
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.PrimaryButton
import com.android.systemui.screencapture.common.ui.compose.RadioButtonGroup
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.RadioButtonGroupItem
import com.android.systemui.screencapture.common.ui.compose.Toolbar
import com.android.systemui.screencapture.common.ui.compose.Toolbar
import com.android.systemui.screencapture.common.ui.compose.loadIcon
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.PreShareToolbarViewModel
import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.ScreenShareTarget


@Composable
@Composable
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@@ -61,16 +61,20 @@ fun PreShareToolbar(
            RadioButtonGroupItem(
            RadioButtonGroupItem(
                icon = tabIcon,
                icon = tabIcon,
                isSelected =
                isSelected =
                    preShareToolbarViewModel.selectedScreenShareTarget == ScreenShareTarget.TAB,
                    preShareToolbarViewModel.selectedScreenCaptureTarget
                onClick = { preShareToolbarViewModel.onTargetSelected(ScreenShareTarget.TAB) },
                        is ScreenCaptureTarget.AppContent,
                onClick = {
                    preShareToolbarViewModel.selectedScreenCaptureTarget =
                        (ScreenCaptureTarget.AppContent(contentId = 0))
                },
            ),
            ),
            RadioButtonGroupItem(
            RadioButtonGroupItem(
                icon = windowIcon,
                icon = windowIcon,
                isSelected =
                isSelected =
                    preShareToolbarViewModel.selectedScreenShareTarget ==
                    preShareToolbarViewModel.selectedScreenCaptureTarget is ScreenCaptureTarget.App,
                        ScreenShareTarget.APP_WINDOW,
                onClick = {
                onClick = {
                    preShareToolbarViewModel.onTargetSelected(ScreenShareTarget.APP_WINDOW)
                    preShareToolbarViewModel.selectedScreenCaptureTarget =
                        (ScreenCaptureTarget.App(displayId = 0, taskId = 0))
                },
                },
            ),
            ),
        )
        )
+5 −17
Original line number Original line Diff line number Diff line
@@ -17,20 +17,16 @@
package com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel
package com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel


import androidx.compose.runtime.getValue
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.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.shared.model.ScreenCaptureType
import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModel
import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModel
import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModelImpl
import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModelImpl
import com.android.systemui.screencapture.domain.interactor.ScreenCaptureUiInteractor
import com.android.systemui.screencapture.domain.interactor.ScreenCaptureUiInteractor
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
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. */
/** Models UI state for the Screen Share feature. */
class PreShareToolbarViewModel
class PreShareToolbarViewModel
@@ -39,16 +35,8 @@ constructor(
    private val drawableLoaderViewModelImpl: DrawableLoaderViewModelImpl,
    private val drawableLoaderViewModelImpl: DrawableLoaderViewModelImpl,
    private val screenCaptureUiInteractor: ScreenCaptureUiInteractor,
    private val screenCaptureUiInteractor: ScreenCaptureUiInteractor,
) : HydratedActivatable(), DrawableLoaderViewModel by drawableLoaderViewModelImpl {
) : HydratedActivatable(), DrawableLoaderViewModel by drawableLoaderViewModelImpl {
    // The private, mutable source of truth for the selected target.
    var selectedScreenCaptureTarget: ScreenCaptureTarget by
    private val selectedScreenShareTargetSource = MutableStateFlow(ScreenShareTarget.APP_WINDOW)
        mutableStateOf(ScreenCaptureTarget.AppContent(contentId = 0))

    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
    }


    fun onCloseClicked() {
    fun onCloseClicked() {
        screenCaptureUiInteractor.hide(ScreenCaptureType.SHARE_SCREEN)
        screenCaptureUiInteractor.hide(ScreenCaptureType.SHARE_SCREEN)
+5 −11
Original line number Original line Diff line number Diff line
@@ -22,12 +22,12 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.lifecycle.activateIn
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.ScreenCaptureType
import com.android.systemui.screencapture.common.shared.model.ScreenCaptureUiState
import com.android.systemui.screencapture.common.shared.model.ScreenCaptureUiState
import com.android.systemui.screencapture.data.repository.screenCaptureUiRepository
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 com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Before
import org.junit.Test
import org.junit.Test
@@ -36,7 +36,7 @@ import org.junit.runner.RunWith
@SmallTest
@SmallTest
@RunWith(AndroidJUnit4::class)
@RunWith(AndroidJUnit4::class)
class PreShareToolbarViewModelTest : SysuiTestCase() {
class PreShareToolbarViewModelTest : SysuiTestCase() {
    private val kosmos = testKosmos().useUnconfinedTestDispatcher()
    private val kosmos = testKosmosNew()


    private val viewModel: PreShareToolbarViewModel by lazy { kosmos.preShareToolbarViewModel }
    private val viewModel: PreShareToolbarViewModel by lazy { kosmos.preShareToolbarViewModel }


@@ -49,14 +49,8 @@ class PreShareToolbarViewModelTest : SysuiTestCase() {
    fun initialState() =
    fun initialState() =
        kosmos.runTest {
        kosmos.runTest {
            // Assert that the initial values are as expected upon creation and activation.
            // Assert that the initial values are as expected upon creation and activation.
            assertThat(viewModel.selectedScreenShareTarget).isEqualTo(ScreenShareTarget.APP_WINDOW)
            assertThat(viewModel.selectedScreenCaptureTarget)
        }
                .isEqualTo(ScreenCaptureTarget.AppContent(contentId = 0))

    @Test
    fun onTargetSelected_updateScreenShareTarget() =
        kosmos.runTest {
            viewModel.onTargetSelected(ScreenShareTarget.TAB)
            assertThat(viewModel.selectedScreenShareTarget).isEqualTo(ScreenShareTarget.TAB)
        }
        }


    @Test
    @Test