Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt +22 −15 Original line number Original line Diff line number Diff line Loading @@ -18,21 +18,21 @@ package com.android.systemui.qs.ui.composable import androidx.compose.foundation.background import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.layout.layout import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.MovableElementScenePicker import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.TransitionState import com.android.compose.animation.scene.TransitionState import com.android.compose.modifiers.thenIf import com.android.compose.theme.colorAttr import com.android.compose.theme.colorAttr import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.qs.ui.adapter.QSSceneAdapter.State.Companion.Collapsing import com.android.systemui.qs.ui.adapter.QSSceneAdapter.State.Companion.Collapsing Loading @@ -44,9 +44,16 @@ import com.android.systemui.scene.ui.composable.QuickSettings as QuickSettingsSc import com.android.systemui.scene.ui.composable.Shade import com.android.systemui.scene.ui.composable.Shade object QuickSettings { object QuickSettings { private val SCENES = setOf( QuickSettingsSceneKey, Shade, ) object Elements { object Elements { // TODO RENAME // TODO RENAME val Content = ElementKey("QuickSettingsContent") val Content = ElementKey("QuickSettingsContent", scenePicker = MovableElementScenePicker(SCENES)) val CollapsedGrid = ElementKey("QuickSettingsCollapsedGrid") val CollapsedGrid = ElementKey("QuickSettingsCollapsedGrid") val FooterActions = ElementKey("QuickSettingsFooterActions") val FooterActions = ElementKey("QuickSettingsFooterActions") } } Loading Loading @@ -86,14 +93,22 @@ private fun SceneScope.stateForQuickSettingsContent(): QSSceneAdapter.State { */ */ @Composable @Composable fun SceneScope.QuickSettings( fun SceneScope.QuickSettings( modifier: Modifier = Modifier, qsSceneAdapter: QSSceneAdapter, qsSceneAdapter: QSSceneAdapter, heightProvider: () -> Int, modifier: Modifier = Modifier, ) { ) { val contentState = stateForQuickSettingsContent() val contentState = stateForQuickSettingsContent() MovableElement( MovableElement( key = QuickSettings.Elements.Content, key = QuickSettings.Elements.Content, modifier = modifier.fillMaxWidth().defaultMinSize(minHeight = 300.dp) modifier = modifier.fillMaxWidth().layout { measurable, constraints -> val placeable = measurable.measure(constraints) // Use the height of the correct view based on the scene it is being composed in val height = heightProvider() layout(placeable.width, height) { placeable.placeRelative(0, 0) } } ) { ) { content { QuickSettingsContent(qsSceneAdapter = qsSceneAdapter, contentState) } content { QuickSettingsContent(qsSceneAdapter = qsSceneAdapter, contentState) } } } Loading @@ -118,15 +133,7 @@ private fun QuickSettingsContent( qsView?.let { view -> qsView?.let { view -> Box( Box( modifier = modifier = modifier modifier.fillMaxWidth().thenIf(isCustomizing) { Modifier.fillMaxHeight() } .fillMaxWidth() .then( if (isCustomizing) { Modifier.fillMaxHeight() } else { Modifier.wrapContentHeight() } ) ) { ) { AndroidView( AndroidView( modifier = Modifier.fillMaxWidth().background(colorAttr(R.attr.underSurface)), modifier = Modifier.fillMaxWidth().background(colorAttr(R.attr.underSurface)), Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +2 −1 Original line number Original line Diff line number Diff line Loading @@ -213,8 +213,9 @@ private fun SceneScope.QuickSettingsScene( Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp)) // This view has its own horizontal padding // This view has its own horizontal padding QuickSettings( QuickSettings( modifier = Modifier.sysuiResTag("expanded_qs_scroll_view"), viewModel.qsSceneAdapter, viewModel.qsSceneAdapter, { viewModel.qsSceneAdapter.qsHeight }, modifier = Modifier.sysuiResTag("expanded_qs_scroll_view"), ) ) } } } } Loading packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -189,8 +189,8 @@ private fun SceneScope.ShadeScene( ) ) ) ) QuickSettings( QuickSettings( modifier = Modifier.height(130.dp), viewModel.qsSceneAdapter, viewModel.qsSceneAdapter, { viewModel.qsSceneAdapter.qqsHeight }, ) ) if (viewModel.isMediaVisible()) { if (viewModel.isMediaVisible()) { Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -61,7 +61,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { private val sceneInteractor by lazy { kosmos.sceneInteractor } private val sceneInteractor by lazy { kosmos.sceneInteractor } private val mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock()) private val mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock()) private val flags = FakeFeatureFlagsClassic().also { it.set(Flags.NEW_NETWORK_SLICE_UI, false) } private val flags = FakeFeatureFlagsClassic().also { it.set(Flags.NEW_NETWORK_SLICE_UI, false) } private val qsFlexiglassAdapter = FakeQSSceneAdapter { mock() } private val qsFlexiglassAdapter = FakeQSSceneAdapter({ mock() }) private val footerActionsViewModel = mock<FooterActionsViewModel>() private val footerActionsViewModel = mock<FooterActionsViewModel>() private val footerActionsViewModelFactory = private val footerActionsViewModelFactory = mock<FooterActionsViewModel.Factory> { mock<FooterActionsViewModel.Factory> { Loading packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -82,7 +82,7 @@ class ShadeSceneViewModelTest : SysuiTestCase() { scope = testScope.backgroundScope, scope = testScope.backgroundScope, ) ) private val qsFlexiglassAdapter = FakeQSSceneAdapter { mock() } private val qsFlexiglassAdapter = FakeQSSceneAdapter({ mock() }) private lateinit var shadeHeaderViewModel: ShadeHeaderViewModel private lateinit var shadeHeaderViewModel: ShadeHeaderViewModel Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt +22 −15 Original line number Original line Diff line number Diff line Loading @@ -18,21 +18,21 @@ package com.android.systemui.qs.ui.composable import androidx.compose.foundation.background import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.layout.layout import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.MovableElementScenePicker import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.TransitionState import com.android.compose.animation.scene.TransitionState import com.android.compose.modifiers.thenIf import com.android.compose.theme.colorAttr import com.android.compose.theme.colorAttr import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.qs.ui.adapter.QSSceneAdapter.State.Companion.Collapsing import com.android.systemui.qs.ui.adapter.QSSceneAdapter.State.Companion.Collapsing Loading @@ -44,9 +44,16 @@ import com.android.systemui.scene.ui.composable.QuickSettings as QuickSettingsSc import com.android.systemui.scene.ui.composable.Shade import com.android.systemui.scene.ui.composable.Shade object QuickSettings { object QuickSettings { private val SCENES = setOf( QuickSettingsSceneKey, Shade, ) object Elements { object Elements { // TODO RENAME // TODO RENAME val Content = ElementKey("QuickSettingsContent") val Content = ElementKey("QuickSettingsContent", scenePicker = MovableElementScenePicker(SCENES)) val CollapsedGrid = ElementKey("QuickSettingsCollapsedGrid") val CollapsedGrid = ElementKey("QuickSettingsCollapsedGrid") val FooterActions = ElementKey("QuickSettingsFooterActions") val FooterActions = ElementKey("QuickSettingsFooterActions") } } Loading Loading @@ -86,14 +93,22 @@ private fun SceneScope.stateForQuickSettingsContent(): QSSceneAdapter.State { */ */ @Composable @Composable fun SceneScope.QuickSettings( fun SceneScope.QuickSettings( modifier: Modifier = Modifier, qsSceneAdapter: QSSceneAdapter, qsSceneAdapter: QSSceneAdapter, heightProvider: () -> Int, modifier: Modifier = Modifier, ) { ) { val contentState = stateForQuickSettingsContent() val contentState = stateForQuickSettingsContent() MovableElement( MovableElement( key = QuickSettings.Elements.Content, key = QuickSettings.Elements.Content, modifier = modifier.fillMaxWidth().defaultMinSize(minHeight = 300.dp) modifier = modifier.fillMaxWidth().layout { measurable, constraints -> val placeable = measurable.measure(constraints) // Use the height of the correct view based on the scene it is being composed in val height = heightProvider() layout(placeable.width, height) { placeable.placeRelative(0, 0) } } ) { ) { content { QuickSettingsContent(qsSceneAdapter = qsSceneAdapter, contentState) } content { QuickSettingsContent(qsSceneAdapter = qsSceneAdapter, contentState) } } } Loading @@ -118,15 +133,7 @@ private fun QuickSettingsContent( qsView?.let { view -> qsView?.let { view -> Box( Box( modifier = modifier = modifier modifier.fillMaxWidth().thenIf(isCustomizing) { Modifier.fillMaxHeight() } .fillMaxWidth() .then( if (isCustomizing) { Modifier.fillMaxHeight() } else { Modifier.wrapContentHeight() } ) ) { ) { AndroidView( AndroidView( modifier = Modifier.fillMaxWidth().background(colorAttr(R.attr.underSurface)), modifier = Modifier.fillMaxWidth().background(colorAttr(R.attr.underSurface)), Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +2 −1 Original line number Original line Diff line number Diff line Loading @@ -213,8 +213,9 @@ private fun SceneScope.QuickSettingsScene( Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp)) // This view has its own horizontal padding // This view has its own horizontal padding QuickSettings( QuickSettings( modifier = Modifier.sysuiResTag("expanded_qs_scroll_view"), viewModel.qsSceneAdapter, viewModel.qsSceneAdapter, { viewModel.qsSceneAdapter.qsHeight }, modifier = Modifier.sysuiResTag("expanded_qs_scroll_view"), ) ) } } } } Loading
packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -189,8 +189,8 @@ private fun SceneScope.ShadeScene( ) ) ) ) QuickSettings( QuickSettings( modifier = Modifier.height(130.dp), viewModel.qsSceneAdapter, viewModel.qsSceneAdapter, { viewModel.qsSceneAdapter.qqsHeight }, ) ) if (viewModel.isMediaVisible()) { if (viewModel.isMediaVisible()) { Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -61,7 +61,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { private val sceneInteractor by lazy { kosmos.sceneInteractor } private val sceneInteractor by lazy { kosmos.sceneInteractor } private val mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock()) private val mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock()) private val flags = FakeFeatureFlagsClassic().also { it.set(Flags.NEW_NETWORK_SLICE_UI, false) } private val flags = FakeFeatureFlagsClassic().also { it.set(Flags.NEW_NETWORK_SLICE_UI, false) } private val qsFlexiglassAdapter = FakeQSSceneAdapter { mock() } private val qsFlexiglassAdapter = FakeQSSceneAdapter({ mock() }) private val footerActionsViewModel = mock<FooterActionsViewModel>() private val footerActionsViewModel = mock<FooterActionsViewModel>() private val footerActionsViewModelFactory = private val footerActionsViewModelFactory = mock<FooterActionsViewModel.Factory> { mock<FooterActionsViewModel.Factory> { Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -82,7 +82,7 @@ class ShadeSceneViewModelTest : SysuiTestCase() { scope = testScope.backgroundScope, scope = testScope.backgroundScope, ) ) private val qsFlexiglassAdapter = FakeQSSceneAdapter { mock() } private val qsFlexiglassAdapter = FakeQSSceneAdapter({ mock() }) private lateinit var shadeHeaderViewModel: ShadeHeaderViewModel private lateinit var shadeHeaderViewModel: ShadeHeaderViewModel Loading