Loading packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/DisplayCutout.kt +6 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ 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 kotlin.math.abs Loading @@ -27,6 +28,11 @@ data class DisplayCutout( val right: Dp = 0.dp, val bottom: Dp = 0.dp, 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 } Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/StatusBarSection.kt +29 −22 Original line number 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.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext 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.modifiers.height 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.shade.NotificationPanelView import com.android.systemui.shade.ShadeViewStateProvider Loading @@ -48,6 +50,31 @@ constructor( @Composable fun SceneScope.StatusBar(modifier: Modifier = Modifier) { 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( key = StatusBarElementKey, Loading @@ -60,34 +87,14 @@ constructor( (it.parent as ViewGroup).removeView(it) } val provider = 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() viewController.init() view }, modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp).height { Utils.getStatusBarHeaderHeightKeyguard(context) }, update = { viewController.setDisplayCutout(viewDisplayCutout) } ) } } Loading packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt +2 −0 Original line number Diff line number Diff line Loading @@ -182,12 +182,14 @@ object SceneWindowRootViewBinder { right >= getDisplayWidth(context) -> CutoutLocation.RIGHT else -> CutoutLocation.CENTER } val viewDisplayCutout = it?.displayCutout DisplayCutout( left, top, right, bottom, location, viewDisplayCutout, ) } .stateIn(scope, SharingStarted.WhileSubscribed(), DisplayCutout()) Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +11 −1 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.settingslib.Utils; Loading Loading @@ -291,7 +292,16 @@ public class KeyguardStatusBarView extends RelativeLayout { } 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(); updatePadding(insetsProvider); if (mDisplayCutout == null || insetsProvider.currentRotationHasCornerCutout()) { Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +13 −0 Original line number Diff line number Diff line Loading @@ -30,9 +30,11 @@ import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; import android.util.MathUtils; import android.view.DisplayCutout; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.core.animation.Animator; import androidx.core.animation.AnimatorListenerAdapter; Loading Loading @@ -584,6 +586,17 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat 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) * during swiping up. Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/DisplayCutout.kt +6 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ 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 kotlin.math.abs Loading @@ -27,6 +28,11 @@ data class DisplayCutout( val right: Dp = 0.dp, val bottom: Dp = 0.dp, 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 } Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/StatusBarSection.kt +29 −22 Original line number 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.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext 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.modifiers.height 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.shade.NotificationPanelView import com.android.systemui.shade.ShadeViewStateProvider Loading @@ -48,6 +50,31 @@ constructor( @Composable fun SceneScope.StatusBar(modifier: Modifier = Modifier) { 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( key = StatusBarElementKey, Loading @@ -60,34 +87,14 @@ constructor( (it.parent as ViewGroup).removeView(it) } val provider = 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() viewController.init() view }, modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp).height { Utils.getStatusBarHeaderHeightKeyguard(context) }, update = { viewController.setDisplayCutout(viewDisplayCutout) } ) } } Loading
packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt +2 −0 Original line number Diff line number Diff line Loading @@ -182,12 +182,14 @@ object SceneWindowRootViewBinder { right >= getDisplayWidth(context) -> CutoutLocation.RIGHT else -> CutoutLocation.CENTER } val viewDisplayCutout = it?.displayCutout DisplayCutout( left, top, right, bottom, location, viewDisplayCutout, ) } .stateIn(scope, SharingStarted.WhileSubscribed(), DisplayCutout()) Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +11 −1 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.settingslib.Utils; Loading Loading @@ -291,7 +292,16 @@ public class KeyguardStatusBarView extends RelativeLayout { } 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(); updatePadding(insetsProvider); if (mDisplayCutout == null || insetsProvider.currentRotationHasCornerCutout()) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +13 −0 Original line number Diff line number Diff line Loading @@ -30,9 +30,11 @@ import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; import android.util.MathUtils; import android.view.DisplayCutout; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.core.animation.Animator; import androidx.core.animation.AnimatorListenerAdapter; Loading Loading @@ -584,6 +586,17 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat 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) * during swiping up. Loading