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

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

Merge "Screen Sharing: Add AudioSwitchViewModel and State" into main

parents 5ffcc19a 6868cc84
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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,
        )
    }
+3 −0
Original line number Diff line number Diff line
@@ -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

@@ -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(
@@ -47,6 +49,7 @@ fun PreShareUI(
        ShareContentSelector(
            shareContentListViewModel = shareContentListViewModel,
            recentTaskViewModelFactory = recentTaskViewModelFactory,
            audioSwitchViewModel = audioSwitchViewModel,
        )
    }
}
+15 −3
Original line number Diff line number Diff line
@@ -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
@@ -68,7 +70,7 @@ fun ShareContentSelector(
                )
            }
            DisclaimerText()
            AudioSwitch()
            AudioSwitch(audioSwitchViewModel, selectedRecentTaskViewModel)
        }
    }
}
@@ -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,
        )
    }
}
+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
    }
}
+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