Merge changes Ibff5b56f,I24f48aef
* changes: Add null checks in BiometricService Update BiometricPrompt icons and logic
This commit is contained in:
517
packages/SystemUI/res/drawable/face_dialog_error_to_face.xml
Normal file
517
packages/SystemUI/res/drawable/face_dialog_error_to_face.xml
Normal 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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
473
packages/SystemUI/res/drawable/face_dialog_face_to_error.xml
Normal file
473
packages/SystemUI/res/drawable/face_dialog_face_to_error.xml
Normal 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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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>
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user