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

Commit ddc461be authored by Jonathon Axford's avatar Jonathon Axford Committed by Android (Google) Code Review
Browse files

Merge "PIN bouncer refactor with motion layout - change constraints on rotate" into main

parents ecf2a0d3 412aa82d
Loading
Loading
Loading
Loading
+243 −0
Original line number Diff line number Diff line
<?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
+0 −19
Original line number Diff line number Diff line
<?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>
+0 −21
Original line number Diff line number Diff line
<?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>
+73 −0
Original line number Diff line number Diff line
<?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
+4 −2
Original line number Diff line number Diff line
@@ -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)
    }

Loading