LockIcon fixes
Gather state inisitally, then consolidate it on a pre-draw listener. Before we were deciding when to change the icon based on various variables, now I'm centralizing the decision on getState(), to avoid cancelling animations. Test: At AOD2, lock animates in Test: When locked, press power button: lock icon animates in Test: Press power button: lock icon animates in scanning and unlocks Test: Unlock without bypassing, let device sleep, go to AOD2 Test: Long press padlock when it's open Test: Look at padlock from SIM PIN screen Test: Look at padlock when lock screen is not secure (no pin/pwd) Fixes: 135587352 Fixes: 135960400 Change-Id: I85260b6c373d675bd6076046e33519816221157f
This commit is contained in:
@@ -1,227 +0,0 @@
|
||||
<!-- 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:height="42dp" android:width="32dp" android:viewportHeight="42"
|
||||
android:viewportWidth="32">
|
||||
<group android:name="_R_G">
|
||||
<group android:name="_R_G_L_2_G" android:translateX="1.6669999999999998"
|
||||
android:translateY="11.992999999999999" android:pivotX="14.333"
|
||||
android:pivotY="13" android:scaleX="0" android:scaleY="0">
|
||||
<path android:name="_R_G_L_2_G_D_0_P_0" android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round" android:strokeLineJoin="round"
|
||||
android:strokeWidth="2" android:strokeAlpha="1"
|
||||
android:pathData=" M22.33 21 C22.33,21 6.33,21 6.33,21 C5.6,21 5,20.4 5,19.67 C5,19.67 5,6.33 5,6.33 C5,5.6 5.6,5 6.33,5 C6.33,5 22.33,5 22.33,5 C23.07,5 23.67,5.6 23.67,6.33 C23.67,6.33 23.67,19.67 23.67,19.67 C23.67,20.4 23.07,21 22.33,21c "/>
|
||||
</group>
|
||||
<group android:name="_R_G_L_1_G_N_4_T_0" android:translateX="1.6669999999999998"
|
||||
android:translateY="11.992999999999999" android:pivotX="14.333"
|
||||
android:pivotY="13" android:scaleX="0" android:scaleY="0">
|
||||
<group android:name="_R_G_L_1_G" android:translateX="11.583"
|
||||
android:translateY="10.257">
|
||||
<path android:name="_R_G_L_1_G_D_0_P_0" android:fillColor="#ffffff"
|
||||
android:fillAlpha="1" android:fillType="nonZero"
|
||||
android:pathData=" M2.75 0.25 C4.13,0.25 5.25,1.37 5.25,2.75 C5.25,4.13 4.13,5.25 2.75,5.25 C1.37,5.25 0.25,4.13 0.25,2.75 C0.25,1.37 1.37,0.25 2.75,0.25c "/>
|
||||
</group>
|
||||
</group>
|
||||
<group android:name="_R_G_L_0_G_N_4_T_0" android:translateX="1.6669999999999998"
|
||||
android:translateY="11.992999999999999" android:pivotX="14.333"
|
||||
android:pivotY="13" android:scaleX="0" android:scaleY="0">
|
||||
<group android:name="_R_G_L_0_G_T_1" android:translateX="14.333"
|
||||
android:translateY="3.172">
|
||||
<group android:name="_R_G_L_0_G" android:translateX="-9.667"
|
||||
android:translateY="-9.667">
|
||||
<path android:name="_R_G_L_0_G_D_0_P_0" android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round" android:strokeLineJoin="round"
|
||||
android:strokeWidth="2" android:strokeAlpha="1"
|
||||
android:trimPathStart="0.14" android:trimPathEnd="0.89"
|
||||
android:trimPathOffset="0"
|
||||
android:pathData=" M14.33 14.33 C14.33,14.33 14.33,9.67 14.33,9.67 C14.33,7.09 12.24,5 9.67,5 C7.09,5 5,7.09 5,9.67 C5,9.67 5,14.33 5,14.33 "/>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<group android:name="time_group"/>
|
||||
</vector>
|
||||
</aapt:attr>
|
||||
<target android:name="_R_G_L_2_G">
|
||||
<aapt:attr name="android:animation">
|
||||
<set android:ordering="together">
|
||||
<objectAnimator android:propertyName="scaleX" android:duration="233"
|
||||
android:startOffset="0" android:valueFrom="0" android:valueTo="1.02"
|
||||
android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.001,0 0.438,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator android:propertyName="scaleY" android:duration="233"
|
||||
android:startOffset="0" android:valueFrom="0" android:valueTo="1.02"
|
||||
android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.001,0 0.438,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator android:propertyName="scaleX" android:duration="117"
|
||||
android:startOffset="233" android:valueFrom="1.02"
|
||||
android:valueTo="1" android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.565,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator android:propertyName="scaleY" android:duration="117"
|
||||
android:startOffset="233" android:valueFrom="1.02"
|
||||
android:valueTo="1" android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.565,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="_R_G_L_1_G_N_4_T_0">
|
||||
<aapt:attr name="android:animation">
|
||||
<set android:ordering="together">
|
||||
<objectAnimator android:propertyName="scaleX" android:duration="233"
|
||||
android:startOffset="0" android:valueFrom="0" android:valueTo="1.02"
|
||||
android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.001,0 0.438,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator android:propertyName="scaleY" android:duration="233"
|
||||
android:startOffset="0" android:valueFrom="0" android:valueTo="1.02"
|
||||
android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.001,0 0.438,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator android:propertyName="scaleX" android:duration="117"
|
||||
android:startOffset="233" android:valueFrom="1.02"
|
||||
android:valueTo="1" android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.565,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator android:propertyName="scaleY" android:duration="117"
|
||||
android:startOffset="233" android:valueFrom="1.02"
|
||||
android:valueTo="1" android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.565,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:propertyName="trimPathStart" android:duration="50"
|
||||
android:startOffset="0" android:valueFrom="0.14"
|
||||
android:valueTo="0.14" 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:propertyName="trimPathStart" android:duration="67"
|
||||
android:startOffset="50" android:valueFrom="0.14"
|
||||
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_0_P_0">
|
||||
<aapt:attr name="android:animation">
|
||||
<set android:ordering="together">
|
||||
<objectAnimator android:propertyName="trimPathEnd" android:duration="50"
|
||||
android:startOffset="0" android:valueFrom="0.89"
|
||||
android:valueTo="0.89" 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:propertyName="trimPathEnd" android:duration="67"
|
||||
android:startOffset="50" android:valueFrom="0.89"
|
||||
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_T_1">
|
||||
<aapt:attr name="android:animation">
|
||||
<set android:ordering="together">
|
||||
<objectAnimator android:propertyName="translateY" android:duration="150"
|
||||
android:startOffset="0" android:valueFrom="3.172"
|
||||
android:valueTo="0.34" android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.23,-0.46 0.2,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="_R_G_L_0_G_N_4_T_0">
|
||||
<aapt:attr name="android:animation">
|
||||
<set android:ordering="together">
|
||||
<objectAnimator android:propertyName="scaleX" android:duration="233"
|
||||
android:startOffset="0" android:valueFrom="0" android:valueTo="1.02"
|
||||
android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.001,0 0.438,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator android:propertyName="scaleY" android:duration="233"
|
||||
android:startOffset="0" android:valueFrom="0" android:valueTo="1.02"
|
||||
android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.001,0 0.438,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator android:propertyName="scaleX" android:duration="117"
|
||||
android:startOffset="233" android:valueFrom="1.02"
|
||||
android:valueTo="1" android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.565,1 1.0,1.0"/>
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator android:propertyName="scaleY" android:duration="117"
|
||||
android:startOffset="233" android:valueFrom="1.02"
|
||||
android:valueTo="1" android:valueType="floatType">
|
||||
<aapt:attr name="android:interpolator">
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.565,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:propertyName="translateX" android:duration="717"
|
||||
android:startOffset="0" android:valueFrom="0" android:valueTo="1"
|
||||
android:valueType="floatType"/>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
</animated-vector>
|
||||
@@ -1,327 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<animated-vector xmlns:aapt="http://schemas.android.com/aapt"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<aapt:attr name="android:drawable" >
|
||||
<vector
|
||||
android:height="32dp"
|
||||
android:viewportHeight="32"
|
||||
android:viewportWidth="32"
|
||||
android:width="32dp" >
|
||||
<group android:name="_R_G" >
|
||||
<group
|
||||
android:name="_R_G_L_2_G"
|
||||
android:pivotX="9.583"
|
||||
android:pivotY="8.916"
|
||||
android:scaleX="0"
|
||||
android:scaleY="0"
|
||||
android:translateX="6.416"
|
||||
android:translateY="10.416999999999998" >
|
||||
<path
|
||||
android:name="_R_G_L_2_G_D_0_P_0"
|
||||
android:fillAlpha="1"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="nonZero"
|
||||
android:pathData=" M17.42 1.75 C17.42,1.75 17.42,14.58 17.42,14.58 C17.42,15.41 16.74,16.08 15.92,16.08 C15.92,16.08 3.25,16.08 3.25,16.08 C2.42,16.08 1.75,15.41 1.75,14.58 C1.75,14.58 1.75,1.75 1.75,1.75 C1.75,1.75 17.42,1.75 17.42,1.75c M18.92 0.25 C18.92,0.25 0.25,0.25 0.25,0.25 C0.25,0.25 0.25,14.58 0.25,14.58 C0.25,16.24 1.59,17.58 3.25,17.58 C3.25,17.58 15.92,17.58 15.92,17.58 C17.57,17.58 18.92,16.24 18.92,14.58 C18.92,14.58 18.92,0.25 18.92,0.25c " />
|
||||
</group>
|
||||
<group
|
||||
android:name="_R_G_L_1_G_N_3_T_0"
|
||||
android:pivotX="9.583"
|
||||
android:pivotY="8.916"
|
||||
android:scaleX="0"
|
||||
android:scaleY="0"
|
||||
android:translateX="6.416"
|
||||
android:translateY="10.416999999999998" >
|
||||
<group
|
||||
android:name="_R_G_L_1_G"
|
||||
android:translateX="7.334"
|
||||
android:translateY="5.333" >
|
||||
<path
|
||||
android:name="_R_G_L_1_G_D_0_P_0"
|
||||
android:fillAlpha="1"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="nonZero"
|
||||
android:pathData=" M4.25 2.25 C4.25,3.35 3.35,4.25 2.25,4.25 C1.15,4.25 0.25,3.35 0.25,2.25 C0.25,1.15 1.15,0.25 2.25,0.25 C3.35,0.25 4.25,1.15 4.25,2.25c " />
|
||||
<path
|
||||
android:name="_R_G_L_1_G_D_1_P_0"
|
||||
android:pathData=" M2.25 2.25 C2.25,2.25 2.25,5.92 2.25,5.92 "
|
||||
android:strokeAlpha="1"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.5" />
|
||||
</group>
|
||||
</group>
|
||||
<group
|
||||
android:name="_R_G_L_0_G_N_3_T_0"
|
||||
android:pivotX="9.583"
|
||||
android:pivotY="8.916"
|
||||
android:scaleX="0"
|
||||
android:scaleY="0"
|
||||
android:translateX="6.416"
|
||||
android:translateY="10.416999999999998" >
|
||||
<group
|
||||
android:name="_R_G_L_0_G_T_1"
|
||||
android:translateX="9.583"
|
||||
android:translateY="-0.861" >
|
||||
<group
|
||||
android:name="_R_G_L_0_G"
|
||||
android:translateX="-8.083"
|
||||
android:translateY="-8.173" >
|
||||
<path
|
||||
android:name="_R_G_L_0_G_D_0_P_0"
|
||||
android:pathData=" M12.42 12.6 C12.42,12.6 12.42,8.17 12.42,8.17 C12.42,5.83 10.48,3.75 8.08,3.75 C5.69,3.75 3.75,5.83 3.75,8.17 C3.75,8.17 3.75,12.6 3.75,12.6 "
|
||||
android:strokeAlpha="1"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.5"
|
||||
android:trimPathEnd="0.9"
|
||||
android:trimPathOffset="0"
|
||||
android:trimPathStart="0.15" />
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<group android:name="time_group" />
|
||||
</vector>
|
||||
</aapt:attr>
|
||||
|
||||
<target android:name="_R_G_L_2_G" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="_R_G_L_1_G_N_3_T_0" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,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="50"
|
||||
android:propertyName="trimPathStart"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0.15"
|
||||
android:valueTo="0.15"
|
||||
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="67"
|
||||
android:propertyName="trimPathStart"
|
||||
android:startOffset="50"
|
||||
android:valueFrom="0.15"
|
||||
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_0_P_0" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="50"
|
||||
android:propertyName="trimPathEnd"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0.9"
|
||||
android:valueTo="0.9"
|
||||
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="67"
|
||||
android:propertyName="trimPathEnd"
|
||||
android:startOffset="50"
|
||||
android:valueFrom="0.9"
|
||||
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_T_1" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="150"
|
||||
android:pathData="M 9.583,-0.861C 9.583,-1.32784640645981 9.583,-3.19515359354019 9.583,-3.662"
|
||||
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.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="_R_G_L_0_G_N_3_T_0" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 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="717"
|
||||
android:propertyName="translateX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" />
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
|
||||
</animated-vector>
|
||||
@@ -1,190 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<animated-vector xmlns:aapt="http://schemas.android.com/aapt"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<aapt:attr name="android:drawable" >
|
||||
<vector
|
||||
android:height="32dp"
|
||||
android:viewportHeight="32"
|
||||
android:viewportWidth="32"
|
||||
android:width="32dp" >
|
||||
<group android:name="_R_G" >
|
||||
<group
|
||||
android:name="_R_G_L_1_G"
|
||||
android:pivotX="10.917"
|
||||
android:pivotY="9.583"
|
||||
android:scaleX="0"
|
||||
android:scaleY="0"
|
||||
android:translateX="5.083"
|
||||
android:translateY="10.417" >
|
||||
<path
|
||||
android:name="_R_G_L_1_G_D_0_P_0"
|
||||
android:fillAlpha="1"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="nonZero"
|
||||
android:pathData=" M18.92 0.25 C18.92,0.25 2.92,0.25 2.92,0.25 C1.45,0.25 0.25,1.45 0.25,2.92 C0.25,2.92 0.25,16.25 0.25,16.25 C0.25,17.72 1.45,18.92 2.92,18.92 C2.92,18.92 18.92,18.92 18.92,18.92 C20.38,18.92 21.58,17.72 21.58,16.25 C21.58,16.25 21.58,2.92 21.58,2.92 C21.58,1.45 20.38,0.25 18.92,0.25c M10.92 12.25 C9.45,12.25 8.25,11.05 8.25,9.58 C8.25,8.12 9.45,6.92 10.92,6.92 C12.38,6.92 13.58,8.12 13.58,9.58 C13.58,11.05 12.38,12.25 10.92,12.25c " />
|
||||
</group>
|
||||
<group
|
||||
android:name="_R_G_L_0_G_N_2_T_0"
|
||||
android:pivotX="10.917"
|
||||
android:pivotY="9.583"
|
||||
android:scaleX="0"
|
||||
android:scaleY="0"
|
||||
android:translateX="5.083"
|
||||
android:translateY="10.417" >
|
||||
<group
|
||||
android:name="_R_G_L_0_G_T_1"
|
||||
android:translateX="10.917"
|
||||
android:translateY="0.579" >
|
||||
<group
|
||||
android:name="_R_G_L_0_G"
|
||||
android:translateX="-9"
|
||||
android:translateY="-9" >
|
||||
<path
|
||||
android:name="_R_G_L_0_G_D_0_P_0"
|
||||
android:pathData=" M13 13 C13,13 13,9 13,9 C13,6.79 11.21,5 9,5 C6.79,5 5,6.79 5,9 C5,9 5,13 5,13 "
|
||||
android:strokeAlpha="1"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2" />
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<group android:name="time_group" />
|
||||
</vector>
|
||||
</aapt:attr>
|
||||
|
||||
<target android:name="_R_G_L_1_G" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="_R_G_L_0_G_T_1" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="150"
|
||||
android:pathData="M 10.917,0.579C 10.917,-0.14248990631104008 10.917,-3.02851009368896 10.917,-3.75"
|
||||
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.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="_R_G_L_0_G_N_2_T_0" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 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="717"
|
||||
android:propertyName="translateX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" />
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
|
||||
</animated-vector>
|
||||
@@ -1,336 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<animated-vector xmlns:aapt="http://schemas.android.com/aapt"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<aapt:attr name="android:drawable" >
|
||||
<vector
|
||||
android:height="38dp"
|
||||
android:viewportHeight="38"
|
||||
android:viewportWidth="32"
|
||||
android:width="32dp" >
|
||||
<group android:name="_R_G" >
|
||||
<group
|
||||
android:name="_R_G_L_2_G"
|
||||
android:pivotX="14.667"
|
||||
android:pivotY="12.667"
|
||||
android:scaleX="0"
|
||||
android:scaleY="0"
|
||||
android:translateX="1.3330000000000002"
|
||||
android:translateY="10.333" >
|
||||
<path
|
||||
android:name="_R_G_L_2_G_D_0_P_0"
|
||||
android:pathData=" M22.09 5 C22.09,5 6,5 6,5 C5.45,5 5,5.45 5,6 C5,6 5,19.33 5,19.33 C5,19.89 5.45,20.33 6,20.33 C6,20.33 23.33,20.33 23.33,20.33 C23.89,20.33 24.33,19.89 24.33,19.33 C24.33,19.33 24.33,6 24.33,6 C24.33,5.45 23.89,5 23.33,5 C23.33,5 22.09,5 22.09,5c "
|
||||
android:strokeAlpha="1"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.5" />
|
||||
</group>
|
||||
<group
|
||||
android:name="_R_G_L_1_G_N_3_T_0"
|
||||
android:pivotX="14.667"
|
||||
android:pivotY="12.667"
|
||||
android:scaleX="0"
|
||||
android:scaleY="0"
|
||||
android:translateX="1.3330000000000002"
|
||||
android:translateY="10.333" >
|
||||
<group
|
||||
android:name="_R_G_L_1_G"
|
||||
android:translateX="12.416"
|
||||
android:translateY="10.417" >
|
||||
<path
|
||||
android:name="_R_G_L_1_G_D_0_P_0"
|
||||
android:fillAlpha="1"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="nonZero"
|
||||
android:pathData=" M2.25 0.25 C3.35,0.25 4.25,1.15 4.25,2.25 C4.25,3.35 3.35,4.25 2.25,4.25 C1.15,4.25 0.25,3.35 0.25,2.25 C0.25,1.15 1.15,0.25 2.25,0.25c " />
|
||||
</group>
|
||||
</group>
|
||||
<group android:name="_R_G_L_0_G_N_3_T_0_M" >
|
||||
<group
|
||||
android:name="_R_G_L_0_G_N_3_T_0"
|
||||
android:pivotX="14.667"
|
||||
android:pivotY="12.667"
|
||||
android:scaleX="0"
|
||||
android:scaleY="0"
|
||||
android:translateX="1.3330000000000002"
|
||||
android:translateY="10.333" >
|
||||
<group
|
||||
android:name="_R_G_L_0_G_T_1"
|
||||
android:translateX="14.666"
|
||||
android:translateY="3.769" >
|
||||
<group
|
||||
android:name="_R_G_L_0_G"
|
||||
android:translateX="-9.333"
|
||||
android:translateY="-9.713" >
|
||||
<path
|
||||
android:name="_R_G_L_0_G_D_0_P_0"
|
||||
android:pathData=" M13.67 13.8 C13.67,13.8 13.67,8.94 13.67,8.94 C13.63,6.75 11.69,5 9.33,5.04 C6.98,5 5.04,6.75 5,8.94 C5,8.94 5,13.8 5,13.8 "
|
||||
android:strokeAlpha="1"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.5"
|
||||
android:trimPathEnd="0.9"
|
||||
android:trimPathOffset="0"
|
||||
android:trimPathStart="0.14" />
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<group android:name="time_group" />
|
||||
</vector>
|
||||
</aapt:attr>
|
||||
|
||||
<target android:name="_R_G_L_2_G" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="_R_G_L_1_G_N_3_T_0" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,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="50"
|
||||
android:propertyName="trimPathStart"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0.14"
|
||||
android:valueTo="0.14"
|
||||
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="67"
|
||||
android:propertyName="trimPathStart"
|
||||
android:startOffset="50"
|
||||
android:valueFrom="0.14"
|
||||
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_0_P_0" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="50"
|
||||
android:propertyName="trimPathEnd"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0.9"
|
||||
android:valueTo="0.9"
|
||||
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="67"
|
||||
android:propertyName="trimPathEnd"
|
||||
android:startOffset="50"
|
||||
android:valueFrom="0.9"
|
||||
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_T_1" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="150"
|
||||
android:pathData="M 14.666,3.769C 14.666,3.18868762874603 14.666,0.8673123712539699 14.666,0.287"
|
||||
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.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="_R_G_L_0_G_N_3_T_0" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="233"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1.025"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.043,0.277 0.44,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
<objectAnimator
|
||||
android:duration="117"
|
||||
android:propertyName="scaleY"
|
||||
android:startOffset="233"
|
||||
android:valueFrom="1.025"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" >
|
||||
<aapt:attr name="android:interpolator" >
|
||||
<pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
|
||||
</aapt:attr>
|
||||
</objectAnimator>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="_R_G_L_0_G_N_3_T_0_M" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="0"
|
||||
android:propertyName="scaleX"
|
||||
android:startOffset="50"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" />
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="time_group" >
|
||||
<aapt:attr name="android:animation" >
|
||||
<set android:ordering="together" >
|
||||
<objectAnimator
|
||||
android:duration="717"
|
||||
android:propertyName="translateX"
|
||||
android:startOffset="0"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="1"
|
||||
android:valueType="floatType" />
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
|
||||
</animated-vector>
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static com.android.systemui.Dependency.MAIN_HANDLER_NAME;
|
||||
import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
@@ -29,12 +28,12 @@ import android.graphics.drawable.Animatable2;
|
||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.hardware.biometrics.BiometricSourceType;
|
||||
import android.os.Handler;
|
||||
import android.os.Trace;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -43,6 +42,7 @@ import com.android.internal.graphics.ColorUtils;
|
||||
import com.android.internal.telephony.IccCardConstants;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.Interpolators;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dock.DockManager;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
@@ -67,7 +67,7 @@ import javax.inject.Named;
|
||||
public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChangedListener,
|
||||
StatusBarStateController.StateListener, ConfigurationController.ConfigurationListener,
|
||||
UnlockMethodCache.OnUnlockMethodChangedListener,
|
||||
NotificationWakeUpCoordinator.WakeUpListener {
|
||||
NotificationWakeUpCoordinator.WakeUpListener, ViewTreeObserver.OnPreDrawListener {
|
||||
|
||||
private static final int STATE_LOCKED = 0;
|
||||
private static final int STATE_LOCK_OPEN = 1;
|
||||
@@ -79,12 +79,12 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
private final AccessibilityController mAccessibilityController;
|
||||
private final DockManager mDockManager;
|
||||
private final Handler mMainHandler;
|
||||
private final KeyguardMonitor mKeyguardMonitor;
|
||||
private final KeyguardBypassController mBypassController;
|
||||
private final NotificationWakeUpCoordinator mWakeUpCoordinator;
|
||||
|
||||
private int mLastState = 0;
|
||||
private boolean mForceUpdate;
|
||||
private boolean mTransientBiometricsError;
|
||||
private boolean mIsFaceUnlockState;
|
||||
private boolean mSimLocked;
|
||||
@@ -92,23 +92,20 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
private boolean mPulsing;
|
||||
private boolean mDozing;
|
||||
private boolean mDocked;
|
||||
private boolean mLastDozing;
|
||||
private boolean mLastPulsing;
|
||||
private int mIconColor;
|
||||
private float mDozeAmount;
|
||||
private int mIconRes;
|
||||
private boolean mBouncerShowing;
|
||||
private boolean mWasPulsingOnThisFrame;
|
||||
private boolean mWakeAndUnlockRunning;
|
||||
private boolean mKeyguardShowing;
|
||||
private boolean mShowingLaunchAffordance;
|
||||
private boolean mUpdatePending;
|
||||
|
||||
private final KeyguardMonitor.Callback mKeyguardMonitorCallback =
|
||||
new KeyguardMonitor.Callback() {
|
||||
@Override
|
||||
public void onKeyguardShowingChanged() {
|
||||
mKeyguardShowing = mKeyguardMonitor.isShowing();
|
||||
update(false /* force */);
|
||||
update();
|
||||
}
|
||||
};
|
||||
private final DockManager.DockEventListener mDockEventListener =
|
||||
@@ -119,7 +116,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
|| event == DockManager.STATE_DOCKED_HIDE;
|
||||
if (docked != mDocked) {
|
||||
mDocked = docked;
|
||||
update(true /* force */);
|
||||
update();
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -129,9 +126,8 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
@Override
|
||||
public void onSimStateChanged(int subId, int slotId,
|
||||
IccCardConstants.State simState) {
|
||||
boolean oldSimLocked = mSimLocked;
|
||||
mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
|
||||
update(oldSimLocked != mSimLocked);
|
||||
update();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -149,11 +145,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
public void onStrongAuthStateChanged(int userId) {
|
||||
update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBiometricsCleared() {
|
||||
update();
|
||||
}
|
||||
};
|
||||
|
||||
@Inject
|
||||
@@ -164,8 +155,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
KeyguardBypassController bypassController,
|
||||
NotificationWakeUpCoordinator wakeUpCoordinator,
|
||||
KeyguardMonitor keyguardMonitor,
|
||||
@Nullable DockManager dockManager,
|
||||
@Named(MAIN_HANDLER_NAME) Handler mainHandler) {
|
||||
@Nullable DockManager dockManager) {
|
||||
super(context, attrs);
|
||||
mContext = context;
|
||||
mUnlockMethodCache = UnlockMethodCache.getInstance(context);
|
||||
@@ -177,7 +167,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
mWakeUpCoordinator = wakeUpCoordinator;
|
||||
mKeyguardMonitor = keyguardMonitor;
|
||||
mDockManager = dockManager;
|
||||
mMainHandler = mainHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -194,6 +183,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
mDockManager.addListener(mDockEventListener);
|
||||
}
|
||||
onThemeChanged();
|
||||
update();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -247,51 +237,61 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
}
|
||||
|
||||
public void update(boolean force) {
|
||||
int state = getState();
|
||||
mIsFaceUnlockState = state == STATE_SCANNING_FACE;
|
||||
if (state != mLastState || mLastDozing != mDozing || mLastPulsing != mPulsing || force) {
|
||||
@LockAnimIndex final int lockAnimIndex = getAnimationIndexForTransition(mLastState,
|
||||
state, mLastPulsing, mPulsing, mLastDozing, mDozing);
|
||||
boolean isAnim = lockAnimIndex != -1;
|
||||
|
||||
int iconRes = isAnim ? getThemedAnimationResId(lockAnimIndex) : getIconForState(state);
|
||||
if (iconRes != mIconRes) {
|
||||
mIconRes = iconRes;
|
||||
|
||||
Drawable icon = mContext.getDrawable(iconRes);
|
||||
final AnimatedVectorDrawable animation = icon instanceof AnimatedVectorDrawable
|
||||
? (AnimatedVectorDrawable) icon
|
||||
: null;
|
||||
setImageDrawable(icon, false);
|
||||
if (mIsFaceUnlockState) {
|
||||
announceForAccessibility(getContext().getString(
|
||||
R.string.accessibility_scanning_face));
|
||||
}
|
||||
|
||||
if (animation != null && isAnim) {
|
||||
animation.forceAnimationOnUI();
|
||||
animation.clearAnimationCallbacks();
|
||||
animation.registerAnimationCallback(new Animatable2.AnimationCallback() {
|
||||
@Override
|
||||
public void onAnimationEnd(Drawable drawable) {
|
||||
if (getDrawable() == animation && state == getState()
|
||||
&& doesAnimationLoop(lockAnimIndex)) {
|
||||
animation.start();
|
||||
} else {
|
||||
Trace.endAsyncSection("LockIcon#Animation", state);
|
||||
}
|
||||
}
|
||||
});
|
||||
Trace.beginAsyncSection("LockIcon#Animation", state);
|
||||
animation.start();
|
||||
}
|
||||
}
|
||||
updateDarkTint();
|
||||
|
||||
mLastState = state;
|
||||
mLastDozing = mDozing;
|
||||
mLastPulsing = mPulsing;
|
||||
if (force) {
|
||||
mForceUpdate = true;
|
||||
}
|
||||
if (!mUpdatePending) {
|
||||
mUpdatePending = true;
|
||||
getViewTreeObserver().addOnPreDrawListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
mUpdatePending = false;
|
||||
getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
|
||||
int state = getState();
|
||||
int lastState = mLastState;
|
||||
mIsFaceUnlockState = state == STATE_SCANNING_FACE;
|
||||
mLastState = state;
|
||||
|
||||
if (lastState != state || mForceUpdate) {
|
||||
mForceUpdate = false;
|
||||
@LockAnimIndex final int lockAnimIndex = getAnimationIndexForTransition(lastState,
|
||||
state, mPulsing, mDozing);
|
||||
boolean isAnim = lockAnimIndex != -1;
|
||||
int iconRes = isAnim ? getThemedAnimationResId(lockAnimIndex) : getIconForState(state);
|
||||
|
||||
Drawable icon = mContext.getDrawable(iconRes);
|
||||
final AnimatedVectorDrawable animation = icon instanceof AnimatedVectorDrawable
|
||||
? (AnimatedVectorDrawable) icon
|
||||
: null;
|
||||
setImageDrawable(icon, false);
|
||||
if (mIsFaceUnlockState) {
|
||||
announceForAccessibility(getContext().getString(
|
||||
R.string.accessibility_scanning_face));
|
||||
}
|
||||
|
||||
if (animation != null && isAnim) {
|
||||
animation.forceAnimationOnUI();
|
||||
animation.clearAnimationCallbacks();
|
||||
animation.registerAnimationCallback(new Animatable2.AnimationCallback() {
|
||||
@Override
|
||||
public void onAnimationEnd(Drawable drawable) {
|
||||
if (getDrawable() == animation && state == getState()
|
||||
&& doesAnimationLoop(lockAnimIndex)) {
|
||||
animation.start();
|
||||
} else {
|
||||
Trace.endAsyncSection("LockIcon#Animation", state);
|
||||
}
|
||||
}
|
||||
});
|
||||
Trace.beginAsyncSection("LockIcon#Animation", state);
|
||||
animation.start();
|
||||
}
|
||||
}
|
||||
updateDarkTint();
|
||||
|
||||
boolean onAodNotPulsingOrDocked = mDozing && (!mPulsing || mDocked);
|
||||
boolean invisible = onAodNotPulsingOrDocked || mWakeAndUnlockRunning
|
||||
@@ -302,8 +302,25 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
&& !mBouncerShowing) {
|
||||
invisible = true;
|
||||
}
|
||||
setVisibility(invisible ? INVISIBLE : VISIBLE);
|
||||
boolean wasInvisible = getVisibility() == INVISIBLE;
|
||||
if (invisible != wasInvisible) {
|
||||
setVisibility(invisible ? INVISIBLE : VISIBLE);
|
||||
animate().cancel();
|
||||
if (!invisible) {
|
||||
setScaleX(0);
|
||||
setScaleY(0);
|
||||
animate()
|
||||
.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN)
|
||||
.scaleX(1)
|
||||
.scaleY(1)
|
||||
.withLayer()
|
||||
.setDuration(233)
|
||||
.start();
|
||||
}
|
||||
}
|
||||
updateClickability();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void updateClickability() {
|
||||
@@ -364,30 +381,22 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
return lockAnimIndex == SCANNING;
|
||||
}
|
||||
|
||||
private int getAnimationIndexForTransition(int oldState, int newState,
|
||||
boolean wasPulsing, boolean pulsing, boolean wasDozing, boolean dozing) {
|
||||
private static int getAnimationIndexForTransition(int oldState, int newState, boolean pulsing,
|
||||
boolean dozing) {
|
||||
|
||||
// Never animate when screen is off
|
||||
if (dozing && !pulsing && !mWasPulsingOnThisFrame) {
|
||||
if (dozing && !pulsing) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
boolean isError = oldState != STATE_BIOMETRICS_ERROR && newState == STATE_BIOMETRICS_ERROR;
|
||||
boolean justUnlocked = oldState != STATE_LOCK_OPEN && newState == STATE_LOCK_OPEN;
|
||||
boolean justLocked = oldState == STATE_LOCK_OPEN && newState == STATE_LOCKED;
|
||||
boolean nowPulsing = !wasPulsing && pulsing;
|
||||
boolean turningOn = wasDozing && !dozing && !mWasPulsingOnThisFrame;
|
||||
|
||||
if (isError) {
|
||||
if (newState == STATE_BIOMETRICS_ERROR) {
|
||||
return ERROR;
|
||||
} else if (justUnlocked) {
|
||||
} else if (oldState != STATE_LOCK_OPEN && newState == STATE_LOCK_OPEN) {
|
||||
return UNLOCK;
|
||||
} else if (justLocked) {
|
||||
} else if (oldState == STATE_LOCK_OPEN && newState == STATE_LOCKED) {
|
||||
return LOCK;
|
||||
} else if (newState == STATE_SCANNING_FACE) {
|
||||
return SCANNING;
|
||||
} else if ((nowPulsing || turningOn) && newState != STATE_LOCK_OPEN) {
|
||||
return LOCK_IN;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@@ -407,37 +416,33 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({ERROR, UNLOCK, LOCK, SCANNING, LOCK_IN})
|
||||
@IntDef({ERROR, UNLOCK, LOCK, SCANNING})
|
||||
@interface LockAnimIndex {}
|
||||
private static final int ERROR = 0, UNLOCK = 1, LOCK = 2, SCANNING = 3, LOCK_IN = 4;
|
||||
private static final int ERROR = 0, UNLOCK = 1, LOCK = 2, SCANNING = 3;
|
||||
private static final int[][] LOCK_ANIM_RES_IDS = new int[][] {
|
||||
{
|
||||
R.anim.lock_to_error,
|
||||
R.anim.lock_unlock,
|
||||
R.anim.lock_lock,
|
||||
R.anim.lock_scanning,
|
||||
R.anim.lock_in,
|
||||
R.anim.lock_scanning
|
||||
},
|
||||
{
|
||||
R.anim.lock_to_error_circular,
|
||||
R.anim.lock_unlock_circular,
|
||||
R.anim.lock_lock_circular,
|
||||
R.anim.lock_scanning_circular,
|
||||
R.anim.lock_in_circular,
|
||||
R.anim.lock_scanning_circular
|
||||
},
|
||||
{
|
||||
R.anim.lock_to_error_filled,
|
||||
R.anim.lock_unlock_filled,
|
||||
R.anim.lock_lock_filled,
|
||||
R.anim.lock_scanning_filled,
|
||||
R.anim.lock_in_filled,
|
||||
R.anim.lock_scanning_filled
|
||||
},
|
||||
{
|
||||
R.anim.lock_to_error_rounded,
|
||||
R.anim.lock_unlock_rounded,
|
||||
R.anim.lock_lock_rounded,
|
||||
R.anim.lock_scanning_rounded,
|
||||
R.anim.lock_in_rounded,
|
||||
R.anim.lock_scanning_rounded
|
||||
},
|
||||
};
|
||||
|
||||
@@ -462,7 +467,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
return STATE_LOCK_OPEN;
|
||||
} else if (mTransientBiometricsError) {
|
||||
return STATE_BIOMETRICS_ERROR;
|
||||
} else if (updateMonitor.isFaceDetectionRunning()) {
|
||||
} else if (updateMonitor.isFaceDetectionRunning() && !mPulsing) {
|
||||
return STATE_SCANNING_FACE;
|
||||
} else {
|
||||
return STATE_LOCKED;
|
||||
@@ -481,12 +486,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
||||
*/
|
||||
public void setPulsing(boolean pulsing) {
|
||||
mPulsing = pulsing;
|
||||
if (!mPulsing) {
|
||||
mWasPulsingOnThisFrame = true;
|
||||
mMainHandler.post(() -> {
|
||||
mWasPulsingOnThisFrame = false;
|
||||
});
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
@@ -190,6 +190,11 @@ public class UnlockMethodCache {
|
||||
public void onKeyguardVisibilityChanged(boolean showing) {
|
||||
update(false /* updateAlways */);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBiometricsCleared() {
|
||||
update(false /* alwaysUpdate */);
|
||||
}
|
||||
};
|
||||
|
||||
public boolean isTrustManaged() {
|
||||
|
||||
Reference in New Issue
Block a user