1<!--
2  ~ Copyright (C) 2023 The Android Open Source Project
3  ~
4  ~ Licensed under the Apache License, Version 2.0 (the "License");
5  ~ you may not use this file except in compliance with the License.
6  ~ You may obtain a copy of the License at
7  ~
8  ~      http://www.apache.org/licenses/LICENSE-2.0
9  ~
10  ~ Unless required by applicable law or agreed to in writing, software
11  ~ distributed under the License is distributed on an "AS IS" BASIS,
12  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  ~ See the License for the specific language governing permissions and
14  ~ limitations under the License.
15  -->
16<com.android.systemui.biometrics.ui.BiometricPromptLayout
17    xmlns:android="http://schemas.android.com/apk/res/android"
18    android:id="@+id/contents"
19    android:layout_width="wrap_content"
20    android:layout_height="wrap_content"
21    android:orientation="vertical">
22
23    <TextView
24        android:id="@+id/title"
25        android:layout_width="match_parent"
26        android:layout_height="wrap_content"
27        android:gravity="@integer/biometric_dialog_text_gravity"
28        android:singleLine="true"
29        android:marqueeRepeatLimit="1"
30        android:ellipsize="marquee"
31        style="@style/TextAppearance.AuthCredential.Title"/>
32
33    <TextView
34        android:id="@+id/subtitle"
35        android:layout_width="match_parent"
36        android:layout_height="wrap_content"
37        android:gravity="@integer/biometric_dialog_text_gravity"
38        android:singleLine="true"
39        android:marqueeRepeatLimit="1"
40        android:ellipsize="marquee"
41        style="@style/TextAppearance.AuthCredential.Subtitle"/>
42
43    <TextView
44        android:id="@+id/description"
45        android:layout_width="match_parent"
46        android:layout_height="wrap_content"
47        android:scrollbars ="vertical"
48        android:importantForAccessibility="no"
49        style="@style/TextAppearance.AuthCredential.Description"/>
50
51    <Space android:id="@+id/space_above_icon"
52        android:layout_width="match_parent"
53        android:layout_height="48dp" />
54
55    <FrameLayout
56        android:id="@+id/biometric_icon_frame"
57        android:layout_width="wrap_content"
58        android:layout_height="wrap_content"
59        android:layout_gravity="center">
60
61        <com.android.systemui.biometrics.BiometricPromptLottieViewWrapper
62            android:id="@+id/biometric_icon"
63            android:layout_width="wrap_content"
64            android:layout_height="wrap_content"
65            android:layout_gravity="center"
66            android:contentDescription="@null"
67            android:scaleType="fitXY" />
68
69        <com.android.systemui.biometrics.BiometricPromptLottieViewWrapper
70            android:id="@+id/biometric_icon_overlay"
71            android:layout_width="wrap_content"
72            android:layout_height="wrap_content"
73            android:layout_gravity="center"
74            android:contentDescription="@null"
75            android:scaleType="fitXY" />
76    </FrameLayout>
77
78    <!-- For sensors such as UDFPS, this view is used during custom measurement/layout to add extra
79         padding so that the biometric icon is always in the right physical position. -->
80    <Space android:id="@+id/space_below_icon"
81        android:layout_width="match_parent"
82        android:layout_height="12dp" />
83
84    <TextView
85        android:id="@+id/indicator"
86        android:layout_width="match_parent"
87        android:layout_height="wrap_content"
88        android:paddingHorizontal="24dp"
89        android:textSize="12sp"
90        android:gravity="center_horizontal"
91        android:accessibilityLiveRegion="polite"
92        android:singleLine="true"
93        android:ellipsize="marquee"
94        android:marqueeRepeatLimit="marquee_forever"
95        android:scrollHorizontally="true"
96        android:fadingEdge="horizontal"
97        android:textColor="@color/biometric_dialog_gray"/>
98
99    <LinearLayout
100        android:id="@+id/button_bar"
101        android:layout_width="match_parent"
102        android:layout_height="88dp"
103        style="?android:attr/buttonBarStyle"
104        android:orientation="horizontal"
105        android:paddingTop="24dp">
106
107        <Space android:id="@+id/leftSpacer"
108            android:layout_width="8dp"
109            android:layout_height="match_parent"
110            android:visibility="visible" />
111
112        <!-- Negative Button, reserved for app -->
113        <Button android:id="@+id/button_negative"
114            android:layout_width="wrap_content"
115            android:layout_height="wrap_content"
116            style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
117            android:layout_gravity="center_vertical"
118            android:ellipsize="end"
119            android:maxLines="2"
120            android:maxWidth="@dimen/biometric_dialog_button_negative_max_width"
121            android:visibility="gone"/>
122        <!-- Cancel Button, replaces negative button when biometric is accepted -->
123        <Button android:id="@+id/button_cancel"
124            android:layout_width="wrap_content"
125            android:layout_height="wrap_content"
126            style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
127            android:layout_gravity="center_vertical"
128            android:maxWidth="@dimen/biometric_dialog_button_negative_max_width"
129            android:text="@string/cancel"
130            android:visibility="gone"/>
131        <!-- "Use Credential" Button, replaces if device credential is allowed -->
132        <Button android:id="@+id/button_use_credential"
133            android:layout_width="wrap_content"
134            android:layout_height="wrap_content"
135            style="@*android:style/Widget.DeviceDefault.Button.Borderless.Colored"
136            android:layout_gravity="center_vertical"
137            android:maxWidth="@dimen/biometric_dialog_button_negative_max_width"
138            android:visibility="gone"/>
139
140        <Space android:id="@+id/middleSpacer"
141            android:layout_width="0dp"
142            android:layout_height="match_parent"
143            android:layout_weight="1"
144            android:visibility="visible"/>
145
146        <!-- Positive Button -->
147        <Button android:id="@+id/button_confirm"
148            android:layout_width="wrap_content"
149            android:layout_height="wrap_content"
150            style="@*android:style/Widget.DeviceDefault.Button.Colored"
151            android:layout_gravity="center_vertical"
152            android:ellipsize="end"
153            android:maxLines="2"
154            android:maxWidth="@dimen/biometric_dialog_button_positive_max_width"
155            android:text="@string/biometric_dialog_confirm"
156            android:visibility="gone"/>
157        <!-- Try Again Button -->
158        <Button android:id="@+id/button_try_again"
159            android:layout_width="wrap_content"
160            android:layout_height="wrap_content"
161            style="@*android:style/Widget.DeviceDefault.Button.Colored"
162            android:layout_gravity="center_vertical"
163            android:ellipsize="end"
164            android:maxLines="2"
165            android:maxWidth="@dimen/biometric_dialog_button_positive_max_width"
166            android:text="@string/biometric_dialog_try_again"
167            android:visibility="gone"/>
168
169        <Space android:id="@+id/rightSpacer"
170            android:layout_width="8dp"
171            android:layout_height="match_parent"
172            android:visibility="visible" />
173    </LinearLayout>
174
175</com.android.systemui.biometrics.ui.BiometricPromptLayout>
176