diff options
2 files changed, 19 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt b/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt index 5d81d4f3f9ec..9f9c8e910f20 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt @@ -53,6 +53,10 @@ import com.android.compose.modifiers.padding import com.android.compose.theme.PlatformTheme import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.lifecycle.repeatWhenAttached +import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager +import com.android.systemui.media.controls.ui.view.MediaHost +import com.android.systemui.media.dagger.MediaModule.QS_PANEL +import com.android.systemui.media.dagger.MediaModule.QUICK_QS_PANEL import com.android.systemui.plugins.qs.QS import com.android.systemui.plugins.qs.QSContainerController import com.android.systemui.qs.composefragment.viewmodel.QSFragmentComposeViewModel @@ -65,6 +69,7 @@ import com.android.systemui.res.R import com.android.systemui.util.LifecycleFragment import java.util.function.Consumer import javax.inject.Inject +import javax.inject.Named import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow @@ -77,6 +82,8 @@ class QSFragmentCompose @Inject constructor( private val qsFragmentComposeViewModelFactory: QSFragmentComposeViewModel.Factory, + @Named(QUICK_QS_PANEL) private val qqsMediaHost: MediaHost, + @Named(QS_PANEL) private val qsMediaHost: MediaHost, ) : LifecycleFragment(), QS { private val scrollListener = MutableStateFlow<QS.ScrollListener?>(null) @@ -99,6 +106,8 @@ constructor( QSComposeFragment.isUnexpectedlyInLegacyMode() viewModel = qsFragmentComposeViewModelFactory.create(lifecycleScope) + qqsMediaHost.init(MediaHierarchyManager.LOCATION_QQS) + qsMediaHost.init(MediaHierarchyManager.LOCATION_QS) setListenerCollections() } @@ -274,7 +283,7 @@ constructor( ) {} override fun isFullyCollapsed(): Boolean { - return !viewModel.isQSVisible + return viewModel.qsExpansionValue <= 0f } override fun setCollapsedMediaVisibilityChangedListener(listener: Consumer<Boolean>?) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt index 9e109e436226..7d52216a4d2e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt @@ -18,6 +18,7 @@ package com.android.systemui.qs.composefragment.viewmodel import android.content.res.Resources import android.graphics.Rect +import androidx.annotation.FloatRange import androidx.lifecycle.LifecycleCoroutineScope import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor import com.android.systemui.dagger.qualifiers.Main @@ -79,11 +80,17 @@ constructor( _qsVisible.value = value } - private val _qsExpansion = MutableStateFlow(0f) + // This can only be negative if undefined (in which case it will be -1f), else it will be + // in [0, 1]. In some cases, it could be set back to -1f internally to indicate that it's + // different to every value in [0, 1]. + @FloatRange(from = -1.0, to = 1.0) private val _qsExpansion = MutableStateFlow(-1f) var qsExpansionValue: Float get() = _qsExpansion.value set(value) { - _qsExpansion.value = value + if (value < 0f) { + _qsExpansion.value = -1f + } + _qsExpansion.value = value.coerceIn(0f, 1f) } private val _panelFraction = MutableStateFlow(0f) |