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

Commit 09b1b6b2 authored by Fabián Kozynski's avatar Fabián Kozynski
Browse files

Hide QQS/QS when quick settings is disabled

This mimics the current behavior of the flag in QSImpl

Test: atest NoQqsWhenQuickSettingsDisabled
Test: atest QSFragmentComposeViewModelTest
Test: atest NoQsWhenQuickSettingsDisabled
Test: manual
Fixes: 361587414
Flag: com.android.systemui.qs_ui_refactor_compose_fragment

Change-Id: I16c7a01b1dfe03eb5949f272e4edbef6dd538979
parent 32e6cb82
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.qs.composefragment.viewmodel

import android.app.StatusBarManager
import android.content.testableContext
import android.testing.TestableLooper.RunWithLooper
import androidx.lifecycle.Lifecycle
@@ -32,6 +33,8 @@ import com.android.systemui.qs.fgsManagerController
import com.android.systemui.res.R
import com.android.systemui.shade.largeScreenHeaderHelper
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.disableflags.data.model.DisableFlagsModel
import com.android.systemui.statusbar.disableflags.data.repository.fakeDisableFlagsRepository
import com.android.systemui.statusbar.sysuiStatusBarStateController
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
@@ -178,6 +181,23 @@ class QSFragmentComposeViewModelTest : SysuiTestCase() {
            }
        }

    @Test
    fun qsEnabled_followsRepository() =
        with(kosmos) {
            testScope.testWithinLifecycle {
                val qsEnabled by collectLastValue(underTest.qsEnabled)

                fakeDisableFlagsRepository.disableFlags.value =
                    DisableFlagsModel(disable2 = QS_DISABLE_FLAG)

                assertThat(qsEnabled).isFalse()

                fakeDisableFlagsRepository.disableFlags.value = DisableFlagsModel()

                assertThat(qsEnabled).isTrue()
            }
        }

    private inline fun TestScope.testWithinLifecycle(
        crossinline block: suspend TestScope.() -> TestResult
    ): TestResult {
@@ -186,4 +206,8 @@ class QSFragmentComposeViewModelTest : SysuiTestCase() {
            block().also { lifecycleOwner.setCurrentState(Lifecycle.State.DESTROYED) }
        }
    }

    companion object {
        private const val QS_DISABLE_FLAG = StatusBarManager.DISABLE2_QUICK_SETTINGS
    }
}
+50 −34
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.runtime.Composable
@@ -403,11 +404,15 @@ constructor(
            onDispose { qqsVisible.value = false }
        }
        Column(modifier = Modifier.sysuiResTag("quick_qs_panel")) {
            Box(modifier = Modifier.fillMaxWidth()) {
                val qsEnabled by viewModel.qsEnabled.collectAsStateWithLifecycle()
                if (qsEnabled) {
                    QuickQuickSettings(
                        viewModel = viewModel.containerViewModel.quickQuickSettingsViewModel,
                        modifier =
                            Modifier.onGloballyPositioned { coordinates ->
                            val (leftFromRoot, topFromRoot) = coordinates.positionInRoot().round()
                                    val (leftFromRoot, topFromRoot) =
                                        coordinates.positionInRoot().round()
                                    val (width, height) = coordinates.size
                                    qqsPositionOnRoot.set(
                                        leftFromRoot,
@@ -420,13 +425,19 @@ constructor(
                                    val placeable = measurable.measure(constraints)
                                    qqsHeight.value = placeable.height

                            layout(placeable.width, placeable.height) { placeable.place(0, 0) }
                                    layout(placeable.width, placeable.height) {
                                        placeable.place(0, 0)
                                    }
                                }
                                .padding(top = { qqsPadding })
                                .collapseExpandSemanticAction(
                            stringResource(id = R.string.accessibility_quick_settings_expand)
                                    stringResource(
                                        id = R.string.accessibility_quick_settings_expand
                                    )
                                )
                    )
                }
            }
            Spacer(modifier = Modifier.weight(1f))
        }
    }
@@ -441,9 +452,13 @@ constructor(
                    stringResource(id = R.string.accessibility_quick_settings_collapse)
                )
        ) {
            val qsEnabled by viewModel.qsEnabled.collectAsStateWithLifecycle()
            if (qsEnabled) {
                Box(modifier = Modifier.fillMaxSize().weight(1f)) {
                    Column {
                    Spacer(modifier = Modifier.height { qqsPadding + qsExtraPadding.roundToPx() })
                        Spacer(
                            modifier = Modifier.height { qqsPadding + qsExtraPadding.roundToPx() }
                        )
                        ShadeBody(viewModel = viewModel.containerViewModel)
                    }
                }
@@ -456,6 +471,7 @@ constructor(
                }
            }
        }
    }

    private fun Modifier.collapseExpandSemanticAction(label: String): Modifier {
        return viewModel.collapseExpandAccessibilityAction?.let {
+7 −3
Original line number Diff line number Diff line
@@ -132,13 +132,17 @@ constructor(
            _stackScrollerOverscrolling.value = value
        }

    private val qsDisabled =
    /**
     * Whether QS is enabled by policy. This is normally true, except when it's disabled by some
     * policy. See [DisableFlagsRepository].
     */
    val qsEnabled =
        disableFlagsRepository.disableFlags
            .map { !it.isQuickSettingsEnabled() }
            .map { it.isQuickSettingsEnabled() }
            .stateIn(
                lifecycleScope,
                SharingStarted.WhileSubscribed(),
                !disableFlagsRepository.disableFlags.value.isQuickSettingsEnabled()
                disableFlagsRepository.disableFlags.value.isQuickSettingsEnabled()
            )

    private val _showCollapsedOnKeyguard = MutableStateFlow(false)