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

Commit 195728a0 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Fix height of QQS so it's wrap content" into main

parents d6ae4c1a 326b69ef
Loading
Loading
Loading
Loading
+22 −15
Original line number Original line Diff line number Diff line
@@ -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
@@ -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")
    }
    }
@@ -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) }
    }
    }
@@ -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)),
+2 −1
Original line number Original line Diff line number Diff line
@@ -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"),
                    )
                    )
                }
                }
            }
            }
+1 −1
Original line number Original line Diff line number Diff line
@@ -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()) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -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> {
+1 −1
Original line number Original line Diff line number Diff line
@@ -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