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

Commit 01bcb11f authored by Brad Hinegardner's avatar Brad Hinegardner
Browse files

Only let shortcuts respect insets due to device cutout

On devices with a cutout and rotateable lockscreen, there is the
possibility of the cutout covering the shortcuts, or moving up the
whole bottom area of the lockscreen. Allow the shortcuts to move up,
but leave the middle of the lockscreen in place.

Fixes: 326343596
Test: manual -- on device with rotateable lockscreen and inset, rotate
Flag: NONE
Change-Id: I32bff37cf75787a1ec05bbf8f56e4e56ff79da0c
parent 2995928c
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -22,11 +22,16 @@ import android.graphics.drawable.Animatable2
import android.util.Size
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams
import android.view.WindowInsets
import android.widget.ImageView
import androidx.core.animation.CycleInterpolator
import androidx.core.animation.ObjectAnimator
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import androidx.core.view.marginLeft
import androidx.core.view.marginRight
import androidx.core.view.marginTop
import androidx.core.view.updateLayoutParams
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
@@ -114,6 +119,38 @@ object KeyguardBottomAreaViewBinder {
        val settingsMenu: LaunchableLinearLayout =
            view.requireViewById(R.id.keyguard_settings_button)

        startButton.setOnApplyWindowInsetsListener { inView, windowInsets ->
            val bottomInset = windowInsets.displayCutout?.safeInsetBottom ?: 0
            val marginBottom =
                inView.resources.getDimension(R.dimen.keyguard_affordance_vertical_offset).toInt()
            inView.layoutParams =
                (inView.layoutParams as MarginLayoutParams).apply {
                    setMargins(
                        inView.marginLeft,
                        inView.marginTop,
                        inView.marginRight,
                        marginBottom + bottomInset
                    )
                }
            WindowInsets.CONSUMED
        }

        endButton.setOnApplyWindowInsetsListener { inView, windowInsets ->
            val bottomInset = windowInsets.displayCutout?.safeInsetBottom ?: 0
            val marginBottom =
                inView.resources.getDimension(R.dimen.keyguard_affordance_vertical_offset).toInt()
            inView.layoutParams =
                (inView.layoutParams as MarginLayoutParams).apply {
                    setMargins(
                        inView.marginLeft,
                        inView.marginTop,
                        inView.marginRight,
                        marginBottom + bottomInset
                    )
                }
            WindowInsets.CONSUMED
        }

        view.clipChildren = false
        view.clipToPadding = false
        view.setOnTouchListener { _, event ->
+0 −11
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.content.res.Configuration
import android.util.AttributeSet
import android.view.View
import android.view.ViewGroup
import android.view.WindowInsets
import android.widget.FrameLayout
import androidx.annotation.StringRes
import com.android.keyguard.LockIconViewController
@@ -148,16 +147,6 @@ constructor(
        return false
    }

    override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
        val bottom = insets.displayCutout?.safeInsetBottom ?: 0
        if (isPaddingRelative) {
            setPaddingRelative(paddingStart, paddingTop, paddingEnd, bottom)
        } else {
            setPadding(paddingLeft, paddingTop, paddingRight, bottom)
        }
        return insets
    }

    override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
        super.onLayout(changed, left, top, right, bottom)
        findViewById<View>(R.id.ambient_indication_container)?.let {