Loading packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/compose/LargeScreenCaptureShareScreenContent.kt +5 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import androidx.compose.runtime.Composable import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.screencapture.common.ui.compose.ScreenCaptureContent import com.android.systemui.screencapture.common.ui.viewmodel.RecentTaskViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.AudioSwitchViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.PreShareToolbarViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.ShareContentListViewModel import javax.inject.Inject Loading @@ -30,6 +31,7 @@ constructor( private val preShareToolbarViewModelFactory: PreShareToolbarViewModel.Factory, private val shareContentListViewModelFactory: ShareContentListViewModel.Factory, private val recentTaskViewModelFactory: RecentTaskViewModel.Factory, private val audioSwitchViewModelFactory: AudioSwitchViewModel.Factory, ) : ScreenCaptureContent { @Composable Loading @@ -42,10 +44,13 @@ constructor( rememberViewModel("ShareContentListViewModel") { shareContentListViewModelFactory.create() } val audioSwitchViewModel: AudioSwitchViewModel = rememberViewModel("AudioSwitchViewModel") { audioSwitchViewModelFactory.create() } PreShareUI( preShareToolbarViewModel = preShareToolbarViewModel, shareContentListViewModel = shareContentListViewModel, audioSwitchViewModel = audioSwitchViewModel, recentTaskViewModelFactory = recentTaskViewModelFactory, ) } Loading packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/compose/PreShareUI.kt +3 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.android.systemui.screencapture.common.ui.viewmodel.RecentTaskViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.AudioSwitchViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.PreShareToolbarViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.ShareContentListViewModel Loading @@ -32,6 +33,7 @@ import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.S fun PreShareUI( preShareToolbarViewModel: PreShareToolbarViewModel, shareContentListViewModel: ShareContentListViewModel, audioSwitchViewModel: AudioSwitchViewModel, recentTaskViewModelFactory: RecentTaskViewModel.Factory, ) { Column( Loading @@ -47,6 +49,7 @@ fun PreShareUI( ShareContentSelector( shareContentListViewModel = shareContentListViewModel, recentTaskViewModelFactory = recentTaskViewModelFactory, audioSwitchViewModel = audioSwitchViewModel, ) } } packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/compose/ShareContentSelector.kt +15 −3 Original line number Diff line number Diff line Loading @@ -41,11 +41,13 @@ import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import com.android.systemui.screencapture.common.ui.viewmodel.RecentTaskViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.AudioSwitchViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.ShareContentListViewModel @Composable fun ShareContentSelector( shareContentListViewModel: ShareContentListViewModel, audioSwitchViewModel: AudioSwitchViewModel, recentTaskViewModelFactory: RecentTaskViewModel.Factory, ) { val selectedRecentTaskViewModel = shareContentListViewModel.selectedRecentTaskViewModel Loading @@ -68,7 +70,7 @@ fun ShareContentSelector( ) } DisclaimerText() AudioSwitch() AudioSwitch(audioSwitchViewModel, selectedRecentTaskViewModel) } } } Loading Loading @@ -106,13 +108,23 @@ private fun DisclaimerText() { } @Composable private fun AudioSwitch() { private fun AudioSwitch( audioSwitchViewModel: AudioSwitchViewModel, selectedRecentTaskViewModel: RecentTaskViewModel?, ) { Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.padding(12.dp, 0.dp).fillMaxWidth(), ) { Text(text = "Share audio", style = MaterialTheme.typography.labelMedium) Switch(checked = true, onCheckedChange = {}, modifier = Modifier.height(24.dp)) Switch( checked = audioSwitchViewModel.audioSwitchChecked, onCheckedChange = { audioSwitchViewModel.audioSwitchChecked = !audioSwitchViewModel.audioSwitchChecked }, modifier = Modifier.height(24.dp), enabled = selectedRecentTaskViewModel != null, ) } } packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/viewmodel/AudioSwitchViewModel.kt 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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 dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject class AudioSwitchViewModel @AssistedInject constructor() : HydratedActivatable() { var audioSwitchChecked by mutableStateOf(false) @AssistedFactory interface Factory { fun create(): AudioSwitchViewModel } } packages/SystemUI/tests/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/viewmodel/AudioSwitchViewModelTest.kt 0 → 100644 +50 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.lifecycle.activateIn import com.android.systemui.testKosmosNew import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @SmallTest @RunWith(AndroidJUnit4::class) class AudioSwitchViewModelTest : SysuiTestCase() { private val kosmos = testKosmosNew() private val testScope = kosmos.testScope private val viewModel: AudioSwitchViewModel = kosmos.audioSwitchViewModel @Before fun setUp() { viewModel.activateIn(testScope) } @Test fun initialState() = kosmos.runTest { // Assert that the initial values are as expected upon creation and activation. assertThat(viewModel.audioSwitchChecked).isEqualTo(false) } } Loading
packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/compose/LargeScreenCaptureShareScreenContent.kt +5 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import androidx.compose.runtime.Composable import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.screencapture.common.ui.compose.ScreenCaptureContent import com.android.systemui.screencapture.common.ui.viewmodel.RecentTaskViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.AudioSwitchViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.PreShareToolbarViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.ShareContentListViewModel import javax.inject.Inject Loading @@ -30,6 +31,7 @@ constructor( private val preShareToolbarViewModelFactory: PreShareToolbarViewModel.Factory, private val shareContentListViewModelFactory: ShareContentListViewModel.Factory, private val recentTaskViewModelFactory: RecentTaskViewModel.Factory, private val audioSwitchViewModelFactory: AudioSwitchViewModel.Factory, ) : ScreenCaptureContent { @Composable Loading @@ -42,10 +44,13 @@ constructor( rememberViewModel("ShareContentListViewModel") { shareContentListViewModelFactory.create() } val audioSwitchViewModel: AudioSwitchViewModel = rememberViewModel("AudioSwitchViewModel") { audioSwitchViewModelFactory.create() } PreShareUI( preShareToolbarViewModel = preShareToolbarViewModel, shareContentListViewModel = shareContentListViewModel, audioSwitchViewModel = audioSwitchViewModel, recentTaskViewModelFactory = recentTaskViewModelFactory, ) } Loading
packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/compose/PreShareUI.kt +3 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.android.systemui.screencapture.common.ui.viewmodel.RecentTaskViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.AudioSwitchViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.PreShareToolbarViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.ShareContentListViewModel Loading @@ -32,6 +33,7 @@ import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.S fun PreShareUI( preShareToolbarViewModel: PreShareToolbarViewModel, shareContentListViewModel: ShareContentListViewModel, audioSwitchViewModel: AudioSwitchViewModel, recentTaskViewModelFactory: RecentTaskViewModel.Factory, ) { Column( Loading @@ -47,6 +49,7 @@ fun PreShareUI( ShareContentSelector( shareContentListViewModel = shareContentListViewModel, recentTaskViewModelFactory = recentTaskViewModelFactory, audioSwitchViewModel = audioSwitchViewModel, ) } }
packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/compose/ShareContentSelector.kt +15 −3 Original line number Diff line number Diff line Loading @@ -41,11 +41,13 @@ import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import com.android.systemui.screencapture.common.ui.viewmodel.RecentTaskViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.AudioSwitchViewModel import com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel.ShareContentListViewModel @Composable fun ShareContentSelector( shareContentListViewModel: ShareContentListViewModel, audioSwitchViewModel: AudioSwitchViewModel, recentTaskViewModelFactory: RecentTaskViewModel.Factory, ) { val selectedRecentTaskViewModel = shareContentListViewModel.selectedRecentTaskViewModel Loading @@ -68,7 +70,7 @@ fun ShareContentSelector( ) } DisclaimerText() AudioSwitch() AudioSwitch(audioSwitchViewModel, selectedRecentTaskViewModel) } } } Loading Loading @@ -106,13 +108,23 @@ private fun DisclaimerText() { } @Composable private fun AudioSwitch() { private fun AudioSwitch( audioSwitchViewModel: AudioSwitchViewModel, selectedRecentTaskViewModel: RecentTaskViewModel?, ) { Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.padding(12.dp, 0.dp).fillMaxWidth(), ) { Text(text = "Share audio", style = MaterialTheme.typography.labelMedium) Switch(checked = true, onCheckedChange = {}, modifier = Modifier.height(24.dp)) Switch( checked = audioSwitchViewModel.audioSwitchChecked, onCheckedChange = { audioSwitchViewModel.audioSwitchChecked = !audioSwitchViewModel.audioSwitchChecked }, modifier = Modifier.height(24.dp), enabled = selectedRecentTaskViewModel != null, ) } }
packages/SystemUI/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/viewmodel/AudioSwitchViewModel.kt 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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 dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject class AudioSwitchViewModel @AssistedInject constructor() : HydratedActivatable() { var audioSwitchChecked by mutableStateOf(false) @AssistedFactory interface Factory { fun create(): AudioSwitchViewModel } }
packages/SystemUI/tests/src/com/android/systemui/screencapture/sharescreen/largescreen/ui/viewmodel/AudioSwitchViewModelTest.kt 0 → 100644 +50 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.screencapture.sharescreen.largescreen.ui.viewmodel import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.lifecycle.activateIn import com.android.systemui.testKosmosNew import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @SmallTest @RunWith(AndroidJUnit4::class) class AudioSwitchViewModelTest : SysuiTestCase() { private val kosmos = testKosmosNew() private val testScope = kosmos.testScope private val viewModel: AudioSwitchViewModel = kosmos.audioSwitchViewModel @Before fun setUp() { viewModel.activateIn(testScope) } @Test fun initialState() = kosmos.runTest { // Assert that the initial values are as expected upon creation and activation. assertThat(viewModel.audioSwitchChecked).isEqualTo(false) } }