Loading packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/DisplayCutout.kt +6 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.common.ui.compose.windowinsets package com.android.systemui.common.ui.compose.windowinsets import android.view.DisplayCutout as ViewDisplayCutout import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp import kotlin.math.abs import kotlin.math.abs Loading @@ -27,6 +28,11 @@ data class DisplayCutout( val right: Dp = 0.dp, val right: Dp = 0.dp, val bottom: Dp = 0.dp, val bottom: Dp = 0.dp, val location: CutoutLocation = CutoutLocation.NONE, val location: CutoutLocation = CutoutLocation.NONE, /** * The original `DisplayCutout` for the `View` world; only use this when feeding it back to a * `View`. */ val viewDisplayCutoutKeyguardStatusBarView: ViewDisplayCutout? = null, ) { ) { fun width() = abs(right.value - left.value).dp fun width() = abs(right.value - left.value).dp } } Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/StatusBarSection.kt +29 −22 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.view.ViewGroup import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp Loading @@ -31,6 +32,7 @@ import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.SceneScope import com.android.compose.modifiers.height import com.android.compose.modifiers.height import com.android.keyguard.dagger.KeyguardStatusBarViewComponent import com.android.keyguard.dagger.KeyguardStatusBarViewComponent import com.android.systemui.common.ui.compose.windowinsets.LocalDisplayCutout import com.android.systemui.res.R import com.android.systemui.res.R import com.android.systemui.shade.NotificationPanelView import com.android.systemui.shade.NotificationPanelView import com.android.systemui.shade.ShadeViewStateProvider import com.android.systemui.shade.ShadeViewStateProvider Loading @@ -48,6 +50,31 @@ constructor( @Composable @Composable fun SceneScope.StatusBar(modifier: Modifier = Modifier) { fun SceneScope.StatusBar(modifier: Modifier = Modifier) { val context = LocalContext.current val context = LocalContext.current val viewDisplayCutout = LocalDisplayCutout.current.viewDisplayCutoutKeyguardStatusBarView @SuppressLint("InflateParams") val view = remember(context) { LayoutInflater.from(context) .inflate( R.layout.keyguard_status_bar, null, false, ) as KeyguardStatusBarView } val viewController = remember(view) { val provider = object : ShadeViewStateProvider { override val lockscreenShadeDragProgress: Float = 0f override val panelViewExpandedHeight: Float = 0f override fun shouldHeadsUpBeVisible(): Boolean { return false } } componentFactory.build(view, provider).keyguardStatusBarViewController } MovableElement( MovableElement( key = StatusBarElementKey, key = StatusBarElementKey, Loading @@ -60,34 +87,14 @@ constructor( (it.parent as ViewGroup).removeView(it) (it.parent as ViewGroup).removeView(it) } } val provider = viewController.init() object : ShadeViewStateProvider { override val lockscreenShadeDragProgress: Float = 0f override val panelViewExpandedHeight: Float = 0f override fun shouldHeadsUpBeVisible(): Boolean { return false } } @SuppressLint("InflateParams") val view = LayoutInflater.from(context) .inflate( R.layout.keyguard_status_bar, null, false, ) as KeyguardStatusBarView componentFactory .build(view, provider) .keyguardStatusBarViewController .init() view view }, }, modifier = modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp).height { Modifier.fillMaxWidth().padding(horizontal = 16.dp).height { Utils.getStatusBarHeaderHeightKeyguard(context) Utils.getStatusBarHeaderHeightKeyguard(context) }, }, update = { viewController.setDisplayCutout(viewDisplayCutout) } ) ) } } } } Loading packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -182,12 +182,14 @@ object SceneWindowRootViewBinder { right >= getDisplayWidth(context) -> CutoutLocation.RIGHT right >= getDisplayWidth(context) -> CutoutLocation.RIGHT else -> CutoutLocation.CENTER else -> CutoutLocation.CENTER } } val viewDisplayCutout = it?.displayCutout DisplayCutout( DisplayCutout( left, left, top, top, right, right, bottom, bottom, location, location, viewDisplayCutout, ) ) } } .stateIn(scope, SharingStarted.WhileSubscribed(), DisplayCutout()) .stateIn(scope, SharingStarted.WhileSubscribed(), DisplayCutout()) Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +11 −1 Original line number Original line Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import com.android.settingslib.Utils; import com.android.settingslib.Utils; Loading Loading @@ -291,7 +292,16 @@ public class KeyguardStatusBarView extends RelativeLayout { } } private boolean updateLayoutConsideringCutout(StatusBarContentInsetsProvider insetsProvider) { private boolean updateLayoutConsideringCutout(StatusBarContentInsetsProvider insetsProvider) { mDisplayCutout = getRootWindowInsets().getDisplayCutout(); return setDisplayCutout( getRootWindowInsets().getDisplayCutout(), insetsProvider); } /** Sets the {@link DisplayCutout}, updating the view to render around the cutout. */ public boolean setDisplayCutout( @Nullable DisplayCutout displayCutout, StatusBarContentInsetsProvider insetsProvider) { mDisplayCutout = displayCutout; updateKeyguardStatusBarHeight(); updateKeyguardStatusBarHeight(); updatePadding(insetsProvider); updatePadding(insetsProvider); if (mDisplayCutout == null || insetsProvider.currentRotationHasCornerCutout()) { if (mDisplayCutout == null || insetsProvider.currentRotationHasCornerCutout()) { Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -30,9 +30,11 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager; import android.provider.Settings; import android.provider.Settings; import android.util.MathUtils; import android.util.MathUtils; import android.view.DisplayCutout; import android.view.View; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import androidx.core.animation.Animator; import androidx.core.animation.Animator; import androidx.core.animation.AnimatorListenerAdapter; import androidx.core.animation.AnimatorListenerAdapter; Loading Loading @@ -584,6 +586,17 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mView.setVisibility(visibility); mView.setVisibility(visibility); } } /** * Passes the given {@link DisplayCutout} to the view. * * <p>This isn't needed when the view is part of a real view hierarchy. Only call this when the * view is added to a Compose hierarchy where it doesn't actually receive any callback to its * {@code OnApplyWindowInsetsListener}s. */ public void setDisplayCutout(@Nullable DisplayCutout displayCutout) { mView.setDisplayCutout(displayCutout, mInsetsProvider); } /** /** * @return the alpha to be used to fade out the contents on Keyguard (status bar, bottom area) * @return the alpha to be used to fade out the contents on Keyguard (status bar, bottom area) * during swiping up. * during swiping up. Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/DisplayCutout.kt +6 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.common.ui.compose.windowinsets package com.android.systemui.common.ui.compose.windowinsets import android.view.DisplayCutout as ViewDisplayCutout import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp import kotlin.math.abs import kotlin.math.abs Loading @@ -27,6 +28,11 @@ data class DisplayCutout( val right: Dp = 0.dp, val right: Dp = 0.dp, val bottom: Dp = 0.dp, val bottom: Dp = 0.dp, val location: CutoutLocation = CutoutLocation.NONE, val location: CutoutLocation = CutoutLocation.NONE, /** * The original `DisplayCutout` for the `View` world; only use this when feeding it back to a * `View`. */ val viewDisplayCutoutKeyguardStatusBarView: ViewDisplayCutout? = null, ) { ) { fun width() = abs(right.value - left.value).dp fun width() = abs(right.value - left.value).dp } } Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/StatusBarSection.kt +29 −22 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.view.ViewGroup import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp Loading @@ -31,6 +32,7 @@ import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.SceneScope import com.android.compose.modifiers.height import com.android.compose.modifiers.height import com.android.keyguard.dagger.KeyguardStatusBarViewComponent import com.android.keyguard.dagger.KeyguardStatusBarViewComponent import com.android.systemui.common.ui.compose.windowinsets.LocalDisplayCutout import com.android.systemui.res.R import com.android.systemui.res.R import com.android.systemui.shade.NotificationPanelView import com.android.systemui.shade.NotificationPanelView import com.android.systemui.shade.ShadeViewStateProvider import com.android.systemui.shade.ShadeViewStateProvider Loading @@ -48,6 +50,31 @@ constructor( @Composable @Composable fun SceneScope.StatusBar(modifier: Modifier = Modifier) { fun SceneScope.StatusBar(modifier: Modifier = Modifier) { val context = LocalContext.current val context = LocalContext.current val viewDisplayCutout = LocalDisplayCutout.current.viewDisplayCutoutKeyguardStatusBarView @SuppressLint("InflateParams") val view = remember(context) { LayoutInflater.from(context) .inflate( R.layout.keyguard_status_bar, null, false, ) as KeyguardStatusBarView } val viewController = remember(view) { val provider = object : ShadeViewStateProvider { override val lockscreenShadeDragProgress: Float = 0f override val panelViewExpandedHeight: Float = 0f override fun shouldHeadsUpBeVisible(): Boolean { return false } } componentFactory.build(view, provider).keyguardStatusBarViewController } MovableElement( MovableElement( key = StatusBarElementKey, key = StatusBarElementKey, Loading @@ -60,34 +87,14 @@ constructor( (it.parent as ViewGroup).removeView(it) (it.parent as ViewGroup).removeView(it) } } val provider = viewController.init() object : ShadeViewStateProvider { override val lockscreenShadeDragProgress: Float = 0f override val panelViewExpandedHeight: Float = 0f override fun shouldHeadsUpBeVisible(): Boolean { return false } } @SuppressLint("InflateParams") val view = LayoutInflater.from(context) .inflate( R.layout.keyguard_status_bar, null, false, ) as KeyguardStatusBarView componentFactory .build(view, provider) .keyguardStatusBarViewController .init() view view }, }, modifier = modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp).height { Modifier.fillMaxWidth().padding(horizontal = 16.dp).height { Utils.getStatusBarHeaderHeightKeyguard(context) Utils.getStatusBarHeaderHeightKeyguard(context) }, }, update = { viewController.setDisplayCutout(viewDisplayCutout) } ) ) } } } } Loading
packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -182,12 +182,14 @@ object SceneWindowRootViewBinder { right >= getDisplayWidth(context) -> CutoutLocation.RIGHT right >= getDisplayWidth(context) -> CutoutLocation.RIGHT else -> CutoutLocation.CENTER else -> CutoutLocation.CENTER } } val viewDisplayCutout = it?.displayCutout DisplayCutout( DisplayCutout( left, left, top, top, right, right, bottom, bottom, location, location, viewDisplayCutout, ) ) } } .stateIn(scope, SharingStarted.WhileSubscribed(), DisplayCutout()) .stateIn(scope, SharingStarted.WhileSubscribed(), DisplayCutout()) Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +11 −1 Original line number Original line Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import com.android.settingslib.Utils; import com.android.settingslib.Utils; Loading Loading @@ -291,7 +292,16 @@ public class KeyguardStatusBarView extends RelativeLayout { } } private boolean updateLayoutConsideringCutout(StatusBarContentInsetsProvider insetsProvider) { private boolean updateLayoutConsideringCutout(StatusBarContentInsetsProvider insetsProvider) { mDisplayCutout = getRootWindowInsets().getDisplayCutout(); return setDisplayCutout( getRootWindowInsets().getDisplayCutout(), insetsProvider); } /** Sets the {@link DisplayCutout}, updating the view to render around the cutout. */ public boolean setDisplayCutout( @Nullable DisplayCutout displayCutout, StatusBarContentInsetsProvider insetsProvider) { mDisplayCutout = displayCutout; updateKeyguardStatusBarHeight(); updateKeyguardStatusBarHeight(); updatePadding(insetsProvider); updatePadding(insetsProvider); if (mDisplayCutout == null || insetsProvider.currentRotationHasCornerCutout()) { if (mDisplayCutout == null || insetsProvider.currentRotationHasCornerCutout()) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -30,9 +30,11 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager; import android.provider.Settings; import android.provider.Settings; import android.util.MathUtils; import android.util.MathUtils; import android.view.DisplayCutout; import android.view.View; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import androidx.core.animation.Animator; import androidx.core.animation.Animator; import androidx.core.animation.AnimatorListenerAdapter; import androidx.core.animation.AnimatorListenerAdapter; Loading Loading @@ -584,6 +586,17 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mView.setVisibility(visibility); mView.setVisibility(visibility); } } /** * Passes the given {@link DisplayCutout} to the view. * * <p>This isn't needed when the view is part of a real view hierarchy. Only call this when the * view is added to a Compose hierarchy where it doesn't actually receive any callback to its * {@code OnApplyWindowInsetsListener}s. */ public void setDisplayCutout(@Nullable DisplayCutout displayCutout) { mView.setDisplayCutout(displayCutout, mInsetsProvider); } /** /** * @return the alpha to be used to fade out the contents on Keyguard (status bar, bottom area) * @return the alpha to be used to fade out the contents on Keyguard (status bar, bottom area) * during swiping up. * during swiping up. Loading