Loading packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContent.kt +20 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.systemui.communal.smartspace.SmartspaceInteractionHandler import com.android.systemui.communal.ui.compose.section.AmbientStatusBarSection import com.android.systemui.communal.ui.viewmodel.CommunalViewModel import com.android.systemui.keyguard.ui.composable.blueprint.BlueprintAlignmentLines import com.android.systemui.keyguard.ui.composable.section.BottomAreaSection import com.android.systemui.keyguard.ui.composable.section.LockSection import com.android.systemui.statusbar.phone.SystemUIDialogFactory import javax.inject.Inject Loading @@ -41,8 +42,10 @@ constructor( private val interactionHandler: SmartspaceInteractionHandler, private val dialogFactory: SystemUIDialogFactory, private val lockSection: LockSection, private val bottomAreaSection: BottomAreaSection, private val ambientStatusBarSection: AmbientStatusBarSection, ) { @Composable fun SceneScope.Content(modifier: Modifier = Modifier) { Layout( Loading @@ -65,10 +68,16 @@ constructor( modifier = Modifier.element(Communal.Elements.LockIcon) ) } with(bottomAreaSection) { IndicationArea( Modifier.element(Communal.Elements.IndicationArea).fillMaxWidth() ) } } ) { measurables, constraints -> val communalGridMeasurable = measurables[0] val lockIconMeasurable = measurables[1] val bottomAreaMeasurable = measurables[2] val noMinConstraints = constraints.copy( Loading @@ -85,6 +94,13 @@ constructor( bottom = lockIconPlaceable[BlueprintAlignmentLines.LockIcon.Bottom], ) val bottomAreaPlaceable = bottomAreaMeasurable.measure( noMinConstraints.copy( maxHeight = (constraints.maxHeight - lockIconBounds.bottom).coerceAtLeast(0) ) ) val communalGridPlaceable = communalGridMeasurable.measure( noMinConstraints.copy(maxHeight = lockIconBounds.top) Loading @@ -99,6 +115,10 @@ constructor( x = lockIconBounds.left, y = lockIconBounds.top, ) bottomAreaPlaceable.place( x = 0, y = constraints.maxHeight - bottomAreaPlaceable.height, ) } } } Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/BottomAreaSection.kt +2 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.DpSize Loading Loading @@ -183,7 +184,7 @@ constructor( indicationController: KeyguardIndicationController, modifier: Modifier = Modifier, ) { val (disposable, setDisposable) = mutableStateOf<DisposableHandle?>(null) val (disposable, setDisposable) = remember { mutableStateOf<DisposableHandle?>(null) } AndroidView( factory = { context -> Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardIndicationAreaBinder.kt +12 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.systemui.keyguard.ui.viewmodel.KeyguardIndicationAreaViewMode import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.res.R import com.android.systemui.statusbar.KeyguardIndicationController import com.android.systemui.util.kotlin.DisposableHandles import kotlinx.coroutines.DisposableHandle import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow Loading @@ -53,7 +54,15 @@ object KeyguardIndicationAreaBinder { viewModel: KeyguardIndicationAreaViewModel, indicationController: KeyguardIndicationController, ): DisposableHandle { indicationController.setIndicationArea(view) val disposables = DisposableHandles() // As the indication controller is a singleton, reset the view back to the previous view // once the current view is disposed. val previous = indicationController.indicationArea indicationController.indicationArea = view disposables += DisposableHandle { previous?.let { indicationController.indicationArea = it } } val indicationText: TextView = view.requireViewById(R.id.keyguard_indication_text) val indicationTextBottom: TextView = Loading @@ -63,7 +72,7 @@ object KeyguardIndicationAreaBinder { view.clipToPadding = false val configurationBasedDimensions = MutableStateFlow(loadFromResources(view)) val disposableHandle = disposables += view.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.STARTED) { launch("$TAG#viewModel.alpha") { Loading Loading @@ -126,7 +135,7 @@ object KeyguardIndicationAreaBinder { } } } return disposableHandle return disposables } private fun loadFromResources(view: View): ConfigurationBasedDimensions { Loading packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +5 −0 Original line number Diff line number Diff line Loading @@ -386,6 +386,11 @@ public class KeyguardIndicationController { mStatusBarStateListener.onDozingChanged(mStatusBarStateController.isDozing()); } @Nullable public ViewGroup getIndicationArea() { return mIndicationArea; } public void setIndicationArea(ViewGroup indicationArea) { mIndicationArea = indicationArea; mTopIndicationView = indicationArea.findViewById(R.id.keyguard_indication_text); Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContent.kt +20 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.systemui.communal.smartspace.SmartspaceInteractionHandler import com.android.systemui.communal.ui.compose.section.AmbientStatusBarSection import com.android.systemui.communal.ui.viewmodel.CommunalViewModel import com.android.systemui.keyguard.ui.composable.blueprint.BlueprintAlignmentLines import com.android.systemui.keyguard.ui.composable.section.BottomAreaSection import com.android.systemui.keyguard.ui.composable.section.LockSection import com.android.systemui.statusbar.phone.SystemUIDialogFactory import javax.inject.Inject Loading @@ -41,8 +42,10 @@ constructor( private val interactionHandler: SmartspaceInteractionHandler, private val dialogFactory: SystemUIDialogFactory, private val lockSection: LockSection, private val bottomAreaSection: BottomAreaSection, private val ambientStatusBarSection: AmbientStatusBarSection, ) { @Composable fun SceneScope.Content(modifier: Modifier = Modifier) { Layout( Loading @@ -65,10 +68,16 @@ constructor( modifier = Modifier.element(Communal.Elements.LockIcon) ) } with(bottomAreaSection) { IndicationArea( Modifier.element(Communal.Elements.IndicationArea).fillMaxWidth() ) } } ) { measurables, constraints -> val communalGridMeasurable = measurables[0] val lockIconMeasurable = measurables[1] val bottomAreaMeasurable = measurables[2] val noMinConstraints = constraints.copy( Loading @@ -85,6 +94,13 @@ constructor( bottom = lockIconPlaceable[BlueprintAlignmentLines.LockIcon.Bottom], ) val bottomAreaPlaceable = bottomAreaMeasurable.measure( noMinConstraints.copy( maxHeight = (constraints.maxHeight - lockIconBounds.bottom).coerceAtLeast(0) ) ) val communalGridPlaceable = communalGridMeasurable.measure( noMinConstraints.copy(maxHeight = lockIconBounds.top) Loading @@ -99,6 +115,10 @@ constructor( x = lockIconBounds.left, y = lockIconBounds.top, ) bottomAreaPlaceable.place( x = 0, y = constraints.maxHeight - bottomAreaPlaceable.height, ) } } } Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/BottomAreaSection.kt +2 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.DpSize Loading Loading @@ -183,7 +184,7 @@ constructor( indicationController: KeyguardIndicationController, modifier: Modifier = Modifier, ) { val (disposable, setDisposable) = mutableStateOf<DisposableHandle?>(null) val (disposable, setDisposable) = remember { mutableStateOf<DisposableHandle?>(null) } AndroidView( factory = { context -> Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardIndicationAreaBinder.kt +12 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.systemui.keyguard.ui.viewmodel.KeyguardIndicationAreaViewMode import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.res.R import com.android.systemui.statusbar.KeyguardIndicationController import com.android.systemui.util.kotlin.DisposableHandles import kotlinx.coroutines.DisposableHandle import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow Loading @@ -53,7 +54,15 @@ object KeyguardIndicationAreaBinder { viewModel: KeyguardIndicationAreaViewModel, indicationController: KeyguardIndicationController, ): DisposableHandle { indicationController.setIndicationArea(view) val disposables = DisposableHandles() // As the indication controller is a singleton, reset the view back to the previous view // once the current view is disposed. val previous = indicationController.indicationArea indicationController.indicationArea = view disposables += DisposableHandle { previous?.let { indicationController.indicationArea = it } } val indicationText: TextView = view.requireViewById(R.id.keyguard_indication_text) val indicationTextBottom: TextView = Loading @@ -63,7 +72,7 @@ object KeyguardIndicationAreaBinder { view.clipToPadding = false val configurationBasedDimensions = MutableStateFlow(loadFromResources(view)) val disposableHandle = disposables += view.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.STARTED) { launch("$TAG#viewModel.alpha") { Loading Loading @@ -126,7 +135,7 @@ object KeyguardIndicationAreaBinder { } } } return disposableHandle return disposables } private fun loadFromResources(view: View): ConfigurationBasedDimensions { Loading
packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +5 −0 Original line number Diff line number Diff line Loading @@ -386,6 +386,11 @@ public class KeyguardIndicationController { mStatusBarStateListener.onDozingChanged(mStatusBarStateController.isDozing()); } @Nullable public ViewGroup getIndicationArea() { return mIndicationArea; } public void setIndicationArea(ViewGroup indicationArea) { mIndicationArea = indicationArea; mTopIndicationView = indicationArea.findViewById(R.id.keyguard_indication_text); Loading