diff options
11 files changed, 409 insertions, 60 deletions
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_pin_motion_layout.xml b/packages/SystemUI/res-keyguard/layout/keyguard_pin_motion_layout.xml new file mode 100644 index 000000000000..6835d59658d4 --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout/keyguard_pin_motion_layout.xml @@ -0,0 +1,243 @@ +<?xml version="1.0" encoding="utf-8"?><!-- +** +** Copyright 2023, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License") +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<!-- This file is needed when flag lockscreen.enable_landscape is on + Required for landscape lockscreen on small screens. --> +<com.android.keyguard.KeyguardPINView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res-auto" + android:id="@+id/keyguard_pin_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center_horizontal|bottom" + android:clipChildren="false" + android:clipToPadding="false" + android:orientation="vertical"> + + <!-- Layout here is visually identical to the previous keyguard_pin_view. + I.E., 'constraints here effectively the same as the previous linear layout '--> + <androidx.constraintlayout.motion.widget.MotionLayout + android:id="@+id/pin_container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:clipChildren="false" + android:clipToPadding="false" + android:layoutDirection="ltr" + android:orientation="vertical" + androidprv:layoutDescription="@xml/keyguard_pin_scene" + android:layout_gravity="center_horizontal"> + + <!-- Guideline need to align PIN pad left of centre, + when on small screen landscape layout --> + <androidx.constraintlayout.widget.Guideline + android:id="@+id/pin_pad_center_guideline" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + androidprv:layout_constraintGuide_percent="0.5" /> + + <!-- 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" + android:orientation="horizontal" + androidprv:layout_constraintGuide_percent="0" /> + + <LinearLayout + android:id="@+id/keyguard_bouncer_message_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:clipChildren="false" + android:clipToPadding="false" + android:layoutDirection="ltr" + android:orientation="vertical" + androidprv:layout_constraintTop_toTopOf="parent"> + + <include layout="@layout/keyguard_bouncer_message_area" /> + + <com.android.systemui.bouncer.ui.BouncerMessageView + android:id="@+id/bouncer_message_view" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" /> + + </LinearLayout> + + <!-- Set this to be just above key1. It would be better to introduce a barrier above + key1/key2/key3, then place this View above that. Sadly, that doesn't work (the Barrier + drops to the bottom of the page, and key1/2/3 all shoot up to the top-left). In any + case, the Flow should ensure that key1/2/3 all have the same top, so this should be + fine. --> + <com.android.keyguard.AlphaOptimizedRelativeLayout + android:id="@+id/row0" + 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_toBottomOf="@id/keyguard_bouncer_message_container" + androidprv:layout_constraintVertical_bias="0.5"> + + <com.android.keyguard.PasswordTextView + android:id="@+id/pinEntry" + style="@style/Widget.TextView.Password" + android:layout_width="@dimen/keyguard_security_width" + android:layout_height="@dimen/keyguard_password_height" + android:layout_centerHorizontal="true" + android:layout_marginRight="72dp" + android:contentDescription="@string/keyguard_accessibility_pin_area" + androidprv:scaledTextSize="@integer/scaled_password_text_size" /> + + </com.android.keyguard.AlphaOptimizedRelativeLayout> + + <com.android.keyguard.KeyguardPinFlowView + android:id="@+id/flow1" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginBottom="8dp" + android:clipChildren="false" + android:clipToPadding="false" + android:orientation="horizontal" + + androidprv:constraint_referenced_ids="key1,key2,key3,key4,key5,key6,key7,key8,key9,delete_button,key0,key_enter" + + androidprv:flow_horizontalGap="@dimen/num_pad_key_margin_end" + androidprv:flow_horizontalStyle="packed" + androidprv:flow_maxElementsWrap="3" + + androidprv:flow_verticalBias="1.0" + androidprv:flow_verticalGap="@dimen/num_pad_entry_row_margin_bottom" + androidprv:flow_verticalStyle="packed" + androidprv:flow_wrapMode="aligned" + + androidprv:layout_constraintBottom_toTopOf="@+id/keyguard_selector_fade_container" + androidprv:layout_constraintEnd_toEndOf="parent" + androidprv:layout_constraintStart_toStartOf="parent" + androidprv:layout_constraintTop_toBottomOf="@id/pin_pad_top_guideline" /> + + <com.android.keyguard.NumPadButton + android:id="@+id/delete_button" + style="@style/NumPadKey.Delete" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key0" + android:contentDescription="@string/keyboardview_keycode_delete" /> + + <com.android.keyguard.NumPadButton + android:id="@+id/key_enter" + style="@style/NumPadKey.Enter" + android:layout_width="0dp" + android:layout_height="0dp" + android:contentDescription="@string/keyboardview_keycode_enter" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key1" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key2" + androidprv:digit="1" + androidprv:textView="@+id/pinEntry" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key2" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key3" + androidprv:digit="2" + androidprv:textView="@+id/pinEntry" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key3" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key4" + androidprv:digit="3" + androidprv:textView="@+id/pinEntry" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key4" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key5" + androidprv:digit="4" + androidprv:textView="@+id/pinEntry" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key5" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key6" + androidprv:digit="5" + androidprv:textView="@+id/pinEntry" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key6" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key7" + androidprv:digit="6" + androidprv:textView="@+id/pinEntry" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key7" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key8" + androidprv:digit="7" + androidprv:textView="@+id/pinEntry" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key8" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key9" + androidprv:digit="8" + androidprv:textView="@+id/pinEntry" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key9" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/delete_button" + androidprv:digit="9" + androidprv:textView="@+id/pinEntry" /> + + <com.android.keyguard.NumPadKey + android:id="@+id/key0" + android:layout_width="0dp" + android:layout_height="0dp" + android:accessibilityTraversalBefore="@id/key_enter" + androidprv:digit="0" + androidprv:textView="@+id/pinEntry" /> + + <include + android:id="@+id/keyguard_selector_fade_container" + layout="@layout/keyguard_eca" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/keyguard_eca_bottom_margin" + android:layout_marginTop="@dimen/keyguard_eca_top_margin" + android:orientation="vertical" + androidprv:layout_constraintBottom_toBottomOf="parent" + androidprv:layout_constraintTop_toBottomOf="@+id/flow1" /> + + </androidx.constraintlayout.motion.widget.MotionLayout> + +</com.android.keyguard.KeyguardPINView>
\ No newline at end of file diff --git a/packages/SystemUI/res-keyguard/values-land/donottranslate.xml b/packages/SystemUI/res-keyguard/values-land/donottranslate.xml deleted file mode 100644 index 9912b699507e..000000000000 --- a/packages/SystemUI/res-keyguard/values-land/donottranslate.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2021 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="num_pad_key_ratio">1.51</string> -</resources> diff --git a/packages/SystemUI/res-keyguard/values-sw600dp-land/donottranslate.xml b/packages/SystemUI/res-keyguard/values-sw600dp-land/donottranslate.xml deleted file mode 100644 index 1a52e93df8ae..000000000000 --- a/packages/SystemUI/res-keyguard/values-sw600dp-land/donottranslate.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ Copyright (C) 2021 The Android Open Source Project - ~ - ~ Licensed under the Apache License, Version 2.0 (the "License"); - ~ you may not use this file except in compliance with the License. - ~ You may obtain a copy of the License at - ~ - ~ http://www.apache.org/licenses/LICENSE-2.0 - ~ - ~ Unless required by applicable law or agreed to in writing, software - ~ distributed under the License is distributed on an "AS IS" BASIS, - ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - ~ See the License for the specific language governing permissions and - ~ limitations under the License. - --> - -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <!-- Don't use the smaller PIN pad keys if we have the screen space to support it. --> - <string name="num_pad_key_ratio">1.0</string> -</resources> diff --git a/packages/SystemUI/res-keyguard/xml/keyguard_pin_scene.xml b/packages/SystemUI/res-keyguard/xml/keyguard_pin_scene.xml new file mode 100644 index 000000000000..44af9efffbf8 --- /dev/null +++ b/packages/SystemUI/res-keyguard/xml/keyguard_pin_scene.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +** +** Copyright 2023, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License") +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<MotionScene + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:motion="http://schemas.android.com/apk/res-auto" + xmlns:androidprv="http://schemas.android.com/apk/res-auto"> + + <Transition + motion:constraintSetStart="@id/single_constraints" + motion:constraintSetEnd="@+id/split_constraints" + motion:duration="0" + motion:autoTransition="none"> + </Transition> + + <ConstraintSet android:id="@+id/single_constraints"> + <!-- No changes to default layout --> + </ConstraintSet> + + <ConstraintSet android:id="@+id/split_constraints"> + + <Constraint + android:id="@+id/keyguard_bouncer_message_container" + android:layout_width="0dp" + android:layout_height="wrap_content" + androidprv:layout_constraintEnd_toStartOf="@+id/pin_pad_center_guideline" + androidprv:layout_constraintStart_toStartOf="parent" + androidprv:layout_constraintTop_toTopOf="parent" /> + <Constraint + android:id="@+id/row0" + android:layout_width="0dp" + android:layout_height="wrap_content" + androidprv:layout_constraintEnd_toStartOf="@+id/pin_pad_center_guideline" + androidprv:layout_constraintStart_toStartOf="parent" + androidprv:layout_constraintTop_toBottomOf="@+id/keyguard_bouncer_message_container" /> + <Constraint + android:id="@+id/flow1" + android:layout_width="0dp" + android:layout_height="0dp" + androidprv:layout_constraintBottom_toBottomOf="parent" + androidprv:layout_constraintEnd_toEndOf="parent" + androidprv:layout_constraintStart_toStartOf="@+id/pin_pad_center_guideline" + androidprv:layout_constraintTop_toTopOf="parent" + android:layout_marginBottom="0dp" + androidprv:flow_verticalBias="0.5" /> + <Constraint + android:id="@+id/keyguard_selector_fade_container" + android:layout_width="0dp" + android:layout_height="wrap_content" + androidprv:layout_constraintBottom_toBottomOf="parent" + androidprv:layout_constraintEnd_toStartOf="@+id/pin_pad_center_guideline" + androidprv:layout_constraintStart_toStartOf="parent" + android:layout_marginBottom="@dimen/keyguard_eca_bottom_margin" + android:layout_marginTop="@dimen/keyguard_eca_top_margin" /> + + </ConstraintSet> +</MotionScene>
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java index a72d8137663b..98f082f78a38 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java @@ -64,8 +64,10 @@ public abstract class KeyguardInputView extends LinearLayout { return false; } - /** Change motion layout constraint set based on orientation */ - protected void updateConstraints(int orientation) { + /** Updates the keyguard view's constraints (single or split constraints). + * Split constraints are only used for small landscape screens. + * Only called when flag LANDSCAPE_ENABLE_LOCKSCREEN is enabled. */ + protected void updateConstraints(boolean useSplitBouncer) { //Unless overridden, never update constrains (keeping default portrait constraints) } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java index 42dbc487d774..8738d3300e93 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java @@ -16,6 +16,8 @@ package com.android.keyguard; +import static com.android.systemui.flags.Flags.LOCKSCREEN_ENABLE_LANDSCAPE; + import android.annotation.CallSuper; import android.annotation.NonNull; import android.annotation.Nullable; @@ -257,6 +259,8 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> mFalsingCollector, mKeyguardViewController, mFeatureFlags); } else if (keyguardInputView instanceof KeyguardPINView) { + ((KeyguardPINView) keyguardInputView).setIsLockScreenLandscapeEnabled( + mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE)); return new KeyguardPinViewController((KeyguardPINView) keyguardInputView, mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker, diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java index d9b7bde66c67..bb3e759dc157 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java @@ -16,12 +16,15 @@ package com.android.keyguard; +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_APPEAR; import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_DISAPPEAR; +import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_CLOSED; 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.animation.ValueAnimator; +import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; @@ -30,6 +33,7 @@ import android.view.View; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; +import androidx.constraintlayout.motion.widget.MotionLayout; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; @@ -46,12 +50,15 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { ValueAnimator mAppearAnimator = ValueAnimator.ofFloat(0f, 1f); private final DisappearAnimationUtils mDisappearAnimationUtils; private final DisappearAnimationUtils mDisappearAnimationUtilsLocked; - private ConstraintLayout mContainer; + @Nullable private MotionLayout mContainerMotionLayout; + @Nullable private ConstraintLayout mContainerConstraintLayout; private int mDisappearYTranslation; private View[][] mViews; private int mYTrans; private int mYTransOffset; private View mBouncerMessageArea; + private boolean mAlreadyUsingSplitBouncer = false; + private boolean mIsLockScreenLandscapeEnabled = false; @DevicePostureInt private int mLastDevicePosture = DEVICE_POSTURE_UNKNOWN; public static final long ANIMATION_DURATION = 650; @@ -76,6 +83,22 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { mYTransOffset = getResources().getDimensionPixelSize(R.dimen.pin_view_trans_y_entry_offset); } + /** Use motion layout (new bouncer implementation) if LOCKSCREEN_ENABLE_LANDSCAPE flag is + * enabled, instead of constraint layout (old bouncer implementation) */ + public void setIsLockScreenLandscapeEnabled(boolean isLockScreenLandscapeEnabled) { + mIsLockScreenLandscapeEnabled = isLockScreenLandscapeEnabled; + findContainerLayout(); + } + + private void findContainerLayout() { + if (mIsLockScreenLandscapeEnabled) { + mContainerMotionLayout = findViewById(R.id.pin_container); + } else { + mContainerConstraintLayout = findViewById(R.id.pin_container); + } + } + + @Override protected void onConfigurationChanged(Configuration newConfig) { updateMargins(); @@ -84,6 +107,17 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { void onDevicePostureChanged(@DevicePostureInt int posture) { if (mLastDevicePosture != posture) { mLastDevicePosture = posture; + + if (mIsLockScreenLandscapeEnabled) { + boolean useSplitBouncerAfterFold = + mLastDevicePosture == DEVICE_POSTURE_CLOSED + && getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE; + + if (mAlreadyUsingSplitBouncer != useSplitBouncerAfterFold) { + updateConstraints(useSplitBouncerAfterFold); + } + } + updateMargins(); } } @@ -135,18 +169,40 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { 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); + if (mIsLockScreenLandscapeEnabled) { + ConstraintSet cs = mContainerMotionLayout.getConstraintSet(R.id.single_constraints); + cs.setGuidelinePercent(R.id.pin_pad_top_guideline, + mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED ? halfOpenPercentage : 0.0f); + cs.applyTo(mContainerMotionLayout); + } else { + ConstraintSet cs = new ConstraintSet(); + cs.clone(mContainerConstraintLayout); + cs.setGuidelinePercent(R.id.pin_pad_top_guideline, + mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED ? halfOpenPercentage : 0.0f); + cs.applyTo(mContainerConstraintLayout); + } + } + + /** Updates the keyguard view's constraints (single or split constraints). + * Split constraints are only used for small landscape screens. + * Only called when flag LANDSCAPE_ENABLE_LOCKSCREEN is enabled. */ + @Override + protected void updateConstraints(boolean useSplitBouncer) { + mAlreadyUsingSplitBouncer = useSplitBouncer; + if (useSplitBouncer) { + mContainerMotionLayout.jumpToState(R.id.split_constraints); + mContainerMotionLayout.setMaxWidth(Integer.MAX_VALUE); + } else { + mContainerMotionLayout.jumpToState(R.id.single_constraints); + mContainerMotionLayout.setMaxWidth(getResources() + .getDimensionPixelSize(R.dimen.keyguard_security_width)); + } } @Override protected void onFinishInflate() { super.onFinishInflate(); - mContainer = findViewById(R.id.pin_container); mBouncerMessageArea = findViewById(R.id.bouncer_message_area); mViews = new View[][]{ new View[]{ diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index 7daea3f453f7..e9dd08c67b99 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -17,6 +17,7 @@ package com.android.keyguard; import static android.app.StatusBarManager.SESSION_KEYGUARD; +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static com.android.keyguard.KeyguardSecurityContainer.BOUNCER_DISMISS_BIOMETRIC; import static com.android.keyguard.KeyguardSecurityContainer.BOUNCER_DISMISS_EXTENDED_ACCESS; import static com.android.keyguard.KeyguardSecurityContainer.BOUNCER_DISMISS_NONE_SECURITY; @@ -375,7 +376,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard public void onOrientationChanged(int orientation) { if (mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE) && getResources().getBoolean(R.bool.update_bouncer_constraints)) { - mSecurityViewFlipperController.updateConstraints(orientation); + boolean useSplitBouncer = orientation == ORIENTATION_LANDSCAPE; + mSecurityViewFlipperController.updateConstraints(useSplitBouncer); } } }; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java index 891eb149427b..74f90063096e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java @@ -83,11 +83,13 @@ public class KeyguardSecurityViewFlipper extends ViewFlipper { return ""; } - /** Updates the keyguard view's constraints based on orientation */ - public void updateConstraints(int orientation) { + /** Updates the keyguard view's constraints (single or split constraints). + * Split constraints are only used for small landscape screens. + * Only called when flag LANDSCAPE_ENABLE_LOCKSCREEN is enabled. */ + public void updateConstraints(boolean useSplitBouncer) { KeyguardInputView securityView = getSecurityView(); if (securityView != null) { - securityView.updateConstraints(orientation); + securityView.updateConstraints(useSplitBouncer); } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java index 74f0beb71eb2..4cc90c244cf2 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java @@ -16,6 +16,7 @@ package com.android.keyguard; +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static com.android.systemui.flags.Flags.LOCKSCREEN_ENABLE_LANDSCAPE; import android.util.Log; @@ -136,12 +137,14 @@ public class KeyguardSecurityViewFlipperController if (onViewInflatedListener != null) { onViewInflatedListener.onViewInflated(childController); - // Portrait constrains are default + // Single bouncer constrains are default if (mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE) && getResources().getBoolean(R.bool.update_bouncer_constraints)) { - // updateConstraints based on orientation (only on small screens) - updateConstraints(getResources().getConfiguration().orientation); + boolean useSplitBouncer = + getResources().getConfiguration().orientation + == ORIENTATION_LANDSCAPE; + updateConstraints(useSplitBouncer); } } }); @@ -152,7 +155,7 @@ public class KeyguardSecurityViewFlipperController // TODO (b/297863911, b/297864907) - implement motion layout for other bouncers switch (securityMode) { case Pattern: return R.layout.keyguard_pattern_view; - case PIN: return R.layout.keyguard_pin_view; + case PIN: return R.layout.keyguard_pin_motion_layout; case Password: return R.layout.keyguard_password_view; case SimPin: return R.layout.keyguard_sim_pin_view; case SimPuk: return R.layout.keyguard_sim_puk_view; @@ -173,9 +176,11 @@ public class KeyguardSecurityViewFlipperController } } - /** Updates the keyguard view's constraints based on orientation */ - public void updateConstraints(int orientation) { - mView.updateConstraints(orientation); + /** Updates the keyguard view's constraints (single or split constraints). + * Split constraints are only used for small landscape screens. + * Only called when flag LANDSCAPE_ENABLE_LOCKSCREEN is enabled. */ + public void updateConstraints(boolean useSplitBouncer) { + mView.updateConstraints(useSplitBouncer); } /** Makes the supplied child visible if it is contained win this view, */ diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt index 61acacdb99a8..33d40976a2e4 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt @@ -113,6 +113,7 @@ class KeyguardPinViewControllerTest : SysuiTestCase() { // For posture tests: `when`(mockKeyguardPinView.buttons).thenReturn(arrayOf()) `when`(lockPatternUtils.getPinLength(anyInt())).thenReturn(6) + `when`(featureFlags.isEnabled(Flags.LOCKSCREEN_ENABLE_LANDSCAPE)).thenReturn(false) objectKeyguardPINView = View.inflate(mContext, R.layout.keyguard_pin_view, null) @@ -122,6 +123,7 @@ class KeyguardPinViewControllerTest : SysuiTestCase() { private fun constructPinViewController( mKeyguardPinView: KeyguardPINView ): KeyguardPinViewController { + mKeyguardPinView.setIsLockScreenLandscapeEnabled(false) return KeyguardPinViewController( mKeyguardPinView, keyguardUpdateMonitor, |