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

Commit 26383ba6 authored by Austin Delgado's avatar Austin Delgado
Browse files

Update Biometric Prompt padding

- Updates BP padding to match spec
- Fixes AuthContainerViewTest
- Fixes transition from BP to credential view
- Fixes icon size when transitioning from implicit face to fingerprint

Test: Manual
Test: atest AuthContainerViewTest
Bug: 288175072
Flag: ACONFIG constraint_bp DEVELOPMENT
Change-Id: I950caf1e66c789ebc9dc7bd1fd289bb0e4aac1ce
parent f8c81ad3
Loading
Loading
Loading
Loading
+42 −104
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ android:layout_height="match_parent">
        android:paddingHorizontal="16dp"
        android:paddingVertical="16dp"
        android:visibility="visible"
        app:layout_constraintBottom_toTopOf="@+id/bottomGuideline"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/rightGuideline"
        app:layout_constraintStart_toStartOf="@+id/leftGuideline"
        app:layout_constraintTop_toTopOf="@+id/topGuideline" />
@@ -59,7 +59,7 @@ android:layout_height="match_parent">
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:fillViewport="true"
        android:padding="16dp"
        android:padding="24dp"
        app:layout_constrainedHeight="true"
        app:layout_constrainedWidth="true"
        app:layout_constraintBottom_toTopOf="@+id/buttonBarrier"
@@ -82,20 +82,20 @@ android:layout_height="match_parent">
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <LinearLayout
                android:id="@+id/customized_view_container"
                android:layout_width="wrap_content"
            <TextView
                android:id="@+id/logo_description"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:orientation="vertical"
                android:paddingHorizontal="0dp"
                android:visibility="gone"
                app:layout_constraintBottom_toBottomOf="parent"
                android:ellipsize="marquee"
                android:gravity="@integer/biometric_dialog_text_gravity"
                android:marqueeRepeatLimit="1"
                android:singleLine="true"
                android:textAlignment="viewStart"
                android:paddingLeft="8dp"
                app:layout_constraintBottom_toBottomOf="@+id/logo"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/subtitle"
                app:layout_constraintVertical_bias="0.0" />
                app:layout_constraintStart_toEndOf="@+id/logo"
                app:layout_constraintTop_toTopOf="@+id/logo" />

            <Space
                android:id="@+id/space_above_content"
@@ -108,6 +108,7 @@ android:layout_height="match_parent">
                style="@style/TextAppearance.AuthCredential.Title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="12dp"
                android:gravity="@integer/biometric_dialog_text_gravity"
                android:paddingHorizontal="0dp"
                android:textAlignment="viewStart"
@@ -124,6 +125,7 @@ android:layout_height="match_parent">
                style="@style/TextAppearance.AuthCredential.Subtitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="12dp"
                android:gravity="@integer/biometric_dialog_text_gravity"
                android:paddingHorizontal="0dp"
                android:textAlignment="viewStart"
@@ -133,14 +135,14 @@ android:layout_height="match_parent">
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/title" />

            <TextView
                android:id="@+id/description"
                style="@style/TextAppearance.AuthCredential.Description"
            <LinearLayout
                android:id="@+id/customized_view_container"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="@integer/biometric_dialog_text_gravity"
                android:gravity="center_vertical"
                android:orientation="vertical"
                android:paddingHorizontal="0dp"
                android:textAlignment="viewStart"
                android:visibility="gone"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
@@ -149,19 +151,20 @@ android:layout_height="match_parent">
                app:layout_constraintVertical_bias="0.0" />

            <TextView
                android:id="@+id/logo_description"
                android:layout_width="0dp"
                android:id="@+id/description"
                style="@style/TextAppearance.AuthCredential.Description"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="marquee"
                android:gravity="@integer/biometric_dialog_text_gravity"
                android:marqueeRepeatLimit="1"
                android:singleLine="true"
                android:paddingHorizontal="0dp"
                android:textAlignment="viewStart"
                android:paddingLeft="8dp"
                app:layout_constraintBottom_toBottomOf="@+id/logo"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/logo"
                app:layout_constraintTop_toTopOf="@+id/logo" />
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/subtitle"
                app:layout_constraintVertical_bias="0.0" />


            <androidx.constraintlayout.widget.Barrier
                android:id="@+id/contentBarrier"
@@ -178,7 +181,7 @@ android:layout_height="match_parent">
        android:id="@+id/indicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginTop="24dp"
        android:accessibilityLiveRegion="polite"
        android:fadingEdge="horizontal"
        android:gravity="center_horizontal"
@@ -192,80 +195,15 @@ android:layout_height="match_parent">
        app:layout_constraintTop_toBottomOf="@+id/biometric_icon"
        app:layout_constraintVertical_bias="0.0" />

    <!-- Negative Button, reserved for app -->
    <Button
        android:id="@+id/button_negative"
        style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/bottomGuideline"
        app:layout_constraintStart_toStartOf="@+id/scrollView" />

    <!-- Cancel Button, replaces negative button when biometric is accepted -->
    <Button
        android:id="@+id/button_cancel"
        style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:text="@string/cancel"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/bottomGuideline"
        app:layout_constraintStart_toStartOf="@+id/scrollView" />

    <!-- "Use Credential" Button, replaces if device credential is allowed -->
    <Button
        android:id="@+id/button_use_credential"
        style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/bottomGuideline"
        app:layout_constraintStart_toStartOf="@+id/scrollView" />

    <!-- Positive Button -->
    <Button
        android:id="@+id/button_confirm"
        style="@*android:style/Widget.DeviceDefault.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginRight="8dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:text="@string/biometric_dialog_confirm"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/bottomGuideline"
        app:layout_constraintEnd_toEndOf="@+id/scrollView"
        tools:visibility="invisible" />

    <!-- Try Again Button -->
    <Button
        android:id="@+id/button_try_again"
        style="@*android:style/Widget.DeviceDefault.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginRight="8dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:text="@string/biometric_dialog_try_again"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/bottomGuideline"
        app:layout_constraintEnd_toEndOf="@+id/scrollView" />
    <include
        android:id="@+id/button_bar"
        layout="@layout/biometric_prompt_button_bar"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@id/bottomGuideline"
        app:layout_constraintEnd_toEndOf="@id/scrollView"
        app:layout_constraintStart_toStartOf="@id/scrollView"
        app:layout_constraintTop_toBottomOf="@id/scrollView" />

    <!-- Guidelines for setting panel border -->
    <androidx.constraintlayout.widget.Barrier
@@ -282,7 +220,7 @@ android:layout_height="match_parent">
        android:layout_height="wrap_content"
        app:barrierAllowsGoneWidgets="false"
        app:barrierDirection="top"
        app:constraint_referenced_ids="button_negative, button_cancel, button_use_credential, button_confirm, button_try_again" />
        app:constraint_referenced_ids="button_bar" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/leftGuideline"
+35 −95
Original line number Diff line number Diff line
@@ -23,92 +23,29 @@
        android:clickable="true"
        android:clipToOutline="true"
        android:importantForAccessibility="no"
        android:paddingHorizontal="16dp"
        android:paddingVertical="16dp"
        android:visibility="visible"
        app:layout_constraintBottom_toTopOf="@+id/bottomGuideline"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/rightGuideline"
        app:layout_constraintStart_toStartOf="@+id/leftGuideline"
        app:layout_constraintTop_toTopOf="@+id/topBarrier" />

    <Button
        android:id="@+id/button_negative"
        style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/panel"
        app:layout_constraintStart_toStartOf="@+id/panel" />

    <Button
        android:id="@+id/button_cancel"
        style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:text="@string/cancel"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/panel"
        app:layout_constraintStart_toStartOf="@+id/panel" />

    <Button
        android:id="@+id/button_use_credential"
        style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/panel"
        app:layout_constraintStart_toStartOf="@+id/panel" />

    <Button
        android:id="@+id/button_confirm"
        style="@*android:style/Widget.DeviceDefault.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginRight="8dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:text="@string/biometric_dialog_confirm"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/panel"
        app:layout_constraintEnd_toEndOf="@+id/panel"
        tools:visibility="invisible" />

    <Button
        android:id="@+id/button_try_again"
        style="@*android:style/Widget.DeviceDefault.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="8dp"
        android:layout_marginRight="8dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:text="@string/biometric_dialog_try_again"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/panel"
        app:layout_constraintEnd_toEndOf="@+id/panel" />

    <!-- Negative Button, reserved for app -->
    <include
        layout="@layout/biometric_prompt_button_bar"
        android:id="@+id/button_bar"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toTopOf="@id/bottomGuideline"
        app:layout_constraintEnd_toEndOf="@id/panel"
        app:layout_constraintStart_toStartOf="@id/panel"/>

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:padding="16dp"
        android:paddingBottom="36dp"
        android:paddingHorizontal="24dp"
        android:paddingTop="24dp"
        app:layout_constrainedHeight="true"
        app:layout_constrainedWidth="true"
        app:layout_constraintBottom_toTopOf="@+id/biometric_icon"
@@ -134,18 +71,19 @@
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <LinearLayout
                android:id="@+id/customized_view_container"
                android:layout_width="wrap_content"
            <TextView
                android:id="@+id/logo_description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:orientation="vertical"
                android:paddingHorizontal="@dimen/biometric_prompt_content_container_padding_horizontal"
                android:visibility="gone"
                app:layout_constraintBottom_toBottomOf="parent"
                android:ellipsize="marquee"
                android:gravity="@integer/biometric_dialog_text_gravity"
                android:marqueeRepeatLimit="1"
                android:singleLine="true"
                android:paddingTop="16dp"
                app:layout_constraintBottom_toTopOf="@+id/title"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/subtitle" />
                app:layout_constraintTop_toBottomOf="@+id/logo" />

            <Space
                android:id="@+id/space_above_content"
@@ -159,6 +97,7 @@
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="@integer/biometric_dialog_text_gravity"
                android:paddingTop="16dp"
                app:layout_constraintBottom_toTopOf="@+id/subtitle"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
@@ -170,23 +109,24 @@
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="@integer/biometric_dialog_text_gravity"
                android:paddingTop="16dp"
                app:layout_constraintBottom_toTopOf="@+id/contentBarrier"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/title" />

            <TextView
                android:id="@+id/logo_description"
                android:layout_width="match_parent"
            <LinearLayout
                android:id="@+id/customized_view_container"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="marquee"
                android:gravity="@integer/biometric_dialog_text_gravity"
                android:marqueeRepeatLimit="1"
                android:singleLine="true"
                app:layout_constraintBottom_toTopOf="@+id/title"
                android:gravity="center_vertical"
                android:orientation="vertical"
                android:paddingHorizontal="@dimen/biometric_prompt_content_container_padding_horizontal"
                android:visibility="gone"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/logo" />
                app:layout_constraintTop_toBottomOf="@+id/subtitle" />

            <TextView
                android:id="@+id/description"
@@ -215,7 +155,7 @@
        android:id="@+id/indicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginTop="24dp"
        android:accessibilityLiveRegion="polite"
        android:fadingEdge="horizontal"
        android:gravity="center_horizontal"
@@ -247,7 +187,7 @@
        android:layout_height="wrap_content"
        app:barrierAllowsGoneWidgets="false"
        app:barrierDirection="top"
        app:constraint_referenced_ids="button_negative, button_cancel, button_use_credential, button_confirm, button_try_again" />
        app:constraint_referenced_ids="button_bar" />

    <!-- Guidelines for setting panel border -->
    <androidx.constraintlayout.widget.Guideline
+91 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?><!--
  ~ Copyright (C) 2024 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.
  -->

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- Negative Button, reserved for app -->
    <Button
        android:id="@+id/button_negative"
        style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="24dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <!-- Cancel Button, replaces negative button when biometric is accepted -->
    <Button
        android:id="@+id/button_cancel"
        style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="24dp"
        android:text="@string/cancel"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <!-- "Use Credential" Button, replaces if device credential is allowed -->
    <Button
        android:id="@+id/button_use_credential"
        style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="24dp"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <!-- Positive Button -->
    <Button
        android:id="@+id/button_confirm"
        style="@*android:style/Widget.DeviceDefault.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="24dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:text="@string/biometric_dialog_confirm"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <!-- Try Again Button -->
    <Button
        android:id="@+id/button_try_again"
        style="@*android:style/Widget.DeviceDefault.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="24dp"
        android:ellipsize="end"
        android:maxLines="2"
        android:text="@string/biometric_dialog_try_again"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
+61 −130

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -1087,7 +1087,7 @@
    <dimen name="biometric_dialog_fingerprint_icon_height">80dp</dimen>
    <dimen name="biometric_dialog_button_negative_max_width">160dp</dimen>
    <dimen name="biometric_dialog_button_positive_max_width">136dp</dimen>
    <dimen name="biometric_dialog_corner_size">4dp</dimen>
    <dimen name="biometric_dialog_corner_size">28dp</dimen>
    <!-- Y translation when showing/dismissing the dialog-->
    <dimen name="biometric_dialog_animation_translation_offset">350dp</dimen>
    <dimen name="biometric_dialog_border_padding">4dp</dimen>
Loading