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

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

Merge "Screen Sharing: Replace ScreenShareTarget with ScreenCaptureTarget" into main

parents f1b287da 975c87b5
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -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)
@@ -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))
                },
            ),
        )
+5 −17
Original line number Diff line number Diff line
@@ -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
@@ -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)
+5 −11
Original line number 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.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
@@ -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 }

@@ -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