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