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

Commit c7552493 authored by Shawn Lee's avatar Shawn Lee Committed by Android (Google) Code Review
Browse files

Merge "[flexiglass] Inflate QS when SceneContainer is composed" into main

parents d853c527 4342a725
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -199,7 +199,7 @@ private fun QuickSettingsContent(
    QuickSettingsTheme {
        val context = LocalContext.current

        LaunchedEffect(key1 = context) {
        LaunchedEffect(context) {
            if (qsView == null) {
                qsSceneAdapter.inflate(context)
            }
+26 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateMapOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@@ -31,6 +32,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.animation.scene.ContentKey
import com.android.compose.animation.scene.MutableSceneTransitionLayoutState
import com.android.compose.animation.scene.OverlayKey
@@ -39,9 +42,13 @@ import com.android.compose.animation.scene.SceneTransitionLayout
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.compose.animation.scene.observableTransitionState
import com.android.systemui.qs.ui.adapter.QSSceneAdapter
import com.android.systemui.qs.ui.composable.QuickSettingsTheme
import com.android.systemui.ribbon.ui.composable.BottomRightCornerRibbon
import com.android.systemui.scene.shared.model.SceneDataSourceDelegator
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel
import javax.inject.Provider
import kotlinx.coroutines.flow.collectLatest

/**
@@ -73,6 +80,7 @@ fun SceneContainer(
    overlayByKey: Map<OverlayKey, Overlay>,
    initialSceneKey: SceneKey,
    dataSourceDelegator: SceneDataSourceDelegator,
    qsSceneAdapter: Provider<QSSceneAdapter>,
    modifier: Modifier = Modifier,
) {
    val coroutineScope = rememberCoroutineScope()
@@ -118,6 +126,24 @@ fun SceneContainer(
        }
    }

    // Inflate qsView here so that shade has the correct qqs height in the first measure pass after
    // rebooting
    if (
        viewModel.allContentKeys.contains(Scenes.QuickSettings) ||
            viewModel.allContentKeys.contains(Scenes.Shade)
    ) {
        val qsAdapter = qsSceneAdapter.get()
        QuickSettingsTheme {
            val context = LocalContext.current
            val qsView by qsAdapter.qsView.collectAsStateWithLifecycle()
            LaunchedEffect(context) {
                if (qsView == null) {
                    qsAdapter.inflate(context)
                }
            }
        }
    }

    Box(
        modifier =
            Modifier.fillMaxSize().pointerInput(Unit) {
+2 −1
Original line number Diff line number Diff line
@@ -255,7 +255,8 @@ public class QSContainerImpl extends FrameLayout implements Dumpable {
     * @return size in pixels of QQS
     */
    public int getQqsHeight() {
        return mHeader.getHeight();
        SceneContainerFlag.assertInNewMode();
        return mHeader.getMeasuredHeight();
    }

    /**
+5 −8
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ import android.view.MotionEvent
import android.view.View
import android.view.WindowInsets
import com.android.systemui.keyguard.ui.viewmodel.AlternateBouncerDependencies
import com.android.systemui.qs.ui.adapter.QSSceneAdapter
import com.android.systemui.scene.shared.model.SceneContainerConfig
import com.android.systemui.scene.shared.model.SceneDataSourceDelegator
import com.android.systemui.scene.ui.composable.Overlay
@@ -13,19 +14,13 @@ import com.android.systemui.scene.ui.composable.Scene
import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel
import com.android.systemui.shade.TouchLogger
import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer
import javax.inject.Provider
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow

/** A root view of the main SysUI window that supports scenes. */
@ExperimentalCoroutinesApi
class SceneWindowRootView(
    context: Context,
    attrs: AttributeSet?,
) :
    WindowRootView(
        context,
        attrs,
    ) {
class SceneWindowRootView(context: Context, attrs: AttributeSet?) : WindowRootView(context, attrs) {

    private var motionEventHandler: SceneContainerViewModel.MotionEventHandler? = null
    // TODO(b/298525212): remove once Compose exposes window inset bounds.
@@ -39,6 +34,7 @@ class SceneWindowRootView(
        overlays: Set<Overlay>,
        layoutInsetController: LayoutInsetsController,
        sceneDataSourceDelegator: SceneDataSourceDelegator,
        qsSceneAdapter: Provider<QSSceneAdapter>,
        alternateBouncerDependencies: AlternateBouncerDependencies,
    ) {
        setLayoutInsetsController(layoutInsetController)
@@ -57,6 +53,7 @@ class SceneWindowRootView(
                super.setVisibility(if (isVisible) View.VISIBLE else View.INVISIBLE)
            },
            dataSourceDelegator = sceneDataSourceDelegator,
            qsSceneAdapter = qsSceneAdapter,
            alternateBouncerDependencies = alternateBouncerDependencies,
        )
    }
+6 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.systemui.lifecycle.WindowLifecycleState
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.lifecycle.setSnapshotBinding
import com.android.systemui.lifecycle.viewModel
import com.android.systemui.qs.ui.adapter.QSSceneAdapter
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.SceneContainerConfig
@@ -51,6 +52,7 @@ import com.android.systemui.scene.ui.composable.Scene
import com.android.systemui.scene.ui.composable.SceneContainer
import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel
import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer
import javax.inject.Provider
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.awaitCancellation
@@ -74,6 +76,7 @@ object SceneWindowRootViewBinder {
        overlays: Set<Overlay>,
        onVisibilityChangedInternal: (isVisible: Boolean) -> Unit,
        dataSourceDelegator: SceneDataSourceDelegator,
        qsSceneAdapter: Provider<QSSceneAdapter>,
        alternateBouncerDependencies: AlternateBouncerDependencies,
    ) {
        val unsortedSceneByKey: Map<SceneKey, Scene> = scenes.associateBy { scene -> scene.key }
@@ -132,6 +135,7 @@ object SceneWindowRootViewBinder {
                                sceneByKey = sortedSceneByKey,
                                overlayByKey = sortedOverlayByKey,
                                dataSourceDelegator = dataSourceDelegator,
                                qsSceneAdapter = qsSceneAdapter,
                                containerConfig = containerConfig,
                            )
                            .also { it.id = R.id.scene_container_root_composable }
@@ -177,6 +181,7 @@ object SceneWindowRootViewBinder {
        sceneByKey: Map<SceneKey, Scene>,
        overlayByKey: Map<OverlayKey, Overlay>,
        dataSourceDelegator: SceneDataSourceDelegator,
        qsSceneAdapter: Provider<QSSceneAdapter>,
        containerConfig: SceneContainerConfig,
    ): View {
        return ComposeView(context).apply {
@@ -192,6 +197,7 @@ object SceneWindowRootViewBinder {
                            overlayByKey = overlayByKey,
                            initialSceneKey = containerConfig.initialSceneKey,
                            dataSourceDelegator = dataSourceDelegator,
                            qsSceneAdapter = qsSceneAdapter,
                        )
                    }
                }
Loading