Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt +1 −1 Original line number Diff line number Diff line Loading @@ -199,7 +199,7 @@ private fun QuickSettingsContent( QuickSettingsTheme { val context = LocalContext.current LaunchedEffect(key1 = context) { LaunchedEffect(context) { if (qsView == null) { qsSceneAdapter.inflate(context) } Loading packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +26 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 /** Loading Loading @@ -73,6 +80,7 @@ fun SceneContainer( overlayByKey: Map<OverlayKey, Overlay>, initialSceneKey: SceneKey, dataSourceDelegator: SceneDataSourceDelegator, qsSceneAdapter: Provider<QSSceneAdapter>, modifier: Modifier = Modifier, ) { val coroutineScope = rememberCoroutineScope() Loading Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -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(); } /** Loading packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootView.kt +5 −8 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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. Loading @@ -39,6 +34,7 @@ class SceneWindowRootView( overlays: Set<Overlay>, layoutInsetController: LayoutInsetsController, sceneDataSourceDelegator: SceneDataSourceDelegator, qsSceneAdapter: Provider<QSSceneAdapter>, alternateBouncerDependencies: AlternateBouncerDependencies, ) { setLayoutInsetsController(layoutInsetController) Loading @@ -57,6 +53,7 @@ class SceneWindowRootView( super.setVisibility(if (isVisible) View.VISIBLE else View.INVISIBLE) }, dataSourceDelegator = sceneDataSourceDelegator, qsSceneAdapter = qsSceneAdapter, alternateBouncerDependencies = alternateBouncerDependencies, ) } Loading packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt +6 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 } Loading Loading @@ -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 } Loading Loading @@ -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 { Loading @@ -192,6 +197,7 @@ object SceneWindowRootViewBinder { overlayByKey = overlayByKey, initialSceneKey = containerConfig.initialSceneKey, dataSourceDelegator = dataSourceDelegator, qsSceneAdapter = qsSceneAdapter, ) } } Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt +1 −1 Original line number Diff line number Diff line Loading @@ -199,7 +199,7 @@ private fun QuickSettingsContent( QuickSettingsTheme { val context = LocalContext.current LaunchedEffect(key1 = context) { LaunchedEffect(context) { if (qsView == null) { qsSceneAdapter.inflate(context) } Loading
packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +26 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 /** Loading Loading @@ -73,6 +80,7 @@ fun SceneContainer( overlayByKey: Map<OverlayKey, Overlay>, initialSceneKey: SceneKey, dataSourceDelegator: SceneDataSourceDelegator, qsSceneAdapter: Provider<QSSceneAdapter>, modifier: Modifier = Modifier, ) { val coroutineScope = rememberCoroutineScope() Loading Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -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(); } /** Loading
packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootView.kt +5 −8 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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. Loading @@ -39,6 +34,7 @@ class SceneWindowRootView( overlays: Set<Overlay>, layoutInsetController: LayoutInsetsController, sceneDataSourceDelegator: SceneDataSourceDelegator, qsSceneAdapter: Provider<QSSceneAdapter>, alternateBouncerDependencies: AlternateBouncerDependencies, ) { setLayoutInsetsController(layoutInsetController) Loading @@ -57,6 +53,7 @@ class SceneWindowRootView( super.setVisibility(if (isVisible) View.VISIBLE else View.INVISIBLE) }, dataSourceDelegator = sceneDataSourceDelegator, qsSceneAdapter = qsSceneAdapter, alternateBouncerDependencies = alternateBouncerDependencies, ) } Loading
packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt +6 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 } Loading Loading @@ -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 } Loading Loading @@ -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 { Loading @@ -192,6 +197,7 @@ object SceneWindowRootViewBinder { overlayByKey = overlayByKey, initialSceneKey = containerConfig.initialSceneKey, dataSourceDelegator = dataSourceDelegator, qsSceneAdapter = qsSceneAdapter, ) } } Loading