Merge "Resize PIN pad when the device is half folded." into sc-v2-dev am: 7b13bb8e92

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15346905

Change-Id: Ie37119e209f4c7bed77ed59aa80193b260778811
This commit is contained in:
Jamie Garside
2021-08-03 10:14:09 +00:00
committed by Automerger Merge Worker
5 changed files with 63 additions and 10 deletions

View File

@@ -47,11 +47,11 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="@dimen/num_pad_entry_row_margin_bottom" android:paddingBottom="@dimen/num_pad_entry_row_margin_bottom"
androidprv:layout_constraintBottom_toTopOf="@id/key1"
androidprv:layout_constraintEnd_toEndOf="parent" androidprv:layout_constraintEnd_toEndOf="parent"
androidprv:layout_constraintStart_toStartOf="parent" androidprv:layout_constraintStart_toStartOf="parent"
androidprv:layout_constraintTop_toTopOf="parent" androidprv:layout_constraintTop_toTopOf="parent"
androidprv:layout_constraintBottom_toTopOf="@id/key1"
androidprv:layout_constraintVertical_bias="1.0"> androidprv:layout_constraintVertical_bias="1.0">
<com.android.keyguard.PasswordTextView <com.android.keyguard.PasswordTextView
@@ -65,6 +65,15 @@
androidprv:scaledTextSize="@integer/scaled_password_text_size" /> androidprv:scaledTextSize="@integer/scaled_password_text_size" />
</com.android.keyguard.AlphaOptimizedRelativeLayout> </com.android.keyguard.AlphaOptimizedRelativeLayout>
<!-- Guideline used to place the top row of keys relative to the screen height. This will be
updated in KeyguardPINView to reduce the height of the PIN pad. -->
<androidx.constraintlayout.widget.Guideline
android:id="@+id/pin_pad_top_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
androidprv:layout_constraintGuide_percent="0"
android:orientation="horizontal" />
<androidx.constraintlayout.helper.widget.Flow <androidx.constraintlayout.helper.widget.Flow
android:id="@+id/flow1" android:id="@+id/flow1"
android:layout_width="0dp" android:layout_width="0dp"
@@ -78,16 +87,15 @@
androidprv:flow_horizontalStyle="packed" androidprv:flow_horizontalStyle="packed"
androidprv:flow_maxElementsWrap="3" androidprv:flow_maxElementsWrap="3"
androidprv:flow_verticalBias="1.0"
androidprv:flow_verticalGap="@dimen/num_pad_entry_row_margin_bottom" androidprv:flow_verticalGap="@dimen/num_pad_entry_row_margin_bottom"
androidprv:flow_verticalStyle="packed" androidprv:flow_verticalStyle="packed"
androidprv:flow_verticalBias="1.0"
androidprv:flow_wrapMode="aligned" androidprv:flow_wrapMode="aligned"
androidprv:layout_constraintTop_toTopOf="parent"
androidprv:layout_constraintBottom_toBottomOf="parent" androidprv:layout_constraintBottom_toBottomOf="parent"
androidprv:layout_constraintEnd_toEndOf="parent" androidprv:layout_constraintEnd_toEndOf="parent"
androidprv:layout_constraintStart_toStartOf="parent" /> androidprv:layout_constraintStart_toStartOf="parent"
androidprv:layout_constraintTop_toBottomOf="@id/pin_pad_top_guideline" />
<com.android.keyguard.NumPadKey <com.android.keyguard.NumPadKey
android:id="@+id/key1" android:id="@+id/key1"

View File

@@ -98,4 +98,10 @@
<dimen name="below_clock_padding_start">32dp</dimen> <dimen name="below_clock_padding_start">32dp</dimen>
<dimen name="below_clock_padding_end">16dp</dimen> <dimen name="below_clock_padding_end">16dp</dimen>
<dimen name="below_clock_padding_start_icons">28dp</dimen> <dimen name="below_clock_padding_start_icons">28dp</dimen>
<!-- Proportion of the screen height to use to set the maximum height of the bouncer to when
the device is in the DEVICE_POSTURE_HALF_OPENED posture, for the PIN/pattern entry. 0 will
allow it to use the whole screen space, 0.6 will allow it to use just under half of the
screen. -->
<item name="half_opened_bouncer_height_ratio" type="dimen" format="float">0.0</item>
</resources> </resources>

View File

@@ -28,6 +28,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.dagger.qualifiers.Main; 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.ViewController;
import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor;
@@ -166,6 +167,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
private final TelephonyManager mTelephonyManager; private final TelephonyManager mTelephonyManager;
private final EmergencyButtonController.Factory mEmergencyButtonControllerFactory; private final EmergencyButtonController.Factory mEmergencyButtonControllerFactory;
private final FalsingCollector mFalsingCollector; private final FalsingCollector mFalsingCollector;
private final DevicePostureController mDevicePostureController;
@Inject @Inject
public Factory(KeyguardUpdateMonitor keyguardUpdateMonitor, public Factory(KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -175,7 +177,8 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
InputMethodManager inputMethodManager, @Main DelayableExecutor mainExecutor, InputMethodManager inputMethodManager, @Main DelayableExecutor mainExecutor,
@Main Resources resources, LiftToActivateListener liftToActivateListener, @Main Resources resources, LiftToActivateListener liftToActivateListener,
TelephonyManager telephonyManager, FalsingCollector falsingCollector, TelephonyManager telephonyManager, FalsingCollector falsingCollector,
EmergencyButtonController.Factory emergencyButtonControllerFactory) { EmergencyButtonController.Factory emergencyButtonControllerFactory,
DevicePostureController devicePostureController) {
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mLockPatternUtils = lockPatternUtils; mLockPatternUtils = lockPatternUtils;
mLatencyTracker = latencyTracker; mLatencyTracker = latencyTracker;
@@ -187,6 +190,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
mTelephonyManager = telephonyManager; mTelephonyManager = telephonyManager;
mEmergencyButtonControllerFactory = emergencyButtonControllerFactory; mEmergencyButtonControllerFactory = emergencyButtonControllerFactory;
mFalsingCollector = falsingCollector; mFalsingCollector = falsingCollector;
mDevicePostureController = devicePostureController;
} }
/** Create a new {@link KeyguardInputViewController}. */ /** Create a new {@link KeyguardInputViewController}. */
@@ -212,7 +216,8 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
return new KeyguardPinViewController((KeyguardPINView) keyguardInputView, return new KeyguardPinViewController((KeyguardPINView) keyguardInputView,
mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, mKeyguardUpdateMonitor, securityMode, mLockPatternUtils,
keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker, keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker,
mLiftToActivateListener, emergencyButtonController, mFalsingCollector); mLiftToActivateListener, emergencyButtonController, mFalsingCollector,
mDevicePostureController);
} else if (keyguardInputView instanceof KeyguardSimPinView) { } else if (keyguardInputView instanceof KeyguardSimPinView) {
return new KeyguardSimPinViewController((KeyguardSimPinView) keyguardInputView, return new KeyguardSimPinViewController((KeyguardSimPinView) keyguardInputView,
mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, mKeyguardUpdateMonitor, securityMode, mLockPatternUtils,

View File

@@ -16,19 +16,23 @@
package com.android.keyguard; 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.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.jank.InteractionJankMonitor;
import com.android.settingslib.animation.AppearAnimationUtils; import com.android.settingslib.animation.AppearAnimationUtils;
import com.android.settingslib.animation.DisappearAnimationUtils; import com.android.settingslib.animation.DisappearAnimationUtils;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.statusbar.policy.DevicePostureController.DevicePostureInt;
/** /**
* Displays a PIN pad for unlocking. * Displays a PIN pad for unlocking.
@@ -38,9 +42,10 @@ public class KeyguardPINView extends KeyguardPinBasedInputView {
private final AppearAnimationUtils mAppearAnimationUtils; private final AppearAnimationUtils mAppearAnimationUtils;
private final DisappearAnimationUtils mDisappearAnimationUtils; private final DisappearAnimationUtils mDisappearAnimationUtils;
private final DisappearAnimationUtils mDisappearAnimationUtilsLocked; private final DisappearAnimationUtils mDisappearAnimationUtilsLocked;
private ViewGroup mContainer; private ConstraintLayout mContainer;
private int mDisappearYTranslation; private int mDisappearYTranslation;
private View[][] mViews; private View[][] mViews;
@DevicePostureInt private int mLastDevicePosture = DEVICE_POSTURE_UNKNOWN;
public KeyguardPINView(Context context) { public KeyguardPINView(Context context) {
this(context, null); this(context, null);
@@ -67,6 +72,11 @@ public class KeyguardPINView extends KeyguardPinBasedInputView {
updateMargins(); updateMargins();
} }
void onDevicePostureChanged(@DevicePostureInt int posture) {
mLastDevicePosture = posture;
updateMargins();
}
@Override @Override
protected void resetState() { protected void resetState() {
} }
@@ -109,6 +119,16 @@ public class KeyguardPINView extends KeyguardPinBasedInputView {
key.setLayoutParams(lp); 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 @Override

View File

@@ -23,10 +23,14 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.statusbar.policy.DevicePostureController;
public class KeyguardPinViewController public class KeyguardPinViewController
extends KeyguardPinBasedInputViewController<KeyguardPINView> { extends KeyguardPinBasedInputViewController<KeyguardPINView> {
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final DevicePostureController mPostureController;
private final DevicePostureController.Callback mPostureCallback = posture ->
mView.onDevicePostureChanged(posture);
protected KeyguardPinViewController(KeyguardPINView view, protected KeyguardPinViewController(KeyguardPINView view,
KeyguardUpdateMonitor keyguardUpdateMonitor, KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -35,11 +39,13 @@ public class KeyguardPinViewController
KeyguardMessageAreaController.Factory messageAreaControllerFactory, KeyguardMessageAreaController.Factory messageAreaControllerFactory,
LatencyTracker latencyTracker, LiftToActivateListener liftToActivateListener, LatencyTracker latencyTracker, LiftToActivateListener liftToActivateListener,
EmergencyButtonController emergencyButtonController, EmergencyButtonController emergencyButtonController,
FalsingCollector falsingCollector) { FalsingCollector falsingCollector,
DevicePostureController postureController) {
super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback, super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback,
messageAreaControllerFactory, latencyTracker, liftToActivateListener, messageAreaControllerFactory, latencyTracker, liftToActivateListener,
emergencyButtonController, falsingCollector); emergencyButtonController, falsingCollector);
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mPostureController = postureController;
} }
@Override @Override
@@ -53,6 +59,14 @@ public class KeyguardPinViewController
getKeyguardSecurityCallback().onCancelClicked(); getKeyguardSecurityCallback().onCancelClicked();
}); });
} }
mPostureController.addCallback(mPostureCallback);
}
@Override
protected void onViewDetached() {
super.onViewDetached();
mPostureController.removeCallback(mPostureCallback);
} }
@Override @Override