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

Commit 2b3f7ef2 authored by Jamie Garside's avatar Jamie Garside
Browse files

Make the keyguard pattern view shrink when the device is half open.

This is done by converting it to use a ConstraintLayout. This allows us
to set a guideline based on the screen percentage to size the pattern
view. After doing that, we can resize the entry method in much the same
was as we do it for the PIN pad.

Note: this CL also moves the pattern view unconditionally to the bottom
of the screen. This is by design; the new UX designs anchor all keyguard
input methods to the bottom of the screen instead.

Bug: 191347942
Test: Manually tested.
Change-Id: I1b53cad22ae4d2c7d738c2b48110283f53aa2e68
parent a44fcb0d
Loading
Loading
Loading
Loading
+33 −38
Original line number Diff line number Diff line
@@ -27,39 +27,36 @@
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    android:clipToPadding="false"
    androidprv:layout_maxWidth="@dimen/keyguard_security_width"
    androidprv:layout_maxHeight="@dimen/keyguard_security_height"
    android:gravity="center_horizontal">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    android:clipChildren="false"
    android:clipToPadding="false">

        <LinearLayout
    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/pattern_container"
            android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_weight="1"
        android:layoutDirection="ltr">
        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/pattern_top_guideline"
            android:layout_width="wrap_content"
            android:orientation="vertical"
            android:layout_gravity="center_horizontal|bottom"
            android:clipChildren="false"
            android:clipToPadding="false">
            android:layout_height="wrap_content"
            androidprv:layout_constraintGuide_percent="0"
            android:orientation="horizontal" />

        <com.android.internal.widget.LockPatternView
            android:id="@+id/lockPatternView"
                android:layout_width="match_parent"
            android:layout_width="0dp"
            android:layout_height="0dp"
                android:layout_weight="1"
                android:layout_marginEnd="8dip"
                android:layout_marginBottom="4dip"
                android:layout_marginStart="8dip"
                android:layout_gravity="center_horizontal"
                android:gravity="center"
                android:clipChildren="false"
                android:clipToPadding="false" />
            androidprv:layout_constraintTop_toBottomOf="@id/pattern_top_guideline"
            androidprv:layout_constraintBottom_toBottomOf="parent"
            androidprv:layout_constraintLeft_toLeftOf="parent"
            androidprv:layout_constraintRight_toRightOf="parent"
            androidprv:layout_constraintDimensionRatio="1.0"
            androidprv:layout_constraintVertical_bias="1.0"
            />
    </androidx.constraintlayout.widget.ConstraintLayout>

    <include layout="@layout/keyguard_eca"
        android:id="@+id/keyguard_selector_fade_container"
@@ -69,7 +66,5 @@
        android:layout_gravity="bottom|center_horizontal"
        android:layout_marginTop="@dimen/keyguard_eca_top_margin"
        android:gravity="center_horizontal" />
        </LinearLayout>
    </FrameLayout>

</com.android.keyguard.KeyguardPatternView>
+2 −1
Original line number Diff line number Diff line
@@ -204,7 +204,8 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
                return new KeyguardPatternViewController((KeyguardPatternView) keyguardInputView,
                        mKeyguardUpdateMonitor, securityMode, mLockPatternUtils,
                        keyguardSecurityCallback, mLatencyTracker, mFalsingCollector,
                        emergencyButtonController, mMessageAreaControllerFactory);
                        emergencyButtonController, mMessageAreaControllerFactory,
                        mDevicePostureController);
            } else if (keyguardInputView instanceof KeyguardPasswordView) {
                return new KeyguardPasswordViewController((KeyguardPasswordView) keyguardInputView,
                        mKeyguardUpdateMonitor, securityMode, mLockPatternUtils,
+19 −2
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */
package com.android.keyguard;

import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_HALF_OPENED;

import android.content.Context;
import android.graphics.Rect;
import android.os.SystemClock;
@@ -22,16 +24,19 @@ import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;

import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;

import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.widget.LockPatternView;
import com.android.settingslib.animation.AppearAnimationCreator;
import com.android.settingslib.animation.AppearAnimationUtils;
import com.android.settingslib.animation.DisappearAnimationUtils;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.DevicePostureController.DevicePostureInt;

public class KeyguardPatternView extends KeyguardInputView
        implements AppearAnimationCreator<LockPatternView.CellState> {
@@ -68,7 +73,7 @@ public class KeyguardPatternView extends KeyguardInputView

    KeyguardMessageArea mSecurityMessageDisplay;
    private View mEcaView;
    private ViewGroup mContainer;
    private ConstraintLayout mContainer;

    public KeyguardPatternView(Context context) {
        this(context, null);
@@ -90,6 +95,18 @@ public class KeyguardPatternView extends KeyguardInputView
                mContext, android.R.interpolator.fast_out_linear_in));
    }

    void onDevicePostureChanged(@DevicePostureInt int posture) {
        // Update the guideline based on the device posture...
        float halfOpenPercentage =
                mContext.getResources().getFloat(R.dimen.half_opened_bouncer_height_ratio);

        ConstraintSet cs = new ConstraintSet();
        cs.clone(mContainer);
        cs.setGuidelinePercent(R.id.pin_pad_top_guideline, posture == DEVICE_POSTURE_HALF_OPENED
                ? halfOpenPercentage : 0.0f);
        cs.applyTo(mContainer);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
+9 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.settingslib.Utils;
import com.android.systemui.R;
import com.android.systemui.classifier.FalsingClassifier;
import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.statusbar.policy.DevicePostureController;

import java.util.List;

@@ -56,6 +57,9 @@ public class KeyguardPatternViewController
    private final FalsingCollector mFalsingCollector;
    private final EmergencyButtonController mEmergencyButtonController;
    private final KeyguardMessageAreaController.Factory mMessageAreaControllerFactory;
    private final DevicePostureController mPostureController;
    private final DevicePostureController.Callback mPostureCallback =
            posture -> mView.onDevicePostureChanged(posture);

    private KeyguardMessageAreaController mMessageAreaController;
    private LockPatternView mLockPatternView;
@@ -192,7 +196,8 @@ public class KeyguardPatternViewController
            LatencyTracker latencyTracker,
            FalsingCollector falsingCollector,
            EmergencyButtonController emergencyButtonController,
            KeyguardMessageAreaController.Factory messageAreaControllerFactory) {
            KeyguardMessageAreaController.Factory messageAreaControllerFactory,
            DevicePostureController postureController) {
        super(view, securityMode, keyguardSecurityCallback, emergencyButtonController);
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mLockPatternUtils = lockPatternUtils;
@@ -203,6 +208,7 @@ public class KeyguardPatternViewController
        KeyguardMessageArea kma = KeyguardMessageArea.findSecurityMessageDisplay(mView);
        mMessageAreaController = mMessageAreaControllerFactory.create(kma);
        mLockPatternView = mView.findViewById(R.id.lockPatternView);
        mPostureController = postureController;
    }

    @Override
@@ -235,6 +241,7 @@ public class KeyguardPatternViewController
                getKeyguardSecurityCallback().onCancelClicked();
            });
        }
        mPostureController.addCallback(mPostureCallback);
    }

    @Override
@@ -247,6 +254,7 @@ public class KeyguardPatternViewController
        if (cancelBtn != null) {
            cancelBtn.setOnClickListener(null);
        }
        mPostureController.removeCallback(mPostureCallback);
    }

    @Override
+4 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.classifier.FalsingCollectorFake
import com.android.systemui.statusbar.policy.DevicePostureController
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -62,6 +63,8 @@ class KeyguardPatternViewControllerTest : SysuiTestCase() {
    private lateinit var mKeyguardMessageAreaController: KeyguardMessageAreaController
    @Mock
    private lateinit var mLockPatternView: LockPatternView
    @Mock
    private lateinit var mPostureController: DevicePostureController

    private lateinit var mKeyguardPatternViewController: KeyguardPatternViewController

@@ -78,7 +81,7 @@ class KeyguardPatternViewControllerTest : SysuiTestCase() {
        mKeyguardPatternViewController = KeyguardPatternViewController(mKeyguardPatternView,
        mKeyguardUpdateMonitor, mSecurityMode, mLockPatternUtils, mKeyguardSecurityCallback,
                mLatencyTracker, mFalsingCollector, mEmergencyButtonController,
                mKeyguardMessageAreaControllerFactory)
                mKeyguardMessageAreaControllerFactory, mPostureController)
    }

    @Test