Merge changes Ibff5b56f,I24f48aef

* changes:
  Add null checks in BiometricService
  Update BiometricPrompt icons and logic
This commit is contained in:
Kevin Chyn
2019-01-04 00:32:45 +00:00
committed by Android (Google) Code Review
14 changed files with 3193 additions and 1233 deletions

View File

@@ -0,0 +1,517 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2018 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
-->
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt">
<aapt:attr name="android:drawable">
<vector
android:width="60dp"
android:height="60dp"
android:viewportWidth="60"
android:viewportHeight="60">
<group android:name="_R_G">
<group
android:name="_R_G_L_0_G_N_1_T_0"
android:translateX="30"
android:translateY="30">
<group
android:name="_R_G_L_0_G"
android:translateX="-30"
android:translateY="-30">
<path
android:name="_R_G_L_0_G_D_0_P_0"
android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c "
android:strokeWidth="2.5"
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorError"
android:trimPathStart="0"
android:trimPathEnd="1"
android:trimPathOffset="0" />
<path
android:name="_R_G_L_0_G_D_1_P_0"
android:pathData=" M34.78 38.76 C33.83,38.75 31.54,38.75 30.01,38.75 C26.97,38.75 26.14,38.75 24.3,38.76 "
android:strokeWidth="2.5"
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorError"
android:trimPathStart="0.34"
android:trimPathEnd="0.5700000000000001"
android:trimPathOffset="0" />
<group
android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0"
android:scaleX="0.3"
android:scaleY="0.3"
android:translateX="37.788"
android:translateY="19.53">
<path
android:name="_R_G_L_0_G_D_2_P_0"
android:fillAlpha="0"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.1,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " />
</group>
<group
android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0"
android:scaleX="0.3"
android:scaleY="0.3"
android:translateX="22.005"
android:translateY="19.51">
<path
android:name="_R_G_L_0_G_D_3_P_0"
android:fillAlpha="0"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.2,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " />
</group>
<group
android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0"
android:translateX="30.3"
android:translateY="29.215">
<path
android:name="_R_G_L_0_G_D_4_P_0"
android:fillAlpha="1"
android:fillColor="?android:attr/colorError"
android:fillType="nonZero"
android:pathData=" M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-11.71 -1.5,-11.71 C-1.5,-11.71 0.9,-11.71 0.9,-11.71 C0.9,-11.71 0.9,3.25 0.9,3.25c " />
</group>
</group>
</group>
</group>
<group android:name="time_group" />
</vector>
</aapt:attr>
<target android:name="_R_G_L_0_G_D_0_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="strokeColor"
android:startOffset="0"
android:valueFrom="?android:attr/colorError"
android:valueTo="?android:attr/colorError"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="strokeColor"
android:startOffset="83"
android:valueFrom="?android:attr/colorError"
android:valueTo="@color/biometric_face_icon_gray"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="strokeColor"
android:startOffset="0"
android:valueFrom="?android:attr/colorError"
android:valueTo="?android:attr/colorError"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="strokeColor"
android:startOffset="83"
android:valueFrom="?android:attr/colorError"
android:valueTo="@color/biometric_face_icon_gray"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="217"
android:propertyName="strokeWidth"
android:startOffset="0"
android:valueFrom="2.5"
android:valueTo="2"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="217"
android:propertyName="pathData"
android:startOffset="0"
android:valueFrom="M34.78 38.76 C33.83,38.75 31.54,38.75 30.01,38.75 C26.97,38.75 26.14,38.75 24.3,38.76 "
android:valueTo="M33.75 42.75 C32.75,43.76 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 "
android:valueType="pathType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="217"
android:propertyName="trimPathStart"
android:startOffset="0"
android:valueFrom="0.34"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="217"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0.5700000000000001"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_2_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="fillAlpha"
android:startOffset="83"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:pathData="M 37.788,19.53C 38.3400184636116,20.241653709411622 37.235981536388394,18.81834629058838 37.788,19.53"
android:propertyName="translateXY"
android:propertyXName="translateX"
android:propertyYName="translateY"
android:startOffset="0">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:pathData="M 37.788,19.53C 38.3400184636116,20.241653709411622 40.5479815363884,23.08834629058838 41.1,23.8"
android:propertyName="translateXY"
android:propertyXName="translateX"
android:propertyYName="translateY"
android:startOffset="50">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="0.3"
android:valueTo="0.3"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="50"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="0.3"
android:valueTo="0.3"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="117"
android:propertyName="scaleX"
android:startOffset="50"
android:valueFrom="0.3"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="117"
android:propertyName="scaleY"
android:startOffset="50"
android:valueFrom="0.3"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="fillAlpha"
android:startOffset="83"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:pathData="M 22.005,19.51C 21.43742198228836,20.224974105358122 22.57257801771164,18.79502589464188 22.005,19.51"
android:propertyName="translateXY"
android:propertyXName="translateX"
android:propertyYName="translateY"
android:startOffset="0">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:pathData="M 22.005,19.51C 21.43742198228836,20.224974105358122 19.16757801771164,23.08502589464188 18.6,23.8"
android:propertyName="translateXY"
android:propertyXName="translateX"
android:propertyYName="translateY"
android:startOffset="50">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="0.3"
android:valueTo="0.3"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="50"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="0.3"
android:valueTo="0.3"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="117"
android:propertyName="scaleX"
android:startOffset="50"
android:valueFrom="0.3"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="117"
android:propertyName="scaleY"
android:startOffset="50"
android:valueFrom="0.3"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="fillColor"
android:startOffset="0"
android:valueFrom="?android:attr/colorError"
android:valueTo="?android:attr/colorError"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="fillColor"
android:startOffset="83"
android:valueFrom="?android:attr/colorError"
android:valueTo="@color/biometric_face_icon_gray"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="150"
android:pathData="M 30.3,29.215C 30.3,29.58759101867676 30.3,31.077408981323238 30.3,31.45"
android:propertyName="translateXY"
android:propertyXName="translateX"
android:propertyYName="translateY"
android:startOffset="0">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="pathData"
android:startOffset="0"
android:valueFrom="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-11.71 -1.5,-11.71 C-1.5,-11.71 0.9,-11.71 0.9,-11.71 C0.9,-11.71 0.9,3.25 0.9,3.25c "
android:valueTo="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-3.25 -1.5,-3.25 C-1.5,-3.25 0.9,-3.25 0.9,-3.25 C0.9,-3.25 0.9,3.25 0.9,3.25c "
android:valueType="pathType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.321,0 0.67,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="133"
android:propertyName="pathData"
android:startOffset="83"
android:valueFrom="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-3.25 -1.5,-3.25 C-1.5,-3.25 0.9,-3.25 0.9,-3.25 C0.9,-3.25 0.9,3.25 0.9,3.25c "
android:valueTo="M2.6 3.25 C2.6,3.25 -2.6,3.25 -2.6,3.25 C-2.6,3.25 -2.6,1.25 -2.6,1.25 C-2.6,1.25 0.6,1.25 0.6,1.25 C0.6,1.25 0.6,-3.25 0.6,-3.25 C0.6,-3.25 2.6,-3.25 2.6,-3.25 C2.6,-3.25 2.6,3.25 2.6,3.25c "
android:valueType="pathType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.568,0 0.456,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="time_group">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="233"
android:propertyName="translateX"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
</set>
</aapt:attr>
</target>
</animated-vector>

View File

@@ -0,0 +1,637 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2018 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
-->
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt">
<aapt:attr name="android:drawable">
<vector
android:width="60dp"
android:height="60dp"
android:viewportWidth="60"
android:viewportHeight="60">
<group android:name="_R_G">
<group
android:name="_R_G_L_0_G_N_2_T_0"
android:translateX="30"
android:translateY="30">
<group
android:name="_R_G_L_0_G"
android:translateX="-30"
android:translateY="-30">
<group
android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0"
android:scaleX="0.08"
android:scaleY="0.08"
android:translateX="30.1"
android:translateY="30.083">
<path
android:name="_R_G_L_0_G_D_0_P_0"
android:fillAlpha="0"
android:fillColor="?android:attr/colorAccent"
android:fillType="nonZero"
android:pathData=" M-116 -16.5 C-116,-16.5 -31.25,68.5 -31.25,68.5 C-31.25,68.5 108.75,-71.5 108.75,-71.5 "
android:trimPathStart="0"
android:trimPathEnd="0"
android:trimPathOffset="0" />
</group>
<group
android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0"
android:scaleX="0.08"
android:scaleY="0.08"
android:translateX="30.1"
android:translateY="30.083">
<path
android:name="_R_G_L_0_G_D_1_P_0"
android:pathData=" M-116 -16.5 C-116,-16.5 -31.25,68.5 -31.25,68.5 C-31.25,68.5 108.75,-71.5 108.75,-71.5 "
android:strokeWidth="20"
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:trimPathStart="0"
android:trimPathEnd="0"
android:trimPathOffset="0" />
</group>
<path
android:name="_R_G_L_0_G_D_2_P_0"
android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c "
android:strokeWidth="2.5"
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:trimPathStart="0"
android:trimPathEnd="1"
android:trimPathOffset="0" />
<group
android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0"
android:pivotX="1.05"
android:pivotY="-9.891"
android:scaleX="1"
android:scaleY="1"
android:translateX="29.044"
android:translateY="41.647">
<path
android:name="_R_G_L_0_G_D_3_P_0"
android:pathData=" M4.71 1.1 C3.71,2.12 2.32,2.75 0.79,2.75 C-2.25,2.75 -4.7,0.29 -4.7,-2.75 "
android:strokeWidth="2"
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:trimPathStart="0"
android:trimPathEnd="1"
android:trimPathOffset="0" />
</group>
<group
android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0"
android:scaleX="1"
android:scaleY="1"
android:translateX="41.1"
android:translateY="23.8">
<path
android:name="_R_G_L_0_G_D_4_P_0"
android:fillAlpha="1"
android:fillColor="?android:attr/colorAccent"
android:fillType="nonZero"
android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.1,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " />
</group>
<group
android:name="_R_G_L_0_G_D_5_P_0_G_0_T_0"
android:scaleX="1"
android:scaleY="1"
android:translateX="18.6"
android:translateY="23.8">
<path
android:name="_R_G_L_0_G_D_5_P_0"
android:fillAlpha="1"
android:fillColor="?android:attr/colorAccent"
android:fillType="nonZero"
android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.2,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " />
</group>
<group
android:name="_R_G_L_0_G_D_6_P_0_G_0_T_0"
android:scaleX="1"
android:scaleY="1"
android:translateX="30.727"
android:translateY="31.703">
<path
android:name="_R_G_L_0_G_D_6_P_0"
android:fillAlpha="1"
android:fillColor="?android:attr/colorAccent"
android:fillType="nonZero"
android:pathData=" M2.6 3.25 C2.6,3.25 -2.6,3.25 -2.6,3.25 C-2.6,3.25 -2.6,1.25 -2.6,1.25 C-2.6,1.25 0.6,1.25 0.6,1.25 C0.6,1.25 0.6,-3.25 0.6,-3.25 C0.6,-3.25 2.6,-3.25 2.6,-3.25 C2.6,-3.25 2.6,3.25 2.6,3.25c " />
</group>
</group>
</group>
</group>
<group android:name="time_group" />
</vector>
</aapt:attr>
<target android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="0.08"
android:valueTo="0.08"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="33"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="0.08"
android:valueTo="0.08"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:propertyName="scaleX"
android:startOffset="33"
android:valueFrom="0.08"
android:valueTo="0.12789"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:propertyName="scaleY"
android:startOffset="33"
android:valueFrom="0.08"
android:valueTo="0.12789"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleX"
android:startOffset="200"
android:valueFrom="0.12789"
android:valueTo="0.12241"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleY"
android:startOffset="200"
android:valueFrom="0.12789"
android:valueTo="0.12241"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleX"
android:startOffset="300"
android:valueFrom="0.12241"
android:valueTo="0.125"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleY"
android:startOffset="300"
android:valueFrom="0.12241"
android:valueTo="0.125"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_0_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="233"
android:propertyName="trimPathEnd"
android:startOffset="33"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="0.08"
android:valueTo="0.08"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="33"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="0.08"
android:valueTo="0.08"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:propertyName="scaleX"
android:startOffset="33"
android:valueFrom="0.08"
android:valueTo="0.12789"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:propertyName="scaleY"
android:startOffset="33"
android:valueFrom="0.08"
android:valueTo="0.12789"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleX"
android:startOffset="200"
android:valueFrom="0.12789"
android:valueTo="0.12241"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleY"
android:startOffset="200"
android:valueFrom="0.12789"
android:valueTo="0.12241"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleX"
android:startOffset="300"
android:valueFrom="0.12241"
android:valueTo="0.125"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleY"
android:startOffset="300"
android:valueFrom="0.12241"
android:valueTo="0.125"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="233"
android:propertyName="trimPathEnd"
android:startOffset="33"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_2_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:propertyName="strokeColor"
android:startOffset="0"
android:valueFrom="?android:attr/colorAccent"
android:valueTo="?android:attr/colorAccent"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="strokeColor"
android:startOffset="67"
android:valueFrom="?android:attr/colorAccent"
android:valueTo="?android:attr/colorAccent"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="strokeAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.65"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.65"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="trimPathStart"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0.5"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.5"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="83"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_5_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_5_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="83"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_6_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_6_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.287,0.12 0.667,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="83"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.287,0.12 0.667,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="time_group">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="383"
android:propertyName="translateX"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
</set>
</aapt:attr>
</target>
</animated-vector>

View File

@@ -0,0 +1,637 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2018 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
-->
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt">
<aapt:attr name="android:drawable">
<vector
android:width="60dp"
android:height="60dp"
android:viewportWidth="60"
android:viewportHeight="60">
<group android:name="_R_G">
<group
android:name="_R_G_L_0_G_N_2_T_0"
android:translateX="30"
android:translateY="30">
<group
android:name="_R_G_L_0_G"
android:translateX="-30"
android:translateY="-30">
<group
android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0"
android:scaleX="0.08"
android:scaleY="0.08"
android:translateX="30.1"
android:translateY="30.083">
<path
android:name="_R_G_L_0_G_D_0_P_0"
android:fillAlpha="0"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M-116 -16.5 C-116,-16.5 -31.25,68.5 -31.25,68.5 C-31.25,68.5 108.75,-71.5 108.75,-71.5 "
android:trimPathStart="0"
android:trimPathEnd="0"
android:trimPathOffset="0" />
</group>
<group
android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0"
android:scaleX="0.08"
android:scaleY="0.08"
android:translateX="30.1"
android:translateY="30.083">
<path
android:name="_R_G_L_0_G_D_1_P_0"
android:pathData=" M-116 -16.5 C-116,-16.5 -31.25,68.5 -31.25,68.5 C-31.25,68.5 108.75,-71.5 108.75,-71.5 "
android:strokeWidth="20"
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:trimPathStart="0"
android:trimPathEnd="0"
android:trimPathOffset="0" />
</group>
<path
android:name="_R_G_L_0_G_D_2_P_0"
android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c "
android:strokeWidth="2.5"
android:strokeAlpha="1"
android:strokeColor="@color/biometric_face_icon_gray"
android:trimPathStart="0"
android:trimPathEnd="1"
android:trimPathOffset="0" />
<group
android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0"
android:pivotX="1.05"
android:pivotY="-9.891"
android:scaleX="1"
android:scaleY="1"
android:translateX="29.044"
android:translateY="41.647">
<path
android:name="_R_G_L_0_G_D_3_P_0"
android:pathData=" M4.71 1.1 C3.71,2.12 2.32,2.75 0.79,2.75 C-2.25,2.75 -4.7,0.29 -4.7,-2.75 "
android:strokeWidth="2"
android:strokeAlpha="1"
android:strokeColor="@color/biometric_face_icon_gray"
android:trimPathStart="0"
android:trimPathEnd="1"
android:trimPathOffset="0" />
</group>
<group
android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0"
android:scaleX="1"
android:scaleY="1"
android:translateX="41.1"
android:translateY="23.8">
<path
android:name="_R_G_L_0_G_D_4_P_0"
android:fillAlpha="1"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.1,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " />
</group>
<group
android:name="_R_G_L_0_G_D_5_P_0_G_0_T_0"
android:scaleX="1"
android:scaleY="1"
android:translateX="18.6"
android:translateY="23.8">
<path
android:name="_R_G_L_0_G_D_5_P_0"
android:fillAlpha="1"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.2,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " />
</group>
<group
android:name="_R_G_L_0_G_D_6_P_0_G_0_T_0"
android:scaleX="1"
android:scaleY="1"
android:translateX="30.727"
android:translateY="31.703">
<path
android:name="_R_G_L_0_G_D_6_P_0"
android:fillAlpha="1"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M2.6 3.25 C2.6,3.25 -2.6,3.25 -2.6,3.25 C-2.6,3.25 -2.6,1.25 -2.6,1.25 C-2.6,1.25 0.6,1.25 0.6,1.25 C0.6,1.25 0.6,-3.25 0.6,-3.25 C0.6,-3.25 2.6,-3.25 2.6,-3.25 C2.6,-3.25 2.6,3.25 2.6,3.25c " />
</group>
</group>
</group>
</group>
<group android:name="time_group" />
</vector>
</aapt:attr>
<target android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="0.08"
android:valueTo="0.08"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="33"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="0.08"
android:valueTo="0.08"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:propertyName="scaleX"
android:startOffset="33"
android:valueFrom="0.08"
android:valueTo="0.12789"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:propertyName="scaleY"
android:startOffset="33"
android:valueFrom="0.08"
android:valueTo="0.12789"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleX"
android:startOffset="200"
android:valueFrom="0.12789"
android:valueTo="0.12241"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleY"
android:startOffset="200"
android:valueFrom="0.12789"
android:valueTo="0.12241"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleX"
android:startOffset="300"
android:valueFrom="0.12241"
android:valueTo="0.125"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleY"
android:startOffset="300"
android:valueFrom="0.12241"
android:valueTo="0.125"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_0_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="233"
android:propertyName="trimPathEnd"
android:startOffset="33"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="0.08"
android:valueTo="0.08"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="33"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="0.08"
android:valueTo="0.08"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:propertyName="scaleX"
android:startOffset="33"
android:valueFrom="0.08"
android:valueTo="0.12789"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="167"
android:propertyName="scaleY"
android:startOffset="33"
android:valueFrom="0.08"
android:valueTo="0.12789"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleX"
android:startOffset="200"
android:valueFrom="0.12789"
android:valueTo="0.12241"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleY"
android:startOffset="200"
android:valueFrom="0.12789"
android:valueTo="0.12241"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleX"
android:startOffset="300"
android:valueFrom="0.12241"
android:valueTo="0.125"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleY"
android:startOffset="300"
android:valueFrom="0.12241"
android:valueTo="0.125"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="233"
android:propertyName="trimPathEnd"
android:startOffset="33"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_2_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:propertyName="strokeColor"
android:startOffset="0"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="@color/biometric_face_icon_gray"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="strokeColor"
android:startOffset="67"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="?android:attr/colorAccent"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="strokeAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.65"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.65"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="trimPathStart"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0.5"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.5"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="83"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_5_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_5_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="83"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_6_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_6_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.287,0.12 0.667,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="83"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.287,0.12 0.667,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="time_group">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="383"
android:propertyName="translateX"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
</set>
</aapt:attr>
</target>
</animated-vector>

View File

@@ -0,0 +1,178 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2019 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
-->
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt">
<aapt:attr name="android:drawable">
<vector
android:width="60dp"
android:height="60dp"
android:viewportHeight="60"
android:viewportWidth="60">
<group android:name="_R_G">
<group
android:name="_R_G_L_0_G_N_1_T_0"
android:translateX="30"
android:translateY="30">
<group
android:name="_R_G_L_0_G"
android:translateX="-30"
android:translateY="-30">
<path
android:name="_R_G_L_0_G_D_0_P_0"
android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c "
android:strokeAlpha="1"
android:strokeColor="@color/biometric_face_icon_gray"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="2.5"
android:trimPathEnd="1"
android:trimPathOffset="0"
android:trimPathStart="0" />
<path
android:name="_R_G_L_0_G_D_1_P_0"
android:pathData=" M33.75 42.75 C32.75,43.76 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 "
android:strokeAlpha="1"
android:strokeColor="@color/biometric_face_icon_gray"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:trimPathEnd="1"
android:trimPathOffset="0"
android:trimPathStart="0" />
<path
android:name="_R_G_L_0_G_D_2_P_0"
android:fillAlpha="1"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M39 23.8 C39,25 39.9,25.9 41.1,25.9 C42.2,25.9 43.2,25 43.2,23.8 C43.2,22.6 42.3,21.7 41.1,21.7 C39.9,21.7 39,22.6 39,23.8c " />
<path
android:name="_R_G_L_0_G_D_3_P_0"
android:fillAlpha="1"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M16.5 23.8 C16.5,25 17.4,25.9 18.6,25.9 C19.8,25.9 20.7,25 20.7,23.8 C20.7,22.6 19.8,21.7 18.6,21.7 C17.4,21.7 16.5,22.6 16.5,23.8c " />
<path
android:name="_R_G_L_0_G_D_4_P_0"
android:fillAlpha="1"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M32.9 34.7 C32.9,34.7 27.7,34.7 27.7,34.7 C27.7,34.7 27.7,32.7 27.7,32.7 C27.7,32.7 30.9,32.7 30.9,32.7 C30.9,32.7 30.9,28.2 30.9,28.2 C30.9,28.2 32.9,28.2 32.9,28.2 C32.9,28.2 32.9,34.7 32.9,34.7c " />
</group>
</group>
</group>
<group android:name="time_group" />
</vector>
</aapt:attr>
<target android:name="_R_G_L_0_G_D_0_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="strokeColor"
android:startOffset="0"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="?android:attr/colorAccent"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="strokeColor"
android:startOffset="0"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="?android:attr/colorAccent"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_2_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="fillColor"
android:startOffset="0"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="?android:attr/colorAccent"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="fillColor"
android:startOffset="0"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="?android:attr/colorAccent"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="fillColor"
android:startOffset="0"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="?android:attr/colorAccent"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="time_group">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="translateX"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
</set>
</aapt:attr>
</target>
</animated-vector>

View File

@@ -0,0 +1,473 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2018 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
-->
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt">
<aapt:attr name="android:drawable">
<vector
android:width="60dp"
android:height="60dp"
android:viewportWidth="60"
android:viewportHeight="60">
<group android:name="_R_G">
<group
android:name="_R_G_L_0_G_N_1_T_0"
android:translateX="30"
android:translateY="30">
<group
android:name="_R_G_L_0_G"
android:translateX="-30"
android:translateY="-30">
<path
android:name="_R_G_L_0_G_D_0_P_0"
android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c "
android:strokeWidth="2.5"
android:strokeAlpha="1"
android:strokeColor="@color/biometric_face_icon_gray"
android:trimPathStart="0"
android:trimPathEnd="1"
android:trimPathOffset="0" />
<path
android:name="_R_G_L_0_G_D_1_P_0"
android:pathData=" M33.75 42.75 C32.75,43.76 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 "
android:strokeWidth="2"
android:strokeAlpha="1"
android:strokeColor="@color/biometric_face_icon_gray"
android:trimPathStart="0"
android:trimPathEnd="1"
android:trimPathOffset="0" />
<group
android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0"
android:scaleX="1"
android:scaleY="1"
android:translateX="41.1"
android:translateY="23.8">
<path
android:name="_R_G_L_0_G_D_2_P_0"
android:fillAlpha="1"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.1,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " />
</group>
<group
android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0"
android:scaleX="1"
android:scaleY="1"
android:translateX="18.6"
android:translateY="23.8">
<path
android:name="_R_G_L_0_G_D_3_P_0"
android:fillAlpha="1"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.2,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " />
</group>
<group
android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0"
android:translateX="30.3"
android:translateY="31.45">
<path
android:name="_R_G_L_0_G_D_4_P_0"
android:fillAlpha="1"
android:fillColor="@color/biometric_face_icon_gray"
android:fillType="nonZero"
android:pathData=" M2.6 3.25 C2.6,3.25 -2.6,3.25 -2.6,3.25 C-2.6,3.25 -2.6,1.25 -2.6,1.25 C-2.6,1.25 0.6,1.25 0.6,1.25 C0.6,1.25 0.6,-3.25 0.6,-3.25 C0.6,-3.25 2.6,-3.25 2.6,-3.25 C2.6,-3.25 2.6,3.25 2.6,3.25c " />
</group>
</group>
</group>
</group>
<group android:name="time_group" />
</vector>
</aapt:attr>
<target android:name="_R_G_L_0_G_D_0_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="strokeColor"
android:startOffset="0"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="@color/biometric_face_icon_gray"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="strokeColor"
android:startOffset="50"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="?android:attr/colorError"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="strokeColor"
android:startOffset="0"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="@color/biometric_face_icon_gray"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="strokeColor"
android:startOffset="50"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="?android:attr/colorError"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="217"
android:propertyName="strokeWidth"
android:startOffset="0"
android:valueFrom="2"
android:valueTo="2.5"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="217"
android:propertyName="pathData"
android:startOffset="0"
android:valueFrom="M33.75 42.75 C32.75,43.76 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 "
android:valueTo="M34.78 38.76 C33.83,38.75 31.54,38.75 30.01,38.75 C26.97,38.75 26.14,38.75 24.3,38.76 "
android:valueType="pathType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="217"
android:propertyName="trimPathStart"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0.34"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="217"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.5700000000000001"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_2_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="fillAlpha"
android:startOffset="50"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:pathData="M 41.1,23.8C 40.547981774806985,23.08834635019302 38.34001822519301,20.24165364980698 37.788,19.53"
android:propertyName="translateXY"
android:propertyXName="translateX"
android:propertyYName="translateY"
android:startOffset="0">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.3"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.999,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.3"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.999,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="fillAlpha"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="fillAlpha"
android:startOffset="50"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:pathData="M 18.6,23.8C 19.16757813692093,23.08502601385117 21.43742186307907,20.224973986148832 22.005,19.51"
android:propertyName="translateXY"
android:propertyXName="translateX"
android:propertyYName="translateY"
android:startOffset="0">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.3"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.999,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="67"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="0.3"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.999,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="50"
android:propertyName="fillColor"
android:startOffset="0"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="@color/biometric_face_icon_gray"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="17"
android:propertyName="fillColor"
android:startOffset="50"
android:valueFrom="@color/biometric_face_icon_gray"
android:valueTo="?android:attr/colorError"
android:valueType="colorType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:pathData="M 30.3,31.45C 30.3,31.07740886211395 30.3,31.82259113788605 30.3,31.45"
android:propertyName="translateXY"
android:propertyXName="translateX"
android:propertyYName="translateY"
android:startOffset="0">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="150"
android:pathData="M 30.3,31.45C 30.3,31.07740886211395 30.3,29.58759113788605 30.3,29.215"
android:propertyName="translateXY"
android:propertyXName="translateX"
android:propertyYName="translateY"
android:startOffset="67">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_4_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="67"
android:propertyName="pathData"
android:startOffset="0"
android:valueFrom="M2.6 3.25 C2.6,3.25 -2.6,3.25 -2.6,3.25 C-2.6,3.25 -2.6,1.25 -2.6,1.25 C-2.6,1.25 0.6,1.25 0.6,1.25 C0.6,1.25 0.6,-3.25 0.6,-3.25 C0.6,-3.25 2.6,-3.25 2.6,-3.25 C2.6,-3.25 2.6,3.25 2.6,3.25c "
android:valueTo="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-3.25 -1.5,-3.25 C-1.5,-3.25 0.9,-3.25 0.9,-3.25 C0.9,-3.25 0.9,3.25 0.9,3.25c "
android:valueType="pathType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="150"
android:propertyName="pathData"
android:startOffset="67"
android:valueFrom="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-3.25 -1.5,-3.25 C-1.5,-3.25 0.9,-3.25 0.9,-3.25 C0.9,-3.25 0.9,3.25 0.9,3.25c "
android:valueTo="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-13.15 -1.5,-13.15 C-1.5,-13.15 0.9,-13.15 0.9,-13.15 C0.9,-13.15 0.9,3.25 0.9,3.25c "
android:valueType="pathType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="pathData"
android:startOffset="217"
android:valueFrom="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-13.15 -1.5,-13.15 C-1.5,-13.15 0.9,-13.15 0.9,-13.15 C0.9,-13.15 0.9,3.25 0.9,3.25c "
android:valueTo="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-11.71 -1.5,-11.71 C-1.5,-11.71 0.9,-11.71 0.9,-11.71 C0.9,-11.71 0.9,3.25 0.9,3.25c "
android:valueType="pathType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.667,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="time_group">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="333"
android:propertyName="translateX"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
</set>
</aapt:attr>
</target>
</animated-vector>

View File

@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2018 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
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M9,11.75A1.25,1.25 0 0,0 7.75,13A1.25,1.25 0 0,0 9,14.25A1.25,1.25 0 0,0 10.25,13A1.25,1.25 0 0,0 9,11.75M15,11.75A1.25,1.25 0 0,0 13.75,13A1.25,1.25 0 0,0 15,14.25A1.25,1.25 0 0,0 16.25,13A1.25,1.25 0 0,0 15,11.75M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20C7.59,20 4,16.41 4,12C4,11.71 4,11.42 4.05,11.14C6.41,10.09 8.28,8.16 9.26,5.77C11.07,8.33 14.05,10 17.42,10C18.2,10 18.95,9.91 19.67,9.74C19.88,10.45 20,11.21 20,12C20,16.41 16.41,20 12,20Z" />
</vector>

View File

@@ -18,336 +18,268 @@
xmlns:aapt="http://schemas.android.com/aapt">
<aapt:attr name="android:drawable">
<vector
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
android:width="60dp"
android:height="60dp"
android:viewportHeight="60"
android:viewportWidth="60">
<group android:name="_R_G">
<group
android:name="_R_G_L_2_G"
android:pivotX="-33"
android:pivotY="-34"
android:rotation="180"
android:scaleX="0.738"
android:scaleY="0.738"
android:translateX="45"
android:translateY="46.4">
<path
android:name="_R_G_L_2_G_D_0_P_0"
android:pathData=" M-25.36 -24.41 C-25.93,-24.31 -26.49,-24.27 -26.81,-24.27 C-28.11,-24.27 -29.35,-24.62 -30.43,-25.4 C-32.11,-26.6 -33.2,-28.57 -33.2,-30.79 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="1.45"
android:trimPathEnd="0"
android:trimPathOffset="0"
android:trimPathStart="0" />
<path
android:name="_R_G_L_2_G_D_1_P_0"
android:pathData=" M-36.14 -21.78 C-37.15,-22.98 -37.72,-23.7 -38.51,-25.29 C-39.33,-26.94 -39.82,-28.78 -39.82,-30.77 C-39.82,-34.43 -36.85,-37.4 -33.19,-37.4 C-29.52,-37.4 -26.55,-34.43 -26.55,-30.77 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="1.45"
android:trimPathEnd="0"
android:trimPathOffset="0"
android:trimPathStart="0" />
<path
android:name="_R_G_L_2_G_D_2_P_0"
android:pathData=" M-42.19 -25.68 C-42.95,-27.82 -43.09,-29.54 -43.09,-30.8 C-43.09,-32.27 -42.84,-33.65 -42.27,-34.9 C-40.71,-38.35 -37.24,-40.75 -33.2,-40.75 C-27.71,-40.75 -23.26,-36.3 -23.26,-30.8 C-23.26,-28.97 -24.74,-27.49 -26.57,-27.49 C-28.4,-27.49 -29.89,-28.97 -29.89,-30.8 C-29.89,-32.64 -31.37,-34.12 -33.2,-34.12 C-35.04,-34.12 -36.52,-32.64 -36.52,-30.8 C-36.52,-28.23 -35.53,-25.92 -33.92,-24.22 C-32.69,-22.93 -31.48,-22.12 -29.44,-21.53 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="1.45"
android:trimPathEnd="1"
android:trimPathOffset="0"
android:trimPathStart="1" />
<path
android:name="_R_G_L_2_G_D_3_P_0"
android:pathData=" M-44.06 -38.17 C-42.87,-39.94 -41.39,-41.41 -39.51,-42.44 C-37.62,-43.47 -35.46,-44.05 -33.16,-44.05 C-30.88,-44.05 -28.72,-43.47 -26.85,-42.45 C-24.97,-41.43 -23.48,-39.97 -22.29,-38.21 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="1.45"
android:trimPathEnd="1"
android:trimPathOffset="0"
android:trimPathStart="1" />
<path
android:name="_R_G_L_2_G_D_4_P_0"
android:pathData=" M-25.72 -45.45 C-27.99,-46.76 -30.43,-47.52 -33.28,-47.52 C-36.13,-47.52 -38.51,-46.74 -40.62,-45.45 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="1.45"
android:trimPathEnd="0"
android:trimPathOffset="0"
android:trimPathStart="0" />
</group>
<group
android:name="_R_G_L_1_G"
android:rotation="10"
android:translateX="12"
android:translateY="12">
<path
android:name="_R_G_L_1_G_D_0_P_0"
android:pathData=" M0 -9 C4.97,-9 9,-4.97 9,0 C9,4.97 4.97,9 0,9 C-4.97,9 -9,4.97 -9,0 C-9,-4.97 -4.97,-9 0,-9c "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorError"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:trimPathEnd="1"
android:trimPathOffset="0"
android:trimPathStart="0" />
</group>
<group
android:name="_R_G_L_0_G"
android:translateX="12"
android:translateY="12">
android:name="_R_G_L_1_G_N_4_T_0"
android:translateX="30"
android:translateY="30">
<group
android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0"
android:pivotY="-0.012"
android:rotation="0"
android:scaleX="1"
android:scaleY="1">
android:name="_R_G_L_1_G"
android:pivotX="114"
android:pivotY="114"
android:scaleX="0.42200000000000004"
android:scaleY="0.42200000000000004"
android:translateX="-114"
android:translateY="-114">
<path
android:name="_R_G_L_0_G_D_0_P_0"
android:fillAlpha="1"
android:fillColor="?android:attr/colorError"
android:fillType="nonZero"
android:pathData=" M1.1 3.94 C1.1,4.55 0.61,5.04 0,5.04 C-0.61,5.04 -1.1,4.55 -1.1,3.94 C-1.1,3.33 -0.61,2.84 0,2.84 C0.61,2.84 1.1,3.33 1.1,3.94c " />
android:name="_R_G_L_1_G_D_0_P_0"
android:pathData=" M79.63 67.24 C79.63,67.24 111.5,47.42 147.83,67.24 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="5.5"
android:trimPathEnd="0"
android:trimPathOffset="0"
android:trimPathStart="0" />
<path
android:name="_R_G_L_1_G_D_1_P_0"
android:pathData=" M64.27 98.07 C64.27,98.07 80.13,73.02 113.98,73.02 C147.83,73.02 163.56,97.26 163.56,97.26 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="5.5"
android:trimPathEnd="0"
android:trimPathOffset="0"
android:trimPathStart="0" />
<path
android:name="_R_G_L_1_G_D_2_P_0"
android:pathData=" M72.53 151.07 C72.53,151.07 62.46,122.89 76.16,105.55 C89.86,88.21 106.72,86.73 113.98,86.73 C121.08,86.73 153.51,90.62 158.7,125.87 C159.14,128.82 158.8,132.88 157.18,136.09 C154.88,140.63 150.62,143.63 145.85,143.97 C133.78,144.85 129.76,137.92 129.26,128.49 C128.88,121.19 122.49,115.35 113.15,115.35 C102.91,115.35 95.97,126.69 99.77,139.74 C103.57,152.78 111.33,163.85 130.32,169.13 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="5.5"
android:trimPathEnd="0"
android:trimPathOffset="0"
android:trimPathStart="0" />
<path
android:name="_R_G_L_1_G_D_3_P_0"
android:pathData=" M100.6 167.84 C100.6,167.84 82.76,152.1 83.75,130.31 C84.75,108.53 102.58,100.7 113.73,100.7 C124.87,100.7 144.19,108.56 144.19,130.01 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="5.5"
android:trimPathEnd="0"
android:trimPathOffset="0"
android:trimPathStart="0" />
<path
android:name="_R_G_L_1_G_D_4_P_0"
android:pathData=" M113.73 129.17 C113.73,129.17 113.15,161.33 149.15,156.58 "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorAccent"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="5.5"
android:trimPathEnd="0"
android:trimPathOffset="0"
android:trimPathStart="0" />
</group>
</group>
<group
android:name="_R_G_L_0_G_N_4_T_0"
android:translateX="30"
android:translateY="30">
<group
android:name="_R_G_L_0_G_D_0_P_1_G_0_T_0"
android:pivotY="-0.012"
android:rotation="0"
android:scaleX="1"
android:scaleY="1">
android:name="_R_G_L_0_G"
android:translateX="-30.05"
android:translateY="-30">
<group
android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0"
android:scaleX="1"
android:scaleY="1"
android:translateX="30"
android:translateY="38.75">
<path
android:name="_R_G_L_0_G_D_0_P_0"
android:fillAlpha="1"
android:fillColor="?android:attr/colorError"
android:fillType="nonZero"
android:pathData=" M-1.2 -1.25 C-1.2,-1.25 1.2,-1.25 1.2,-1.25 C1.2,-1.25 1.2,1.25 1.2,1.25 C1.2,1.25 -1.2,1.25 -1.2,1.25 C-1.2,1.25 -1.2,-1.25 -1.2,-1.25c " />
</group>
<group
android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0"
android:pivotX="0.002"
android:pivotY="7.488"
android:scaleX="1"
android:scaleY="1"
android:translateX="30"
android:translateY="25">
<path
android:name="_R_G_L_0_G_D_1_P_0"
android:fillAlpha="1"
android:fillColor="?android:attr/colorError"
android:fillType="nonZero"
android:pathData=" M-1.2 -7.5 C-1.2,-7.5 1.2,-7.5 1.2,-7.5 C1.2,-7.5 1.2,7.5 1.2,7.5 C1.2,7.5 -1.2,7.5 -1.2,7.5 C-1.2,7.5 -1.2,-7.5 -1.2,-7.5c " />
</group>
<path
android:name="_R_G_L_0_G_D_0_P_1"
android:fillAlpha="1"
android:fillColor="?android:attr/colorError"
android:fillType="nonZero"
android:pathData=" M1 -4.06 C1,-4.06 1,-0.06 1,-0.06 C1,0.49 0.55,0.94 0,0.94 C-0.55,0.94 -1,0.49 -1,-0.06 C-1,-0.06 -1,-4.06 -1,-4.06 C-1,-4.61 -0.55,-5.06 0,-5.06 C0.55,-5.06 1,-4.61 1,-4.06c " />
android:name="_R_G_L_0_G_D_2_P_0"
android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c "
android:strokeAlpha="1"
android:strokeColor="?android:attr/colorError"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="2.5"
android:trimPathEnd="1"
android:trimPathOffset="0"
android:trimPathStart="0" />
</group>
</group>
</group>
<group android:name="time_group" />
</vector>
</aapt:attr>
<target android:name="_R_G_L_2_G_D_0_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="350"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="350"
android:propertyName="trimPathEnd"
android:startOffset="350"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_2_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="267"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="433"
android:propertyName="trimPathEnd"
android:startOffset="267"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_2_G_D_2_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="250"
android:propertyName="trimPathStart"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="250"
android:propertyName="trimPathStart"
android:startOffset="250"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_2_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="350"
android:propertyName="trimPathStart"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="117"
android:propertyName="trimPathStart"
android:startOffset="350"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_2_G_D_4_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="417"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="117"
android:propertyName="trimPathEnd"
android:startOffset="417"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_2_G">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="200"
android:propertyName="rotation"
android:startOffset="0"
android:valueFrom="180"
android:valueTo="180"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.6,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="500"
android:propertyName="rotation"
android:startOffset="200"
android:valueFrom="180"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.6,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_1_G_D_0_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="383"
android:duration="83"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="1"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="250"
android:propertyName="trimPathEnd"
android:startOffset="83"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_1_G">
<target android:name="_R_G_L_1_G_D_1_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="33"
android:propertyName="rotation"
android:duration="83"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="10"
android:valueTo="10"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.6,1 1.0,1.0" />
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="367"
android:propertyName="rotation"
android:startOffset="33"
android:valueFrom="10"
android:valueTo="-180"
android:duration="250"
android:propertyName="trimPathEnd"
android:startOffset="83"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.6,1 1.0,1.0" />
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_1_G_D_2_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="250"
android:propertyName="trimPathEnd"
android:startOffset="83"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_1_G_D_3_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="250"
android:propertyName="trimPathEnd"
android:startOffset="83"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_1_G_D_4_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="83"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="250"
android:propertyName="trimPathEnd"
android:startOffset="83"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
@@ -357,153 +289,125 @@
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="17"
android:propertyName="rotation"
android:duration="67"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueFrom="1"
android:valueTo="1.1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.2,1 1.0,1.0" />
<pathInterpolator android:pathData="M 0.0,0.0 c0.853,0 0.6,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="417"
android:propertyName="rotation"
android:startOffset="17"
android:valueFrom="0"
android:valueTo="-180"
android:duration="67"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="1.1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.2,1 1.0,1.0" />
<pathInterpolator android:pathData="M 0.0,0.0 c0.853,0 0.6,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleX"
android:startOffset="67"
android:valueFrom="1.1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.92,1.06 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleY"
android:startOffset="67"
android:valueFrom="1.1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.92,1.06 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0">
<target android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="117"
android:duration="67"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.6,1 1.0,1.0" />
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.659,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="117"
android:duration="67"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="1.1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.6,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="100"
android:propertyName="scaleX"
android:startOffset="67"
android:valueFrom="1"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.6,1 1.0,1.0" />
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.6,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="317"
android:propertyName="scaleX"
android:startOffset="117"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.6,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="317"
android:duration="100"
android:propertyName="scaleY"
android:startOffset="117"
android:valueFrom="1"
android:startOffset="67"
android:valueFrom="1.1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.6,1 1.0,1.0" />
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.92,1.096 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_0_P_1_G_0_T_0">
<target android:name="_R_G_L_0_G_D_2_P_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="17"
android:propertyName="rotation"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="417"
android:propertyName="rotation"
android:startOffset="17"
android:valueFrom="0"
android:valueTo="-180"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c0.8,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
</aapt:attr>
</target>
<target android:name="_R_G_L_0_G_D_0_P_1_G_0_T_0">
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="117"
android:propertyName="scaleX"
android:duration="67"
android:propertyName="trimPathEnd"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.6,1 1.0,1.0" />
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="117"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="1"
android:valueTo="1"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.6,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="317"
android:propertyName="scaleX"
android:startOffset="117"
android:duration="133"
android:propertyName="trimPathEnd"
android:startOffset="67"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.6,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
<objectAnimator
android:duration="317"
android:propertyName="scaleY"
android:startOffset="117"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType">
<aapt:attr name="android:interpolator">
<pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.6,1 1.0,1.0" />
<pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" />
</aapt:attr>
</objectAnimator>
</set>
@@ -513,7 +417,7 @@
<aapt:attr name="android:animation">
<set android:ordering="together">
<objectAnimator
android:duration="717"
android:duration="350"
android:propertyName="translateX"
android:startOffset="0"
android:valueFrom="0"
@@ -522,4 +426,4 @@
</set>
</aapt:attr>
</target>
</animated-vector>
</animated-vector>

View File

@@ -130,6 +130,7 @@
<!-- Biometric dialog colors -->
<color name="biometric_dialog_dim_color">#80000000</color> <!-- 50% black -->
<color name="biometric_face_icon_gray">#ffbdc1c6</color>
<!-- Logout button -->
<color name="logout_button_bg_color">#ccffffff</color>

View File

@@ -240,7 +240,10 @@ public class BiometricDialogImpl extends SystemUI implements CommandQueue.Callba
mConfirmShowing = true;
mCurrentDialog.showConfirmationButton(true /* show */);
} else {
handleHideDialog(false /* userCanceled */);
mCurrentDialog.updateState(BiometricDialogView.STATE_AUTHENTICATED);
mHandler.postDelayed(() -> {
handleHideDialog(false /* userCanceled */);
}, mCurrentDialog.getDelayAfterAuthenticatedDurationMs());
}
}

View File

@@ -21,6 +21,7 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.hardware.biometrics.BiometricPrompt;
import android.os.Binder;
@@ -63,7 +64,8 @@ public abstract class BiometricDialogView extends LinearLayout {
protected static final int STATE_NONE = 0;
protected static final int STATE_AUTHENTICATING = 1;
protected static final int STATE_ERROR = 2;
protected static final int STATE_AUTHENTICATED = 3;
protected static final int STATE_PENDING_CONFIRMATION = 3;
protected static final int STATE_AUTHENTICATED = 4;
private final IBinder mWindowToken = new Binder();
private final Interpolator mLinearOutSlowIn;
@@ -77,6 +79,8 @@ public abstract class BiometricDialogView extends LinearLayout {
private final DialogViewCallback mCallback;
private ViewGroup mLayout;
private final Button mPositiveButton;
private final Button mNegativeButton;
private final TextView mErrorText;
private Bundle mBundle;
private final LinearLayout mDialog;
@@ -90,10 +94,12 @@ public abstract class BiometricDialogView extends LinearLayout {
private boolean mPendingShowTryAgain;
private boolean mPendingShowConfirm;
protected abstract void updateIcon(int lastState, int newState);
protected abstract int getHintStringResourceId();
protected abstract int getAuthenticatedAccessibilityResourceId();
protected abstract int getIconDescriptionResourceId();
protected abstract Drawable getAnimationForTransition(int oldState, int newState);
protected abstract boolean shouldAnimateForTransition(int oldState, int newState);
protected abstract int getDelayAfterAuthenticatedDurationMs();
private final Runnable mShowAnimationRunnable = new Runnable() {
@Override
@@ -178,10 +184,10 @@ public abstract class BiometricDialogView extends LinearLayout {
final View space = mLayout.findViewById(R.id.space);
final View leftSpace = mLayout.findViewById(R.id.left_space);
final View rightSpace = mLayout.findViewById(R.id.right_space);
final Button negative = mLayout.findViewById(R.id.button2);
final Button positive = mLayout.findViewById(R.id.button1);
final ImageView icon = mLayout.findViewById(R.id.biometric_icon);
final Button tryAgain = mLayout.findViewById(R.id.button_try_again);
mNegativeButton = mLayout.findViewById(R.id.button2);
mPositiveButton = mLayout.findViewById(R.id.button1);
icon.setContentDescription(getResources().getString(getIconDescriptionResourceId()));
@@ -189,12 +195,15 @@ public abstract class BiometricDialogView extends LinearLayout {
setDismissesDialog(leftSpace);
setDismissesDialog(rightSpace);
negative.setOnClickListener((View v) -> {
mNegativeButton.setOnClickListener((View v) -> {
mCallback.onNegativePressed();
});
positive.setOnClickListener((View v) -> {
mCallback.onPositivePressed();
mPositiveButton.setOnClickListener((View v) -> {
updateState(STATE_AUTHENTICATED);
mHandler.postDelayed(() -> {
mCallback.onPositivePressed();
}, getDelayAfterAuthenticatedDurationMs());
});
tryAgain.setOnClickListener((View v) -> {
@@ -215,7 +224,6 @@ public abstract class BiometricDialogView extends LinearLayout {
final TextView title = mLayout.findViewById(R.id.title);
final TextView subtitle = mLayout.findViewById(R.id.subtitle);
final TextView description = mLayout.findViewById(R.id.description);
final Button negative = mLayout.findViewById(R.id.button2);
final ImageView backgroundView = mLayout.findViewById(R.id.background);
if (mUserManager.isManagedProfile(mUserId)) {
@@ -229,6 +237,9 @@ public abstract class BiometricDialogView extends LinearLayout {
backgroundView.setBackgroundColor(R.color.biometric_dialog_dim_color);
}
mNegativeButton.setVisibility(View.VISIBLE);
mErrorText.setVisibility(View.VISIBLE);
if (RotationUtils.getRotation(mContext) != RotationUtils.ROTATION_NONE) {
mDialog.getLayoutParams().width = (int) mDialogWidth;
}
@@ -258,7 +269,7 @@ public abstract class BiometricDialogView extends LinearLayout {
description.setText(descriptionText);
}
negative.setText(mBundle.getCharSequence(BiometricPrompt.KEY_NEGATIVE_TEXT));
mNegativeButton.setText(mBundle.getCharSequence(BiometricPrompt.KEY_NEGATIVE_TEXT));
showTryAgainButton(mPendingShowTryAgain);
showConfirmationButton(mPendingShowConfirm);
@@ -280,10 +291,32 @@ public abstract class BiometricDialogView extends LinearLayout {
mSkipIntro = false;
}
protected void updateIcon(int lastState, int newState) {
final Drawable icon = getAnimationForTransition(lastState, newState);
if (icon == null) {
Log.e(TAG, "Animation not found");
return;
}
final AnimatedVectorDrawable animation = icon instanceof AnimatedVectorDrawable
? (AnimatedVectorDrawable) icon
: null;
final ImageView imageView = getLayout().findViewById(R.id.biometric_icon);
imageView.setImageDrawable(icon);
if (animation != null && shouldAnimateForTransition(lastState, newState)) {
animation.forceAnimationOnUI();
animation.start();
}
}
private void setDismissesDialog(View v) {
v.setClickable(true);
v.setOnTouchListener((View view, MotionEvent event) -> {
mCallback.onUserCanceled();
if (mLastState != STATE_AUTHENTICATED) {
mCallback.onUserCanceled();
}
return true;
});
}
@@ -302,6 +335,7 @@ public abstract class BiometricDialogView extends LinearLayout {
showTryAgainButton(false /* show */);
mPendingShowTryAgain = false;
mPendingShowConfirm = false;
updateState(STATE_NONE);
}
};
@@ -362,11 +396,11 @@ public abstract class BiometricDialogView extends LinearLayout {
}
public void showConfirmationButton(boolean show) {
final Button positive = mLayout.findViewById(R.id.button1);
if (show) {
positive.setVisibility(View.VISIBLE);
updateState(STATE_PENDING_CONFIRMATION);
mPositiveButton.setVisibility(View.VISIBLE);
} else {
positive.setVisibility(View.GONE);
mPositiveButton.setVisibility(View.GONE);
}
}
@@ -411,7 +445,15 @@ public abstract class BiometricDialogView extends LinearLayout {
mCallback.onErrorShown();
}
private void updateState(int newState) {
public void updateState(int newState) {
if (newState == STATE_PENDING_CONFIRMATION) {
mErrorText.setVisibility(View.INVISIBLE);
} else if (newState == STATE_AUTHENTICATED) {
mPositiveButton.setVisibility(View.GONE);
mNegativeButton.setVisibility(View.GONE);
mErrorText.setVisibility(View.INVISIBLE);
}
updateIcon(mLastState, newState);
mLastState = newState;
}

View File

@@ -18,16 +18,18 @@ package com.android.systemui.biometrics;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import com.android.systemui.R;
/**
* This class loads the view for the system-provided dialog. The view consists of:
* Application Icon, Title, Subtitle, Description, Fingerprint Icon, Error/Help message area,
* Application Icon, Title, Subtitle, Description, Biometric Icon, Error/Help message area,
* and positive/negative buttons.
*/
public class FaceDialogView extends BiometricDialogView {
private static final int HIDE_DIALOG_DELAY = 500; // ms
public FaceDialogView(Context context,
DialogViewCallback callback) {
super(context, callback);
@@ -53,10 +55,46 @@ public class FaceDialogView extends BiometricDialogView {
}
@Override
protected void updateIcon(int lastState, int newState) {
Drawable icon = mContext.getDrawable(R.drawable.face_dialog_icon);
protected boolean shouldAnimateForTransition(int oldState, int newState) {
if (oldState == STATE_NONE && newState == STATE_AUTHENTICATING) {
return false;
} else if (oldState == STATE_AUTHENTICATING && newState == STATE_ERROR) {
return true;
} else if (oldState == STATE_ERROR && newState == STATE_AUTHENTICATING) {
return true;
} else if (oldState == STATE_AUTHENTICATING && newState == STATE_PENDING_CONFIRMATION) {
return true;
} else if (oldState == STATE_PENDING_CONFIRMATION && newState == STATE_AUTHENTICATED) {
return true;
} else if (oldState == STATE_AUTHENTICATING && newState == STATE_AUTHENTICATED) {
return true;
}
return false;
}
final ImageView faceIcon = getLayout().findViewById(R.id.biometric_icon);
faceIcon.setImageDrawable(icon);
@Override
protected int getDelayAfterAuthenticatedDurationMs() {
return HIDE_DIALOG_DELAY;
}
@Override
protected Drawable getAnimationForTransition(int oldState, int newState) {
int iconRes;
if (oldState == STATE_NONE && newState == STATE_AUTHENTICATING) {
iconRes = R.drawable.face_dialog_face_to_error;
} else if (oldState == STATE_AUTHENTICATING && newState == STATE_ERROR) {
iconRes = R.drawable.face_dialog_face_to_error;
} else if (oldState == STATE_ERROR && newState == STATE_AUTHENTICATING) {
iconRes = R.drawable.face_dialog_error_to_face;
} else if (oldState == STATE_AUTHENTICATING && newState == STATE_PENDING_CONFIRMATION) {
iconRes = R.drawable.face_dialog_face_gray_to_face_blue;
} else if (oldState == STATE_PENDING_CONFIRMATION && newState == STATE_AUTHENTICATED) {
iconRes = R.drawable.face_dialog_face_blue_to_checkmark;
} else if (oldState == STATE_AUTHENTICATING && newState == STATE_AUTHENTICATED) {
iconRes = R.drawable.face_dialog_face_gray_to_checkmark;
} else {
return null;
}
return mContext.getDrawable(iconRes);
}
}

View File

@@ -17,21 +17,21 @@
package com.android.systemui.biometrics;
import android.content.Context;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.widget.ImageView;
import com.android.systemui.R;
/**
* This class loads the view for the system-provided dialog. The view consists of:
* Application Icon, Title, Subtitle, Description, Fingerprint Icon, Error/Help message area,
* Application Icon, Title, Subtitle, Description, Biometric Icon, Error/Help message area,
* and positive/negative buttons.
*/
public class FingerprintDialogView extends BiometricDialogView {
private static final String TAG = "FingerprintDialogView";
public FingerprintDialogView(Context context,
DialogViewCallback callback) {
super(context, callback);
}
@Override
protected int getHintStringResourceId() {
return R.string.fingerprint_dialog_touch_sensor;
@@ -48,33 +48,7 @@ public class FingerprintDialogView extends BiometricDialogView {
}
@Override
protected void updateIcon(int lastState, int newState) {
Drawable icon = getAnimationForTransition(lastState, newState);
if (icon == null) {
Log.e(TAG, "Animation not found");
return;
}
final AnimatedVectorDrawable animation = icon instanceof AnimatedVectorDrawable
? (AnimatedVectorDrawable) icon
: null;
final ImageView fingerprintIcon = getLayout().findViewById(R.id.biometric_icon);
fingerprintIcon.setImageDrawable(icon);
if (animation != null && shouldAnimateForTransition(lastState, newState)) {
animation.forceAnimationOnUI();
animation.start();
}
}
public FingerprintDialogView(Context context,
DialogViewCallback callback) {
super(context, callback);
}
private boolean shouldAnimateForTransition(int oldState, int newState) {
protected boolean shouldAnimateForTransition(int oldState, int newState) {
if (oldState == STATE_NONE && newState == STATE_AUTHENTICATING) {
return false;
} else if (oldState == STATE_AUTHENTICATING && newState == STATE_ERROR) {
@@ -88,7 +62,13 @@ public class FingerprintDialogView extends BiometricDialogView {
return false;
}
private Drawable getAnimationForTransition(int oldState, int newState) {
@Override
protected int getDelayAfterAuthenticatedDurationMs() {
return 0;
}
@Override
protected Drawable getAnimationForTransition(int oldState, int newState) {
int iconRes;
if (oldState == STATE_NONE && newState == STATE_AUTHENTICATING) {
iconRes = R.drawable.fingerprint_dialog_fp_to_error;
@@ -98,7 +78,7 @@ public class FingerprintDialogView extends BiometricDialogView {
iconRes = R.drawable.fingerprint_dialog_error_to_fp;
} else if (oldState == STATE_AUTHENTICATING && newState == STATE_AUTHENTICATED) {
// TODO(b/77328470): add animation when fingerprint is authenticated
iconRes = R.drawable.fingerprint_dialog_error_to_fp;
iconRes = R.drawable.fingerprint_dialog_fp_to_error;
} else {
return null;
}

View File

@@ -373,6 +373,13 @@ public class BiometricService extends SystemService {
public void onAuthenticationSucceeded(boolean requireConfirmation, byte[] token)
throws RemoteException {
try {
// Should never happen, log this to catch bad HAL behavior (e.g. auth succeeded
// after user dismissed/canceled dialog).
if (mCurrentAuthSession == null) {
Slog.e(TAG, "onAuthenticationSucceeded(): Auth session is null");
return;
}
if (!requireConfirmation) {
mActivityTaskManager.unregisterTaskStackListener(mTaskStackListener);
KeyStore.getInstance().addAuthToken(token);
@@ -398,6 +405,13 @@ public class BiometricService extends SystemService {
public void onAuthenticationFailed(int cookie, boolean requireConfirmation)
throws RemoteException {
try {
// Should never happen, log this to catch bad HAL behavior (e.g. auth succeeded
// after user dismissed/canceled dialog).
if (mCurrentAuthSession == null) {
Slog.e(TAG, "onAuthenticationFailed(): Auth session is null");
return;
}
mStatusBarService.onBiometricHelp(getContext().getResources().getString(
com.android.internal.R.string.biometric_not_recognized));
if (requireConfirmation) {
@@ -486,6 +500,13 @@ public class BiometricService extends SystemService {
@Override
public void onAcquired(int acquiredInfo, String message) throws RemoteException {
// Should never happen, log this to catch bad HAL behavior (e.g. auth succeeded
// after user dismissed/canceled dialog).
if (mCurrentAuthSession == null) {
Slog.e(TAG, "onAcquired(): Auth session is null");
return;
}
if (acquiredInfo != BiometricConstants.BIOMETRIC_ACQUIRED_GOOD) {
try {
mStatusBarService.onBiometricHelp(message);