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

Commit e2b0067b authored by Ale Nijamkin's avatar Ale Nijamkin Committed by Android (Google) Code Review
Browse files

Merge "[flexiglass] Adds display cutout to the statusbar section." into main

parents 23be164f f8c2e7e7
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -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
@@ -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
}
}
+29 −22
Original line number Original line Diff line number Diff line
@@ -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
@@ -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
@@ -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,
@@ -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) }
                )
                )
            }
            }
        }
        }
+2 −0
Original line number Original line Diff line number Diff line
@@ -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())
+11 −1
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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()) {
+13 −0
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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.