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

Commit 9d84b85a authored by Danny Wang's avatar Danny Wang Committed by Android (Google) Code Review
Browse files

Merge changes I07ebd3e0,I8d132b79 into main

* changes:
  Screen Sharing: Update the screen sharing selector UI
  Screen Sharing: Disable share button when no item is selected
parents c76dbc35 fb8acc99
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -42,6 +42,7 @@ fun PreShareToolbar(
    expanded: Boolean,
    expanded: Boolean,
    onCloseClick: () -> Unit,
    onCloseClick: () -> Unit,
    modifier: Modifier = Modifier,
    modifier: Modifier = Modifier,
    shareButtonEnabled: Boolean,
) {
) {
    val tabIcon by
    val tabIcon by
        loadIcon(
        loadIcon(
@@ -90,6 +91,7 @@ fun PreShareToolbar(
                icon = shareIcon,
                icon = shareIcon,
                text = stringResource(R.string.screen_share_toolbar_share_button),
                text = stringResource(R.string.screen_share_toolbar_share_button),
                onClick = {},
                onClick = {},
                enabled = shareButtonEnabled,
            )
            )
        }
        }
    }
    }
+4 −3
Original line number Original line Diff line number Diff line
@@ -18,7 +18,7 @@ package com.android.systemui.screencapture.sharescreen.largescreen.ui.compose


import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.Modifier
@@ -37,14 +37,15 @@ fun PreShareUI(
    recentTaskViewModelFactory: RecentTaskViewModel.Factory,
    recentTaskViewModelFactory: RecentTaskViewModel.Factory,
) {
) {
    Column(
    Column(
        verticalArrangement = Arrangement.spacedBy(16.dp, Alignment.Top),
        verticalArrangement = Arrangement.spacedBy(16.dp),
        horizontalAlignment = Alignment.CenterHorizontally,
        horizontalAlignment = Alignment.CenterHorizontally,
        modifier = Modifier.size(800.dp, 600.dp),
        modifier = Modifier.width(560.dp),
    ) {
    ) {
        PreShareToolbar(
        PreShareToolbar(
            preShareToolbarViewModel = preShareToolbarViewModel,
            preShareToolbarViewModel = preShareToolbarViewModel,
            expanded = true,
            expanded = true,
            onCloseClick = {},
            onCloseClick = {},
            shareButtonEnabled = shareContentListViewModel.selectedRecentTaskViewModel != null,
        )
        )
        ShareContentSelector(
        ShareContentSelector(
            shareContentListViewModel = shareContentListViewModel,
            shareContentListViewModel = shareContentListViewModel,
+32 −26
Original line number Original line Diff line number Diff line
@@ -19,9 +19,9 @@ package com.android.systemui.screencapture.sharescreen.largescreen.ui.compose
import androidx.compose.foundation.Image
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.size
@@ -61,8 +61,12 @@ fun ShareContentList(
    selectedRecentTaskViewModel: RecentTaskViewModel?,
    selectedRecentTaskViewModel: RecentTaskViewModel?,
) {
) {
    val recentTasks by viewModel.recentTasks.collectAsStateWithLifecycle(initialValue = null)
    val recentTasks by viewModel.recentTasks.collectAsStateWithLifecycle(initialValue = null)

    Surface(
    LazyColumn(modifier = modifier.height(120.dp).width(148.dp)) {
        shape = RoundedCornerShape(20.dp),
        color = MaterialTheme.colorScheme.surfaceBright,
        modifier = modifier.height(224.dp).width(286.dp),
    ) {
        LazyColumn(verticalArrangement = Arrangement.spacedBy(2.dp)) {
            // Use the real list of recent tasks, handling the nullable case.
            // Use the real list of recent tasks, handling the nullable case.
            recentTasks?.let { tasks ->
            recentTasks?.let { tasks ->
                items(items = tasks) { task ->
                items(items = tasks) { task ->
@@ -85,6 +89,7 @@ fun ShareContentList(
            }
            }
        }
        }
    }
    }
}


/**
/**
 * A composable that displays a single item in the share content list.
 * A composable that displays a single item in the share content list.
@@ -105,19 +110,21 @@ private fun SelectorItem(
    val label = currentRecentTaskViewModel.label?.getOrNull()
    val label = currentRecentTaskViewModel.label?.getOrNull()


    Surface(
    Surface(
        shape = RoundedCornerShape(20.dp),
        shape = RoundedCornerShape(4.dp),
        color =
        color =
            if (isSelected) MaterialTheme.colorScheme.primary
            if (isSelected) MaterialTheme.colorScheme.primary
            else MaterialTheme.colorScheme.surfaceContainer,
            else MaterialTheme.colorScheme.surfaceContainer,
        modifier = Modifier.width(148.dp),
    ) {
    ) {
        Row(
        Row(
            modifier = Modifier.padding(12.dp).clickable(onClick = onItemSelected),
            modifier =
                Modifier.padding(start = 8.dp, end = 12.dp, top = 8.dp, bottom = 8.dp)
                    .clickable(onClick = onItemSelected),
            verticalAlignment = Alignment.CenterVertically,
            verticalAlignment = Alignment.CenterVertically,
            horizontalArrangement = Arrangement.spacedBy(12.dp, Alignment.Start),
        ) {
        ) {
            Box(
            Box(
                modifier =
                modifier =
                    Modifier.size(16.dp)
                    Modifier.size(24.dp)
                        .clip(CircleShape)
                        .clip(CircleShape)
                        .background(MaterialTheme.colorScheme.surfaceVariant)
                        .background(MaterialTheme.colorScheme.surfaceVariant)
            ) {
            ) {
@@ -125,7 +132,6 @@ private fun SelectorItem(
                    Image(bitmap = icon.asImageBitmap(), contentDescription = label?.toString())
                    Image(bitmap = icon.asImageBitmap(), contentDescription = label?.toString())
                }
                }
            }
            }
            Spacer(modifier = Modifier.width(8.dp))
            Text(
            Text(
                text = label?.toString() ?: "Title",
                text = label?.toString() ?: "Title",
                style = MaterialTheme.typography.labelMedium,
                style = MaterialTheme.typography.labelMedium,
+21 −13
Original line number Original line Diff line number Diff line
@@ -22,7 +22,6 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.padding
@@ -52,21 +51,31 @@ fun ShareContentSelector(
) {
) {
    val selectedRecentTaskViewModel = shareContentListViewModel.selectedRecentTaskViewModel
    val selectedRecentTaskViewModel = shareContentListViewModel.selectedRecentTaskViewModel


    Surface(color = MaterialTheme.colorScheme.surfaceBright, shape = RoundedCornerShape(28.dp)) {
    Surface(color = MaterialTheme.colorScheme.surfaceBright, shape = RoundedCornerShape(20.dp)) {
        Column(modifier = Modifier.padding(8.dp)) {
        Column(
            Text(text = "Share an app", modifier = Modifier.padding(12.dp, 8.dp).fillMaxWidth())
            modifier =
            Spacer(modifier = Modifier.height(16.dp))
                Modifier.width(560.dp)
            Row(modifier = Modifier.padding(8.dp)) {
                    .padding(start = 10.dp, top = 14.dp, end = 10.dp, bottom = 2.dp),
            verticalArrangement = Arrangement.spacedBy(12.dp),
        ) {
            Text(
                text = "Share an app",
                modifier = Modifier.padding(start = 8.dp, end = 8.dp).height(24.dp).fillMaxWidth(),
                style = MaterialTheme.typography.titleMedium,
            )
            Row(
                horizontalArrangement = Arrangement.spacedBy(16.dp),
                modifier = Modifier.padding(start = 4.dp, end = 4.dp),
            ) {
                // The sharing content item list.
                // The sharing content item list.
                ShareContentList(
                ShareContentList(
                    viewModel = shareContentListViewModel,
                    viewModel = shareContentListViewModel,
                    recentTaskViewModelFactory = recentTaskViewModelFactory,
                    recentTaskViewModelFactory = recentTaskViewModelFactory,
                    selectedRecentTaskViewModel = selectedRecentTaskViewModel,
                    selectedRecentTaskViewModel = selectedRecentTaskViewModel,
                )
                )
                Spacer(modifier = Modifier.width(10.dp))
                ItemPreview(
                ItemPreview(
                    preview = selectedRecentTaskViewModel?.thumbnail?.getOrNull()?.asImageBitmap(),
                    preview = selectedRecentTaskViewModel?.thumbnail?.getOrNull()?.asImageBitmap(),
                    modifier = Modifier.weight(1f).height(120.dp),
                    modifier = Modifier.weight(1f).height(140.dp),
                )
                )
            }
            }
            DisclaimerText()
            DisclaimerText()
@@ -80,7 +89,7 @@ private fun ItemPreview(preview: ImageBitmap?, modifier: Modifier = Modifier) {
    Box(
    Box(
        modifier =
        modifier =
            modifier
            modifier
                .clip(RoundedCornerShape(16.dp))
                .clip(RoundedCornerShape(20.dp))
                .background(MaterialTheme.colorScheme.surfaceVariant),
                .background(MaterialTheme.colorScheme.surfaceVariant),
        contentAlignment = Alignment.Center,
        contentAlignment = Alignment.Center,
    ) {
    ) {
@@ -102,8 +111,8 @@ private fun DisclaimerText() {
            "Disclaimer When you’re sharing your entire screen, anything shown on your screen" +
            "Disclaimer When you’re sharing your entire screen, anything shown on your screen" +
                " is recorded. So be careful with things like passwords, payment details," +
                " is recorded. So be careful with things like passwords, payment details," +
                " messages, photos, and audio & video.",
                " messages, photos, and audio & video.",
        style = MaterialTheme.typography.bodySmall,
        style = MaterialTheme.typography.labelMedium,
        modifier = Modifier.padding(12.dp, 8.dp).fillMaxWidth(),
        modifier = Modifier.padding(start = 8.dp, end = 8.dp).fillMaxWidth(),
    )
    )
}
}


@@ -115,7 +124,7 @@ private fun AudioSwitch(
    Row(
    Row(
        verticalAlignment = Alignment.CenterVertically,
        verticalAlignment = Alignment.CenterVertically,
        horizontalArrangement = Arrangement.SpaceBetween,
        horizontalArrangement = Arrangement.SpaceBetween,
        modifier = Modifier.padding(12.dp, 0.dp).fillMaxWidth(),
        modifier = Modifier.padding(4.dp, bottom = 12.dp).height(24.dp).fillMaxWidth(),
    ) {
    ) {
        Text(text = "Share audio", style = MaterialTheme.typography.labelMedium)
        Text(text = "Share audio", style = MaterialTheme.typography.labelMedium)
        Switch(
        Switch(
@@ -123,7 +132,6 @@ private fun AudioSwitch(
            onCheckedChange = {
            onCheckedChange = {
                audioSwitchViewModel.audioSwitchChecked = !audioSwitchViewModel.audioSwitchChecked
                audioSwitchViewModel.audioSwitchChecked = !audioSwitchViewModel.audioSwitchChecked
            },
            },
            modifier = Modifier.height(24.dp),
            enabled = selectedRecentTaskViewModel != null,
            enabled = selectedRecentTaskViewModel != null,
        )
        )
    }
    }