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

Commit 8dd1c089 authored by Austin Delgado's avatar Austin Delgado
Browse files

Add support for 180 rotation BP

Bug: 283523113
Flag: com.android.systemui.constraint_bp
Test:  atest com.android.systemui.biometrics
Change-Id: Id854ef27e38a831b0ad3ab33295748eabb60e199
parent bc596251
Loading
Loading
Loading
Loading
+37 −15
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import com.android.systemui.biometrics.ui.viewmodel.isLeft
import com.android.systemui.biometrics.ui.viewmodel.isMedium
import com.android.systemui.biometrics.ui.viewmodel.isNullOrNotSmall
import com.android.systemui.biometrics.ui.viewmodel.isSmall
import com.android.systemui.biometrics.ui.viewmodel.isTop
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.res.R
import kotlin.math.abs
@@ -100,13 +101,13 @@ object BiometricViewSizeBinder {
            val iconHolderView = view.requireViewById<View>(R.id.biometric_icon)
            val panelView = view.requireViewById<View>(R.id.panel)
            val cornerRadius = view.resources.getDimension(R.dimen.biometric_dialog_corner_size)
            val cornerRadiusPx =
            val pxToDp =
                TypedValue.applyDimension(
                    TypedValue.COMPLEX_UNIT_DIP,
                        cornerRadius,
                    1f,
                    view.resources.displayMetrics
                )
                    .toInt()
            val cornerRadiusPx = (pxToDp * cornerRadius).toInt()

            var currentSize: PromptSize? = null
            var currentPosition: PromptPosition = PromptPosition.Bottom
@@ -132,16 +133,8 @@ object BiometricViewSizeBinder {
                                    cornerRadiusPx.toFloat()
                                )
                            }
                            PromptPosition.Bottom,
                            PromptPosition.Top -> {
                                outline.setRoundRect(
                                    0,
                                    -cornerRadiusPx,
                                    view.width,
                                    view.height,
                                    cornerRadiusPx.toFloat()
                                )
                            }
                            PromptPosition.Bottom -> {
                                outline.setRoundRect(
                                    0,
                                    0,
@@ -308,6 +301,7 @@ object BiometricViewSizeBinder {
                            }
                        }
                    }

                    lifecycleScope.launch {
                        viewModel.iconSize.collect { iconSize ->
                            iconHolderView.layoutParams.width = iconSize.first
@@ -385,6 +379,7 @@ object BiometricViewSizeBinder {
                            }
                        }
                    }

                    lifecycleScope.launch {
                        combine(viewModel.hideSensorIcon, viewModel.size, ::Pair).collect {
                            (hideSensorIcon, size) ->
@@ -415,6 +410,33 @@ object BiometricViewSizeBinder {
                                    R.id.rightGuideline,
                                    ConstraintSet.RIGHT
                                )
                            } else if (position.isTop) {
                                // Top position is only used for 180 rotation Udfps
                                // Requires repositioning due to sensor location at top of screen
                                mediumConstraintSet.connect(
                                    R.id.scrollView,
                                    ConstraintSet.TOP,
                                    R.id.indicator,
                                    ConstraintSet.BOTTOM
                                )
                                mediumConstraintSet.connect(
                                    R.id.scrollView,
                                    ConstraintSet.BOTTOM,
                                    R.id.button_bar,
                                    ConstraintSet.TOP
                                )
                                mediumConstraintSet.connect(
                                    R.id.panel,
                                    ConstraintSet.TOP,
                                    R.id.biometric_icon,
                                    ConstraintSet.TOP
                                )
                                mediumConstraintSet.setMargin(
                                    R.id.panel,
                                    ConstraintSet.TOP,
                                    (-24 * pxToDp).toInt()
                                )
                                mediumConstraintSet.setVerticalBias(R.id.scrollView, 0f)
                            }

                            when {
+12 −3
Original line number Diff line number Diff line
@@ -262,7 +262,8 @@ constructor(
                _forceLargeSize,
                displayStateInteractor.isLargeScreen,
                displayStateInteractor.currentRotation,
            ) { forceLarge, isLargeScreen, rotation ->
                modalities
            ) { forceLarge, isLargeScreen, rotation, modalities ->
                when {
                    forceLarge ||
                        isLargeScreen ||
@@ -270,7 +271,8 @@ constructor(
                        PromptPosition.Bottom
                    rotation == DisplayRotation.ROTATION_90 -> PromptPosition.Right
                    rotation == DisplayRotation.ROTATION_270 -> PromptPosition.Left
                    rotation == DisplayRotation.ROTATION_180 -> PromptPosition.Top
                    rotation == DisplayRotation.ROTATION_180 && modalities.hasUdfps ->
                        PromptPosition.Top
                    else -> PromptPosition.Bottom
                }
            }
@@ -362,7 +364,14 @@ constructor(
                                landscapeMediumBottomPadding
                            )
                        }
                    PromptPosition.Top -> Rect()
                    PromptPosition.Top ->
                        if (size.isSmall) {
                            Rect(0, 0, 0, portraitSmallBottomPadding)
                        } else if (size.isMedium && modalities.hasUdfps) {
                            Rect(0, 0, 0, sensorBounds.bottom)
                        } else {
                            Rect(0, 0, 0, portraitMediumBottomPadding)
                        }
                }
            }
            .distinctUntilChanged()