diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml index a22a56fb3c610..7c54b90f1915e 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml @@ -47,11 +47,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="@dimen/num_pad_entry_row_margin_bottom" - androidprv:layout_constraintBottom_toTopOf="@id/key1" androidprv:layout_constraintEnd_toEndOf="parent" androidprv:layout_constraintStart_toStartOf="parent" androidprv:layout_constraintTop_toTopOf="parent" + androidprv:layout_constraintBottom_toTopOf="@id/key1" androidprv:layout_constraintVertical_bias="1.0"> + + + + androidprv:layout_constraintStart_toStartOf="parent" + androidprv:layout_constraintTop_toBottomOf="@id/pin_pad_top_guideline" /> 32dp 16dp 28dp + + + 0.0 diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java index 97d3a5a4cd183..b473f6d36c5cd 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java @@ -28,6 +28,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.systemui.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.statusbar.policy.DevicePostureController; import com.android.systemui.util.ViewController; import com.android.systemui.util.concurrency.DelayableExecutor; @@ -166,6 +167,7 @@ public abstract class KeyguardInputViewController private final TelephonyManager mTelephonyManager; private final EmergencyButtonController.Factory mEmergencyButtonControllerFactory; private final FalsingCollector mFalsingCollector; + private final DevicePostureController mDevicePostureController; @Inject public Factory(KeyguardUpdateMonitor keyguardUpdateMonitor, @@ -175,7 +177,8 @@ public abstract class KeyguardInputViewController InputMethodManager inputMethodManager, @Main DelayableExecutor mainExecutor, @Main Resources resources, LiftToActivateListener liftToActivateListener, TelephonyManager telephonyManager, FalsingCollector falsingCollector, - EmergencyButtonController.Factory emergencyButtonControllerFactory) { + EmergencyButtonController.Factory emergencyButtonControllerFactory, + DevicePostureController devicePostureController) { mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; mLatencyTracker = latencyTracker; @@ -187,6 +190,7 @@ public abstract class KeyguardInputViewController mTelephonyManager = telephonyManager; mEmergencyButtonControllerFactory = emergencyButtonControllerFactory; mFalsingCollector = falsingCollector; + mDevicePostureController = devicePostureController; } /** Create a new {@link KeyguardInputViewController}. */ @@ -212,7 +216,8 @@ public abstract class KeyguardInputViewController return new KeyguardPinViewController((KeyguardPINView) keyguardInputView, mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker, - mLiftToActivateListener, emergencyButtonController, mFalsingCollector); + mLiftToActivateListener, emergencyButtonController, mFalsingCollector, + mDevicePostureController); } else if (keyguardInputView instanceof KeyguardSimPinView) { return new KeyguardSimPinViewController((KeyguardSimPinView) keyguardInputView, mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java index 82ade7aa18066..1efda7edee2f8 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java @@ -16,19 +16,23 @@ package com.android.keyguard; +import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_HALF_OPENED; +import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN; + import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; import android.view.View; -import android.view.ViewGroup; import android.view.animation.AnimationUtils; import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.constraintlayout.widget.ConstraintSet; import com.android.internal.jank.InteractionJankMonitor; 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; /** * Displays a PIN pad for unlocking. @@ -38,9 +42,10 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { private final AppearAnimationUtils mAppearAnimationUtils; private final DisappearAnimationUtils mDisappearAnimationUtils; private final DisappearAnimationUtils mDisappearAnimationUtilsLocked; - private ViewGroup mContainer; + private ConstraintLayout mContainer; private int mDisappearYTranslation; private View[][] mViews; + @DevicePostureInt private int mLastDevicePosture = DEVICE_POSTURE_UNKNOWN; public KeyguardPINView(Context context) { this(context, null); @@ -67,6 +72,11 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { updateMargins(); } + void onDevicePostureChanged(@DevicePostureInt int posture) { + mLastDevicePosture = posture; + updateMargins(); + } + @Override protected void resetState() { } @@ -109,6 +119,16 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { key.setLayoutParams(lp); } } + + // 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, + mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED ? halfOpenPercentage : 0.0f); + cs.applyTo(mContainer); } @Override diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java index 262bed3f695c9..9f4585fb1a922 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java @@ -23,10 +23,14 @@ import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.systemui.R; import com.android.systemui.classifier.FalsingCollector; +import com.android.systemui.statusbar.policy.DevicePostureController; public class KeyguardPinViewController extends KeyguardPinBasedInputViewController { private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private final DevicePostureController mPostureController; + private final DevicePostureController.Callback mPostureCallback = posture -> + mView.onDevicePostureChanged(posture); protected KeyguardPinViewController(KeyguardPINView view, KeyguardUpdateMonitor keyguardUpdateMonitor, @@ -35,11 +39,13 @@ public class KeyguardPinViewController KeyguardMessageAreaController.Factory messageAreaControllerFactory, LatencyTracker latencyTracker, LiftToActivateListener liftToActivateListener, EmergencyButtonController emergencyButtonController, - FalsingCollector falsingCollector) { + FalsingCollector falsingCollector, + DevicePostureController postureController) { super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback, messageAreaControllerFactory, latencyTracker, liftToActivateListener, emergencyButtonController, falsingCollector); mKeyguardUpdateMonitor = keyguardUpdateMonitor; + mPostureController = postureController; } @Override @@ -53,6 +59,14 @@ public class KeyguardPinViewController getKeyguardSecurityCallback().onCancelClicked(); }); } + + mPostureController.addCallback(mPostureCallback); + } + + @Override + protected void onViewDetached() { + super.onViewDetached(); + mPostureController.removeCallback(mPostureCallback); } @Override