diff options
13 files changed, 257 insertions, 572 deletions
diff --git a/packages/SystemUI/res-keyguard/layout-land/keyguard_pin_view.xml b/packages/SystemUI/res-keyguard/layout-land/keyguard_pin_view.xml deleted file mode 100644 index cd7ab986844c..000000000000 --- a/packages/SystemUI/res-keyguard/layout-land/keyguard_pin_view.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?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. -*/ ---> - -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <include layout="@layout/keyguard_pin_view_landscape" /> - -</FrameLayout> diff --git a/packages/SystemUI/res-keyguard/layout-sw600dp-land/keyguard_pin_view.xml b/packages/SystemUI/res-keyguard/layout-sw600dp-land/keyguard_pin_view.xml deleted file mode 100644 index 80cc8c06680a..000000000000 --- a/packages/SystemUI/res-keyguard/layout-sw600dp-land/keyguard_pin_view.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?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. -*/ ---> - -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <include layout="@layout/keyguard_pin_view_portrait" /> - -</FrameLayout> diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml index 29e14c57a047..f3cd9e49b49c 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!-- ** -** Copyright 2012, The Android Open Source Project +** 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. @@ -16,10 +16,203 @@ ** limitations under the License. */ --> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + +<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_height="match_parent" + android:layout_gravity="center_horizontal|bottom" + android:clipChildren="false" + android:clipToPadding="false" + android:orientation="vertical" + androidprv:layout_maxWidth="@dimen/keyguard_security_width"> + + <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" /> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/pin_container" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_marginBottom="8dp" + android:clipChildren="false" + android:clipToPadding="false" + android:layout_weight="1" + android:layoutDirection="ltr" + android:orientation="vertical"> + + <!-- 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_constraintTop_toTopOf="parent" + androidprv:layout_constraintEnd_toEndOf="parent" + androidprv:layout_constraintStart_toStartOf="parent" + androidprv:layout_constraintBottom_toTopOf="@id/key1" + 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> + + <!-- 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" /> + + <com.android.keyguard.KeyguardPinFlowView + android:id="@+id/flow1" + android:layout_width="0dp" + android:layout_height="0dp" + android:orientation="horizontal" + android:clipChildren="false" + android:clipToPadding="false" + + 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_toBottomOf="parent" + androidprv:layout_constraintEnd_toEndOf="parent" + androidprv:layout_constraintStart_toStartOf="parent" + androidprv:layout_constraintTop_toBottomOf="@id/pin_pad_top_guideline" /> + + <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.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.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" /> + + <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" /> + </androidx.constraintlayout.widget.ConstraintLayout> - <include layout="@layout/keyguard_pin_view_portrait" /> + <include layout="@layout/keyguard_eca" + android:id="@+id/keyguard_selector_fade_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:layout_gravity="bottom|center_horizontal" + android:layout_marginTop="@dimen/keyguard_eca_top_margin" + android:layout_marginBottom="@dimen/keyguard_eca_bottom_margin" + android:gravity="center_horizontal"/> -</FrameLayout> +</com.android.keyguard.KeyguardPINView> diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view_landscape.xml b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view_landscape.xml deleted file mode 100644 index e00742d80017..000000000000 --- a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view_landscape.xml +++ /dev/null @@ -1,231 +0,0 @@ -<?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. -*/ ---> - -<com.android.keyguard.KeyguardPINView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - 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="horizontal"> - - <androidx.constraintlayout.widget.ConstraintLayout - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="2" - android:clipChildren="false" - android:clipToPadding="false" - android:layoutDirection="ltr" - android:orientation="vertical"> - - <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" - androidprv:layout_constraintBottom_toTopOf="@+id/row0" - androidprv:layout_constraintTop_toTopOf="parent" - androidprv:layout_constraintVertical_chainStyle="packed" /> - - <!-- 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/keyguard_selector_fade_container" - androidprv:layout_constraintTop_toBottomOf="@+id/bouncer_message_view" - tools:layout_editor_absoluteX="-16dp"> - - <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> - - <include - android:id="@+id/keyguard_selector_fade_container" - layout="@layout/keyguard_eca" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="bottom|center_horizontal" - android:layout_marginBottom="@dimen/keyguard_eca_bottom_margin" - android:layout_marginTop="@dimen/keyguard_eca_top_margin" - android:gravity="center_horizontal" - android:orientation="vertical" - androidprv:layout_constraintBottom_toBottomOf="parent" /> - - </androidx.constraintlayout.widget.ConstraintLayout> - - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/pin_container" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="3" - android:clipChildren="false" - android:clipToPadding="false" - android:layoutDirection="ltr" - android:orientation="vertical"> - - <!-- 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" /> - - <com.android.keyguard.KeyguardPinFlowView - android:id="@+id/flow1" - android:layout_width="0dp" - android:layout_height="0dp" - 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="0.5" - androidprv:flow_verticalGap="@dimen/num_pad_entry_row_margin_bottom" - androidprv:flow_verticalStyle="packed" - - androidprv:flow_wrapMode="aligned" - androidprv:layout_constraintBottom_toBottomOf="parent" - 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" /> - - </androidx.constraintlayout.widget.ConstraintLayout> - -</com.android.keyguard.KeyguardPINView> diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view_portrait.xml b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view_portrait.xml deleted file mode 100644 index f3cd9e49b49c..000000000000 --- a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view_portrait.xml +++ /dev/null @@ -1,218 +0,0 @@ -<?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. -*/ ---> - -<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" - androidprv:layout_maxWidth="@dimen/keyguard_security_width"> - - <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" /> - - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/pin_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_marginBottom="8dp" - android:clipChildren="false" - android:clipToPadding="false" - android:layout_weight="1" - android:layoutDirection="ltr" - android:orientation="vertical"> - - <!-- 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_constraintTop_toTopOf="parent" - androidprv:layout_constraintEnd_toEndOf="parent" - androidprv:layout_constraintStart_toStartOf="parent" - androidprv:layout_constraintBottom_toTopOf="@id/key1" - 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> - - <!-- 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" /> - - <com.android.keyguard.KeyguardPinFlowView - android:id="@+id/flow1" - android:layout_width="0dp" - android:layout_height="0dp" - android:orientation="horizontal" - android:clipChildren="false" - android:clipToPadding="false" - - 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_toBottomOf="parent" - androidprv:layout_constraintEnd_toEndOf="parent" - androidprv:layout_constraintStart_toStartOf="parent" - androidprv:layout_constraintTop_toBottomOf="@id/pin_pad_top_guideline" /> - - <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.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.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" /> - - <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" /> - </androidx.constraintlayout.widget.ConstraintLayout> - - <include layout="@layout/keyguard_eca" - android:id="@+id/keyguard_selector_fade_container" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:layout_gravity="bottom|center_horizontal" - android:layout_marginTop="@dimen/keyguard_eca_top_margin" - android:layout_marginBottom="@dimen/keyguard_eca_bottom_margin" - android:gravity="center_horizontal"/> - -</com.android.keyguard.KeyguardPINView> diff --git a/packages/SystemUI/res/values-sw600dp/bools.xml b/packages/SystemUI/res/values-sw600dp/bools.xml index 05e38bdb8389..d7ddf00f91c2 100644 --- a/packages/SystemUI/res/values-sw600dp/bools.xml +++ b/packages/SystemUI/res/values-sw600dp/bools.xml @@ -18,4 +18,12 @@ <resources> <!-- Whether to show the user switcher in quick settings when only a single user is present. --> <bool name="qs_show_user_switcher_for_single_user">true</bool> + + <!-- Do update bouncer constraints (port or land) on rotation. + Needed for bouncer refactor to use motion layout, because constraints should only be + changed on small screens. Only used when flag "lockscreen.enable_landscape" (b/293252410) + is enabled + + False here so bouncers constraints are not updated when rotating on large screens --> + <bool name="update_bouncer_constraints">false</bool> </resources> diff --git a/packages/SystemUI/res/values/bools.xml b/packages/SystemUI/res/values/bools.xml index 405a59fe1cc7..91d3a88dcc89 100644 --- a/packages/SystemUI/res/values/bools.xml +++ b/packages/SystemUI/res/values/bools.xml @@ -51,4 +51,12 @@ This configuration will only apply when config_remoteInsetsControllerControlsSystemBars. is set to true. --> <bool name="config_remoteInsetsControllerSystemBarsCanBeShownByUserAction">false</bool> + + <!-- Do update bouncer constraints (port or land) on rotation. + Needed for bouncer refactor to use motion layout, because constraints should only be + changed on small screens. Only used when flag "lockscreen.enable_landscape" (b/293252410) + is enabled + + True here so bouncers constraints are updated when rotating on small screens --> + <bool name="update_bouncer_constraints">true</bool> </resources> diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java index c9d906911dbc..a72d8137663b 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java @@ -64,6 +64,11 @@ public abstract class KeyguardInputView extends LinearLayout { return false; } + /** Change motion layout constraint set based on orientation */ + protected void updateConstraints(int orientation) { + //Unless overridden, never update constrains (keeping default portrait constraints) + } + protected AnimatorListenerAdapter getAnimationListener(int cuj) { return new AnimatorListenerAdapter() { private boolean mIsCancel; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index d90785dd266d..8fcddce646ea 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -369,11 +369,9 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard @Override public void onOrientationChanged(int orientation) { - if (mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE)) { - // TODO(b/295603468) - // Fix reinflation of views when flag is enabled. - KeyguardSecurityContainerController.this - .onDensityOrFontScaleOrOrientationChanged(); + if (mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE) + && getResources().getBoolean(R.bool.update_bouncer_constraints)) { + mSecurityViewFlipperController.updateConstraints(orientation); } } }; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java index 4d2391ad5596..891eb149427b 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java @@ -83,6 +83,14 @@ public class KeyguardSecurityViewFlipper extends ViewFlipper { return ""; } + /** Updates the keyguard view's constraints based on orientation */ + public void updateConstraints(int orientation) { + KeyguardInputView securityView = getSecurityView(); + if (securityView != null) { + securityView.updateConstraints(orientation); + } + } + @Override protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { return p instanceof LayoutParams; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java index bc5b1ba9a294..74f0beb71eb2 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java @@ -16,6 +16,8 @@ package com.android.keyguard; +import static com.android.systemui.flags.Flags.LOCKSCREEN_ENABLE_LANDSCAPE; + import android.util.Log; import android.view.LayoutInflater; @@ -116,30 +118,38 @@ public class KeyguardSecurityViewFlipperController public void asynchronouslyInflateView(SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback, @Nullable OnViewInflatedCallback onViewInflatedListener) { - int layoutId = getLayoutIdFor(securityMode); - int viewID = getKeyguardInputViewId(securityMode); - if (layoutId != 0 && viewID != 0) { + int layoutId = mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE) + ? getLayoutIdFor(securityMode) : getLegacyLayoutIdFor(securityMode); + if (layoutId != 0) { if (DEBUG) { - Log.v(TAG, "inflating on bg thread id = " - + layoutId + " . viewID = " + viewID); + Log.v(TAG, "inflating on bg thread id = " + layoutId + " ."); } mAsyncLayoutInflater.inflate(layoutId, mView, (view, resId, parent) -> { mView.addView(view); KeyguardInputViewController<KeyguardInputView> childController = mKeyguardSecurityViewControllerFactory.create( - (KeyguardInputView) view.findViewById(viewID), + (KeyguardInputView) view, securityMode, keyguardSecurityCallback); childController.init(); mChildren.add(childController); if (onViewInflatedListener != null) { onViewInflatedListener.onViewInflated(childController); + + // Portrait 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); + } } }); } } private int getLayoutIdFor(SecurityMode securityMode) { + // 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; @@ -151,19 +161,23 @@ public class KeyguardSecurityViewFlipperController } } - private int getKeyguardInputViewId(SecurityMode securityMode) { - //Keyguard Input View is not the root view of the layout, use these IDs for lookup. + private int getLegacyLayoutIdFor(SecurityMode securityMode) { switch (securityMode) { - case Pattern: return R.id.keyguard_pattern_view; - case PIN: return R.id.keyguard_pin_view; - case Password: return R.id.keyguard_password_view; - case SimPin: return R.id.keyguard_sim_pin_view; - case SimPuk: return R.id.keyguard_sim_puk_view; + case Pattern: return R.layout.keyguard_pattern_view; + case PIN: return R.layout.keyguard_pin_view; + 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; default: return 0; } } + /** Updates the keyguard view's constraints based on orientation */ + public void updateConstraints(int orientation) { + mView.updateConstraints(orientation); + } + /** Makes the supplied child visible if it is contained win this view, */ public void show(KeyguardInputViewController<KeyguardInputView> childController) { int index = childController.getIndexIn(mView); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt index 6bff4ce4aad9..eb83e2ac9e0f 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt @@ -622,51 +622,6 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { configurationListenerArgumentCaptor.value.onUiModeChanged() verify(view).reloadColors() } - @Test - fun onOrientationChanged_landscapeKeyguardFlagDisabled_blockReinflate() { - featureFlags.set(Flags.LOCKSCREEN_ENABLE_LANDSCAPE, false) - - // Run onOrientationChanged - val configurationListenerArgumentCaptor = - ArgumentCaptor.forClass(ConfigurationController.ConfigurationListener::class.java) - underTest.onViewAttached() - verify(configurationController).addCallback(configurationListenerArgumentCaptor.capture()) - clearInvocations(viewFlipperController) - configurationListenerArgumentCaptor.value.onOrientationChanged( - Configuration.ORIENTATION_LANDSCAPE - ) - // Verify view is reinflated when flag is on - verify(viewFlipperController, never()).clearViews() - verify(viewFlipperController, never()) - .asynchronouslyInflateView( - eq(SecurityMode.PIN), - any(), - onViewInflatedCallbackArgumentCaptor.capture() - ) - } - - @Test - fun onOrientationChanged_landscapeKeyguardFlagEnabled_doesReinflate() { - featureFlags.set(Flags.LOCKSCREEN_ENABLE_LANDSCAPE, true) - - // Run onOrientationChanged - val configurationListenerArgumentCaptor = - ArgumentCaptor.forClass(ConfigurationController.ConfigurationListener::class.java) - underTest.onViewAttached() - verify(configurationController).addCallback(configurationListenerArgumentCaptor.capture()) - clearInvocations(viewFlipperController) - configurationListenerArgumentCaptor.value.onOrientationChanged( - Configuration.ORIENTATION_LANDSCAPE - ) - // Verify view is reinflated when flag is on - verify(viewFlipperController).clearViews() - verify(viewFlipperController) - .asynchronouslyInflateView( - eq(SecurityMode.PIN), - any(), - onViewInflatedCallbackArgumentCaptor.capture() - ) - } @Test fun hasDismissActions() { diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java index 68c2f59722ad..19bc8186eee5 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java @@ -140,11 +140,6 @@ public class KeyguardSecurityViewFlipperControllerTest extends SysuiTestCase { @Test public void asynchronouslyInflateView_setNeedsInput() { - when(mKeyguardSecurityViewControllerFactory.create( - any(), any(SecurityMode.class), - any(KeyguardSecurityCallback.class))) - .thenReturn(mKeyguardInputViewController); - ArgumentCaptor<AsyncLayoutInflater.OnInflateFinishedListener> argumentCaptor = ArgumentCaptor.forClass(AsyncLayoutInflater.OnInflateFinishedListener.class); mKeyguardSecurityViewFlipperController.asynchronouslyInflateView(SecurityMode.PIN, |