Merge "Draw rounded corners above the taskbar" into sc-v2-dev
diff --git a/quickstep/res/drawable/gesture_tutorial_finger_dot.xml b/quickstep/res/drawable/gesture_tutorial_finger_dot.xml
new file mode 100644
index 0000000..5f8aafd
--- /dev/null
+++ b/quickstep/res/drawable/gesture_tutorial_finger_dot.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="@color/gesture_tutorial_primary_color" />
+ <size android:width="92dp" android:height="92dp"/>
+</shape>
\ No newline at end of file
diff --git a/quickstep/res/drawable/gesture_tutorial_motion_back.xml b/quickstep/res/drawable/gesture_tutorial_motion_back.xml
deleted file mode 100644
index a6860fa..0000000
--- a/quickstep/res/drawable/gesture_tutorial_motion_back.xml
+++ /dev/null
@@ -1,1233 +0,0 @@
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:aapt="http://schemas.android.com/aapt">
- <target android:name="_R_G_L_3_G_L_0_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_1_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_2_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_3_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_4_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_5_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_6_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_7_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_8_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_9_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_10_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_11_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_12_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G_L_0_G_D_13_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillAlpha"
- android:startOffset="1217"
- 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_3_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="1367"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="283"
- android:propertyName="scaleX"
- android:startOffset="1217"
- android:valueFrom="1"
- android:valueTo="0.88012"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,0.536 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="283"
- android:propertyName="scaleY"
- android:startOffset="1217"
- android:valueFrom="1"
- android:valueTo="0.88012"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,0.536 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2417"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_0_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_1_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_2_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_3_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_4_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_5_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_6_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_7_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_8_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_9_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_10_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_11_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_12_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_13_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_14_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_15_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_16_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_17_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_18_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_19_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_20_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_21_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_22_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_23_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G_D_24_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="333"
- android:propertyName="fillAlpha"
- android:startOffset="1417"
- 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_2_G_L_0_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="1417"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="1417"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="1417"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_D_0_P_0_G_0_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="667"
- android:pathData="M 123.282,129.757C 134.28199999999998,129.757 178.282,129.757 189.282,129.757"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="217">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="333"
- android:pathData="M 189.282,129.757C 189.282,129.757 189.282,129.757 189.282,129.757"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="883">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0.333 0.667,0.667 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="250"
- android:pathData="M 189.282,129.757C 178.282,129.757 134.28199999999998,129.757 123.282,129.757"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="1217">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="217"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2383"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </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="217"
- android:propertyName="fillAlpha"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="0.75"
- 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="967"
- android:propertyName="fillAlpha"
- android:startOffset="217"
- android:valueFrom="0.75"
- android:valueTo="0.75"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="1183"
- android:valueFrom="0.75"
- android:valueTo="0"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.833,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="217"
- android:propertyName="pathData"
- android:startOffset="0"
- android:valueFrom="M-206.5 13.5 C-186.34,13.5 -170,29.84 -170,50 C-170,70.16 -186.34,86.5 -206.5,86.5 C-226.66,86.5 -243,70.16 -243,50 C-243,29.84 -226.66,13.5 -206.5,13.5c "
- android:valueTo="M-206 0 C-178.39,0 -156,22.39 -156,50 C-156,77.61 -178.39,100 -206,100 C-233.61,100 -256,77.61 -256,50 C-256,22.39 -233.61,0 -206,0c "
- android:valueType="pathType">
- <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="583"
- android:propertyName="pathData"
- android:startOffset="217"
- android:valueFrom="M-206 0 C-178.39,0 -156,22.39 -156,50 C-156,77.61 -178.39,100 -206,100 C-233.61,100 -256,77.61 -256,50 C-256,22.39 -233.61,0 -206,0c "
- android:valueTo="M0 0 C27.61,0 50,22.39 50,50 C50,77.61 27.61,100 0,100 C-27.61,100 -50,77.61 -50,50 C-50,22.39 -27.61,0 0,0c "
- android:valueType="pathType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="383"
- android:propertyName="pathData"
- android:startOffset="800"
- android:valueFrom="M0 0 C27.61,0 50,22.39 50,50 C50,77.61 27.61,100 0,100 C-27.61,100 -50,77.61 -50,50 C-50,22.39 -27.61,0 0,0c "
- android:valueTo="M0 0 C27.61,0 50,22.39 50,50 C50,77.61 27.61,100 0,100 C-27.61,100 -50,77.61 -50,50 C-50,22.39 -27.61,0 0,0c "
- android:valueType="pathType">
- <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="167"
- android:propertyName="pathData"
- android:startOffset="1183"
- android:valueFrom="M0 0 C27.61,0 50,22.39 50,50 C50,77.61 27.61,100 0,100 C-27.61,100 -50,77.61 -50,50 C-50,22.39 -27.61,0 0,0c "
- android:valueTo="M0 13.5 C20.16,13.5 36.5,29.84 36.5,50 C36.5,70.16 20.16,86.5 0,86.5 C-20.16,86.5 -36.5,70.16 -36.5,50 C-36.5,29.84 -20.16,13.5 0,13.5c "
- android:valueType="pathType">
- <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="1767"
- android:propertyName="translateX"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <aapt:attr name="android:drawable">
- <vector
- android:width="412dp"
- android:height="892dp"
- android:viewportHeight="892"
- android:viewportWidth="412">
- <group android:name="_R_G">
- <group
- android:name="_R_G_L_4_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -446 C206,-446 206,446 206,446 C206,446 -206,446 -206,446 C-206,446 -206,-446 -206,-446 C-206,-446 206,-446 206,-446c " />
- </group>
- <group
- android:name="_R_G_L_3_G"
- android:pivotX="206"
- android:pivotY="446"
- android:scaleX="1"
- android:scaleY="1">
- <group android:name="_R_G_L_3_G_L_0_G">
- <group android:name="_R_G_L_3_G_L_0_G_L_0_G">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#f1f3f4"
- android:fillType="nonZero"
- android:pathData=" M412 101 C412,101 412,892 412,892 C412,892 0,892 0,892 C0,892 0,101 0,101 C0,101 412,101 412,101c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_1_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M412 0 C412,0 412,101 412,101 C412,101 0,101 0,101 C0,101 0,0 0,0 C0,0 412,0 412,0c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_2_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M383 804 C383,816.15 373.15,826 361,826 C361,826 51,826 51,826 C38.85,826 29,816.15 29,804 C29,791.85 38.85,782 51,782 C51,782 361,782 361,782 C373.15,782 383,791.85 383,804c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_3_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M201 47 C201,47 201,75 201,75 C201,77.21 199.21,79 197,79 C197,79 38,79 38,79 C35.79,79 34,77.21 34,75 C34,75 34,47 34,47 C34,44.79 35.79,43 38,43 C38,43 197,43 197,43 C199.21,43 201,44.79 201,47c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_4_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M388 47 C388,47 388,75 388,75 C388,77.21 386.21,79 384,79 C384,79 356,79 356,79 C353.79,79 352,77.21 352,75 C352,75 352,47 352,47 C352,44.79 353.79,43 356,43 C356,43 384,43 384,43 C386.21,43 388,44.79 388,47c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_5_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M336 47 C336,47 336,75 336,75 C336,77.21 334.21,79 332,79 C332,79 304,79 304,79 C301.79,79 300,77.21 300,75 C300,75 300,47 300,47 C300,44.79 301.79,43 304,43 C304,43 332,43 332,43 C334.21,43 336,44.79 336,47c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_6_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M70 618 C70,630.15 60.15,640 48,640 C35.85,640 26,630.15 26,618 C26,605.85 35.85,596 48,596 C60.15,596 70,605.85 70,618c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_7_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M70 396 C70,408.15 60.15,418 48,418 C35.85,418 26,408.15 26,396 C26,383.85 35.85,374 48,374 C60.15,374 70,383.85 70,396c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_8_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M394 248 C394,248 394,324 394,324 C394,333.94 385.94,342 376,342 C376,342 142,342 142,342 C132.06,342 124,333.94 124,324 C124,324 124,248 124,248 C124,238.06 132.06,230 142,230 C142,230 376,230 376,230 C385.94,230 394,238.06 394,248c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_9_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M393.94 468.38 C393.94,468.38 393.94,481.5 393.94,481.5 C393.94,483.71 392.15,485.5 389.94,485.5 C389.94,485.5 303.5,485.5 303.5,485.5 C301.29,485.5 299.5,483.71 299.5,481.5 C299.5,481.5 299.5,468.38 299.5,468.38 C299.5,466.17 301.29,464.38 303.5,464.38 C303.5,464.38 389.94,464.38 389.94,464.38 C392.15,464.38 393.94,466.17 393.94,468.38c M394 468 C394,477.67 386.17,485.5 376.5,485.5 C376.5,485.5 290,485.5 290,485.5 C280.33,485.5 272.5,477.67 272.5,468 C272.5,458.34 280.33,450.5 290,450.5 C290,450.5 376.5,450.5 376.5,450.5 C386.17,450.5 394,458.34 394,468c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_10_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M394 494 C394,494 394,547 394,547 C394,549.21 392.21,551 390,551 C390,551 164,551 164,551 C161.79,551 160,549.21 160,547 C160,547 160,494 160,494 C160,491.79 161.79,490 164,490 C164,490 390,490 390,490 C392.21,490 394,491.79 394,494c M394 508 C394,508 394,545 394,545 C394,554.94 385.94,563 376,563 C376,563 142,563 142,563 C132.06,563 124,554.94 124,545 C124,545 124,508 124,508 C124,498.06 132.06,490 142,490 C142,490 376,490 376,490 C385.94,490 394,498.06 394,508c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_11_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M394 690 C394,690 394,727 394,727 C394,736.94 385.94,745 376,745 C376,745 142,745 142,745 C132.06,745 124,736.94 124,727 C124,727 124,690 124,690 C124,680.06 132.06,672 142,672 C142,672 376,672 376,672 C385.94,672 394,680.06 394,690c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_12_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M267.5 617 C267.5,626.67 259.67,634.5 250,634.5 C250,634.5 104.5,634.5 104.5,634.5 C94.84,634.5 87,626.67 87,617 C87,607.34 94.84,599.5 104.5,599.5 C104.5,599.5 250,599.5 250,599.5 C259.67,599.5 267.5,607.34 267.5,617c " />
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_13_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M299 395.5 C299,405.17 291.16,413 281.5,413 C281.5,413 104.5,413 104.5,413 C94.84,413 87,405.17 87,395.5 C87,385.84 94.84,378 104.5,378 C104.5,378 281.5,378 281.5,378 C291.16,378 299,385.84 299,395.5c " />
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_2_G"
- android:scaleY="0">
- <group
- android:name="_R_G_L_2_G_L_0_G"
- android:scaleY="0">
- <group
- android:name="_R_G_L_2_G_L_0_G_L_0_G"
- android:scaleY="0">
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M412 0 C412,0 412,892 412,892 C412,892 0,892 0,892 C0,892 0,0 0,0 C0,0 412,0 412,0c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_1_P_0"
- android:fillAlpha="0"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M412 0 C412,0 412,101 412,101 C412,101 0,101 0,101 C0,101 0,0 0,0 C0,0 412,0 412,0c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_2_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M195 143 C195,143 195,153 195,153 C195,155.21 193.21,157 191,157 C191,157 106,157 106,157 C103.79,157 102,155.21 102,153 C102,153 102,143 102,143 C102,140.79 103.79,139 106,139 C106,139 191,139 191,139 C193.21,139 195,140.79 195,143c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_3_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M270 165 C270,165 270,173 270,173 C270,175.21 268.21,177 266,177 C266,177 106,177 106,177 C103.79,177 102,175.21 102,173 C102,173 102,165 102,165 C102,162.79 103.79,161 106,161 C106,161 266,161 266,161 C268.21,161 270,162.79 270,165c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_4_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M222 231 C222,231 222,241 222,241 C222,243.21 220.21,245 218,245 C218,245 106,245 106,245 C103.79,245 102,243.21 102,241 C102,241 102,231 102,231 C102,228.79 103.79,227 106,227 C106,227 218,227 218,227 C220.21,227 222,228.79 222,231c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_5_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M241 253 C241,253 241,261 241,261 C241,263.21 239.21,265 237,265 C237,265 106,265 106,265 C103.79,265 102,263.21 102,261 C102,261 102,253 102,253 C102,250.79 103.79,249 106,249 C106,249 237,249 237,249 C239.21,249 241,250.79 241,253c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_6_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M214 319 C214,319 214,329 214,329 C214,331.21 212.21,333 210,333 C210,333 106,333 106,333 C103.79,333 102,331.21 102,329 C102,329 102,319 102,319 C102,316.79 103.79,315 106,315 C106,315 210,315 210,315 C212.21,315 214,316.79 214,319c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_7_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M333 341 C333,341 333,349 333,349 C333,351.21 331.21,353 329,353 C329,353 106,353 106,353 C103.79,353 102,351.21 102,349 C102,349 102,341 102,341 C102,338.79 103.79,337 106,337 C106,337 329,337 329,337 C331.21,337 333,338.79 333,341c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_8_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M238 407 C238,407 238,417 238,417 C238,419.21 236.21,421 234,421 C234,421 106,421 106,421 C103.79,421 102,419.21 102,417 C102,417 102,407 102,407 C102,404.79 103.79,403 106,403 C106,403 234,403 234,403 C236.21,403 238,404.79 238,407c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_9_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M295 429 C295,429 295,437 295,437 C295,439.21 293.21,441 291,441 C291,441 106,441 106,441 C103.79,441 102,439.21 102,437 C102,437 102,429 102,429 C102,426.79 103.79,425 106,425 C106,425 291,425 291,425 C293.21,425 295,426.79 295,429c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_10_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M168 495 C168,495 168,505 168,505 C168,507.21 166.21,509 164,509 C164,509 106,509 106,509 C103.79,509 102,507.21 102,505 C102,505 102,495 102,495 C102,492.79 103.79,491 106,491 C106,491 164,491 164,491 C166.21,491 168,492.79 168,495c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_11_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M269 517 C269,517 269,525 269,525 C269,527.21 267.21,529 265,529 C265,529 106,529 106,529 C103.79,529 102,527.21 102,525 C102,525 102,517 102,517 C102,514.79 103.79,513 106,513 C106,513 265,513 265,513 C267.21,513 269,514.79 269,517c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_12_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M235 583 C235,583 235,593 235,593 C235,595.21 233.21,597 231,597 C231,597 106,597 106,597 C103.79,597 102,595.21 102,593 C102,593 102,583 102,583 C102,580.79 103.79,579 106,579 C106,579 231,579 231,579 C233.21,579 235,580.79 235,583c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_13_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M295 605 C295,605 295,613 295,613 C295,615.21 293.21,617 291,617 C291,617 106,617 106,617 C103.79,617 102,615.21 102,613 C102,613 102,605 102,605 C102,602.79 103.79,601 106,601 C106,601 291,601 291,601 C293.21,601 295,602.79 295,605c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_14_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M223 671 C223,671 223,681 223,681 C223,683.21 221.21,685 219,685 C219,685 106,685 106,685 C103.79,685 102,683.21 102,681 C102,681 102,671 102,671 C102,668.79 103.79,667 106,667 C106,667 219,667 219,667 C221.21,667 223,668.79 223,671c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_15_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M246 693 C246,693 246,701 246,701 C246,703.21 244.21,705 242,705 C242,705 106,705 106,705 C103.79,705 102,703.21 102,701 C102,701 102,693 102,693 C102,690.79 103.79,689 106,689 C106,689 242,689 242,689 C244.21,689 246,690.79 246,693c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_16_P_0"
- android:fillAlpha="0"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M388 798 C388,798 388,798 388,798 C388,813.45 375.45,826 360,826 C360,826 267,826 267,826 C251.55,826 239,813.45 239,798 C239,798 239,798 239,798 C239,782.55 251.55,770 267,770 C267,770 360,770 360,770 C375.45,770 388,782.55 388,798c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_17_P_0"
- android:fillAlpha="0"
- android:fillColor="#f8f9fa"
- android:fillType="nonZero"
- android:pathData=" M377 47 C377,47 377,75 377,75 C377,77.21 375.21,79 373,79 C373,79 38,79 38,79 C35.79,79 34,77.21 34,75 C34,75 34,47 34,47 C34,44.79 35.79,43 38,43 C38,43 373,43 373,43 C375.21,43 377,44.79 377,47c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_18_P_0"
- android:fillAlpha="0"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M82 157 C82,172.46 69.46,185 54,185 C38.54,185 26,172.46 26,157 C26,141.54 38.54,129 54,129 C69.46,129 82,141.54 82,157c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_19_P_0"
- android:fillAlpha="0"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M82 245 C82,260.46 69.46,273 54,273 C38.54,273 26,260.46 26,245 C26,229.54 38.54,217 54,217 C69.46,217 82,229.54 82,245c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_20_P_0"
- android:fillAlpha="0"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M82 333 C82,348.46 69.46,361 54,361 C38.54,361 26,348.46 26,333 C26,317.54 38.54,305 54,305 C69.46,305 82,317.54 82,333c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_21_P_0"
- android:fillAlpha="0"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M82 421 C82,436.46 69.46,449 54,449 C38.54,449 26,436.46 26,421 C26,405.54 38.54,393 54,393 C69.46,393 82,405.54 82,421c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_22_P_0"
- android:fillAlpha="0"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M82 509 C82,524.46 69.46,537 54,537 C38.54,537 26,524.46 26,509 C26,493.54 38.54,481 54,481 C69.46,481 82,493.54 82,509c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_23_P_0"
- android:fillAlpha="0"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M82 597 C82,612.46 69.46,625 54,625 C38.54,625 26,612.46 26,597 C26,581.54 38.54,569 54,569 C69.46,569 82,581.54 82,597c " />
- <path
- android:name="_R_G_L_2_G_L_0_G_L_0_G_D_24_P_0"
- android:fillAlpha="0"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M82 685 C82,700.46 69.46,713 54,713 C38.54,713 26,700.46 26,685 C26,669.54 38.54,657 54,657 C69.46,657 82,669.54 82,685c " />
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_1_G"
- android:scaleY="0"
- android:translateX="-17.875"
- android:translateY="322.017">
- <group
- android:name="_R_G_L_1_G_D_0_P_0_G_0_T_0"
- android:translateX="123.282"
- android:translateY="129.757">
- <path
- android:name="_R_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#3b4043"
- android:fillType="nonZero"
- android:pathData=" M-109 27.43 C-109,27.43 -112.61,23.81 -112.61,23.81 C-112.61,23.81 -133.03,44.23 -133.03,44.23 C-133.03,44.23 -112.61,64.64 -112.61,64.64 C-112.61,64.64 -109,61.03 -109,61.03 C-109,61.03 -125.8,44.23 -125.8,44.23 C-125.8,44.23 -109,27.43 -109,27.43c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_0_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_0_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="@color/gesture_tutorial_primary_color"
- android:fillType="nonZero"
- android:pathData=" M-206.5 13.5 C-186.34,13.5 -170,29.84 -170,50 C-170,70.16 -186.34,86.5 -206.5,86.5 C-226.66,86.5 -243,70.16 -243,50 C-243,29.84 -226.66,13.5 -206.5,13.5c " />
- </group>
- </group>
- <group android:name="time_group" />
- </vector>
- </aapt:attr>
-</animated-vector>
\ No newline at end of file
diff --git a/quickstep/res/drawable/gesture_tutorial_motion_home_dark_mode.xml b/quickstep/res/drawable/gesture_tutorial_motion_home_dark_mode.xml
deleted file mode 100644
index aff35c1..0000000
--- a/quickstep/res/drawable/gesture_tutorial_motion_home_dark_mode.xml
+++ /dev/null
@@ -1,1254 +0,0 @@
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:aapt="http://schemas.android.com/aapt">
- <target android:name="_R_G_L_2_G_L_4_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="50"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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="167"
- android:propertyName="fillAlpha"
- android:startOffset="650"
- 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_2_G_L_4_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="50"
- android:pathData="M 206,776C 206,776 206,776 206,776"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="700"
- android:pathData="M 206,776C 206,776 206,797 206,797"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="650">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_4_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="650"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_3_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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_2_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="700"
- android:pathData="M 56,673C 56,673 56,706 56,706"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_2_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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_2_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="700"
- android:pathData="M 156,673C 156,673 156,706 156,706"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_1_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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_2_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="700"
- android:pathData="M 256,673C 256,673 256,706 256,706"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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_2_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="700"
- android:pathData="M 356,673C 356,673 356,706 356,706"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_11_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#dadce0"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.215 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_10_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_9_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_8_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_7_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_6_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_5_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_4_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_3_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_2_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_1_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="517"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_3_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="517"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_2_G_L_2_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#e8eaed"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.232 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_2_G_L_1_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#80868b"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.674 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_2_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#80868b"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.674 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="517"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_1_G_L_2_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="150"
- android:propertyName="fillColor"
- android:startOffset="350"
- android:valueFrom="#202124"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.69 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_1_G_L_1_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="150"
- android:propertyName="fillColor"
- android:startOffset="350"
- android:valueFrom="#202124"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.69 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_1_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="150"
- android:propertyName="fillColor"
- android:startOffset="350"
- android:valueFrom="#3c4043"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.69 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="517"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillColor"
- android:startOffset="500"
- android:valueFrom="#bac4d6"
- android:valueTo="#bac4d6"
- 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="50"
- android:propertyName="fillColor"
- android:startOffset="633"
- android:valueFrom="#bac4d6"
- android:valueTo="#8ab4f8"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,-0.214 0.667,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="283"
- android:propertyName="fillAlpha"
- android:startOffset="500"
- 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.999,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="283"
- android:propertyName="pathData"
- android:startOffset="500"
- android:valueFrom="M206.06 -430.06 C206.06,-430.06 206,431 206,431 C206,446 189.75,446 189.79,446 C189.79,446 -189.98,446 -189.98,446 C-189.94,446 -206,446 -206,431 C-206,431 -206,-430 -206,-430 C-206,-446 -189.97,-446 -190.01,-446 C-190.01,-446 188.98,-446.06 188.98,-446.06 C188.94,-446.06 206,-446 206.06,-430.06c "
- android:valueTo="M60 -0.06 C60,-0.06 60,0.06 60,0.06 C60,28 36,60.25 -0.02,60.25 C-0.02,60.25 0.02,60.25 0.02,60.25 C-32.5,60.25 -60,31.5 -60,0.06 C-60,0.06 -60,-0.06 -60,-0.06 C-60,-31.25 -34,-59.25 0.02,-59.25 C0.02,-59.25 -0.02,-59.25 -0.02,-59.25 C33.5,-59.25 60,-38 60,-0.06c "
- android:valueType="pathType">
- <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_1_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="500"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="850"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_T_1">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="283"
- android:pathData="M 206,446C 201.417,411.133 195,385.297 195,385.297"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="217">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.833,0.833 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="333"
- android:pathData="M 195,385.297C 195,385.297 105.5,148.09000000000003 56,691.5"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="500">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.443,0.093 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_T_1">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="467"
- android:propertyName="scaleX"
- android:startOffset="217"
- android:valueFrom="1"
- android:valueTo="0.5"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="467"
- android:propertyName="scaleY"
- android:startOffset="217"
- android:valueFrom="1"
- android:valueTo="0.5"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_T_1">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2167"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </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="217"
- android:propertyName="fillAlpha"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="0.75"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.833 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="233"
- android:propertyName="fillAlpha"
- android:startOffset="217"
- android:valueFrom="0.75"
- android:valueTo="0.75"
- 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="167"
- android:propertyName="fillAlpha"
- android:startOffset="450"
- android:valueFrom="0.75"
- 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="217"
- android:propertyName="pathData"
- android:startOffset="0"
- android:valueFrom="M0 411 C19.33,411 35,426.67 35,446 C35,465.33 19.33,481 0,481 C-19.33,481 -35,465.33 -35,446 C-35,426.67 -19.33,411 0,411c "
- android:valueTo="M0 396 C27.61,396 50,418.39 50,446 C50,473.61 27.61,496 0,496 C-27.61,496 -50,473.61 -50,446 C-50,418.39 -27.61,396 0,396c "
- android:valueType="pathType">
- <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="433"
- android:propertyName="pathData"
- android:startOffset="217"
- android:valueFrom="M0 396 C27.61,396 50,418.39 50,446 C50,473.61 27.61,496 0,496 C-27.61,496 -50,473.61 -50,446 C-50,418.39 -27.61,396 0,396c "
- android:valueTo="M0 68 C27.61,68 50,90.39 50,118 C50,145.61 27.61,168 0,168 C-27.61,168 -50,145.61 -50,118 C-50,90.39 -27.61,68 0,68c "
- android:valueType="pathType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2167"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="time_group">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="1367"
- android:propertyName="translateX"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <aapt:attr name="android:drawable">
- <vector
- android:width="412dp"
- android:height="892dp"
- android:viewportHeight="892"
- android:viewportWidth="412">
- <group android:name="_R_G">
- <group
- android:name="_R_G_L_3_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="@color/fake_wallpaper_color_dark_mode"
- android:fillType="nonZero"
- android:pathData=" M206 -446 C206,-446 206,446 206,446 C206,446 -206,446 -206,446 C-206,446 -206,-446 -206,-446 C-206,-446 206,-446 206,-446c " />
- </group>
- <group
- android:name="_R_G_L_2_G"
- android:scaleY="0">
- <group
- android:name="_R_G_L_2_G_L_4_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="776">
- <path
- android:name="_R_G_L_2_G_L_4_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#3c4043"
- android:fillType="nonZero"
- android:pathData=" M180 0 C180,0 180,0 180,0 C180,13.8 168.8,25 155,25 C155,25 -155,25 -155,25 C-168.8,25 -180,13.8 -180,0 C-180,0 -180,0 -180,0 C-180,-13.8 -168.8,-25 -155,-25 C-155,-25 155,-25 155,-25 C168.8,-25 180,-13.8 180,0c " />
- </group>
- <group
- android:name="_R_G_L_2_G_L_3_G"
- android:scaleY="0"
- android:translateX="56"
- android:translateY="673">
- <path
- android:name="_R_G_L_2_G_L_3_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#8ab4f8"
- android:fillType="nonZero"
- android:pathData=" M0 -30 C16.56,-30 30,-16.56 30,0 C30,16.56 16.56,30 0,30 C-16.56,30 -30,16.56 -30,0 C-30,-16.56 -16.56,-30 0,-30c " />
- </group>
- <group
- android:name="_R_G_L_2_G_L_2_G"
- android:scaleY="0"
- android:translateX="156"
- android:translateY="673">
- <path
- android:name="_R_G_L_2_G_L_2_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#f28b82"
- android:fillType="nonZero"
- android:pathData=" M0 -30 C16.56,-30 30,-16.56 30,0 C30,16.56 16.56,30 0,30 C-16.56,30 -30,16.56 -30,0 C-30,-16.56 -16.56,-30 0,-30c " />
- </group>
- <group
- android:name="_R_G_L_2_G_L_1_G"
- android:scaleY="0"
- android:translateX="256"
- android:translateY="673">
- <path
- android:name="_R_G_L_2_G_L_1_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#fdd663"
- android:fillType="nonZero"
- android:pathData=" M0 -30 C16.56,-30 30,-16.56 30,0 C30,16.56 16.56,30 0,30 C-16.56,30 -30,16.56 -30,0 C-30,-16.56 -16.56,-30 0,-30c " />
- </group>
- <group
- android:name="_R_G_L_2_G_L_0_G"
- android:scaleY="0"
- android:translateX="356"
- android:translateY="673">
- <path
- android:name="_R_G_L_2_G_L_0_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#81c995"
- android:fillType="nonZero"
- android:pathData=" M0 -30 C16.56,-30 30,-16.56 30,0 C30,16.56 16.56,30 0,30 C-16.56,30 -30,16.56 -30,0 C-30,-16.56 -16.56,-30 0,-30c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_1_G_T_1"
- android:scaleX="1"
- android:scaleY="1"
- android:translateX="206"
- android:translateY="446">
- <group
- android:name="_R_G_L_1_G"
- android:translateX="-206"
- android:translateY="-446">
- <group android:name="_R_G_L_1_G_L_4_G">
- <group
- android:name="_R_G_L_1_G_L_4_G_L_11_G"
- android:scaleX="0.87473"
- android:scaleY="0.98643"
- android:translateX="206"
- android:translateY="472.769">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M235.5 -407 C235.5,-407 235.5,407 235.5,407 C235.5,416.93 227.43,425 217.5,425 C217.5,425 -217.5,425 -217.5,425 C-227.43,425 -235.5,416.93 -235.5,407 C-235.5,407 -235.5,-407 -235.5,-407 C-235.5,-416.93 -227.43,-425 -217.5,-425 C-217.5,-425 217.5,-425 217.5,-425 C227.43,-425 235.5,-416.93 235.5,-407c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_10_G"
- android:translateX="182.5"
- android:translateY="831">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M158.5 -3 C158.5,-3 158.5,3 158.5,3 C158.5,7.42 154.92,11 150.5,11 C150.5,11 -150.5,11 -150.5,11 C-154.92,11 -158.5,7.42 -158.5,3 C-158.5,3 -158.5,-3 -158.5,-3 C-158.5,-7.42 -154.92,-11 -150.5,-11 C-150.5,-11 150.5,-11 150.5,-11 C154.92,-11 158.5,-7.42 158.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_9_G"
- android:translateX="186"
- android:translateY="801">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M162 -3 C162,-3 162,3 162,3 C162,7.42 158.42,11 154,11 C154,11 -154,11 -154,11 C-158.42,11 -162,7.42 -162,3 C-162,3 -162,-3 -162,-3 C-162,-7.42 -158.42,-11 -154,-11 C-154,-11 154,-11 154,-11 C158.42,-11 162,-7.42 162,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_8_G"
- android:translateX="119"
- android:translateY="755">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M95 -3 C95,-3 95,3 95,3 C95,7.42 91.42,11 87,11 C87,11 -87,11 -87,11 C-91.42,11 -95,7.42 -95,3 C-95,3 -95,-3 -95,-3 C-95,-7.42 -91.42,-11 -87,-11 C-87,-11 87,-11 87,-11 C91.42,-11 95,-7.42 95,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_7_G"
- android:translateX="182.5"
- android:translateY="725">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M158.5 -3 C158.5,-3 158.5,3 158.5,3 C158.5,7.42 154.92,11 150.5,11 C150.5,11 -150.5,11 -150.5,11 C-154.92,11 -158.5,7.42 -158.5,3 C-158.5,3 -158.5,-3 -158.5,-3 C-158.5,-7.42 -154.92,-11 -150.5,-11 C-150.5,-11 150.5,-11 150.5,-11 C154.92,-11 158.5,-7.42 158.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_6_G"
- android:translateX="197.5"
- android:translateY="695">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M173.5 -3 C173.5,-3 173.5,3 173.5,3 C173.5,7.42 169.92,11 165.5,11 C165.5,11 -165.5,11 -165.5,11 C-169.92,11 -173.5,7.42 -173.5,3 C-173.5,3 -173.5,-3 -173.5,-3 C-173.5,-7.42 -169.92,-11 -165.5,-11 C-165.5,-11 165.5,-11 165.5,-11 C169.92,-11 173.5,-7.42 173.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_5_G"
- android:translateX="192"
- android:translateY="665">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M168 -3 C168,-3 168,3 168,3 C168,7.42 164.42,11 160,11 C160,11 -160,11 -160,11 C-164.42,11 -168,7.42 -168,3 C-168,3 -168,-3 -168,-3 C-168,-7.42 -164.42,-11 -160,-11 C-160,-11 160,-11 160,-11 C164.42,-11 168,-7.42 168,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_4_G"
- android:translateX="105.5"
- android:translateY="360">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M23.5 -2 C23.5,-2 23.5,2 23.5,2 C23.5,4.21 21.71,6 19.5,6 C19.5,6 -19.5,6 -19.5,6 C-21.71,6 -23.5,4.21 -23.5,2 C-23.5,2 -23.5,-2 -23.5,-2 C-23.5,-4.21 -21.71,-6 -19.5,-6 C-19.5,-6 19.5,-6 19.5,-6 C21.71,-6 23.5,-4.21 23.5,-2c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_3_G"
- android:translateX="47.5"
- android:translateY="360">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M23.5 -2 C23.5,-2 23.5,2 23.5,2 C23.5,4.21 21.71,6 19.5,6 C19.5,6 -19.5,6 -19.5,6 C-21.71,6 -23.5,4.21 -23.5,2 C-23.5,2 -23.5,-2 -23.5,-2 C-23.5,-4.21 -21.71,-6 -19.5,-6 C-19.5,-6 19.5,-6 19.5,-6 C21.71,-6 23.5,-4.21 23.5,-2c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_2_G"
- android:translateX="142.5"
- android:translateY="328">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M118.5 -10 C118.5,-10 118.5,10 118.5,10 C118.5,14.42 114.92,18 110.5,18 C110.5,18 -110.5,18 -110.5,18 C-114.92,18 -118.5,14.42 -118.5,10 C-118.5,10 -118.5,-10 -118.5,-10 C-118.5,-14.42 -114.92,-18 -110.5,-18 C-110.5,-18 110.5,-18 110.5,-18 C114.92,-18 118.5,-14.42 118.5,-10c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_1_G"
- android:translateX="186"
- android:translateY="284">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M162 -10 C162,-10 162,10 162,10 C162,14.42 158.42,18 154,18 C154,18 -154,18 -154,18 C-158.42,18 -162,14.42 -162,10 C-162,10 -162,-10 -162,-10 C-162,-14.42 -158.42,-18 -154,-18 C-154,-18 154,-18 154,-18 C158.42,-18 162,-14.42 162,-10c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_0_G"
- android:translateX="155"
- android:translateY="240">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M131 -10 C131,-10 131,10 131,10 C131,14.42 127.42,18 123,18 C123,18 -123,18 -123,18 C-127.42,18 -131,14.42 -131,10 C-131,10 -131,-10 -131,-10 C-131,-14.42 -127.42,-18 -123,-18 C-123,-18 123,-18 123,-18 C127.42,-18 131,-14.42 131,-10c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_1_G_L_3_G"
- android:translateX="24"
- android:translateY="390">
- <group
- android:name="_R_G_L_1_G_L_3_G_L_0_G"
- android:translateX="182"
- android:translateY="120">
- <path
- android:name="_R_G_L_1_G_L_3_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M182 -98 C182,-98 182,98 182,98 C182,110.14 172.14,120 160,120 C160,120 -160,120 -160,120 C-172.14,120 -182,110.14 -182,98 C-182,98 -182,-98 -182,-98 C-182,-110.14 -172.14,-120 -160,-120 C-160,-120 160,-120 160,-120 C172.14,-120 182,-110.14 182,-98c " />
- </group>
- </group>
- <group android:name="_R_G_L_1_G_L_2_G">
- <group
- android:name="_R_G_L_1_G_L_2_G_L_2_G"
- android:translateX="206"
- android:translateY="145">
- <path
- android:name="_R_G_L_1_G_L_2_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -95.63 C206,-95.63 206,42.37 206,42.37 C206,43.47 205.1,44.37 204,44.37 C204,44.37 -204,44.37 -204,44.37 C-205.1,44.37 -206,43.47 -206,42.37 C-206,42.37 -206,-95.63 -206,-95.63 C-206,-96.73 -205.1,-97.63 -204,-97.63 C-204,-97.63 204,-97.63 204,-97.63 C205.1,-97.63 206,-96.73 206,-95.63c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_2_G_L_1_G"
- android:translateX="206"
- android:translateY="145">
- <path
- android:name="_R_G_L_1_G_L_2_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#80868b"
- android:fillType="nonZero"
- android:pathData=" M109 -14 C109,-14 109,14 109,14 C109,15.1 108.1,16 107,16 C107,16 -107,16 -107,16 C-108.1,16 -109,15.1 -109,14 C-109,14 -109,-14 -109,-14 C-109,-15.1 -108.1,-16 -107,-16 C-107,-16 107,-16 107,-16 C108.1,-16 109,-15.1 109,-14c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_2_G_L_0_G"
- android:translateX="46"
- android:translateY="145">
- <path
- android:name="_R_G_L_1_G_L_2_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#80868b"
- android:fillType="nonZero"
- android:pathData=" M22 -14 C22,-14 22,14 22,14 C22,18.42 18.42,22 14,22 C14,22 -14,22 -14,22 C-18.42,22 -22,18.42 -22,14 C-22,14 -22,-14 -22,-14 C-22,-18.42 -18.42,-22 -14,-22 C-14,-22 14,-22 14,-22 C18.42,-22 22,-18.42 22,-14c " />
- </group>
- </group>
- <group android:name="_R_G_L_1_G_L_1_G">
- <group
- android:name="_R_G_L_1_G_L_1_G_L_2_G"
- android:translateX="206"
- android:translateY="51">
- <path
- android:name="_R_G_L_1_G_L_1_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#202124"
- android:fillType="nonZero"
- android:pathData=" M206 -0.27 C206,-0.27 206,49.73 206,49.73 C206,49.73 -206,49.73 -206,49.73 C-206,49.73 -206,-0.27 -206,-0.27 C-206,-0.27 206,-0.27 206,-0.27c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_1_G_L_1_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_1_G_L_1_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#202124"
- android:fillType="nonZero"
- android:pathData=" M206 -32.5 C206,-32.5 206,32.5 206,32.5 C206,42.43 197.93,50.5 188,50.5 C188,50.5 -188,50.5 -188,50.5 C-197.93,50.5 -206,42.43 -206,32.5 C-206,32.5 -206,-32.5 -206,-32.5 C-206,-42.43 -197.93,-50.5 -188,-50.5 C-188,-50.5 188,-50.5 188,-50.5 C197.93,-50.5 206,-42.43 206,-32.5c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_1_G_L_0_G"
- android:translateX="206"
- android:translateY="66.5">
- <path
- android:name="_R_G_L_1_G_L_1_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#3c4043"
- android:fillType="nonZero"
- android:pathData=" M190 0 C190,0 190,0 190,0 C190,10.21 181.71,18.5 171.5,18.5 C171.5,18.5 -171.5,18.5 -171.5,18.5 C-181.71,18.5 -190,10.21 -190,0 C-190,0 -190,0 -190,0 C-190,-10.21 -181.71,-18.5 -171.5,-18.5 C-171.5,-18.5 171.5,-18.5 171.5,-18.5 C181.71,-18.5 190,-10.21 190,0c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_1_G_L_0_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_1_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bac4d6"
- android:fillType="nonZero"
- android:pathData=" M206.06 -430.06 C206.06,-430.06 206,431 206,431 C206,446 189.75,446 189.79,446 C189.79,446 -189.98,446 -189.98,446 C-189.94,446 -206,446 -206,431 C-206,431 -206,-430 -206,-430 C-206,-446 -189.97,-446 -190.01,-446 C-190.01,-446 188.98,-446.06 188.98,-446.06 C188.94,-446.06 206,-446 206.06,-430.06c " />
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_0_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_0_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="@color/gesture_tutorial_primary_color"
- android:fillType="nonZero"
- android:pathData=" M0 411 C19.33,411 35,426.67 35,446 C35,465.33 19.33,481 0,481 C-19.33,481 -35,465.33 -35,446 C-35,426.67 -19.33,411 0,411c " />
- </group>
- </group>
- <group android:name="time_group" />
- </vector>
- </aapt:attr>
-</animated-vector>
\ No newline at end of file
diff --git a/quickstep/res/drawable/gesture_tutorial_motion_home_light_mode.xml b/quickstep/res/drawable/gesture_tutorial_motion_home_light_mode.xml
deleted file mode 100644
index 98d97ad..0000000
--- a/quickstep/res/drawable/gesture_tutorial_motion_home_light_mode.xml
+++ /dev/null
@@ -1,1254 +0,0 @@
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:aapt="http://schemas.android.com/aapt">
- <target android:name="_R_G_L_2_G_L_4_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="50"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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="167"
- android:propertyName="fillAlpha"
- android:startOffset="650"
- 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_2_G_L_4_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="50"
- android:pathData="M 206,776C 206,776 206,776 206,776"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="700"
- android:pathData="M 206,776C 206,776 206,797 206,797"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="650">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_4_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="650"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_3_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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_2_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="700"
- android:pathData="M 56,673C 56,673 56,706 56,706"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_2_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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_2_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="700"
- android:pathData="M 156,673C 156,673 156,706 156,706"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_1_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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_2_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="700"
- android:pathData="M 256,673C 256,673 256,706 256,706"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="600"
- 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_2_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="700"
- android:pathData="M 356,673C 356,673 356,706 356,706"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.27,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="600"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_11_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#dadce0"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.215 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_10_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_9_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_8_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_7_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_6_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_5_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_4_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_3_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_2_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_1_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_4_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="517"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_3_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#bdc1c6"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.92 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="517"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_2_G_L_2_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#e8eaed"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,1.232 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_2_G_L_1_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#80868b"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.674 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_2_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="100"
- android:propertyName="fillColor"
- android:startOffset="400"
- android:valueFrom="#80868b"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.674 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="517"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_1_G_L_2_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="150"
- android:propertyName="fillColor"
- android:startOffset="350"
- android:valueFrom="#6e7175"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.674 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_1_G_L_1_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="150"
- android:propertyName="fillColor"
- android:startOffset="350"
- android:valueFrom="#6e7175"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.676 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_1_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="150"
- android:propertyName="fillColor"
- android:startOffset="350"
- android:valueFrom="#9a9a9a"
- android:valueTo="#bac4d6"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.584 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="517"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="133"
- android:propertyName="fillColor"
- android:startOffset="500"
- android:valueFrom="#bac4d6"
- android:valueTo="#bac4d6"
- 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="50"
- android:propertyName="fillColor"
- android:startOffset="633"
- android:valueFrom="#bac4d6"
- android:valueTo="#8ab4f8"
- android:valueType="colorType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,-0.214 0.667,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="283"
- android:propertyName="fillAlpha"
- android:startOffset="500"
- 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.999,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_0_G_D_0_P_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="283"
- android:propertyName="pathData"
- android:startOffset="500"
- android:valueFrom="M206.06 -430.06 C206.06,-430.06 206,431 206,431 C206,446 189.75,446 189.79,446 C189.79,446 -189.98,446 -189.98,446 C-189.94,446 -206,446 -206,431 C-206,431 -206,-430 -206,-430 C-206,-446 -189.97,-446 -190.01,-446 C-190.01,-446 188.98,-446.06 188.98,-446.06 C188.94,-446.06 206,-446 206.06,-430.06c "
- android:valueTo="M60 -0.06 C60,-0.06 60,0.06 60,0.06 C60,28 36,60.25 -0.02,60.25 C-0.02,60.25 0.02,60.25 0.02,60.25 C-32.5,60.25 -60,31.5 -60,0.06 C-60,0.06 -60,-0.06 -60,-0.06 C-60,-31.25 -34,-59.25 0.02,-59.25 C0.02,-59.25 -0.02,-59.25 -0.02,-59.25 C33.5,-59.25 60,-38 60,-0.06c "
- android:valueType="pathType">
- <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_1_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="500"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="850"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_T_1">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="283"
- android:pathData="M 206,446C 201.417,411.133 195,385.297 195,385.297"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="217">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.833,0.833 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="333"
- android:pathData="M 195,385.297C 195,385.297 105.5,148.09000000000003 56,691.5"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="500">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.443,0.093 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_T_1">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="467"
- android:propertyName="scaleX"
- android:startOffset="217"
- android:valueFrom="1"
- android:valueTo="0.5"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="467"
- android:propertyName="scaleY"
- android:startOffset="217"
- android:valueFrom="1"
- android:valueTo="0.5"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_T_1">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2167"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </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="217"
- android:propertyName="fillAlpha"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="0.75"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.833 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="233"
- android:propertyName="fillAlpha"
- android:startOffset="217"
- android:valueFrom="0.75"
- android:valueTo="0.75"
- 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="167"
- android:propertyName="fillAlpha"
- android:startOffset="450"
- android:valueFrom="0.75"
- 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="217"
- android:propertyName="pathData"
- android:startOffset="0"
- android:valueFrom="M0 411 C19.33,411 35,426.67 35,446 C35,465.33 19.33,481 0,481 C-19.33,481 -35,465.33 -35,446 C-35,426.67 -19.33,411 0,411c "
- android:valueTo="M0 396 C27.61,396 50,418.39 50,446 C50,473.61 27.61,496 0,496 C-27.61,496 -50,473.61 -50,446 C-50,418.39 -27.61,396 0,396c "
- android:valueType="pathType">
- <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="433"
- android:propertyName="pathData"
- android:startOffset="217"
- android:valueFrom="M0 396 C27.61,396 50,418.39 50,446 C50,473.61 27.61,496 0,496 C-27.61,496 -50,473.61 -50,446 C-50,418.39 -27.61,396 0,396c "
- android:valueTo="M0 68 C27.61,68 50,90.39 50,118 C50,145.61 27.61,168 0,168 C-27.61,168 -50,145.61 -50,118 C-50,90.39 -27.61,68 0,68c "
- android:valueType="pathType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2167"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="time_group">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="1367"
- android:propertyName="translateX"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <aapt:attr name="android:drawable">
- <vector
- android:width="412dp"
- android:height="892dp"
- android:viewportHeight="892"
- android:viewportWidth="412">
- <group android:name="_R_G">
- <group
- android:name="_R_G_L_3_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="@color/fake_wallpaper_color_light_mode"
- android:fillType="nonZero"
- android:pathData=" M206 -446 C206,-446 206,446 206,446 C206,446 -206,446 -206,446 C-206,446 -206,-446 -206,-446 C-206,-446 206,-446 206,-446c " />
- </group>
- <group
- android:name="_R_G_L_2_G"
- android:scaleY="0">
- <group
- android:name="_R_G_L_2_G_L_4_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="776">
- <path
- android:name="_R_G_L_2_G_L_4_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#d9d9da"
- android:fillType="nonZero"
- android:pathData=" M180 0 C180,0 180,0 180,0 C180,13.8 168.8,25 155,25 C155,25 -155,25 -155,25 C-168.8,25 -180,13.8 -180,0 C-180,0 -180,0 -180,0 C-180,-13.8 -168.8,-25 -155,-25 C-155,-25 155,-25 155,-25 C168.8,-25 180,-13.8 180,0c " />
- </group>
- <group
- android:name="_R_G_L_2_G_L_3_G"
- android:scaleY="0"
- android:translateX="56"
- android:translateY="673">
- <path
- android:name="_R_G_L_2_G_L_3_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#8ab4f8"
- android:fillType="nonZero"
- android:pathData=" M0 -30 C16.56,-30 30,-16.56 30,0 C30,16.56 16.56,30 0,30 C-16.56,30 -30,16.56 -30,0 C-30,-16.56 -16.56,-30 0,-30c " />
- </group>
- <group
- android:name="_R_G_L_2_G_L_2_G"
- android:scaleY="0"
- android:translateX="156"
- android:translateY="673">
- <path
- android:name="_R_G_L_2_G_L_2_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#f28b82"
- android:fillType="nonZero"
- android:pathData=" M0 -30 C16.56,-30 30,-16.56 30,0 C30,16.56 16.56,30 0,30 C-16.56,30 -30,16.56 -30,0 C-30,-16.56 -16.56,-30 0,-30c " />
- </group>
- <group
- android:name="_R_G_L_2_G_L_1_G"
- android:scaleY="0"
- android:translateX="256"
- android:translateY="673">
- <path
- android:name="_R_G_L_2_G_L_1_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#fdd663"
- android:fillType="nonZero"
- android:pathData=" M0 -30 C16.56,-30 30,-16.56 30,0 C30,16.56 16.56,30 0,30 C-16.56,30 -30,16.56 -30,0 C-30,-16.56 -16.56,-30 0,-30c " />
- </group>
- <group
- android:name="_R_G_L_2_G_L_0_G"
- android:scaleY="0"
- android:translateX="356"
- android:translateY="673">
- <path
- android:name="_R_G_L_2_G_L_0_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#81c995"
- android:fillType="nonZero"
- android:pathData=" M0 -30 C16.56,-30 30,-16.56 30,0 C30,16.56 16.56,30 0,30 C-16.56,30 -30,16.56 -30,0 C-30,-16.56 -16.56,-30 0,-30c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_1_G_T_1"
- android:scaleX="1"
- android:scaleY="1"
- android:translateX="206"
- android:translateY="446">
- <group
- android:name="_R_G_L_1_G"
- android:translateX="-206"
- android:translateY="-446">
- <group android:name="_R_G_L_1_G_L_4_G">
- <group
- android:name="_R_G_L_1_G_L_4_G_L_11_G"
- android:scaleX="0.87473"
- android:scaleY="0.98643"
- android:translateX="206"
- android:translateY="472.769">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M235.5 -407 C235.5,-407 235.5,407 235.5,407 C235.5,416.93 227.43,425 217.5,425 C217.5,425 -217.5,425 -217.5,425 C-227.43,425 -235.5,416.93 -235.5,407 C-235.5,407 -235.5,-407 -235.5,-407 C-235.5,-416.93 -227.43,-425 -217.5,-425 C-217.5,-425 217.5,-425 217.5,-425 C227.43,-425 235.5,-416.93 235.5,-407c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_10_G"
- android:translateX="182.5"
- android:translateY="831">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M158.5 -3 C158.5,-3 158.5,3 158.5,3 C158.5,7.42 154.92,11 150.5,11 C150.5,11 -150.5,11 -150.5,11 C-154.92,11 -158.5,7.42 -158.5,3 C-158.5,3 -158.5,-3 -158.5,-3 C-158.5,-7.42 -154.92,-11 -150.5,-11 C-150.5,-11 150.5,-11 150.5,-11 C154.92,-11 158.5,-7.42 158.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_9_G"
- android:translateX="186"
- android:translateY="801">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M162 -3 C162,-3 162,3 162,3 C162,7.42 158.42,11 154,11 C154,11 -154,11 -154,11 C-158.42,11 -162,7.42 -162,3 C-162,3 -162,-3 -162,-3 C-162,-7.42 -158.42,-11 -154,-11 C-154,-11 154,-11 154,-11 C158.42,-11 162,-7.42 162,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_8_G"
- android:translateX="119"
- android:translateY="755">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M95 -3 C95,-3 95,3 95,3 C95,7.42 91.42,11 87,11 C87,11 -87,11 -87,11 C-91.42,11 -95,7.42 -95,3 C-95,3 -95,-3 -95,-3 C-95,-7.42 -91.42,-11 -87,-11 C-87,-11 87,-11 87,-11 C91.42,-11 95,-7.42 95,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_7_G"
- android:translateX="182.5"
- android:translateY="725">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M158.5 -3 C158.5,-3 158.5,3 158.5,3 C158.5,7.42 154.92,11 150.5,11 C150.5,11 -150.5,11 -150.5,11 C-154.92,11 -158.5,7.42 -158.5,3 C-158.5,3 -158.5,-3 -158.5,-3 C-158.5,-7.42 -154.92,-11 -150.5,-11 C-150.5,-11 150.5,-11 150.5,-11 C154.92,-11 158.5,-7.42 158.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_6_G"
- android:translateX="197.5"
- android:translateY="695">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M173.5 -3 C173.5,-3 173.5,3 173.5,3 C173.5,7.42 169.92,11 165.5,11 C165.5,11 -165.5,11 -165.5,11 C-169.92,11 -173.5,7.42 -173.5,3 C-173.5,3 -173.5,-3 -173.5,-3 C-173.5,-7.42 -169.92,-11 -165.5,-11 C-165.5,-11 165.5,-11 165.5,-11 C169.92,-11 173.5,-7.42 173.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_5_G"
- android:translateX="192"
- android:translateY="665">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M168 -3 C168,-3 168,3 168,3 C168,7.42 164.42,11 160,11 C160,11 -160,11 -160,11 C-164.42,11 -168,7.42 -168,3 C-168,3 -168,-3 -168,-3 C-168,-7.42 -164.42,-11 -160,-11 C-160,-11 160,-11 160,-11 C164.42,-11 168,-7.42 168,-3c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_4_G"
- android:translateX="105.5"
- android:translateY="360">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M23.5 -2 C23.5,-2 23.5,2 23.5,2 C23.5,4.21 21.71,6 19.5,6 C19.5,6 -19.5,6 -19.5,6 C-21.71,6 -23.5,4.21 -23.5,2 C-23.5,2 -23.5,-2 -23.5,-2 C-23.5,-4.21 -21.71,-6 -19.5,-6 C-19.5,-6 19.5,-6 19.5,-6 C21.71,-6 23.5,-4.21 23.5,-2c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_3_G"
- android:translateX="47.5"
- android:translateY="360">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M23.5 -2 C23.5,-2 23.5,2 23.5,2 C23.5,4.21 21.71,6 19.5,6 C19.5,6 -19.5,6 -19.5,6 C-21.71,6 -23.5,4.21 -23.5,2 C-23.5,2 -23.5,-2 -23.5,-2 C-23.5,-4.21 -21.71,-6 -19.5,-6 C-19.5,-6 19.5,-6 19.5,-6 C21.71,-6 23.5,-4.21 23.5,-2c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_2_G"
- android:translateX="142.5"
- android:translateY="328">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M118.5 -10 C118.5,-10 118.5,10 118.5,10 C118.5,14.42 114.92,18 110.5,18 C110.5,18 -110.5,18 -110.5,18 C-114.92,18 -118.5,14.42 -118.5,10 C-118.5,10 -118.5,-10 -118.5,-10 C-118.5,-14.42 -114.92,-18 -110.5,-18 C-110.5,-18 110.5,-18 110.5,-18 C114.92,-18 118.5,-14.42 118.5,-10c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_1_G"
- android:translateX="186"
- android:translateY="284">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M162 -10 C162,-10 162,10 162,10 C162,14.42 158.42,18 154,18 C154,18 -154,18 -154,18 C-158.42,18 -162,14.42 -162,10 C-162,10 -162,-10 -162,-10 C-162,-14.42 -158.42,-18 -154,-18 C-154,-18 154,-18 154,-18 C158.42,-18 162,-14.42 162,-10c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_4_G_L_0_G"
- android:translateX="155"
- android:translateY="240">
- <path
- android:name="_R_G_L_1_G_L_4_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M131 -10 C131,-10 131,10 131,10 C131,14.42 127.42,18 123,18 C123,18 -123,18 -123,18 C-127.42,18 -131,14.42 -131,10 C-131,10 -131,-10 -131,-10 C-131,-14.42 -127.42,-18 -123,-18 C-123,-18 123,-18 123,-18 C127.42,-18 131,-14.42 131,-10c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_1_G_L_3_G"
- android:translateX="24"
- android:translateY="390">
- <group
- android:name="_R_G_L_1_G_L_3_G_L_0_G"
- android:translateX="182"
- android:translateY="120">
- <path
- android:name="_R_G_L_1_G_L_3_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M182 -98 C182,-98 182,98 182,98 C182,110.14 172.14,120 160,120 C160,120 -160,120 -160,120 C-172.14,120 -182,110.14 -182,98 C-182,98 -182,-98 -182,-98 C-182,-110.14 -172.14,-120 -160,-120 C-160,-120 160,-120 160,-120 C172.14,-120 182,-110.14 182,-98c " />
- </group>
- </group>
- <group android:name="_R_G_L_1_G_L_2_G">
- <group
- android:name="_R_G_L_1_G_L_2_G_L_2_G"
- android:translateX="206"
- android:translateY="145">
- <path
- android:name="_R_G_L_1_G_L_2_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -95.63 C206,-95.63 206,42.37 206,42.37 C206,43.47 205.1,44.37 204,44.37 C204,44.37 -204,44.37 -204,44.37 C-205.1,44.37 -206,43.47 -206,42.37 C-206,42.37 -206,-95.63 -206,-95.63 C-206,-96.73 -205.1,-97.63 -204,-97.63 C-204,-97.63 204,-97.63 204,-97.63 C205.1,-97.63 206,-96.73 206,-95.63c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_2_G_L_1_G"
- android:translateX="206"
- android:translateY="145">
- <path
- android:name="_R_G_L_1_G_L_2_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#80868b"
- android:fillType="nonZero"
- android:pathData=" M109 -14 C109,-14 109,14 109,14 C109,15.1 108.1,16 107,16 C107,16 -107,16 -107,16 C-108.1,16 -109,15.1 -109,14 C-109,14 -109,-14 -109,-14 C-109,-15.1 -108.1,-16 -107,-16 C-107,-16 107,-16 107,-16 C108.1,-16 109,-15.1 109,-14c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_2_G_L_0_G"
- android:translateX="46"
- android:translateY="145">
- <path
- android:name="_R_G_L_1_G_L_2_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#80868b"
- android:fillType="nonZero"
- android:pathData=" M22 -14 C22,-14 22,14 22,14 C22,18.42 18.42,22 14,22 C14,22 -14,22 -14,22 C-18.42,22 -22,18.42 -22,14 C-22,14 -22,-14 -22,-14 C-22,-18.42 -18.42,-22 -14,-22 C-14,-22 14,-22 14,-22 C18.42,-22 22,-18.42 22,-14c " />
- </group>
- </group>
- <group android:name="_R_G_L_1_G_L_1_G">
- <group
- android:name="_R_G_L_1_G_L_1_G_L_2_G"
- android:translateX="206"
- android:translateY="51">
- <path
- android:name="_R_G_L_1_G_L_1_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#6e7175"
- android:fillType="nonZero"
- android:pathData=" M206 -0.27 C206,-0.27 206,49.73 206,49.73 C206,49.73 -206,49.73 -206,49.73 C-206,49.73 -206,-0.27 -206,-0.27 C-206,-0.27 206,-0.27 206,-0.27c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_1_G_L_1_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_1_G_L_1_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#6e7175"
- android:fillType="nonZero"
- android:pathData=" M206 -32.5 C206,-32.5 206,32.5 206,32.5 C206,42.43 197.93,50.5 188,50.5 C188,50.5 -188,50.5 -188,50.5 C-197.93,50.5 -206,42.43 -206,32.5 C-206,32.5 -206,-32.5 -206,-32.5 C-206,-42.43 -197.93,-50.5 -188,-50.5 C-188,-50.5 188,-50.5 188,-50.5 C197.93,-50.5 206,-42.43 206,-32.5c " />
- </group>
- <group
- android:name="_R_G_L_1_G_L_1_G_L_0_G"
- android:translateX="206"
- android:translateY="66.5">
- <path
- android:name="_R_G_L_1_G_L_1_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9a9a9a"
- android:fillType="nonZero"
- android:pathData=" M190 0 C190,0 190,0 190,0 C190,10.21 181.71,18.5 171.5,18.5 C171.5,18.5 -171.5,18.5 -171.5,18.5 C-181.71,18.5 -190,10.21 -190,0 C-190,0 -190,0 -190,0 C-190,-10.21 -181.71,-18.5 -171.5,-18.5 C-171.5,-18.5 171.5,-18.5 171.5,-18.5 C181.71,-18.5 190,-10.21 190,0c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_1_G_L_0_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_1_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bac4d6"
- android:fillType="nonZero"
- android:pathData=" M206.06 -430.06 C206.06,-430.06 206,431 206,431 C206,446 189.75,446 189.79,446 C189.79,446 -189.98,446 -189.98,446 C-189.94,446 -206,446 -206,431 C-206,431 -206,-430 -206,-430 C-206,-446 -189.97,-446 -190.01,-446 C-190.01,-446 188.98,-446.06 188.98,-446.06 C188.94,-446.06 206,-446 206.06,-430.06c " />
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_0_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_0_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#84ba69"
- android:fillType="nonZero"
- android:pathData=" M0 411 C19.33,411 35,426.67 35,446 C35,465.33 19.33,481 0,481 C-19.33,481 -35,465.33 -35,446 C-35,426.67 -19.33,411 0,411c " />
- </group>
- </group>
- <group android:name="time_group" />
- </vector>
- </aapt:attr>
-</animated-vector>
\ No newline at end of file
diff --git a/quickstep/res/drawable/gesture_tutorial_motion_overview_dark_mode.xml b/quickstep/res/drawable/gesture_tutorial_motion_overview_dark_mode.xml
deleted file mode 100644
index b007d20..0000000
--- a/quickstep/res/drawable/gesture_tutorial_motion_overview_dark_mode.xml
+++ /dev/null
@@ -1,1623 +0,0 @@
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:aapt="http://schemas.android.com/aapt">
- <target android:name="_R_G_L_4_G_N_3_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="1050"
- android:pathData="M 206,446C 206,446 206,395 206,395"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="217">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_4_G_N_3_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="1050"
- android:propertyName="scaleX"
- android:startOffset="217"
- android:valueFrom="1"
- android:valueTo="0.6"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="1050"
- android:propertyName="scaleY"
- android:startOffset="217"
- android:valueFrom="1"
- android:valueTo="0.6"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_4_G_N_3_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="3400"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_28_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_27_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_26_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_25_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_24_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_23_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_22_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_21_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_20_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_19_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_18_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_17_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_16_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_15_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_14_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_13_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_12_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_11_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_10_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_9_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_8_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_7_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_6_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_5_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_4_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:pathData="M 206,395C 206,403.5 206,437.5 206,446"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="2083">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleX"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleX"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleY"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="0.6"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_D_0_P_0_G_0_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="scaleX"
- android:startOffset="2567"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="167"
- android:propertyName="scaleY"
- android:startOffset="2567"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:pathData="M 206,395C 206,403.5 206,437.5 206,446"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="2083">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleX"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleX"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleY"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2567"
- android:valueFrom="0"
- android:valueTo="0.6"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="250"
- android:pathData="M -556.176,-7.307C -556.176,-7.307 -421.176,-7.307 -421.176,-7.307"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="1350">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.272,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="417"
- android:pathData="M -421.176,-7.307C -421.176,-7.307 -429.51,-7.307 -429.51,-7.307"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="1600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:pathData="M 206,395C 206,403.5 206,437.5 206,446"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="2083">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleX"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleX"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleY"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="1350"
- android:valueFrom="0"
- android:valueTo="0.6"
- android:valueType="floatType" />
- </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="217"
- android:propertyName="fillAlpha"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="0.75"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.833 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="1833"
- android:propertyName="fillAlpha"
- android:startOffset="217"
- android:valueFrom="0.75"
- android:valueTo="0.75"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.667,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="2050"
- android:valueFrom="0.75"
- android:valueTo="0"
- 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="217"
- android:propertyName="pathData"
- android:startOffset="0"
- android:valueFrom="M0 406 C21.54,406 39,423.46 39,445 C39,466.54 21.54,484 0,484 C-21.54,484 -39,466.54 -39,445 C-39,423.46 -21.54,406 0,406c "
- android:valueTo="M0 395 C27.61,395 50,417.39 50,445 C50,472.61 27.61,495 0,495 C-27.61,495 -50,472.61 -50,445 C-50,417.39 -27.61,395 0,395c "
- android:valueType="pathType">
- <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="1050"
- android:propertyName="pathData"
- android:startOffset="217"
- android:valueFrom="M0 395 C27.61,395 50,417.39 50,445 C50,472.61 27.61,495 0,495 C-27.61,495 -50,472.61 -50,445 C-50,417.39 -27.61,395 0,395c "
- android:valueTo="M0 166 C27.61,166 50,188.39 50,216 C50,243.61 27.61,266 0,266 C-27.61,266 -50,243.61 -50,216 C-50,188.39 -27.61,166 0,166c "
- android:valueType="pathType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="783"
- android:propertyName="pathData"
- android:startOffset="1267"
- android:valueFrom="M0 166 C27.61,166 50,188.39 50,216 C50,243.61 27.61,266 0,266 C-27.61,266 -50,243.61 -50,216 C-50,188.39 -27.61,166 0,166c "
- android:valueTo="M0 166 C27.61,166 50,188.39 50,216 C50,243.61 27.61,266 0,266 C-27.61,266 -50,243.61 -50,216 C-50,188.39 -27.61,166 0,166c "
- android:valueType="pathType">
- <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="167"
- android:propertyName="pathData"
- android:startOffset="2050"
- android:valueFrom="M0 166 C27.61,166 50,188.39 50,216 C50,243.61 27.61,266 0,266 C-27.61,266 -50,243.61 -50,216 C-50,188.39 -27.61,166 0,166c "
- android:valueTo="M0 180 C19.88,180 36,196.12 36,216 C36,235.88 19.88,252 0,252 C-19.88,252 -36,235.88 -36,216 C-36,196.12 -19.88,180 0,180c "
- android:valueType="pathType">
- <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="2750"
- android:propertyName="translateX"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <aapt:attr name="android:drawable">
- <vector
- android:width="412dp"
- android:height="892dp"
- android:viewportHeight="892"
- android:viewportWidth="412">
- <group android:name="_R_G">
- <group
- android:name="_R_G_L_5_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="@color/fake_wallpaper_color_dark_mode"
- android:fillType="nonZero"
- android:pathData=" M206 -446 C206,-446 206,446 206,446 C206,446 -206,446 -206,446 C-206,446 -206,-446 -206,-446 C-206,-446 206,-446 206,-446c " />
- </group>
- <group
- android:name="_R_G_L_4_G_N_3_T_0"
- android:scaleX="1"
- android:scaleY="1"
- android:translateX="206"
- android:translateY="446">
- <group
- android:name="_R_G_L_4_G"
- android:translateX="-206"
- android:translateY="-446">
- <group android:name="_R_G_L_4_G_L_0_G">
- <group
- android:name="_R_G_L_4_G_L_0_G_L_28_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_28_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#000000"
- android:fillType="nonZero"
- android:pathData=" M206 -422 C206,-422 206,422 206,422 C206,435.25 195.25,446 182,446 C182,446 -182,446 -182,446 C-195.25,446 -206,435.25 -206,422 C-206,422 -206,-422 -206,-422 C-206,-435.25 -195.25,-446 -182,-446 C-182,-446 182,-446 182,-446 C195.25,-446 206,-435.25 206,-422c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_27_G"
- android:translateX="206"
- android:translateY="422.5">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_27_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -395.5 C206,-395.5 206,395.5 206,395.5 C206,395.5 -206,395.5 -206,395.5 C-206,395.5 -206,-395.5 -206,-395.5 C-206,-395.5 206,-395.5 206,-395.5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_26_G"
- android:translateX="206"
- android:translateY="496.5">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_26_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -377.5 C206,-377.5 206,377.5 206,377.5 C206,387.43 197.93,395.5 188,395.5 C188,395.5 -188,395.5 -188,395.5 C-197.93,395.5 -206,387.43 -206,377.5 C-206,377.5 -206,-377.5 -206,-377.5 C-206,-387.43 -197.93,-395.5 -188,-395.5 C-188,-395.5 188,-395.5 188,-395.5 C197.93,-395.5 206,-387.43 206,-377.5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_25_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_25_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -23.5 C206,-23.5 206,50.5 206,50.5 C206,50.5 -206,50.5 -206,50.5 C-206,50.5 -206,-23.5 -206,-23.5 C-206,-23.5 206,-23.5 206,-23.5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_24_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_24_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -32.5 C206,-32.5 206,32.5 206,32.5 C206,42.43 197.93,50.5 188,50.5 C188,50.5 -188,50.5 -188,50.5 C-197.93,50.5 -206,42.43 -206,32.5 C-206,32.5 -206,-32.5 -206,-32.5 C-206,-42.43 -197.93,-50.5 -188,-50.5 C-188,-50.5 188,-50.5 188,-50.5 C197.93,-50.5 206,-42.43 206,-32.5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_23_G"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_23_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_22_G"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_22_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_21_G"
- android:translateX="148.5"
- android:translateY="148">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_21_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M46.5 -5 C46.5,-5 46.5,5 46.5,5 C46.5,7.21 44.71,9 42.5,9 C42.5,9 -42.5,9 -42.5,9 C-44.71,9 -46.5,7.21 -46.5,5 C-46.5,5 -46.5,-5 -46.5,-5 C-46.5,-7.21 -44.71,-9 -42.5,-9 C-42.5,-9 42.5,-9 42.5,-9 C44.71,-9 46.5,-7.21 46.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_20_G"
- android:translateX="186"
- android:translateY="169">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_20_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M84 -4 C84,-4 84,4 84,4 C84,6.21 82.21,8 80,8 C80,8 -80,8 -80,8 C-82.21,8 -84,6.21 -84,4 C-84,4 -84,-4 -84,-4 C-84,-6.21 -82.21,-8 -80,-8 C-80,-8 80,-8 80,-8 C82.21,-8 84,-6.21 84,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_19_G"
- android:translateX="54"
- android:translateY="245">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_19_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_18_G"
- android:translateX="162"
- android:translateY="236">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_18_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60 -5 C60,-5 60,5 60,5 C60,7.21 58.21,9 56,9 C56,9 -56,9 -56,9 C-58.21,9 -60,7.21 -60,5 C-60,5 -60,-5 -60,-5 C-60,-7.21 -58.21,-9 -56,-9 C-56,-9 56,-9 56,-9 C58.21,-9 60,-7.21 60,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_17_G"
- android:translateX="171.5"
- android:translateY="257">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_17_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M69.5 -4 C69.5,-4 69.5,4 69.5,4 C69.5,6.21 67.71,8 65.5,8 C65.5,8 -65.5,8 -65.5,8 C-67.71,8 -69.5,6.21 -69.5,4 C-69.5,4 -69.5,-4 -69.5,-4 C-69.5,-6.21 -67.71,-8 -65.5,-8 C-65.5,-8 65.5,-8 65.5,-8 C67.71,-8 69.5,-6.21 69.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_16_G"
- android:translateX="54"
- android:translateY="333">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_16_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_15_G"
- android:translateX="158"
- android:translateY="324">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_15_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M56 -5 C56,-5 56,5 56,5 C56,7.21 54.21,9 52,9 C52,9 -52,9 -52,9 C-54.21,9 -56,7.21 -56,5 C-56,5 -56,-5 -56,-5 C-56,-7.21 -54.21,-9 -52,-9 C-52,-9 52,-9 52,-9 C54.21,-9 56,-7.21 56,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_14_G"
- android:translateX="217.5"
- android:translateY="345">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_14_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M115.5 -4 C115.5,-4 115.5,4 115.5,4 C115.5,6.21 113.71,8 111.5,8 C111.5,8 -111.5,8 -111.5,8 C-113.71,8 -115.5,6.21 -115.5,4 C-115.5,4 -115.5,-4 -115.5,-4 C-115.5,-6.21 -113.71,-8 -111.5,-8 C-111.5,-8 111.5,-8 111.5,-8 C113.71,-8 115.5,-6.21 115.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_13_G"
- android:translateX="54"
- android:translateY="421">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_13_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_12_G"
- android:translateX="170"
- android:translateY="412">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_12_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M68 -5 C68,-5 68,5 68,5 C68,7.21 66.21,9 64,9 C64,9 -64,9 -64,9 C-66.21,9 -68,7.21 -68,5 C-68,5 -68,-5 -68,-5 C-68,-7.21 -66.21,-9 -64,-9 C-64,-9 64,-9 64,-9 C66.21,-9 68,-7.21 68,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_11_G"
- android:translateX="198.5"
- android:translateY="433">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_10_G"
- android:translateX="54"
- android:translateY="509">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_9_G"
- android:translateX="135"
- android:translateY="500">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M33 -5 C33,-5 33,5 33,5 C33,7.21 31.21,9 29,9 C29,9 -29,9 -29,9 C-31.21,9 -33,7.21 -33,5 C-33,5 -33,-5 -33,-5 C-33,-7.21 -31.21,-9 -29,-9 C-29,-9 29,-9 29,-9 C31.21,-9 33,-7.21 33,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_8_G"
- android:translateX="185.5"
- android:translateY="521">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M83.5 -4 C83.5,-4 83.5,4 83.5,4 C83.5,6.21 81.71,8 79.5,8 C79.5,8 -79.5,8 -79.5,8 C-81.71,8 -83.5,6.21 -83.5,4 C-83.5,4 -83.5,-4 -83.5,-4 C-83.5,-6.21 -81.71,-8 -79.5,-8 C-79.5,-8 79.5,-8 79.5,-8 C81.71,-8 83.5,-6.21 83.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_7_G"
- android:translateX="54"
- android:translateY="597">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_6_G"
- android:translateX="168.5"
- android:translateY="588">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M66.5 -5 C66.5,-5 66.5,5 66.5,5 C66.5,7.21 64.71,9 62.5,9 C62.5,9 -62.5,9 -62.5,9 C-64.71,9 -66.5,7.21 -66.5,5 C-66.5,5 -66.5,-5 -66.5,-5 C-66.5,-7.21 -64.71,-9 -62.5,-9 C-62.5,-9 62.5,-9 62.5,-9 C64.71,-9 66.5,-7.21 66.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_5_G"
- android:translateX="198.5"
- android:translateY="609">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_4_G"
- android:translateX="54"
- android:translateY="685">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_3_G"
- android:translateX="162.5"
- android:translateY="676">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60.5 -5 C60.5,-5 60.5,5 60.5,5 C60.5,7.21 58.71,9 56.5,9 C56.5,9 -56.5,9 -56.5,9 C-58.71,9 -60.5,7.21 -60.5,5 C-60.5,5 -60.5,-5 -60.5,-5 C-60.5,-7.21 -58.71,-9 -56.5,-9 C-56.5,-9 56.5,-9 56.5,-9 C58.71,-9 60.5,-7.21 60.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_2_G"
- android:translateX="174"
- android:translateY="697">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M72 -4 C72,-4 72,4 72,4 C72,6.21 70.21,8 68,8 C68,8 -68,8 -68,8 C-70.21,8 -72,6.21 -72,4 C-72,4 -72,-4 -72,-4 C-72,-6.21 -70.21,-8 -68,-8 C-68,-8 68,-8 68,-8 C70.21,-8 72,-6.21 72,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_1_G"
- android:translateX="313.5"
- android:translateY="798">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M74.5 0 C74.5,0 74.5,0 74.5,0 C74.5,15.45 61.95,28 46.5,28 C46.5,28 -46.5,28 -46.5,28 C-61.95,28 -74.5,15.45 -74.5,0 C-74.5,0 -74.5,0 -74.5,0 C-74.5,-15.45 -61.95,-28 -46.5,-28 C-46.5,-28 46.5,-28 46.5,-28 C61.95,-28 74.5,-15.45 74.5,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_0_G"
- android:translateX="205.5"
- android:translateY="61">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#f8f9fa"
- android:fillType="nonZero"
- android:pathData=" M171.5 -14 C171.5,-14 171.5,14 171.5,14 C171.5,16.21 169.71,18 167.5,18 C167.5,18 -167.5,18 -167.5,18 C-169.71,18 -171.5,16.21 -171.5,14 C-171.5,14 -171.5,-14 -171.5,-14 C-171.5,-16.21 -169.71,-18 -167.5,-18 C-167.5,-18 167.5,-18 167.5,-18 C169.71,-18 171.5,-16.21 171.5,-14c " />
- </group>
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_3_G_N_2_T_0"
- android:scaleX="0.6"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="395">
- <group
- android:name="_R_G_L_3_G"
- android:translateX="-206"
- android:translateY="-446">
- <group
- android:name="_R_G_L_3_G_L_0_G"
- android:scaleY="0">
- <group
- android:name="_R_G_L_3_G_L_0_G_L_28_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_28_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#000000"
- android:fillType="nonZero"
- android:pathData=" M206 -422 C206,-422 206,422 206,422 C206,435.25 195.25,446 182,446 C182,446 -182,446 -182,446 C-195.25,446 -206,435.25 -206,422 C-206,422 -206,-422 -206,-422 C-206,-435.25 -195.25,-446 -182,-446 C-182,-446 182,-446 182,-446 C195.25,-446 206,-435.25 206,-422c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_27_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="422.5">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_27_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -395.5 C206,-395.5 206,395.5 206,395.5 C206,395.5 -206,395.5 -206,395.5 C-206,395.5 -206,-395.5 -206,-395.5 C-206,-395.5 206,-395.5 206,-395.5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_26_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="496.5">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_26_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -377.5 C206,-377.5 206,377.5 206,377.5 C206,387.43 197.93,395.5 188,395.5 C188,395.5 -188,395.5 -188,395.5 C-197.93,395.5 -206,387.43 -206,377.5 C-206,377.5 -206,-377.5 -206,-377.5 C-206,-387.43 -197.93,-395.5 -188,-395.5 C-188,-395.5 188,-395.5 188,-395.5 C197.93,-395.5 206,-387.43 206,-377.5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_25_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_25_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -23.5 C206,-23.5 206,50.5 206,50.5 C206,50.5 -206,50.5 -206,50.5 C-206,50.5 -206,-23.5 -206,-23.5 C-206,-23.5 206,-23.5 206,-23.5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_24_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_24_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -32.5 C206,-32.5 206,32.5 206,32.5 C206,42.43 197.93,50.5 188,50.5 C188,50.5 -188,50.5 -188,50.5 C-197.93,50.5 -206,42.43 -206,32.5 C-206,32.5 -206,-32.5 -206,-32.5 C-206,-42.43 -197.93,-50.5 -188,-50.5 C-188,-50.5 188,-50.5 188,-50.5 C197.93,-50.5 206,-42.43 206,-32.5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_23_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_23_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_22_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_22_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_21_G"
- android:scaleY="0"
- android:translateX="148.5"
- android:translateY="148">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_21_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M46.5 -5 C46.5,-5 46.5,5 46.5,5 C46.5,7.21 44.71,9 42.5,9 C42.5,9 -42.5,9 -42.5,9 C-44.71,9 -46.5,7.21 -46.5,5 C-46.5,5 -46.5,-5 -46.5,-5 C-46.5,-7.21 -44.71,-9 -42.5,-9 C-42.5,-9 42.5,-9 42.5,-9 C44.71,-9 46.5,-7.21 46.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_20_G"
- android:scaleY="0"
- android:translateX="186"
- android:translateY="169">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_20_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M84 -4 C84,-4 84,4 84,4 C84,6.21 82.21,8 80,8 C80,8 -80,8 -80,8 C-82.21,8 -84,6.21 -84,4 C-84,4 -84,-4 -84,-4 C-84,-6.21 -82.21,-8 -80,-8 C-80,-8 80,-8 80,-8 C82.21,-8 84,-6.21 84,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_19_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="245">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_19_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_18_G"
- android:scaleY="0"
- android:translateX="162"
- android:translateY="236">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_18_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60 -5 C60,-5 60,5 60,5 C60,7.21 58.21,9 56,9 C56,9 -56,9 -56,9 C-58.21,9 -60,7.21 -60,5 C-60,5 -60,-5 -60,-5 C-60,-7.21 -58.21,-9 -56,-9 C-56,-9 56,-9 56,-9 C58.21,-9 60,-7.21 60,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_17_G"
- android:scaleY="0"
- android:translateX="171.5"
- android:translateY="257">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_17_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M69.5 -4 C69.5,-4 69.5,4 69.5,4 C69.5,6.21 67.71,8 65.5,8 C65.5,8 -65.5,8 -65.5,8 C-67.71,8 -69.5,6.21 -69.5,4 C-69.5,4 -69.5,-4 -69.5,-4 C-69.5,-6.21 -67.71,-8 -65.5,-8 C-65.5,-8 65.5,-8 65.5,-8 C67.71,-8 69.5,-6.21 69.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_16_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="333">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_16_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_15_G"
- android:scaleY="0"
- android:translateX="158"
- android:translateY="324">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_15_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M56 -5 C56,-5 56,5 56,5 C56,7.21 54.21,9 52,9 C52,9 -52,9 -52,9 C-54.21,9 -56,7.21 -56,5 C-56,5 -56,-5 -56,-5 C-56,-7.21 -54.21,-9 -52,-9 C-52,-9 52,-9 52,-9 C54.21,-9 56,-7.21 56,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_14_G"
- android:scaleY="0"
- android:translateX="217.5"
- android:translateY="345">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_14_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M115.5 -4 C115.5,-4 115.5,4 115.5,4 C115.5,6.21 113.71,8 111.5,8 C111.5,8 -111.5,8 -111.5,8 C-113.71,8 -115.5,6.21 -115.5,4 C-115.5,4 -115.5,-4 -115.5,-4 C-115.5,-6.21 -113.71,-8 -111.5,-8 C-111.5,-8 111.5,-8 111.5,-8 C113.71,-8 115.5,-6.21 115.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_13_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="421">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_13_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_12_G"
- android:scaleY="0"
- android:translateX="170"
- android:translateY="412">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_12_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M68 -5 C68,-5 68,5 68,5 C68,7.21 66.21,9 64,9 C64,9 -64,9 -64,9 C-66.21,9 -68,7.21 -68,5 C-68,5 -68,-5 -68,-5 C-68,-7.21 -66.21,-9 -64,-9 C-64,-9 64,-9 64,-9 C66.21,-9 68,-7.21 68,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_11_G"
- android:scaleY="0"
- android:translateX="198.5"
- android:translateY="433">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_10_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="509">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_9_G"
- android:scaleY="0"
- android:translateX="135"
- android:translateY="500">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M33 -5 C33,-5 33,5 33,5 C33,7.21 31.21,9 29,9 C29,9 -29,9 -29,9 C-31.21,9 -33,7.21 -33,5 C-33,5 -33,-5 -33,-5 C-33,-7.21 -31.21,-9 -29,-9 C-29,-9 29,-9 29,-9 C31.21,-9 33,-7.21 33,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_8_G"
- android:scaleY="0"
- android:translateX="185.5"
- android:translateY="521">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M83.5 -4 C83.5,-4 83.5,4 83.5,4 C83.5,6.21 81.71,8 79.5,8 C79.5,8 -79.5,8 -79.5,8 C-81.71,8 -83.5,6.21 -83.5,4 C-83.5,4 -83.5,-4 -83.5,-4 C-83.5,-6.21 -81.71,-8 -79.5,-8 C-79.5,-8 79.5,-8 79.5,-8 C81.71,-8 83.5,-6.21 83.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_7_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="597">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_6_G"
- android:scaleY="0"
- android:translateX="168.5"
- android:translateY="588">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M66.5 -5 C66.5,-5 66.5,5 66.5,5 C66.5,7.21 64.71,9 62.5,9 C62.5,9 -62.5,9 -62.5,9 C-64.71,9 -66.5,7.21 -66.5,5 C-66.5,5 -66.5,-5 -66.5,-5 C-66.5,-7.21 -64.71,-9 -62.5,-9 C-62.5,-9 62.5,-9 62.5,-9 C64.71,-9 66.5,-7.21 66.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_5_G"
- android:scaleY="0"
- android:translateX="198.5"
- android:translateY="609">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_4_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="685">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_3_G"
- android:scaleY="0"
- android:translateX="162.5"
- android:translateY="676">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60.5 -5 C60.5,-5 60.5,5 60.5,5 C60.5,7.21 58.71,9 56.5,9 C56.5,9 -56.5,9 -56.5,9 C-58.71,9 -60.5,7.21 -60.5,5 C-60.5,5 -60.5,-5 -60.5,-5 C-60.5,-7.21 -58.71,-9 -56.5,-9 C-56.5,-9 56.5,-9 56.5,-9 C58.71,-9 60.5,-7.21 60.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_2_G"
- android:scaleY="0"
- android:translateX="174"
- android:translateY="697">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M72 -4 C72,-4 72,4 72,4 C72,6.21 70.21,8 68,8 C68,8 -68,8 -68,8 C-70.21,8 -72,6.21 -72,4 C-72,4 -72,-4 -72,-4 C-72,-6.21 -70.21,-8 -68,-8 C-68,-8 68,-8 68,-8 C70.21,-8 72,-6.21 72,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_1_G"
- android:scaleY="0"
- android:translateX="313.5"
- android:translateY="798">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M74.5 0 C74.5,0 74.5,0 74.5,0 C74.5,15.45 61.95,28 46.5,28 C46.5,28 -46.5,28 -46.5,28 C-61.95,28 -74.5,15.45 -74.5,0 C-74.5,0 -74.5,0 -74.5,0 C-74.5,-15.45 -61.95,-28 -46.5,-28 C-46.5,-28 46.5,-28 46.5,-28 C61.95,-28 74.5,-15.45 74.5,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_0_G"
- android:scaleY="0"
- android:translateX="205.5"
- android:translateY="61">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#f8f9fa"
- android:fillType="nonZero"
- android:pathData=" M171.5 -14 C171.5,-14 171.5,14 171.5,14 C171.5,16.21 169.71,18 167.5,18 C167.5,18 -167.5,18 -167.5,18 C-169.71,18 -171.5,16.21 -171.5,14 C-171.5,14 -171.5,-14 -171.5,-14 C-171.5,-16.21 -169.71,-18 -167.5,-18 C-167.5,-18 167.5,-18 167.5,-18 C169.71,-18 171.5,-16.21 171.5,-14c " />
- </group>
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_2_G_N_2_T_0"
- android:scaleX="0.6"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="395">
- <group
- android:name="_R_G_L_2_G"
- android:scaleX="1.3767699999999998"
- android:scaleY="1.3767699999999998"
- android:translateY="-508.163">
- <group
- android:name="_R_G_L_2_G_D_0_P_0_G_0_T_0"
- android:scaleX="0"
- android:scaleY="0">
- <path
- android:name="_R_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M0 25 C13.81,25 25,13.81 25,0 C25,-13.81 13.81,-25 0,-25 C-13.81,-25 -25,-13.81 -25,0 C-25,13.81 -13.81,25 0,25c " />
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_1_G_N_2_T_0"
- android:scaleX="0.6"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="395">
- <group
- android:name="_R_G_L_1_G"
- android:scaleX="1.39"
- android:scaleY="1.39"
- android:translateX="-556.176"
- android:translateY="-7.307">
- <path
- android:name="_R_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="@color/gesture_tutorial_fake_previous_task_view_color"
- android:fillType="nonZero"
- android:pathData=" M135 -301 C135,-301 135,311 135,311 C135,319.28 128.28,326 120,326 C120,326 -120,326 -120,326 C-128.28,326 -135,319.28 -135,311 C-135,311 -135,-301 -135,-301 C-135,-309.28 -128.28,-316 -120,-316 C-120,-316 120,-316 120,-316 C128.28,-316 135,-309.28 135,-301c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_0_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_0_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="@color/gesture_tutorial_primary_color"
- android:fillType="nonZero"
- android:pathData=" M0 406 C21.54,406 39,423.46 39,445 C39,466.54 21.54,484 0,484 C-21.54,484 -39,466.54 -39,445 C-39,423.46 -21.54,406 0,406c " />
- </group>
- </group>
- <group android:name="time_group" />
- </vector>
- </aapt:attr>
-</animated-vector>
\ No newline at end of file
diff --git a/res/drawable/gesture_tutorial_ripple.xml b/quickstep/res/drawable/gesture_tutorial_ripple.xml
similarity index 100%
rename from res/drawable/gesture_tutorial_ripple.xml
rename to quickstep/res/drawable/gesture_tutorial_ripple.xml
diff --git a/quickstep/res/drawable/mock_conversation.xml b/quickstep/res/drawable/mock_conversation.xml
deleted file mode 100644
index 272d9ed..0000000
--- a/quickstep/res/drawable/mock_conversation.xml
+++ /dev/null
@@ -1,212 +0,0 @@
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:aapt="http://schemas.android.com/aapt">
- <target android:name="time_group">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="83"
- android:propertyName="translateX"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <aapt:attr name="android:drawable">
- <vector
- android:width="412dp"
- android:height="892dp"
- android:viewportHeight="892"
- android:viewportWidth="412">
- <group android:name="_R_G">
- <group
- android:name="_R_G_L_1_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -446 C206,-446 206,446 206,446 C206,446 -206,446 -206,446 C-206,446 -206,-446 -206,-446 C-206,-446 206,-446 206,-446c " />
- </group>
- <group
- android:name="_R_G_L_0_G"
- android:pivotX="206"
- android:pivotY="446"
- android:scaleX="1"
- android:scaleY="1">
- <group android:name="_R_G_L_0_G_L_0_G">
- <group
- android:name="_R_G_L_0_G_L_0_G_L_14_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_14_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#000000"
- android:fillType="nonZero"
- android:pathData=" M206 -422 C206,-422 206,422 206,422 C206,435.25 195.25,446 182,446 C182,446 -182,446 -182,446 C-195.25,446 -206,435.25 -206,422 C-206,422 -206,-422 -206,-422 C-206,-435.25 -195.25,-446 -182,-446 C-182,-446 182,-446 182,-446 C195.25,-446 206,-435.25 206,-422c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_13_G"
- android:translateX="206"
- android:translateY="496.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_13_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#f1f3f4"
- android:fillType="nonZero"
- android:pathData=" M206 -395.5 C206,-395.5 206,395.5 206,395.5 C206,395.5 -206,395.5 -206,395.5 C-206,395.5 -206,-395.5 -206,-395.5 C-206,-395.5 206,-395.5 206,-395.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_12_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_12_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -50.5 C206,-50.5 206,50.5 206,50.5 C206,50.5 -206,50.5 -206,50.5 C-206,50.5 -206,-50.5 -206,-50.5 C-206,-50.5 206,-50.5 206,-50.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_11_G"
- android:translateX="206"
- android:translateY="804">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M177 0 C177,12.15 167.15,22 155,22 C155,22 -155,22 -155,22 C-167.15,22 -177,12.15 -177,0 C-177,-12.15 -167.15,-22 -155,-22 C-155,-22 155,-22 155,-22 C167.15,-22 177,-12.15 177,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_10_G"
- android:translateX="117.5"
- android:translateY="61">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M83.5 -14 C83.5,-14 83.5,14 83.5,14 C83.5,16.21 81.71,18 79.5,18 C79.5,18 -79.5,18 -79.5,18 C-81.71,18 -83.5,16.21 -83.5,14 C-83.5,14 -83.5,-14 -83.5,-14 C-83.5,-16.21 -81.71,-18 -79.5,-18 C-79.5,-18 79.5,-18 79.5,-18 C81.71,-18 83.5,-16.21 83.5,-14c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_9_G"
- android:translateX="370"
- android:translateY="61">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M18 -14 C18,-14 18,14 18,14 C18,16.21 16.21,18 14,18 C14,18 -14,18 -14,18 C-16.21,18 -18,16.21 -18,14 C-18,14 -18,-14 -18,-14 C-18,-16.21 -16.21,-18 -14,-18 C-14,-18 14,-18 14,-18 C16.21,-18 18,-16.21 18,-14c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_8_G"
- android:translateX="318"
- android:translateY="61">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M18 -14 C18,-14 18,14 18,14 C18,16.21 16.21,18 14,18 C14,18 -14,18 -14,18 C-16.21,18 -18,16.21 -18,14 C-18,14 -18,-14 -18,-14 C-18,-16.21 -16.21,-18 -14,-18 C-14,-18 14,-18 14,-18 C16.21,-18 18,-16.21 18,-14c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_7_G"
- android:translateX="48"
- android:translateY="618">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M22 0 C22,12.15 12.15,22 0,22 C-12.15,22 -22,12.15 -22,0 C-22,-12.15 -12.15,-22 0,-22 C12.15,-22 22,-12.15 22,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_6_G"
- android:translateX="48"
- android:translateY="396">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M22 0 C22,12.15 12.15,22 0,22 C-12.15,22 -22,12.15 -22,0 C-22,-12.15 -12.15,-22 0,-22 C12.15,-22 22,-12.15 22,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_5_G"
- android:translateX="259"
- android:translateY="286">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M135 -38 C135,-38 135,38 135,38 C135,47.94 126.94,56 117,56 C117,56 -117,56 -117,56 C-126.94,56 -135,47.94 -135,38 C-135,38 -135,-38 -135,-38 C-135,-47.94 -126.94,-56 -117,-56 C-117,-56 117,-56 117,-56 C126.94,-56 135,-47.94 135,-38c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_4_G"
- android:translateX="259"
- android:translateY="468">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M134.5 4 C134.5,4 134.5,14 134.5,14 C134.5,16.21 132.71,18 130.5,18 C130.5,18 44.5,18 44.5,18 C42.29,18 40.5,16.21 40.5,14 C40.5,14 40.5,4 40.5,4 C40.5,1.79 42.29,0 44.5,0 C44.5,0 130.5,0 130.5,0 C132.71,0 134.5,1.79 134.5,4c M135 0 C135,9.66 127.17,17.5 117.5,17.5 C117.5,17.5 31,17.5 31,17.5 C21.34,17.5 13.5,9.66 13.5,0 C13.5,-9.66 21.34,-17.5 31,-17.5 C31,-17.5 117.5,-17.5 117.5,-17.5 C127.17,-17.5 135,-9.66 135,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_3_G"
- android:translateX="259"
- android:translateY="526.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M135 -32.5 C135,-32.5 135,20.5 135,20.5 C135,22.71 133.21,24.5 131,24.5 C131,24.5 -95,24.5 -95,24.5 C-97.21,24.5 -99,22.71 -99,20.5 C-99,20.5 -99,-32.5 -99,-32.5 C-99,-34.71 -97.21,-36.5 -95,-36.5 C-95,-36.5 131,-36.5 131,-36.5 C133.21,-36.5 135,-34.71 135,-32.5c M135 -18.5 C135,-18.5 135,18.5 135,18.5 C135,28.44 126.94,36.5 117,36.5 C117,36.5 -117,36.5 -117,36.5 C-126.94,36.5 -135,28.44 -135,18.5 C-135,18.5 -135,-18.5 -135,-18.5 C-135,-28.44 -126.94,-36.5 -117,-36.5 C-117,-36.5 117,-36.5 117,-36.5 C126.94,-36.5 135,-28.44 135,-18.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_2_G"
- android:translateX="259"
- android:translateY="708.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M135 -18.5 C135,-18.5 135,18.5 135,18.5 C135,28.44 126.94,36.5 117,36.5 C117,36.5 -117,36.5 -117,36.5 C-126.94,36.5 -135,28.44 -135,18.5 C-135,18.5 -135,-18.5 -135,-18.5 C-135,-28.44 -126.94,-36.5 -117,-36.5 C-117,-36.5 117,-36.5 117,-36.5 C126.94,-36.5 135,-28.44 135,-18.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_1_G"
- android:translateX="222"
- android:translateY="617">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M45.5 0 C45.5,9.66 37.67,17.5 28,17.5 C28,17.5 -117.5,17.5 -117.5,17.5 C-127.16,17.5 -135,9.66 -135,0 C-135,-9.66 -127.16,-17.5 -117.5,-17.5 C-117.5,-17.5 28,-17.5 28,-17.5 C37.67,-17.5 45.5,-9.66 45.5,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_0_G"
- android:translateX="222"
- android:translateY="395.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M77 0 C77,9.66 69.16,17.5 59.5,17.5 C59.5,17.5 -117.5,17.5 -117.5,17.5 C-127.16,17.5 -135,9.66 -135,0 C-135,-9.66 -127.16,-17.5 -117.5,-17.5 C-117.5,-17.5 59.5,-17.5 59.5,-17.5 C69.16,-17.5 77,-9.66 77,0c " />
- </group>
- </group>
- </group>
- </group>
- <group android:name="time_group" />
- </vector>
- </aapt:attr>
-</animated-vector>
\ No newline at end of file
diff --git a/quickstep/res/drawable/mock_conversations_list.xml b/quickstep/res/drawable/mock_conversations_list.xml
deleted file mode 100644
index 2dbc88f..0000000
--- a/quickstep/res/drawable/mock_conversations_list.xml
+++ /dev/null
@@ -1,361 +0,0 @@
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:aapt="http://schemas.android.com/aapt">
- <target android:name="time_group">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="83"
- android:propertyName="translateX"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <aapt:attr name="android:drawable">
- <vector
- android:width="412dp"
- android:height="892dp"
- android:viewportHeight="892"
- android:viewportWidth="412">
- <group android:name="_R_G">
- <group
- android:name="_R_G_L_1_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -446 C206,-446 206,446 206,446 C206,446 -206,446 -206,446 C-206,446 -206,-446 -206,-446 C-206,-446 206,-446 206,-446c " />
- </group>
- <group android:name="_R_G_L_0_G">
- <group android:name="_R_G_L_0_G_L_0_G">
- <group
- android:name="_R_G_L_0_G_L_0_G_L_28_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_28_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#000000"
- android:fillType="nonZero"
- android:pathData=" M206 -422 C206,-422 206,422 206,422 C206,435.25 195.25,446 182,446 C182,446 -182,446 -182,446 C-195.25,446 -206,435.25 -206,422 C-206,422 -206,-422 -206,-422 C-206,-435.25 -195.25,-446 -182,-446 C-182,-446 182,-446 182,-446 C195.25,-446 206,-435.25 206,-422c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_27_G"
- android:translateX="206"
- android:translateY="422.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_27_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -395.5 C206,-395.5 206,395.5 206,395.5 C206,395.5 -206,395.5 -206,395.5 C-206,395.5 -206,-395.5 -206,-395.5 C-206,-395.5 206,-395.5 206,-395.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_26_G"
- android:translateX="206"
- android:translateY="496.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_26_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -377.5 C206,-377.5 206,377.5 206,377.5 C206,387.43 197.93,395.5 188,395.5 C188,395.5 -188,395.5 -188,395.5 C-197.93,395.5 -206,387.43 -206,377.5 C-206,377.5 -206,-377.5 -206,-377.5 C-206,-387.43 -197.93,-395.5 -188,-395.5 C-188,-395.5 188,-395.5 188,-395.5 C197.93,-395.5 206,-387.43 206,-377.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_25_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_25_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -23.5 C206,-23.5 206,50.5 206,50.5 C206,50.5 -206,50.5 -206,50.5 C-206,50.5 -206,-23.5 -206,-23.5 C-206,-23.5 206,-23.5 206,-23.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_24_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_24_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -32.5 C206,-32.5 206,32.5 206,32.5 C206,42.43 197.93,50.5 188,50.5 C188,50.5 -188,50.5 -188,50.5 C-197.93,50.5 -206,42.43 -206,32.5 C-206,32.5 -206,-32.5 -206,-32.5 C-206,-42.43 -197.93,-50.5 -188,-50.5 C-188,-50.5 188,-50.5 188,-50.5 C197.93,-50.5 206,-42.43 206,-32.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_23_G"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_23_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_22_G"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_22_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_21_G"
- android:translateX="148.5"
- android:translateY="148">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_21_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M46.5 -5 C46.5,-5 46.5,5 46.5,5 C46.5,7.21 44.71,9 42.5,9 C42.5,9 -42.5,9 -42.5,9 C-44.71,9 -46.5,7.21 -46.5,5 C-46.5,5 -46.5,-5 -46.5,-5 C-46.5,-7.21 -44.71,-9 -42.5,-9 C-42.5,-9 42.5,-9 42.5,-9 C44.71,-9 46.5,-7.21 46.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_20_G"
- android:translateX="186"
- android:translateY="169">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_20_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M84 -4 C84,-4 84,4 84,4 C84,6.21 82.21,8 80,8 C80,8 -80,8 -80,8 C-82.21,8 -84,6.21 -84,4 C-84,4 -84,-4 -84,-4 C-84,-6.21 -82.21,-8 -80,-8 C-80,-8 80,-8 80,-8 C82.21,-8 84,-6.21 84,-4c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_19_G"
- android:translateX="54"
- android:translateY="245">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_19_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_18_G"
- android:translateX="162"
- android:translateY="236">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_18_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60 -5 C60,-5 60,5 60,5 C60,7.21 58.21,9 56,9 C56,9 -56,9 -56,9 C-58.21,9 -60,7.21 -60,5 C-60,5 -60,-5 -60,-5 C-60,-7.21 -58.21,-9 -56,-9 C-56,-9 56,-9 56,-9 C58.21,-9 60,-7.21 60,-5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_17_G"
- android:translateX="171.5"
- android:translateY="257">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_17_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M69.5 -4 C69.5,-4 69.5,4 69.5,4 C69.5,6.21 67.71,8 65.5,8 C65.5,8 -65.5,8 -65.5,8 C-67.71,8 -69.5,6.21 -69.5,4 C-69.5,4 -69.5,-4 -69.5,-4 C-69.5,-6.21 -67.71,-8 -65.5,-8 C-65.5,-8 65.5,-8 65.5,-8 C67.71,-8 69.5,-6.21 69.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_16_G"
- android:translateX="54"
- android:translateY="333">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_16_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_15_G"
- android:translateX="158"
- android:translateY="324">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_15_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M56 -5 C56,-5 56,5 56,5 C56,7.21 54.21,9 52,9 C52,9 -52,9 -52,9 C-54.21,9 -56,7.21 -56,5 C-56,5 -56,-5 -56,-5 C-56,-7.21 -54.21,-9 -52,-9 C-52,-9 52,-9 52,-9 C54.21,-9 56,-7.21 56,-5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_14_G"
- android:translateX="217.5"
- android:translateY="345">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_14_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M115.5 -4 C115.5,-4 115.5,4 115.5,4 C115.5,6.21 113.71,8 111.5,8 C111.5,8 -111.5,8 -111.5,8 C-113.71,8 -115.5,6.21 -115.5,4 C-115.5,4 -115.5,-4 -115.5,-4 C-115.5,-6.21 -113.71,-8 -111.5,-8 C-111.5,-8 111.5,-8 111.5,-8 C113.71,-8 115.5,-6.21 115.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_13_G"
- android:translateX="54"
- android:translateY="421">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_13_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_12_G"
- android:translateX="170"
- android:translateY="412">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_12_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M68 -5 C68,-5 68,5 68,5 C68,7.21 66.21,9 64,9 C64,9 -64,9 -64,9 C-66.21,9 -68,7.21 -68,5 C-68,5 -68,-5 -68,-5 C-68,-7.21 -66.21,-9 -64,-9 C-64,-9 64,-9 64,-9 C66.21,-9 68,-7.21 68,-5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_11_G"
- android:translateX="198.5"
- android:translateY="433">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_10_G"
- android:translateX="54"
- android:translateY="509">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_9_G"
- android:translateX="135"
- android:translateY="500">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M33 -5 C33,-5 33,5 33,5 C33,7.21 31.21,9 29,9 C29,9 -29,9 -29,9 C-31.21,9 -33,7.21 -33,5 C-33,5 -33,-5 -33,-5 C-33,-7.21 -31.21,-9 -29,-9 C-29,-9 29,-9 29,-9 C31.21,-9 33,-7.21 33,-5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_8_G"
- android:translateX="185.5"
- android:translateY="521">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M83.5 -4 C83.5,-4 83.5,4 83.5,4 C83.5,6.21 81.71,8 79.5,8 C79.5,8 -79.5,8 -79.5,8 C-81.71,8 -83.5,6.21 -83.5,4 C-83.5,4 -83.5,-4 -83.5,-4 C-83.5,-6.21 -81.71,-8 -79.5,-8 C-79.5,-8 79.5,-8 79.5,-8 C81.71,-8 83.5,-6.21 83.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_7_G"
- android:translateX="54"
- android:translateY="597">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_6_G"
- android:translateX="168.5"
- android:translateY="588">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M66.5 -5 C66.5,-5 66.5,5 66.5,5 C66.5,7.21 64.71,9 62.5,9 C62.5,9 -62.5,9 -62.5,9 C-64.71,9 -66.5,7.21 -66.5,5 C-66.5,5 -66.5,-5 -66.5,-5 C-66.5,-7.21 -64.71,-9 -62.5,-9 C-62.5,-9 62.5,-9 62.5,-9 C64.71,-9 66.5,-7.21 66.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_5_G"
- android:translateX="198.5"
- android:translateY="609">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_4_G"
- android:translateX="54"
- android:translateY="685">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_3_G"
- android:translateX="162.5"
- android:translateY="676">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60.5 -5 C60.5,-5 60.5,5 60.5,5 C60.5,7.21 58.71,9 56.5,9 C56.5,9 -56.5,9 -56.5,9 C-58.71,9 -60.5,7.21 -60.5,5 C-60.5,5 -60.5,-5 -60.5,-5 C-60.5,-7.21 -58.71,-9 -56.5,-9 C-56.5,-9 56.5,-9 56.5,-9 C58.71,-9 60.5,-7.21 60.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_2_G"
- android:translateX="174"
- android:translateY="697">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M72 -4 C72,-4 72,4 72,4 C72,6.21 70.21,8 68,8 C68,8 -68,8 -68,8 C-70.21,8 -72,6.21 -72,4 C-72,4 -72,-4 -72,-4 C-72,-6.21 -70.21,-8 -68,-8 C-68,-8 68,-8 68,-8 C70.21,-8 72,-6.21 72,-4c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_1_G"
- android:translateX="313.5"
- android:translateY="798">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M74.5 0 C74.5,0 74.5,0 74.5,0 C74.5,15.45 61.95,28 46.5,28 C46.5,28 -46.5,28 -46.5,28 C-61.95,28 -74.5,15.45 -74.5,0 C-74.5,0 -74.5,0 -74.5,0 C-74.5,-15.45 -61.95,-28 -46.5,-28 C-46.5,-28 46.5,-28 46.5,-28 C61.95,-28 74.5,-15.45 74.5,0c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_0_G"
- android:translateX="205.5"
- android:translateY="61">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#f8f9fa"
- android:fillType="nonZero"
- android:pathData=" M171.5 -14 C171.5,-14 171.5,14 171.5,14 C171.5,16.21 169.71,18 167.5,18 C167.5,18 -167.5,18 -167.5,18 C-169.71,18 -171.5,16.21 -171.5,14 C-171.5,14 -171.5,-14 -171.5,-14 C-171.5,-16.21 -169.71,-18 -167.5,-18 C-167.5,-18 167.5,-18 167.5,-18 C169.71,-18 171.5,-16.21 171.5,-14c " />
- </group>
- </group>
- </group>
- </group>
- <group android:name="time_group" />
- </vector>
- </aapt:attr>
-</animated-vector>
\ No newline at end of file
diff --git a/quickstep/res/drawable/mock_webpage_dark_mode.xml b/quickstep/res/drawable/mock_webpage_dark_mode.xml
deleted file mode 100644
index 93b22b7..0000000
--- a/quickstep/res/drawable/mock_webpage_dark_mode.xml
+++ /dev/null
@@ -1,251 +0,0 @@
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:aapt="http://schemas.android.com/aapt">
- <target android:name="time_group">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="83"
- android:propertyName="translateX"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <aapt:attr name="android:drawable">
- <vector
- android:width="412dp"
- android:height="892dp"
- android:viewportHeight="892"
- android:viewportWidth="412">
- <group android:name="_R_G">
- <group android:name="_R_G_L_0_G">
- <group android:name="_R_G_L_0_G_L_3_G">
- <group
- android:name="_R_G_L_0_G_L_3_G_L_11_G"
- android:scaleX="0.87473"
- android:scaleY="0.98643"
- android:translateX="206"
- android:translateY="472.769">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M235.5 -407 C235.5,-407 235.5,407 235.5,407 C235.5,416.93 227.43,425 217.5,425 C217.5,425 -217.5,425 -217.5,425 C-227.43,425 -235.5,416.93 -235.5,407 C-235.5,407 -235.5,-407 -235.5,-407 C-235.5,-416.93 -227.43,-425 -217.5,-425 C-217.5,-425 217.5,-425 217.5,-425 C227.43,-425 235.5,-416.93 235.5,-407c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_10_G"
- android:translateX="182.5"
- android:translateY="831">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M158.5 -3 C158.5,-3 158.5,3 158.5,3 C158.5,7.42 154.92,11 150.5,11 C150.5,11 -150.5,11 -150.5,11 C-154.92,11 -158.5,7.42 -158.5,3 C-158.5,3 -158.5,-3 -158.5,-3 C-158.5,-7.42 -154.92,-11 -150.5,-11 C-150.5,-11 150.5,-11 150.5,-11 C154.92,-11 158.5,-7.42 158.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_9_G"
- android:translateX="186"
- android:translateY="801">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M162 -3 C162,-3 162,3 162,3 C162,7.42 158.42,11 154,11 C154,11 -154,11 -154,11 C-158.42,11 -162,7.42 -162,3 C-162,3 -162,-3 -162,-3 C-162,-7.42 -158.42,-11 -154,-11 C-154,-11 154,-11 154,-11 C158.42,-11 162,-7.42 162,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_8_G"
- android:translateX="119"
- android:translateY="755">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M95 -3 C95,-3 95,3 95,3 C95,7.42 91.42,11 87,11 C87,11 -87,11 -87,11 C-91.42,11 -95,7.42 -95,3 C-95,3 -95,-3 -95,-3 C-95,-7.42 -91.42,-11 -87,-11 C-87,-11 87,-11 87,-11 C91.42,-11 95,-7.42 95,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_7_G"
- android:translateX="182.5"
- android:translateY="725">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M158.5 -3 C158.5,-3 158.5,3 158.5,3 C158.5,7.42 154.92,11 150.5,11 C150.5,11 -150.5,11 -150.5,11 C-154.92,11 -158.5,7.42 -158.5,3 C-158.5,3 -158.5,-3 -158.5,-3 C-158.5,-7.42 -154.92,-11 -150.5,-11 C-150.5,-11 150.5,-11 150.5,-11 C154.92,-11 158.5,-7.42 158.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_6_G"
- android:translateX="197.5"
- android:translateY="695">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M173.5 -3 C173.5,-3 173.5,3 173.5,3 C173.5,7.42 169.92,11 165.5,11 C165.5,11 -165.5,11 -165.5,11 C-169.92,11 -173.5,7.42 -173.5,3 C-173.5,3 -173.5,-3 -173.5,-3 C-173.5,-7.42 -169.92,-11 -165.5,-11 C-165.5,-11 165.5,-11 165.5,-11 C169.92,-11 173.5,-7.42 173.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_5_G"
- android:translateX="192"
- android:translateY="665">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M168 -3 C168,-3 168,3 168,3 C168,7.42 164.42,11 160,11 C160,11 -160,11 -160,11 C-164.42,11 -168,7.42 -168,3 C-168,3 -168,-3 -168,-3 C-168,-7.42 -164.42,-11 -160,-11 C-160,-11 160,-11 160,-11 C164.42,-11 168,-7.42 168,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_4_G"
- android:translateX="105.5"
- android:translateY="360">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M23.5 -2 C23.5,-2 23.5,2 23.5,2 C23.5,4.21 21.71,6 19.5,6 C19.5,6 -19.5,6 -19.5,6 C-21.71,6 -23.5,4.21 -23.5,2 C-23.5,2 -23.5,-2 -23.5,-2 C-23.5,-4.21 -21.71,-6 -19.5,-6 C-19.5,-6 19.5,-6 19.5,-6 C21.71,-6 23.5,-4.21 23.5,-2c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_3_G"
- android:translateX="47.5"
- android:translateY="360">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M23.5 -2 C23.5,-2 23.5,2 23.5,2 C23.5,4.21 21.71,6 19.5,6 C19.5,6 -19.5,6 -19.5,6 C-21.71,6 -23.5,4.21 -23.5,2 C-23.5,2 -23.5,-2 -23.5,-2 C-23.5,-4.21 -21.71,-6 -19.5,-6 C-19.5,-6 19.5,-6 19.5,-6 C21.71,-6 23.5,-4.21 23.5,-2c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_2_G"
- android:translateX="142.5"
- android:translateY="328">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M118.5 -10 C118.5,-10 118.5,10 118.5,10 C118.5,14.42 114.92,18 110.5,18 C110.5,18 -110.5,18 -110.5,18 C-114.92,18 -118.5,14.42 -118.5,10 C-118.5,10 -118.5,-10 -118.5,-10 C-118.5,-14.42 -114.92,-18 -110.5,-18 C-110.5,-18 110.5,-18 110.5,-18 C114.92,-18 118.5,-14.42 118.5,-10c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_1_G"
- android:translateX="186"
- android:translateY="284">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M162 -10 C162,-10 162,10 162,10 C162,14.42 158.42,18 154,18 C154,18 -154,18 -154,18 C-158.42,18 -162,14.42 -162,10 C-162,10 -162,-10 -162,-10 C-162,-14.42 -158.42,-18 -154,-18 C-154,-18 154,-18 154,-18 C158.42,-18 162,-14.42 162,-10c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G_L_0_G"
- android:translateX="155"
- android:translateY="240">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M131 -10 C131,-10 131,10 131,10 C131,14.42 127.42,18 123,18 C123,18 -123,18 -123,18 C-127.42,18 -131,14.42 -131,10 C-131,10 -131,-10 -131,-10 C-131,-14.42 -127.42,-18 -123,-18 C-123,-18 123,-18 123,-18 C127.42,-18 131,-14.42 131,-10c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_0_G_L_2_G"
- android:translateX="24"
- android:translateY="390">
- <group
- android:name="_R_G_L_0_G_L_2_G_L_0_G"
- android:translateX="182"
- android:translateY="120">
- <path
- android:name="_R_G_L_0_G_L_2_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M182 -98 C182,-98 182,98 182,98 C182,110.14 172.14,120 160,120 C160,120 -160,120 -160,120 C-172.14,120 -182,110.14 -182,98 C-182,98 -182,-98 -182,-98 C-182,-110.14 -172.14,-120 -160,-120 C-160,-120 160,-120 160,-120 C172.14,-120 182,-110.14 182,-98c " />
- </group>
- </group>
- <group android:name="_R_G_L_0_G_L_1_G">
- <group
- android:name="_R_G_L_0_G_L_1_G_L_2_G"
- android:translateX="206"
- android:translateY="145">
- <path
- android:name="_R_G_L_0_G_L_1_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -95.63 C206,-95.63 206,42.37 206,42.37 C206,43.47 205.1,44.37 204,44.37 C204,44.37 -204,44.37 -204,44.37 C-205.1,44.37 -206,43.47 -206,42.37 C-206,42.37 -206,-95.63 -206,-95.63 C-206,-96.73 -205.1,-97.63 -204,-97.63 C-204,-97.63 204,-97.63 204,-97.63 C205.1,-97.63 206,-96.73 206,-95.63c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_1_G_L_1_G"
- android:translateX="206"
- android:translateY="145">
- <path
- android:name="_R_G_L_0_G_L_1_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#80868b"
- android:fillType="nonZero"
- android:pathData=" M109 -14 C109,-14 109,14 109,14 C109,15.1 108.1,16 107,16 C107,16 -107,16 -107,16 C-108.1,16 -109,15.1 -109,14 C-109,14 -109,-14 -109,-14 C-109,-15.1 -108.1,-16 -107,-16 C-107,-16 107,-16 107,-16 C108.1,-16 109,-15.1 109,-14c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_1_G_L_0_G"
- android:translateX="46"
- android:translateY="145">
- <path
- android:name="_R_G_L_0_G_L_1_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#80868b"
- android:fillType="nonZero"
- android:pathData=" M22 -14 C22,-14 22,14 22,14 C22,18.42 18.42,22 14,22 C14,22 -14,22 -14,22 C-18.42,22 -22,18.42 -22,14 C-22,14 -22,-14 -22,-14 C-22,-18.42 -18.42,-22 -14,-22 C-14,-22 14,-22 14,-22 C18.42,-22 22,-18.42 22,-14c " />
- </group>
- </group>
- <group android:name="_R_G_L_0_G_L_0_G">
- <group
- android:name="_R_G_L_0_G_L_0_G_L_2_G"
- android:translateX="206"
- android:translateY="51">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#202124"
- android:fillType="nonZero"
- android:pathData=" M206 -0.27 C206,-0.27 206,49.73 206,49.73 C206,49.73 -206,49.73 -206,49.73 C-206,49.73 -206,-0.27 -206,-0.27 C-206,-0.27 206,-0.27 206,-0.27c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_1_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#202124"
- android:fillType="nonZero"
- android:pathData=" M206 -32.5 C206,-32.5 206,32.5 206,32.5 C206,42.43 197.93,50.5 188,50.5 C188,50.5 -188,50.5 -188,50.5 C-197.93,50.5 -206,42.43 -206,32.5 C-206,32.5 -206,-32.5 -206,-32.5 C-206,-42.43 -197.93,-50.5 -188,-50.5 C-188,-50.5 188,-50.5 188,-50.5 C197.93,-50.5 206,-42.43 206,-32.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G_L_0_G"
- android:translateX="206"
- android:translateY="66.5">
- <path
- android:name="_R_G_L_0_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#3c4043"
- android:fillType="nonZero"
- android:pathData=" M190 0 C190,0 190,0 190,0 C190,10.21 181.71,18.5 171.5,18.5 C171.5,18.5 -171.5,18.5 -171.5,18.5 C-181.71,18.5 -190,10.21 -190,0 C-190,0 -190,0 -190,0 C-190,-10.21 -181.71,-18.5 -171.5,-18.5 C-171.5,-18.5 171.5,-18.5 171.5,-18.5 C181.71,-18.5 190,-10.21 190,0c " />
- </group>
- </group>
- </group>
- </group>
- <group android:name="time_group" />
- </vector>
- </aapt:attr>
-</animated-vector>
\ No newline at end of file
diff --git a/quickstep/res/drawable/mock_webpage_light_mode.xml b/quickstep/res/drawable/mock_webpage_light_mode.xml
deleted file mode 100644
index 98abb92..0000000
--- a/quickstep/res/drawable/mock_webpage_light_mode.xml
+++ /dev/null
@@ -1,263 +0,0 @@
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:aapt="http://schemas.android.com/aapt">
- <target android:name="time_group">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="83"
- android:propertyName="translateX"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <aapt:attr name="android:drawable">
- <vector
- android:width="412dp"
- android:height="892dp"
- android:viewportHeight="892"
- android:viewportWidth="412">
- <group android:name="_R_G">
- <group android:name="_R_G_L_0_G">
- <group android:name="_R_G_L_0_G_L_4_G">
- <group
- android:name="_R_G_L_0_G_L_4_G_L_11_G"
- android:scaleX="0.87473"
- android:scaleY="0.98643"
- android:translateX="206"
- android:translateY="472.769">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M235.5 -407 C235.5,-407 235.5,407 235.5,407 C235.5,416.93 227.43,425 217.5,425 C217.5,425 -217.5,425 -217.5,425 C-227.43,425 -235.5,416.93 -235.5,407 C-235.5,407 -235.5,-407 -235.5,-407 C-235.5,-416.93 -227.43,-425 -217.5,-425 C-217.5,-425 217.5,-425 217.5,-425 C227.43,-425 235.5,-416.93 235.5,-407c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_10_G"
- android:translateX="182.5"
- android:translateY="831">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M158.5 -3 C158.5,-3 158.5,3 158.5,3 C158.5,7.42 154.92,11 150.5,11 C150.5,11 -150.5,11 -150.5,11 C-154.92,11 -158.5,7.42 -158.5,3 C-158.5,3 -158.5,-3 -158.5,-3 C-158.5,-7.42 -154.92,-11 -150.5,-11 C-150.5,-11 150.5,-11 150.5,-11 C154.92,-11 158.5,-7.42 158.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_9_G"
- android:translateX="186"
- android:translateY="801">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M162 -3 C162,-3 162,3 162,3 C162,7.42 158.42,11 154,11 C154,11 -154,11 -154,11 C-158.42,11 -162,7.42 -162,3 C-162,3 -162,-3 -162,-3 C-162,-7.42 -158.42,-11 -154,-11 C-154,-11 154,-11 154,-11 C158.42,-11 162,-7.42 162,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_8_G"
- android:translateX="119"
- android:translateY="755">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M95 -3 C95,-3 95,3 95,3 C95,7.42 91.42,11 87,11 C87,11 -87,11 -87,11 C-91.42,11 -95,7.42 -95,3 C-95,3 -95,-3 -95,-3 C-95,-7.42 -91.42,-11 -87,-11 C-87,-11 87,-11 87,-11 C91.42,-11 95,-7.42 95,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_7_G"
- android:translateX="182.5"
- android:translateY="725">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M158.5 -3 C158.5,-3 158.5,3 158.5,3 C158.5,7.42 154.92,11 150.5,11 C150.5,11 -150.5,11 -150.5,11 C-154.92,11 -158.5,7.42 -158.5,3 C-158.5,3 -158.5,-3 -158.5,-3 C-158.5,-7.42 -154.92,-11 -150.5,-11 C-150.5,-11 150.5,-11 150.5,-11 C154.92,-11 158.5,-7.42 158.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_6_G"
- android:translateX="197.5"
- android:translateY="695">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M173.5 -3 C173.5,-3 173.5,3 173.5,3 C173.5,7.42 169.92,11 165.5,11 C165.5,11 -165.5,11 -165.5,11 C-169.92,11 -173.5,7.42 -173.5,3 C-173.5,3 -173.5,-3 -173.5,-3 C-173.5,-7.42 -169.92,-11 -165.5,-11 C-165.5,-11 165.5,-11 165.5,-11 C169.92,-11 173.5,-7.42 173.5,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_5_G"
- android:translateX="192"
- android:translateY="665">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M168 -3 C168,-3 168,3 168,3 C168,7.42 164.42,11 160,11 C160,11 -160,11 -160,11 C-164.42,11 -168,7.42 -168,3 C-168,3 -168,-3 -168,-3 C-168,-7.42 -164.42,-11 -160,-11 C-160,-11 160,-11 160,-11 C164.42,-11 168,-7.42 168,-3c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_4_G"
- android:translateX="105.5"
- android:translateY="360">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M23.5 -2 C23.5,-2 23.5,2 23.5,2 C23.5,4.21 21.71,6 19.5,6 C19.5,6 -19.5,6 -19.5,6 C-21.71,6 -23.5,4.21 -23.5,2 C-23.5,2 -23.5,-2 -23.5,-2 C-23.5,-4.21 -21.71,-6 -19.5,-6 C-19.5,-6 19.5,-6 19.5,-6 C21.71,-6 23.5,-4.21 23.5,-2c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_3_G"
- android:translateX="47.5"
- android:translateY="360">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M23.5 -2 C23.5,-2 23.5,2 23.5,2 C23.5,4.21 21.71,6 19.5,6 C19.5,6 -19.5,6 -19.5,6 C-21.71,6 -23.5,4.21 -23.5,2 C-23.5,2 -23.5,-2 -23.5,-2 C-23.5,-4.21 -21.71,-6 -19.5,-6 C-19.5,-6 19.5,-6 19.5,-6 C21.71,-6 23.5,-4.21 23.5,-2c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_2_G"
- android:translateX="142.5"
- android:translateY="328">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M118.5 -10 C118.5,-10 118.5,10 118.5,10 C118.5,14.42 114.92,18 110.5,18 C110.5,18 -110.5,18 -110.5,18 C-114.92,18 -118.5,14.42 -118.5,10 C-118.5,10 -118.5,-10 -118.5,-10 C-118.5,-14.42 -114.92,-18 -110.5,-18 C-110.5,-18 110.5,-18 110.5,-18 C114.92,-18 118.5,-14.42 118.5,-10c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_1_G"
- android:translateX="186"
- android:translateY="284">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M162 -10 C162,-10 162,10 162,10 C162,14.42 158.42,18 154,18 C154,18 -154,18 -154,18 C-158.42,18 -162,14.42 -162,10 C-162,10 -162,-10 -162,-10 C-162,-14.42 -158.42,-18 -154,-18 C-154,-18 154,-18 154,-18 C158.42,-18 162,-14.42 162,-10c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_4_G_L_0_G"
- android:translateX="155"
- android:translateY="240">
- <path
- android:name="_R_G_L_0_G_L_4_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M131 -10 C131,-10 131,10 131,10 C131,14.42 127.42,18 123,18 C123,18 -123,18 -123,18 C-127.42,18 -131,14.42 -131,10 C-131,10 -131,-10 -131,-10 C-131,-14.42 -127.42,-18 -123,-18 C-123,-18 123,-18 123,-18 C127.42,-18 131,-14.42 131,-10c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_0_G_L_3_G"
- android:translateX="24"
- android:translateY="390">
- <group
- android:name="_R_G_L_0_G_L_3_G_L_0_G"
- android:translateX="182"
- android:translateY="120">
- <path
- android:name="_R_G_L_0_G_L_3_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M182 -98 C182,-98 182,98 182,98 C182,110.14 172.14,120 160,120 C160,120 -160,120 -160,120 C-172.14,120 -182,110.14 -182,98 C-182,98 -182,-98 -182,-98 C-182,-110.14 -172.14,-120 -160,-120 C-160,-120 160,-120 160,-120 C172.14,-120 182,-110.14 182,-98c " />
- </group>
- </group>
- <group android:name="_R_G_L_0_G_L_2_G">
- <group
- android:name="_R_G_L_0_G_L_2_G_L_2_G"
- android:translateX="206"
- android:translateY="145">
- <path
- android:name="_R_G_L_0_G_L_2_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -95.63 C206,-95.63 206,42.37 206,42.37 C206,43.47 205.1,44.37 204,44.37 C204,44.37 -204,44.37 -204,44.37 C-205.1,44.37 -206,43.47 -206,42.37 C-206,42.37 -206,-95.63 -206,-95.63 C-206,-96.73 -205.1,-97.63 -204,-97.63 C-204,-97.63 204,-97.63 204,-97.63 C205.1,-97.63 206,-96.73 206,-95.63c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_2_G_L_1_G"
- android:translateX="206"
- android:translateY="145">
- <path
- android:name="_R_G_L_0_G_L_2_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#80868b"
- android:fillType="nonZero"
- android:pathData=" M109 -14 C109,-14 109,14 109,14 C109,15.1 108.1,16 107,16 C107,16 -107,16 -107,16 C-108.1,16 -109,15.1 -109,14 C-109,14 -109,-14 -109,-14 C-109,-15.1 -108.1,-16 -107,-16 C-107,-16 107,-16 107,-16 C108.1,-16 109,-15.1 109,-14c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_2_G_L_0_G"
- android:translateX="46"
- android:translateY="145">
- <path
- android:name="_R_G_L_0_G_L_2_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#80868b"
- android:fillType="nonZero"
- android:pathData=" M22 -14 C22,-14 22,14 22,14 C22,18.42 18.42,22 14,22 C14,22 -14,22 -14,22 C-18.42,22 -22,18.42 -22,14 C-22,14 -22,-14 -22,-14 C-22,-18.42 -18.42,-22 -14,-22 C-14,-22 14,-22 14,-22 C18.42,-22 22,-18.42 22,-14c " />
- </group>
- </group>
- <group android:name="_R_G_L_0_G_L_1_G">
- <group
- android:name="_R_G_L_0_G_L_1_G_L_2_G"
- android:translateX="206"
- android:translateY="51">
- <path
- android:name="_R_G_L_0_G_L_1_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#6e7175"
- android:fillType="nonZero"
- android:pathData=" M206 -0.27 C206,-0.27 206,49.73 206,49.73 C206,49.73 -206,49.73 -206,49.73 C-206,49.73 -206,-0.27 -206,-0.27 C-206,-0.27 206,-0.27 206,-0.27c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_1_G_L_1_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_0_G_L_1_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#6e7175"
- android:fillType="nonZero"
- android:pathData=" M206 -32.5 C206,-32.5 206,32.5 206,32.5 C206,42.43 197.93,50.5 188,50.5 C188,50.5 -188,50.5 -188,50.5 C-197.93,50.5 -206,42.43 -206,32.5 C-206,32.5 -206,-32.5 -206,-32.5 C-206,-42.43 -197.93,-50.5 -188,-50.5 C-188,-50.5 188,-50.5 188,-50.5 C197.93,-50.5 206,-42.43 206,-32.5c " />
- </group>
- <group
- android:name="_R_G_L_0_G_L_1_G_L_0_G"
- android:translateX="206"
- android:translateY="66.5">
- <path
- android:name="_R_G_L_0_G_L_1_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9a9a9a"
- android:fillType="nonZero"
- android:pathData=" M190 0 C190,0 190,0 190,0 C190,10.21 181.71,18.5 171.5,18.5 C171.5,18.5 -171.5,18.5 -171.5,18.5 C-181.71,18.5 -190,10.21 -190,0 C-190,0 -190,0 -190,0 C-190,-10.21 -181.71,-18.5 -171.5,-18.5 C-171.5,-18.5 171.5,-18.5 171.5,-18.5 C181.71,-18.5 190,-10.21 190,0c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_0_G_L_0_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bac4d6"
- android:fillType="nonZero"
- android:pathData=" M206.06 -430.06 C206.06,-430.06 206,431 206,431 C206,446 189.75,446 189.79,446 C189.79,446 -189.98,446 -189.98,446 C-189.94,446 -206,446 -206,431 C-206,431 -206,-430 -206,-430 C-206,-446 -189.97,-446 -190.01,-446 C-190.01,-446 188.98,-446.06 188.98,-446.06 C188.94,-446.06 206,-446 206.06,-430.06c " />
- </group>
- </group>
- </group>
- <group android:name="time_group" />
- </vector>
- </aapt:attr>
-</animated-vector>
\ No newline at end of file
diff --git a/quickstep/res/layout/gesture_tutorial_dialog.xml b/quickstep/res/layout/gesture_tutorial_dialog.xml
index 59bf7b9..db6ec85 100644
--- a/quickstep/res/layout/gesture_tutorial_dialog.xml
+++ b/quickstep/res/layout/gesture_tutorial_dialog.xml
@@ -1,4 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
diff --git a/quickstep/res/layout/gesture_tutorial_fragment.xml b/quickstep/res/layout/gesture_tutorial_fragment.xml
index cdda43c..cfb3eb0 100644
--- a/quickstep/res/layout/gesture_tutorial_fragment.xml
+++ b/quickstep/res/layout/gesture_tutorial_fragment.xml
@@ -49,7 +49,7 @@
android:scaleY="0.98"
android:visibility="invisible" />
- <View
+ <FrameLayout
android:id="@+id/gesture_tutorial_fake_task_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -62,7 +62,7 @@
android:background="@drawable/gesture_tutorial_ripple"/>
<ImageView
- android:id="@+id/gesture_tutorial_feedback_video"
+ android:id="@+id/gesture_tutorial_edge_gesture_video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
@@ -73,14 +73,12 @@
android:visibility="gone"/>
<ImageView
- android:id="@+id/gesture_tutorial_gesture_video"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentTop="true"
- android:layout_alignParentBottom="true"
- android:layout_alignParentStart="true"
- android:layout_alignParentEnd="true"
- android:scaleType="fitXY"
+ android:id="@+id/gesture_tutorial_finger_dot"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/gesture_tutorial_finger_dot"
+ android:layout_centerHorizontal="true"
+ android:layout_centerVertical="true"
android:visibility="gone"/>
<androidx.constraintlayout.widget.ConstraintLayout
diff --git a/quickstep/res/layout/gesture_tutorial_mock_conversation.xml b/quickstep/res/layout/gesture_tutorial_mock_conversation.xml
new file mode 100644
index 0000000..89973d3
--- /dev/null
+++ b/quickstep/res/layout/gesture_tutorial_mock_conversation.xml
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/top_bar"
+ android:layout_width="match_parent"
+ android:layout_height="101dp"
+ android:background="@color/mock_conversation_top_bar"
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent">
+
+ <androidx.cardview.widget.CardView
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="43dp"
+ android:layout_marginBottom="22dp"
+ android:layout_marginStart="34dp"
+ android:layout_marginEnd="211dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_conversation_top_bar_item"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="43dp"
+ android:layout_marginBottom="22dp"
+ android:layout_marginStart="300dp"
+ android:layout_marginEnd="16dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_conversation_top_bar_item"
+ app:layout_constraintDimensionRatio="1:1"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/top_bar_button"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/top_bar_button"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="43dp"
+ android:layout_marginBottom="22dp"
+ android:layout_marginStart="300dp"
+ android:layout_marginEnd="24dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_conversation_top_bar_item"
+ app:layout_constraintDimensionRatio="1:1"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:background="@color/mock_conversation_background"
+ android:paddingBottom="66dp"
+
+ app:layout_constraintTop_toBottomOf="@id/top_bar"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:paddingBottom="36dp"
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/message_bar"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent">
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/message_1"
+ android:layout_width="0dp"
+ android:layout_height="112dp"
+ android:layout_marginBottom="32dp"
+ android:layout_marginStart="124dp"
+ android:layout_marginEnd="18dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="18dp"
+ app:cardBackgroundColor="@color/mock_conversation_sent_message"
+ app:layout_constraintBottom_toTopOf="@id/reply_icon_1"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/reply_icon_1"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginBottom="32dp"
+ android:layout_marginStart="26dp"
+ android:layout_marginEnd="342dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_conversation_profile_icon"
+ app:layout_constraintDimensionRatio="1:1"
+ app:layout_constraintBottom_toTopOf="@id/message_2"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:layout_width="0dp"
+ android:layout_height="36dp"
+ android:layout_marginStart="17dp"
+ android:layout_marginEnd="112dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="18dp"
+ app:cardBackgroundColor="@color/mock_conversation_received_message"
+ app:layout_constraintTop_toTopOf="@id/reply_icon_1"
+ app:layout_constraintBottom_toBottomOf="@id/reply_icon_1"
+ app:layout_constraintStart_toEndOf="@id/reply_icon_1"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/message_2"
+ android:layout_width="0dp"
+ android:layout_height="36dp"
+ android:layout_marginBottom="4dp"
+ android:layout_marginStart="280dp"
+ android:layout_marginEnd="18dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="18dp"
+ app:cardBackgroundColor="@color/mock_conversation_sent_message"
+ app:layout_constraintBottom_toTopOf="@id/message_3"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/message_3"
+ android:layout_width="0dp"
+ android:layout_height="74dp"
+ android:layout_marginBottom="32dp"
+ android:layout_marginStart="124dp"
+ android:layout_marginEnd="18dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="18dp"
+ app:cardBackgroundColor="@color/mock_conversation_sent_message"
+ app:layout_constraintBottom_toTopOf="@id/reply_icon_2"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/reply_icon_2"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginBottom="32dp"
+ android:layout_marginStart="26dp"
+ android:layout_marginEnd="342dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_conversation_profile_icon"
+ app:layout_constraintDimensionRatio="1:1"
+ app:layout_constraintBottom_toTopOf="@id/message_4"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:layout_width="0dp"
+ android:layout_height="36dp"
+ android:layout_marginStart="17dp"
+ android:layout_marginEnd="144dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="18dp"
+ app:cardBackgroundColor="@color/mock_conversation_received_message"
+ app:layout_constraintTop_toTopOf="@id/reply_icon_2"
+ app:layout_constraintBottom_toBottomOf="@id/reply_icon_2"
+ app:layout_constraintStart_toEndOf="@id/reply_icon_2"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/message_4"
+ android:layout_width="0dp"
+ android:layout_height="74dp"
+ android:layout_marginStart="124dp"
+ android:layout_marginEnd="18dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="18dp"
+ app:cardBackgroundColor="@color/mock_conversation_sent_message"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/message_bar"
+ android:layout_width="0dp"
+ android:layout_height="44dp"
+ android:layout_marginTop="36dp"
+ android:layout_marginStart="34dp"
+ android:layout_marginEnd="24dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="164dp"
+ app:cardBackgroundColor="@color/mock_conversation_message_input"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/quickstep/res/layout/gesture_tutorial_mock_conversation_list.xml b/quickstep/res/layout/gesture_tutorial_mock_conversation_list.xml
new file mode 100644
index 0000000..ad6b165
--- /dev/null
+++ b/quickstep/res/layout/gesture_tutorial_mock_conversation_list.xml
@@ -0,0 +1,394 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/top_bar"
+ android:layout_width="match_parent"
+ android:layout_height="101dp"
+ android:background="@color/mock_list_top_bar"
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent">
+
+ <androidx.cardview.widget.CardView
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="43dp"
+ android:layout_marginBottom="22dp"
+ android:layout_marginStart="34dp"
+ android:layout_marginEnd="35dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_top_bar_item"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:background="@color/mock_list_background"
+ android:paddingBottom="66dp"
+
+ app:layout_constraintTop_toBottomOf="@id/top_bar"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:paddingTop="28dp"
+ android:paddingStart="26dp"
+ android:paddingBottom="14dp"
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/mock_button">
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_icon_1"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_list_profile_icon"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_1"
+ android:layout_width="0dp"
+ android:layout_height="18dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="217dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintVertical_chainStyle="packed"
+ app:layout_constraintTop_toTopOf="@id/conversation_icon_1"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_1"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/conversation_line_2"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_2"
+ android:layout_width="0dp"
+ android:layout_height="16dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="142dp"
+ android:layout_marginTop="4dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintTop_toBottomOf="@id/conversation_line_1"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_1"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="@id/conversation_icon_1"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_icon_2"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+ android:layout_marginTop="32dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_list_profile_icon"
+ app:layout_constraintTop_toBottomOf="@id/conversation_icon_1"
+ app:layout_constraintStart_toStartOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_3"
+ android:layout_width="0dp"
+ android:layout_height="18dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="190dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintVertical_chainStyle="packed"
+ app:layout_constraintTop_toTopOf="@id/conversation_icon_2"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_2"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/conversation_line_4"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_4"
+ android:layout_width="0dp"
+ android:layout_height="16dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="171dp"
+ android:layout_marginTop="4dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintTop_toBottomOf="@id/conversation_line_3"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_2"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="@id/conversation_icon_2"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_icon_3"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+ android:layout_marginTop="32dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_list_profile_icon"
+ app:layout_constraintTop_toBottomOf="@id/conversation_icon_2"
+ app:layout_constraintStart_toStartOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_5"
+ android:layout_width="0dp"
+ android:layout_height="18dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="198dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintVertical_chainStyle="packed"
+ app:layout_constraintTop_toTopOf="@id/conversation_icon_3"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_3"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/conversation_line_6"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_6"
+ android:layout_width="0dp"
+ android:layout_height="16dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="79dp"
+ android:layout_marginTop="4dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintTop_toBottomOf="@id/conversation_line_5"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_3"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="@id/conversation_icon_3"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_icon_4"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+ android:layout_marginTop="32dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_list_profile_icon"
+ app:layout_constraintTop_toBottomOf="@id/conversation_icon_3"
+ app:layout_constraintStart_toStartOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_7"
+ android:layout_width="0dp"
+ android:layout_height="18dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="174dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintVertical_chainStyle="packed"
+ app:layout_constraintTop_toTopOf="@id/conversation_icon_4"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_4"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/conversation_line_8"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_8"
+ android:layout_width="0dp"
+ android:layout_height="16dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="117dp"
+ android:layout_marginTop="4dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintTop_toBottomOf="@id/conversation_line_7"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_4"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="@id/conversation_icon_4"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_icon_5"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+ android:layout_marginTop="32dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_list_profile_icon"
+ app:layout_constraintTop_toBottomOf="@id/conversation_icon_4"
+ app:layout_constraintStart_toStartOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_9"
+ android:layout_width="0dp"
+ android:layout_height="18dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="244dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintVertical_chainStyle="packed"
+ app:layout_constraintTop_toTopOf="@id/conversation_icon_5"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_5"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/conversation_line_10"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_10"
+ android:layout_width="0dp"
+ android:layout_height="16dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="143dp"
+ android:layout_marginTop="4dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintTop_toBottomOf="@id/conversation_line_9"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_5"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="@id/conversation_icon_5"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_icon_6"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+ android:layout_marginTop="32dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_list_profile_icon"
+ app:layout_constraintTop_toBottomOf="@id/conversation_icon_5"
+ app:layout_constraintStart_toStartOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_11"
+ android:layout_width="0dp"
+ android:layout_height="18dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="177dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintVertical_chainStyle="packed"
+ app:layout_constraintTop_toTopOf="@id/conversation_icon_6"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_6"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/conversation_line_12"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_12"
+ android:layout_width="0dp"
+ android:layout_height="16dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="117dp"
+ android:layout_marginTop="4dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintTop_toBottomOf="@id/conversation_line_11"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_6"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="@id/conversation_icon_6"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_icon_7"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+ android:layout_marginTop="32dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_list_profile_icon"
+ app:layout_constraintTop_toBottomOf="@id/conversation_icon_6"
+ app:layout_constraintStart_toStartOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_13"
+ android:layout_width="0dp"
+ android:layout_height="18dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="189dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintVertical_chainStyle="packed"
+ app:layout_constraintTop_toTopOf="@id/conversation_icon_7"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_7"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/conversation_line_14"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/conversation_line_14"
+ android:layout_width="0dp"
+ android:layout_height="16dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="166dp"
+ android:layout_marginTop="4dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_list_preview_message"
+ app:layout_constraintTop_toBottomOf="@id/conversation_line_13"
+ app:layout_constraintStart_toEndOf="@id/conversation_icon_7"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="@id/conversation_icon_7"/>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_button"
+ android:layout_width="149dp"
+ android:layout_height="56dp"
+ android:layout_marginEnd="24dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="164dp"
+ app:cardBackgroundColor="@color/mock_list_button"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/quickstep/res/layout/gesture_tutorial_mock_webpage.xml b/quickstep/res/layout/gesture_tutorial_mock_webpage.xml
new file mode 100644
index 0000000..ab00a11
--- /dev/null
+++ b/quickstep/res/layout/gesture_tutorial_mock_webpage.xml
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/url_bar"
+ android:layout_width="match_parent"
+ android:layout_height="101dp"
+ android:background="@color/mock_webpage_url_bar"
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent">
+
+ <androidx.cardview.widget.CardView
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="48dp"
+ android:layout_marginBottom="16dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="100dp"
+ app:cardBackgroundColor="@color/mock_webpage_url_bar_item"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/top_bar"
+ android:layout_width="match_parent"
+ android:layout_height="88dp"
+ android:background="@color/mock_webpage_top_bar"
+
+ app:layout_constraintTop_toBottomOf="@id/url_bar"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent">
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/top_bar_button"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="22dp"
+ android:layout_marginBottom="22dp"
+ android:layout_marginStart="24dp"
+ android:layout_marginEnd="344dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="8dp"
+ app:cardBackgroundColor="@color/mock_webpage_top_bar_item"
+ app:layout_constraintDimensionRatio="1:1"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="28dp"
+ android:layout_marginBottom="28dp"
+ android:layout_marginStart="97dp"
+ android:layout_marginEnd="97dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="2dp"
+ app:cardBackgroundColor="@color/mock_webpage_top_bar_item"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:background="@color/mock_webpage_background"
+ android:paddingTop="32dp"
+ android:paddingStart="24dp"
+ android:paddingBottom="50dp"
+
+ app:layout_constraintTop_toBottomOf="@id/top_bar"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent">
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_line_1"
+ android:layout_width="0dp"
+ android:layout_height="36dp"
+ android:layout_marginEnd="126dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_line_2"
+ android:layout_width="0dp"
+ android:layout_height="36dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginEnd="64dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_line_1"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_line_3"
+ android:layout_width="0dp"
+ android:layout_height="36dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginEnd="151dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_line_2"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_button"
+ android:layout_width="47dp"
+ android:layout_height="12dp"
+ android:layout_marginTop="8dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_line_3"
+ app:layout_constraintStart_toStartOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:layout_width="47dp"
+ android:layout_height="12dp"
+ android:background="@color/mock_webpage_page_text"
+ android:layout_marginStart="11dp"
+ android:layout_marginTop="8dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="4dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_line_3"
+ app:layout_constraintStart_toEndOf="@id/mock_button"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_block"
+ android:layout_width="0dp"
+ android:layout_height="240dp"
+ android:layout_marginTop="24dp"
+ android:layout_marginEnd="24dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="22dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_button"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_line_4"
+ android:layout_width="0dp"
+ android:layout_height="22dp"
+ android:layout_marginTop="24dp"
+ android:layout_marginEnd="52dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="8dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_block"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_line_5"
+ android:layout_width="0dp"
+ android:layout_height="22dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginEnd="41dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="8dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_line_4"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_line_6"
+ android:layout_width="0dp"
+ android:layout_height="22dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginEnd="71dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="8dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_line_5"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_line_7"
+ android:layout_width="0dp"
+ android:layout_height="22dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginEnd="198dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="8dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_line_6"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/mock_line_8"
+ android:layout_width="0dp"
+ android:layout_height="22dp"
+ android:layout_marginTop="24dp"
+ android:layout_marginEnd="64dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="8dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_line_7"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <androidx.cardview.widget.CardView
+ android:layout_width="0dp"
+ android:layout_height="22dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginEnd="71dp"
+
+ app:cardElevation="0dp"
+ app:cardCornerRadius="8dp"
+ app:cardBackgroundColor="@color/mock_webpage_page_text"
+ app:layout_constraintTop_toBottomOf="@id/mock_line_8"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/quickstep/res/values-night/colors.xml b/quickstep/res/values-night/colors.xml
new file mode 100644
index 0000000..c3b2536
--- /dev/null
+++ b/quickstep/res/values-night/colors.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+<resources>
+
+ <color name="gesture_tutorial_back_arrow_color">#99000000</color>
+
+ <color name="gesture_tutorial_fake_wallpaper_color">#000000</color> <!-- Black -->
+
+ <color name="mock_webpage_url_bar">#202124</color>
+ <color name="mock_webpage_url_bar_item">#3c4043</color>
+
+</resources>
\ No newline at end of file
diff --git a/quickstep/res/values/colors.xml b/quickstep/res/values/colors.xml
index 17980f0..4755292 100644
--- a/quickstep/res/values/colors.xml
+++ b/quickstep/res/values/colors.xml
@@ -14,8 +14,6 @@
limitations under the License.
-->
<resources>
- <color name="back_arrow_color_light">#FFFFFFFF</color>
- <color name="back_arrow_color_dark">#99000000</color>
<color name="chip_hint_foreground_color">#fff</color>
<color name="chip_scrim_start_color">#39000000</color>
@@ -31,4 +29,40 @@
<color name="taskbar_stashed_handle_light_color">#EBffffff</color>
<color name="taskbar_stashed_handle_dark_color">#99000000</color>
+
+ <!-- Gesture navigation tutorial -->
+ <color name="gesture_tutorial_back_arrow_color">#FFFFFFFF</color>
+
+ <color name="gesture_tutorial_fake_wallpaper_color">#f9f9f9</color> <!-- White -->
+ <color name="gesture_tutorial_ripple_color">#A0C2F9</color> <!-- Light Blue -->
+ <color name="gesture_tutorial_fake_task_view_color">#6DA1FF</color> <!-- Light Blue -->
+ <!-- Must contrast gesture_tutorial_fake_wallpaper_color -->
+ <color name="gesture_tutorial_fake_previous_task_view_color">#3C4043</color> <!-- Gray -->
+ <color name="gesture_tutorial_action_button_label_color">#FF000000</color>
+ <color name="gesture_tutorial_primary_color">#B7F29F</color> <!-- Light Green -->
+
+ <!-- Mock conversation -->
+ <color name="mock_conversation_background">#f1f3f4</color>
+ <color name="mock_conversation_top_bar">#e8eaed</color>
+ <color name="mock_conversation_top_bar_item">#dadce0</color>
+ <color name="mock_conversation_sent_message">#bdc1c6</color>
+ <color name="mock_conversation_received_message">#e8eaed</color>
+ <color name="mock_conversation_message_input">#dadce0</color>
+ <color name="mock_conversation_profile_icon">#dadce0</color>
+
+ <!-- Mock conversations list -->
+ <color name="mock_list_background">#dadce0</color>
+ <color name="mock_list_top_bar">#e8eaed</color>
+ <color name="mock_list_top_bar_item">#f8f9fa</color>
+ <color name="mock_list_profile_icon">#9aa0a6</color>
+ <color name="mock_list_preview_message">#bdc1c6</color>
+ <color name="mock_list_button">#bdc1c6</color>
+
+ <!-- Mock web page -->
+ <color name="mock_webpage_background">#f1f3f4</color>
+ <color name="mock_webpage_url_bar">#6e7175</color>
+ <color name="mock_webpage_url_bar_item">#9a9a9a</color>
+ <color name="mock_webpage_top_bar">#e8eaed</color>
+ <color name="mock_webpage_top_bar_item">#80868b</color>
+ <color name="mock_webpage_page_text">#bdc1c6</color>
</resources>
\ No newline at end of file
diff --git a/quickstep/src/com/android/quickstep/interaction/AssistantGestureTutorialController.java b/quickstep/src/com/android/quickstep/interaction/AssistantGestureTutorialController.java
index 957f776..2f3a912 100644
--- a/quickstep/src/com/android/quickstep/interaction/AssistantGestureTutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/AssistantGestureTutorialController.java
@@ -68,7 +68,6 @@
showFeedback(R.string.assistant_gesture_feedback_swipe_too_far_from_corner);
break;
case ASSISTANT_COMPLETED:
- hideFeedback(true);
showRippleEffect(null);
showFeedback(R.string.assistant_gesture_tutorial_playground_subtitle);
break;
diff --git a/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialController.java b/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialController.java
index 3cb22f4..f2402e3 100644
--- a/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialController.java
@@ -18,10 +18,9 @@
import static com.android.quickstep.interaction.TutorialController.TutorialType.BACK_NAVIGATION;
import static com.android.quickstep.interaction.TutorialController.TutorialType.BACK_NAVIGATION_COMPLETE;
+import android.annotation.LayoutRes;
import android.graphics.PointF;
-import androidx.appcompat.content.res.AppCompatResources;
-
import com.android.launcher3.R;
import com.android.quickstep.interaction.EdgeBackGestureHandler.BackGestureResult;
import com.android.quickstep.interaction.NavBarGestureHandler.NavBarGestureResult;
@@ -44,8 +43,18 @@
}
@Override
- protected int getMockAppTaskThumbnailResId(boolean forDarkMode) {
- return R.drawable.mock_conversation;
+ protected int getMockAppTaskLayoutResId() {
+ return getMockAppTaskCurrentPageLayoutResId();
+ }
+
+ @LayoutRes
+ int getMockAppTaskCurrentPageLayoutResId() {
+ return R.layout.gesture_tutorial_mock_conversation;
+ }
+
+ @LayoutRes
+ int getMockAppTaskPreviousPageLayoutResId() {
+ return R.layout.gesture_tutorial_mock_conversation_list;
}
@Override
@@ -70,10 +79,8 @@
switch (result) {
case BACK_COMPLETED_FROM_LEFT:
case BACK_COMPLETED_FROM_RIGHT:
- mTutorialFragment.releaseGestureVideoView();
- hideFeedback(true);
- mFakeTaskView.setBackground(AppCompatResources.getDrawable(mContext,
- R.drawable.mock_conversations_list));
+ mTutorialFragment.releaseFeedbackAnimation();
+ updateFakeAppTaskViewLayout(getMockAppTaskPreviousPageLayoutResId());
int subtitleResId = mTutorialFragment.isAtFinalStep()
? R.string.back_gesture_feedback_complete_without_follow_up
: R.string.back_gesture_feedback_complete_with_overview_follow_up;
diff --git a/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialFragment.java
index 1740f68..f54734d 100644
--- a/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialFragment.java
@@ -15,6 +15,10 @@
*/
package com.android.quickstep.interaction;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
import android.view.MotionEvent;
import android.view.View;
@@ -23,18 +27,76 @@
import com.android.launcher3.R;
import com.android.quickstep.interaction.TutorialController.TutorialType;
+import java.util.ArrayList;
+
/** Shows the Back gesture interactive tutorial. */
public class BackGestureTutorialFragment extends TutorialFragment {
+
@Nullable
@Override
- Integer getFeedbackVideoResId(boolean forDarkMode) {
- return R.drawable.gesture_tutorial_motion_back;
+ Integer getEdgeAnimationResId() {
+ return R.drawable.gesture_tutorial_loop_back;
}
@Nullable
@Override
- Integer getGestureVideoResId() {
- return R.drawable.gesture_tutorial_loop_back;
+ protected Animator createGestureAnimation() {
+ if (!(mTutorialController instanceof BackGestureTutorialController)) {
+ return null;
+ }
+ BackGestureTutorialController controller =
+ (BackGestureTutorialController) mTutorialController;
+ float fingerDotStartTranslationX = (float) -(mRootView.getWidth() / 2);
+
+ AnimatorSet fingerDotAppearanceAnimator = controller.createFingerDotAppearanceAnimatorSet();
+ fingerDotAppearanceAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ super.onAnimationStart(animation);
+ mFingerDotView.setTranslationX(fingerDotStartTranslationX);
+ }
+ });
+
+ ObjectAnimator translationAnimator = ObjectAnimator.ofFloat(
+ mFingerDotView, View.TRANSLATION_X, fingerDotStartTranslationX, 0);
+ translationAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ controller.updateFakeAppTaskViewLayout(
+ controller.getMockAppTaskPreviousPageLayoutResId());
+ }
+ });
+ translationAnimator.setDuration(1000);
+
+ Animator animationPause = controller.createAnimationPause();
+ animationPause.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ controller.updateFakeAppTaskViewLayout(
+ controller.getMockAppTaskCurrentPageLayoutResId());
+ }
+ });
+ ArrayList<Animator> animators = new ArrayList<>();
+
+ animators.add(fingerDotAppearanceAnimator);
+ animators.add(translationAnimator);
+ animators.add(controller.createFingerDotDisappearanceAnimatorSet());
+ animators.add(animationPause);
+
+ AnimatorSet finalAnimation = new AnimatorSet();
+ finalAnimation.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ super.onAnimationCancel(animation);
+ controller.updateFakeAppTaskViewLayout(
+ controller.getMockAppTaskCurrentPageLayoutResId());
+ }
+ });
+ finalAnimation.playSequentially(animators);
+
+ return finalAnimation;
}
@Override
@@ -49,6 +111,7 @@
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
+ releaseFeedbackAnimation();
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN && mTutorialController != null) {
mTutorialController.setRippleHotspot(motionEvent.getX(), motionEvent.getY());
}
diff --git a/quickstep/src/com/android/quickstep/interaction/EdgeBackGesturePanel.java b/quickstep/src/com/android/quickstep/interaction/EdgeBackGesturePanel.java
index 0521db4..7465db3 100644
--- a/quickstep/src/com/android/quickstep/interaction/EdgeBackGesturePanel.java
+++ b/quickstep/src/com/android/quickstep/interaction/EdgeBackGesturePanel.java
@@ -282,9 +282,7 @@
.setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY));
int currentNightMode =
context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
- mPaint.setColor(context.getColor(currentNightMode == Configuration.UI_MODE_NIGHT_YES
- ? R.color.back_arrow_color_light
- : R.color.back_arrow_color_dark));
+ mPaint.setColor(context.getColor(R.color.gesture_tutorial_back_arrow_color));
loadDimens();
updateArrowDirection();
diff --git a/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialController.java b/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialController.java
index 819c91c..307a8fd 100644
--- a/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialController.java
@@ -42,8 +42,8 @@
}
@Override
- protected int getMockAppTaskThumbnailResId(boolean forDarkMode) {
- return forDarkMode ? R.drawable.mock_webpage_dark_mode : R.drawable.mock_webpage_light_mode;
+ protected int getMockAppTaskLayoutResId() {
+ return R.layout.gesture_tutorial_mock_webpage;
}
@Override
@@ -80,7 +80,7 @@
case HOME_NAVIGATION:
switch (result) {
case HOME_GESTURE_COMPLETED: {
- mTutorialFragment.releaseGestureVideoView();
+ mTutorialFragment.releaseFeedbackAnimation();
animateFakeTaskViewHome(finalVelocity, null);
int subtitleResId = mTutorialFragment.isAtFinalStep()
? R.string.home_gesture_feedback_complete_without_follow_up
diff --git a/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialFragment.java
index 9572637..dcae07d 100644
--- a/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialFragment.java
@@ -15,25 +15,73 @@
*/
package com.android.quickstep.interaction;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.view.MotionEvent;
+import android.view.View;
+
import androidx.annotation.Nullable;
import com.android.launcher3.R;
import com.android.quickstep.interaction.TutorialController.TutorialType;
+import java.util.ArrayList;
+
/** Shows the Home gesture interactive tutorial. */
public class HomeGestureTutorialFragment extends TutorialFragment {
+
@Nullable
@Override
- Integer getFeedbackVideoResId(boolean forDarkMode) {
- return forDarkMode
- ? R.drawable.gesture_tutorial_motion_home_dark_mode
- : R.drawable.gesture_tutorial_motion_home_light_mode;
+ Integer getEdgeAnimationResId() {
+ return R.drawable.gesture_tutorial_loop_home;
}
@Nullable
@Override
- Integer getGestureVideoResId() {
- return R.drawable.gesture_tutorial_loop_home;
+ protected Animator createGestureAnimation() {
+ if (!(mTutorialController instanceof HomeGestureTutorialController)) {
+ return null;
+ }
+ float fingerDotStartTranslationY = (float) mRootView.getFullscreenHeight() / 2;
+ HomeGestureTutorialController controller =
+ (HomeGestureTutorialController) mTutorialController;
+
+ AnimatorSet fingerDotAppearanceAnimator = controller.createFingerDotAppearanceAnimatorSet();
+ fingerDotAppearanceAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ super.onAnimationStart(animation);
+ mFingerDotView.setTranslationY(fingerDotStartTranslationY);
+ }
+ });
+
+ Animator animationPause = controller.createAnimationPause();
+ animationPause.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ controller.resetFakeTaskView();
+ }
+ });
+ ArrayList<Animator> animators = new ArrayList<>();
+
+ animators.add(fingerDotAppearanceAnimator);
+ animators.add(controller.createFingerDotHomeSwipeAnimator(fingerDotStartTranslationY));
+ animators.add(controller.createFingerDotDisappearanceAnimatorSet());
+ animators.add(animationPause);
+
+ AnimatorSet finalAnimation = new AnimatorSet();
+ finalAnimation.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ super.onAnimationCancel(animation);
+ controller.resetFakeTaskView();
+ }
+ });
+ finalAnimation.playSequentially(animators);
+
+ return finalAnimation;
}
@Override
@@ -45,4 +93,10 @@
Class<? extends TutorialController> getControllerClass() {
return HomeGestureTutorialController.class;
}
+
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+ releaseFeedbackAnimation();
+ return super.onTouch(view, motionEvent);
+ }
}
diff --git a/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialController.java b/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialController.java
index 77ddb2b..b38a641 100644
--- a/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialController.java
@@ -49,8 +49,8 @@
}
@Override
- protected int getMockAppTaskThumbnailResId(boolean forDarkMode) {
- return R.drawable.mock_conversations_list;
+ protected int getMockAppTaskLayoutResId() {
+ return R.layout.gesture_tutorial_mock_conversation_list;
}
@Override
@@ -98,13 +98,8 @@
showFeedback(R.string.overview_gesture_feedback_swipe_too_far_from_edge);
break;
case OVERVIEW_GESTURE_COMPLETED:
- mTutorialFragment.releaseGestureVideoView();
- PendingAnimation anim = new PendingAnimation(300);
- anim.setFloat(mTaskViewSwipeUpAnimation
- .getCurrentShift(), AnimatedFloat.VALUE, 1, ACCEL);
- AnimatorSet animset = anim.buildAnim();
- animset.start();
- mRunningWindowAnim = SwipeUpAnimationLogic.RunningWindowAnim.wrap(animset);
+ mTutorialFragment.releaseFeedbackAnimation();
+ animateTaskViewToOverview();
onMotionPaused(true /*arbitrary value*/);
int subtitleResId = mTutorialFragment.getNumSteps() > 1
&& mTutorialFragment.isAtFinalStep()
@@ -126,4 +121,13 @@
break;
}
}
+
+ public void animateTaskViewToOverview() {
+ PendingAnimation anim = new PendingAnimation(300);
+ anim.setFloat(mTaskViewSwipeUpAnimation
+ .getCurrentShift(), AnimatedFloat.VALUE, 1, ACCEL);
+ AnimatorSet animset = anim.buildAnim();
+ animset.start();
+ mRunningWindowAnim = SwipeUpAnimationLogic.RunningWindowAnim.wrap(animset);
+ }
}
diff --git a/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java
index d2ec327..968412b 100644
--- a/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java
@@ -15,25 +15,96 @@
*/
package com.android.quickstep.interaction;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.view.MotionEvent;
+import android.view.View;
+
import androidx.annotation.Nullable;
import com.android.launcher3.R;
import com.android.quickstep.interaction.TutorialController.TutorialType;
+import java.util.ArrayList;
+
/** Shows the Overview gesture interactive tutorial. */
public class OverviewGestureTutorialFragment extends TutorialFragment {
+
@Nullable
@Override
- Integer getFeedbackVideoResId(boolean forDarkMode) {
- return forDarkMode
- ? R.drawable.gesture_tutorial_motion_overview_dark_mode
- : R.drawable.gesture_tutorial_motion_overview_light_mode;
+ Integer getEdgeAnimationResId() {
+ return R.drawable.gesture_tutorial_loop_overview;
}
@Nullable
@Override
- Integer getGestureVideoResId() {
- return R.drawable.gesture_tutorial_loop_overview;
+ protected Animator createGestureAnimation() {
+ if (!(mTutorialController instanceof OverviewGestureTutorialController)) {
+ return null;
+ }
+ float fingerDotStartTranslationY = (float) mRootView.getFullscreenHeight() / 2;
+ OverviewGestureTutorialController controller =
+ (OverviewGestureTutorialController) mTutorialController;
+
+ AnimatorSet fingerDotAppearanceAnimator = controller.createFingerDotAppearanceAnimatorSet();
+ fingerDotAppearanceAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ super.onAnimationStart(animation);
+
+ mFingerDotView.setTranslationY(fingerDotStartTranslationY);
+ }
+ });
+
+ Animator swipeAnimator =
+ controller.createFingerDotOverviewSwipeAnimator(fingerDotStartTranslationY);
+ swipeAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ mFakePreviousTaskView.setVisibility(View.VISIBLE);
+ controller.onMotionPaused(true /*arbitrary value*/);
+ }
+ });
+
+ AnimatorSet fingerDotDisappearanceAnimator =
+ controller.createFingerDotDisappearanceAnimatorSet();
+ fingerDotDisappearanceAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ super.onAnimationStart(animation);
+ controller.animateTaskViewToOverview();
+ }
+ });
+
+ Animator animationPause = controller.createAnimationPause();
+ animationPause.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ controller.resetFakeTaskView();
+ }
+ });
+ ArrayList<Animator> animators = new ArrayList<>();
+
+ animators.add(fingerDotAppearanceAnimator);
+ animators.add(swipeAnimator);
+ animators.add(controller.createAnimationPause());
+ animators.add(fingerDotDisappearanceAnimator);
+ animators.add(animationPause);
+
+ AnimatorSet finalAnimation = new AnimatorSet();
+ finalAnimation.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ super.onAnimationCancel(animation);
+ controller.resetFakeTaskView();
+ }
+ });
+ finalAnimation.playSequentially(animators);
+
+ return finalAnimation;
}
@Override
@@ -45,4 +116,10 @@
Class<? extends TutorialController> getControllerClass() {
return OverviewGestureTutorialController.class;
}
+
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+ releaseFeedbackAnimation();
+ return super.onTouch(view, motionEvent);
+ }
}
diff --git a/quickstep/src/com/android/quickstep/interaction/RootSandboxLayout.java b/quickstep/src/com/android/quickstep/interaction/RootSandboxLayout.java
index db1afc2..ac0c17d 100644
--- a/quickstep/src/com/android/quickstep/interaction/RootSandboxLayout.java
+++ b/quickstep/src/com/android/quickstep/interaction/RootSandboxLayout.java
@@ -16,8 +16,10 @@
package com.android.quickstep.interaction;
import android.content.Context;
+import android.graphics.Insets;
import android.util.AttributeSet;
import android.view.MotionEvent;
+import android.view.WindowInsets;
import android.widget.RelativeLayout;
import androidx.fragment.app.FragmentManager;
@@ -41,4 +43,13 @@
return ((TutorialFragment) FragmentManager.findFragment(this))
.onInterceptTouch(motionEvent);
}
+
+ /**
+ * Returns this view's fullscreen height. This method is agnostic of this view's actual height.
+ */
+ public int getFullscreenHeight() {
+ Insets insets = getRootWindowInsets().getInsets(WindowInsets.Type.systemBars());
+
+ return getHeight() + insets.top + insets.bottom;
+ }
}
diff --git a/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java b/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
index 04b147c..c2c8f61 100644
--- a/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
@@ -25,6 +25,7 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
+import android.animation.ValueAnimator;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Outline;
@@ -32,7 +33,6 @@
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Build;
-import android.util.DisplayMetrics;
import android.view.SurfaceControl;
import android.view.View;
import android.view.ViewOutlineProvider;
@@ -63,23 +63,24 @@
private static final int FAKE_PREVIOUS_TASK_MARGIN = Utilities.dpToPx(12);
+ private static final long HOME_SWIPE_ANIMATION_DURATION_MILLIS = 625;
+ private static final long OVERVIEW_SWIPE_ANIMATION_DURATION_MILLIS = 1000;
+
final ViewSwipeUpAnimation mTaskViewSwipeUpAnimation;
private float mFakeTaskViewRadius;
- private Rect mFakeTaskViewRect = new Rect();
+ private final Rect mFakeTaskViewRect = new Rect();
RunningWindowAnim mRunningWindowAnim;
private boolean mShowTasks = false;
private boolean mShowPreviousTasks = false;
- private AnimatorListenerAdapter mResetTaskView = new AnimatorListenerAdapter() {
+ private final AnimatorListenerAdapter mResetTaskView = new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mFakeHotseatView.setVisibility(View.INVISIBLE);
mFakeIconView.setVisibility(View.INVISIBLE);
if (mTutorialFragment.getActivity() != null) {
- DisplayMetrics displayMetrics =
- mTutorialFragment.getResources().getDisplayMetrics();
- int height = displayMetrics.heightPixels;
- int width = displayMetrics.widthPixels;
+ int height = mTutorialFragment.getRootView().getFullscreenHeight();
+ int width = mTutorialFragment.getRootView().getWidth();
mFakeTaskViewRect.set(0, 0, width, height);
}
mFakeTaskViewRadius = 0;
@@ -108,9 +109,8 @@
.copy(mContext);
mTaskViewSwipeUpAnimation.initDp(dp);
- DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
- int height = displayMetrics.heightPixels;
- int width = displayMetrics.widthPixels;
+ int height = mTutorialFragment.getRootView().getFullscreenHeight();
+ int width = mTutorialFragment.getRootView().getWidth();
mFakeTaskViewRect.set(0, 0, width, height);
mFakeTaskViewRadius = 0;
@@ -138,7 +138,6 @@
/** Fades the task view, optionally after animating to a fake Overview. */
void fadeOutFakeTaskView(boolean toOverviewFirst, boolean reset,
@Nullable Runnable onEndRunnable) {
- hideFeedback(true);
cancelRunningAnimation();
PendingAnimation anim = new PendingAnimation(300);
if (toOverviewFirst) {
@@ -184,6 +183,7 @@
}
void resetFakeTaskView() {
+ mFakeTaskView.setVisibility(View.VISIBLE);
PendingAnimation anim = new PendingAnimation(300);
anim.setFloat(mTaskViewSwipeUpAnimation
.getCurrentShift(), AnimatedFloat.VALUE, 0, ACCEL);
@@ -195,7 +195,6 @@
}
void animateFakeTaskViewHome(PointF finalVelocity, @Nullable Runnable onEndRunnable) {
- hideFeedback(true);
cancelRunningAnimation();
mFakePreviousTaskView.setVisibility(View.INVISIBLE);
mFakeHotseatView.setVisibility(View.VISIBLE);
@@ -218,9 +217,6 @@
if (mGestureCompleted) {
return;
}
- if (displacement != null) {
- hideFeedback(true);
- }
if (mTutorialType == HOME_NAVIGATION_COMPLETE
|| mTutorialType == OVERVIEW_NAVIGATION_COMPLETE) {
mFakeTaskView.setVisibility(View.INVISIBLE);
@@ -336,6 +332,44 @@
}
}
+ protected Animator createFingerDotHomeSwipeAnimator(float fingerDotStartTranslationY) {
+ Animator homeSwipeAnimator = createFingerDotSwipeUpAnimator(fingerDotStartTranslationY)
+ .setDuration(HOME_SWIPE_ANIMATION_DURATION_MILLIS);
+
+ homeSwipeAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ animateFakeTaskViewHome(
+ new PointF(
+ 0f,
+ fingerDotStartTranslationY / HOME_SWIPE_ANIMATION_DURATION_MILLIS),
+ null);
+ }
+ });
+
+ return homeSwipeAnimator;
+ }
+
+ protected Animator createFingerDotOverviewSwipeAnimator(float fingerDotStartTranslationY) {
+ return createFingerDotSwipeUpAnimator(fingerDotStartTranslationY)
+ .setDuration(OVERVIEW_SWIPE_ANIMATION_DURATION_MILLIS);
+ }
+
+
+ private Animator createFingerDotSwipeUpAnimator(float fingerDotStartTranslationY) {
+ ValueAnimator swipeAnimator = ValueAnimator.ofFloat(0f, 1f);
+
+ swipeAnimator.addUpdateListener(valueAnimator -> {
+ float gestureProgress =
+ -fingerDotStartTranslationY * valueAnimator.getAnimatedFraction();
+ setNavBarGestureProgress(gestureProgress);
+ mFingerDotView.setTranslationY(fingerDotStartTranslationY + gestureProgress);
+ });
+
+ return swipeAnimator;
+ }
+
private class FakeTransformParams extends TransformParams {
@Override
diff --git a/quickstep/src/com/android/quickstep/interaction/TutorialController.java b/quickstep/src/com/android/quickstep/interaction/TutorialController.java
index 4b4e7e6..77bfc31 100644
--- a/quickstep/src/com/android/quickstep/interaction/TutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/TutorialController.java
@@ -16,25 +16,32 @@
package com.android.quickstep.interaction;
import static android.view.View.GONE;
+import static android.view.View.NO_ID;
+import static android.view.View.inflate;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
import android.content.Context;
import android.content.pm.PackageManager;
-import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
import android.graphics.drawable.RippleDrawable;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Button;
+import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.CallSuper;
import androidx.annotation.DrawableRes;
+import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
@@ -48,18 +55,25 @@
import com.android.quickstep.interaction.EdgeBackGestureHandler.BackGestureAttemptCallback;
import com.android.quickstep.interaction.NavBarGestureHandler.NavBarGestureAttemptCallback;
+import java.util.ArrayList;
+
abstract class TutorialController implements BackGestureAttemptCallback,
NavBarGestureAttemptCallback {
private static final String TAG = "TutorialController";
+ private static final float FINGER_DOT_VISIBLE_ALPHA = 0.6f;
+ private static final float FINGER_DOT_SMALL_SCALE = 0.7f;
+ private static final int FINGER_DOT_ANIMATION_DURATION_MILLIS = 500;
+
private static final String PIXEL_TIPS_APP_PACKAGE_NAME = "com.google.android.apps.tips";
private static final CharSequence DEFAULT_PIXEL_TIPS_APP_NAME = "Pixel Tips";
- private static final int FEEDBACK_ANIMATION_MS = 250;
+ private static final int FEEDBACK_ANIMATION_MS = 133;
private static final int RIPPLE_VISIBLE_MS = 300;
private static final int GESTURE_ANIMATION_DELAY_MS = 1500;
private static final int ADVANCE_TUTORIAL_TIMEOUT_MS = 4000;
+ private static final long GESTURE_ANIMATION_PAUSE_DURATION_MILLIS = 1000;
final TutorialFragment mTutorialFragment;
TutorialType mTutorialType;
@@ -68,17 +82,17 @@
final TextView mCloseButton;
final ViewGroup mFeedbackView;
final TextView mFeedbackTitleView;
- final ImageView mFeedbackVideoView;
- final ImageView mGestureVideoView;
+ final ImageView mEdgeGestureVideoView;
final RelativeLayout mFakeLauncherView;
final ImageView mFakeHotseatView;
final ClipIconView mFakeIconView;
- final View mFakeTaskView;
+ final FrameLayout mFakeTaskView;
final View mFakePreviousTaskView;
final View mRippleView;
final RippleDrawable mRippleDrawable;
final Button mActionButton;
final TutorialStepIndicator mTutorialStepView;
+ final ImageView mFingerDotView;
private final AlertDialog mSkipTutorialDialog;
protected boolean mGestureCompleted = false;
@@ -87,7 +101,8 @@
// views before posting new callbacks.
private final Runnable mTitleViewCallback;
@Nullable private Runnable mFeedbackViewCallback;
- @Nullable private Runnable mFeedbackVideoViewCallback;
+ @Nullable private Runnable mFakeTaskViewCallback;
+ private final Runnable mShowFeedbackRunnable;
TutorialController(TutorialFragment tutorialFragment, TutorialType tutorialType) {
mTutorialFragment = tutorialFragment;
@@ -100,8 +115,7 @@
mFeedbackView = rootView.findViewById(R.id.gesture_tutorial_fragment_feedback_view);
mFeedbackTitleView = mFeedbackView.findViewById(
R.id.gesture_tutorial_fragment_feedback_title);
- mFeedbackVideoView = rootView.findViewById(R.id.gesture_tutorial_feedback_video);
- mGestureVideoView = rootView.findViewById(R.id.gesture_tutorial_gesture_video);
+ mEdgeGestureVideoView = rootView.findViewById(R.id.gesture_tutorial_edge_gesture_video);
mFakeLauncherView = rootView.findViewById(R.id.gesture_tutorial_fake_launcher_view);
mFakeHotseatView = rootView.findViewById(R.id.gesture_tutorial_fake_hotseat_view);
mFakeIconView = rootView.findViewById(R.id.gesture_tutorial_fake_icon_view);
@@ -113,10 +127,34 @@
mActionButton = rootView.findViewById(R.id.gesture_tutorial_fragment_action_button);
mTutorialStepView =
rootView.findViewById(R.id.gesture_tutorial_fragment_feedback_tutorial_step);
+ mFingerDotView = rootView.findViewById(R.id.gesture_tutorial_finger_dot);
mSkipTutorialDialog = createSkipTutorialDialog();
mTitleViewCallback = () -> mFeedbackTitleView.sendAccessibilityEvent(
AccessibilityEvent.TYPE_VIEW_FOCUSED);
+ mShowFeedbackRunnable = () -> {
+ mFeedbackView.setAlpha(0f);
+ mFeedbackView.setScaleX(0.95f);
+ mFeedbackView.setScaleY(0.95f);
+ mFeedbackView.setVisibility(View.VISIBLE);
+ mFeedbackView.animate()
+ .setDuration(FEEDBACK_ANIMATION_MS)
+ .alpha(1f)
+ .scaleX(1f)
+ .scaleY(1f)
+ .withEndAction(() -> {
+ if (mGestureCompleted && !mTutorialFragment.isAtFinalStep()) {
+ if (mFeedbackViewCallback != null) {
+ mFeedbackView.removeCallbacks(mFeedbackViewCallback);
+ }
+ mFeedbackViewCallback = mTutorialFragment::continueTutorial;
+ mFeedbackView.postDelayed(mFeedbackViewCallback,
+ ADVANCE_TUTORIAL_TIMEOUT_MS);
+ }
+ })
+ .start();
+ mFeedbackTitleView.postDelayed(mTitleViewCallback, FEEDBACK_ANIMATION_MS);
+ };
}
private void showSkipTutorialDialog() {
@@ -134,9 +172,9 @@
return R.drawable.default_sandbox_mock_launcher;
}
- @DrawableRes
- protected int getMockAppTaskThumbnailResId(boolean forDarkMode) {
- return R.drawable.default_sandbox_app_task_thumbnail;
+ @LayoutRes
+ protected int getMockAppTaskLayoutResId() {
+ return View.NO_ID;
}
@DrawableRes
@@ -173,17 +211,10 @@
mFeedbackView.setTranslationY(0);
return;
}
- AnimatedVectorDrawable tutorialAnimation = mTutorialFragment.getTutorialAnimation();
- AnimatedVectorDrawable gestureAnimation = mTutorialFragment.getGestureAnimation();
-
- if (tutorialAnimation != null && gestureAnimation != null) {
- TextView title = mFeedbackView.findViewById(
- R.id.gesture_tutorial_fragment_feedback_title);
-
- playFeedbackVideo(tutorialAnimation, gestureAnimation, () -> {
- mFeedbackView.setTranslationY(0);
- title.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
- }, true);
+ Animator gestureAnimation = mTutorialFragment.getGestureAnimation();
+ AnimatedVectorDrawable edgeAnimation = mTutorialFragment.getEdgeAnimation();
+ if (gestureAnimation != null && edgeAnimation != null) {
+ playFeedbackAnimation(gestureAnimation, edgeAnimation, mShowFeedbackRunnable, true);
}
}
@@ -215,8 +246,13 @@
int subtitleResId,
boolean isGestureSuccessful,
boolean useGestureAnimationDelay) {
- mFeedbackTitleView.setText(titleResId);
mFeedbackTitleView.removeCallbacks(mTitleViewCallback);
+ if (mFeedbackViewCallback != null) {
+ mFeedbackView.removeCallbacks(mFeedbackViewCallback);
+ mFeedbackViewCallback = null;
+ }
+
+ mFeedbackTitleView.setText(titleResId);
TextView subtitle =
mFeedbackView.findViewById(R.id.gesture_tutorial_fragment_feedback_subtitle);
subtitle.setText(subtitleResId);
@@ -226,77 +262,68 @@
showActionButton();
}
- if (mFeedbackVideoViewCallback != null) {
- mFeedbackVideoView.removeCallbacks(mFeedbackVideoViewCallback);
- mFeedbackVideoViewCallback = null;
+ if (mFakeTaskViewCallback != null) {
+ mFakeTaskView.removeCallbacks(mFakeTaskViewCallback);
+ mFakeTaskViewCallback = null;
}
}
mGestureCompleted = isGestureSuccessful;
- AnimatedVectorDrawable tutorialAnimation = mTutorialFragment.getTutorialAnimation();
- AnimatedVectorDrawable gestureAnimation = mTutorialFragment.getGestureAnimation();
- if (tutorialAnimation != null && gestureAnimation != null) {
- if (!isGestureSuccessful) {
- playFeedbackVideo(tutorialAnimation, gestureAnimation, () -> {
- mFeedbackView.setTranslationY(
- -mFeedbackView.getHeight() - mFeedbackView.getTop());
- mFeedbackView.setVisibility(View.VISIBLE);
- mFeedbackView.animate()
- .setDuration(FEEDBACK_ANIMATION_MS)
- .translationY(0)
- .start();
- mFeedbackTitleView.postDelayed(mTitleViewCallback, FEEDBACK_ANIMATION_MS);
- }, useGestureAnimationDelay);
- return;
- } else {
- mTutorialFragment.releaseFeedbackVideoView();
- }
+ Animator gestureAnimation = mTutorialFragment.getGestureAnimation();
+ AnimatedVectorDrawable edgeAnimation = mTutorialFragment.getEdgeAnimation();
+ if (!isGestureSuccessful && gestureAnimation != null && edgeAnimation != null) {
+ playFeedbackAnimation(
+ gestureAnimation,
+ edgeAnimation,
+ mShowFeedbackRunnable,
+ useGestureAnimationDelay);
+ return;
+ } else {
+ mTutorialFragment.releaseFeedbackAnimation();
}
- mFeedbackView.setTranslationY(-mFeedbackView.getHeight() - mFeedbackView.getTop());
- mFeedbackView.setVisibility(View.VISIBLE);
- mFeedbackView.animate()
- .setDuration(FEEDBACK_ANIMATION_MS)
- .translationY(0)
- .withEndAction(() -> {
- if (isGestureSuccessful && !mTutorialFragment.isAtFinalStep()) {
- if (mFeedbackViewCallback != null) {
- mFeedbackView.removeCallbacks(mFeedbackViewCallback);
- }
- mFeedbackViewCallback = mTutorialFragment::continueTutorial;
- mFeedbackView.postDelayed(mFeedbackViewCallback,
- ADVANCE_TUTORIAL_TIMEOUT_MS);
- }
- })
- .start();
- mFeedbackTitleView.postDelayed(mTitleViewCallback, FEEDBACK_ANIMATION_MS);
+ mFeedbackViewCallback = mShowFeedbackRunnable;
+
+ mFeedbackView.post(mFeedbackViewCallback);
}
- void hideFeedback(boolean releaseFeedbackVideo) {
+ void hideFeedback() {
+ cancelQueuedGestureAnimation();
mFeedbackView.clearAnimation();
mFeedbackView.setVisibility(View.INVISIBLE);
- if (releaseFeedbackVideo) {
- mTutorialFragment.releaseFeedbackVideoView();
- }
}
- private void playFeedbackVideo(
- @NonNull AnimatedVectorDrawable tutorialAnimation,
- @NonNull AnimatedVectorDrawable gestureAnimation,
+ void cancelQueuedGestureAnimation() {
+ if (mFeedbackViewCallback != null) {
+ mFeedbackView.removeCallbacks(mFeedbackViewCallback);
+ mFeedbackViewCallback = null;
+ }
+ if (mFakeTaskViewCallback != null) {
+ mFakeTaskView.removeCallbacks(mFakeTaskViewCallback);
+ mFakeTaskViewCallback = null;
+ }
+ mFeedbackTitleView.removeCallbacks(mTitleViewCallback);
+ }
+
+ private void playFeedbackAnimation(
+ @NonNull Animator gestureAnimation,
+ @NonNull AnimatedVectorDrawable edgeAnimation,
@NonNull Runnable onStartRunnable,
boolean useGestureAnimationDelay) {
- if (tutorialAnimation.isRunning()) {
- tutorialAnimation.reset();
+ if (gestureAnimation.isRunning()) {
+ gestureAnimation.cancel();
}
- tutorialAnimation.registerAnimationCallback(new Animatable2.AnimationCallback() {
-
+ if (edgeAnimation.isRunning()) {
+ edgeAnimation.reset();
+ }
+ gestureAnimation.addListener(new AnimatorListenerAdapter() {
@Override
- public void onAnimationStart(Drawable drawable) {
- super.onAnimationStart(drawable);
+ public void onAnimationStart(Animator animation) {
+ super.onAnimationStart(animation);
- mGestureVideoView.setVisibility(GONE);
- if (gestureAnimation.isRunning()) {
- gestureAnimation.stop();
+ mEdgeGestureVideoView.setVisibility(GONE);
+ if (edgeAnimation.isRunning()) {
+ edgeAnimation.stop();
}
if (!useGestureAnimationDelay) {
@@ -305,37 +332,25 @@
}
@Override
- public void onAnimationEnd(Drawable drawable) {
- super.onAnimationEnd(drawable);
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
- mGestureVideoView.setVisibility(View.VISIBLE);
- gestureAnimation.start();
+ mEdgeGestureVideoView.setVisibility(View.VISIBLE);
+ edgeAnimation.start();
- tutorialAnimation.unregisterAnimationCallback(this);
+ gestureAnimation.removeListener(this);
}
});
- if (mFeedbackViewCallback != null) {
- mFeedbackVideoView.removeCallbacks(mFeedbackViewCallback);
- mFeedbackViewCallback = null;
- }
- if (mFeedbackVideoViewCallback != null) {
- mFeedbackVideoView.removeCallbacks(mFeedbackVideoViewCallback);
- mFeedbackVideoViewCallback = null;
- }
+ cancelQueuedGestureAnimation();
if (useGestureAnimationDelay) {
mFeedbackViewCallback = onStartRunnable;
- mFeedbackVideoViewCallback = () -> {
- mFeedbackVideoView.setVisibility(View.VISIBLE);
- tutorialAnimation.start();
- };
+ mFakeTaskViewCallback = gestureAnimation::start;
- mFeedbackVideoView.setVisibility(View.GONE);
mFeedbackView.post(mFeedbackViewCallback);
- mFeedbackVideoView.postDelayed(mFeedbackVideoViewCallback, GESTURE_ANIMATION_DELAY_MS);
+ mFakeTaskView.postDelayed(mFakeTaskViewCallback, GESTURE_ANIMATION_DELAY_MS);
} else {
- mFeedbackVideoView.setVisibility(View.VISIBLE);
- tutorialAnimation.start();
+ gestureAnimation.start();
}
}
@@ -360,7 +375,7 @@
@CallSuper
void transitToController() {
- hideFeedback(false);
+ hideFeedback();
hideActionButton();
updateSubtext();
updateDrawables();
@@ -395,6 +410,17 @@
mActionButton.setOnClickListener(this::onActionButtonClicked);
}
+ void updateFakeAppTaskViewLayout(@LayoutRes int mockAppTaskLayoutResId) {
+ mFakeTaskView.removeAllViews();
+ if (mockAppTaskLayoutResId != NO_ID) {
+ mFakeTaskView.addView(
+ inflate(mContext, mockAppTaskLayoutResId, null),
+ new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT));
+ }
+ }
+
private void updateSubtext() {
mTutorialStepView.setTutorialProgress(
mTutorialFragment.getCurrentStep(), mTutorialFragment.getNumSteps());
@@ -404,15 +430,12 @@
if (mContext != null) {
mTutorialFragment.getRootView().setBackground(AppCompatResources.getDrawable(
mContext, getMockWallpaperResId()));
- mTutorialFragment.updateFeedbackVideo();
+ mTutorialFragment.updateFeedbackAnimation();
mFakeLauncherView.setBackgroundColor(
- mContext.getColor(Utilities.isDarkTheme(mContext)
- ? R.color.fake_wallpaper_color_dark_mode
- : R.color.fake_wallpaper_color_light_mode));
+ mContext.getColor(R.color.gesture_tutorial_fake_wallpaper_color));
mFakeHotseatView.setImageDrawable(AppCompatResources.getDrawable(
mContext, getMockHotseatResId()));
- mFakeTaskView.setBackground(AppCompatResources.getDrawable(
- mContext, getMockAppTaskThumbnailResId(Utilities.isDarkTheme(mContext))));
+ updateFakeAppTaskViewLayout(getMockAppTaskLayoutResId());
mFakeTaskView.animate().alpha(1).setListener(
AnimatorListeners.forSuccessCallback(() -> mFakeTaskView.animate().cancel()));
mFakePreviousTaskView.setBackground(AppCompatResources.getDrawable(
@@ -485,6 +508,52 @@
return null;
}
+ protected AnimatorSet createFingerDotAppearanceAnimatorSet() {
+ ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(
+ mFingerDotView, View.ALPHA, 0f, FINGER_DOT_VISIBLE_ALPHA);
+ ObjectAnimator yScaleAnimator = ObjectAnimator.ofFloat(
+ mFingerDotView, View.SCALE_Y, FINGER_DOT_SMALL_SCALE, 1f);
+ ObjectAnimator xScaleAnimator = ObjectAnimator.ofFloat(
+ mFingerDotView, View.SCALE_X, FINGER_DOT_SMALL_SCALE, 1f);
+ ArrayList<Animator> animators = new ArrayList<>();
+
+ animators.add(alphaAnimator);
+ animators.add(xScaleAnimator);
+ animators.add(yScaleAnimator);
+
+ AnimatorSet appearanceAnimatorSet = new AnimatorSet();
+
+ appearanceAnimatorSet.playTogether(animators);
+ appearanceAnimatorSet.setDuration(FINGER_DOT_ANIMATION_DURATION_MILLIS);
+
+ return appearanceAnimatorSet;
+ }
+
+ protected AnimatorSet createFingerDotDisappearanceAnimatorSet() {
+ ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(
+ mFingerDotView, View.ALPHA, FINGER_DOT_VISIBLE_ALPHA, 0f);
+ ObjectAnimator yScaleAnimator = ObjectAnimator.ofFloat(
+ mFingerDotView, View.SCALE_Y, 1f, FINGER_DOT_SMALL_SCALE);
+ ObjectAnimator xScaleAnimator = ObjectAnimator.ofFloat(
+ mFingerDotView, View.SCALE_X, 1f, FINGER_DOT_SMALL_SCALE);
+ ArrayList<Animator> animators = new ArrayList<>();
+
+ animators.add(alphaAnimator);
+ animators.add(xScaleAnimator);
+ animators.add(yScaleAnimator);
+
+ AnimatorSet appearanceAnimatorSet = new AnimatorSet();
+
+ appearanceAnimatorSet.playTogether(animators);
+ appearanceAnimatorSet.setDuration(FINGER_DOT_ANIMATION_DURATION_MILLIS);
+
+ return appearanceAnimatorSet;
+ }
+
+ protected Animator createAnimationPause() {
+ return ValueAnimator.ofFloat(0f, 1f).setDuration(GESTURE_ANIMATION_PAUSE_DURATION_MILLIS);
+ }
+
/** Denotes the type of the tutorial. */
enum TutorialType {
BACK_NAVIGATION,
diff --git a/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java
index 7637450..52ec9b3 100644
--- a/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java
@@ -15,6 +15,8 @@
*/
package com.android.quickstep.interaction;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
@@ -29,6 +31,7 @@
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
import android.view.WindowInsets;
import android.widget.ImageView;
@@ -38,7 +41,6 @@
import androidx.fragment.app.FragmentActivity;
import com.android.launcher3.R;
-import com.android.launcher3.Utilities;
import com.android.quickstep.interaction.TutorialController.TutorialType;
abstract class TutorialFragment extends Fragment implements OnTouchListener {
@@ -49,13 +51,14 @@
TutorialType mTutorialType;
@Nullable TutorialController mTutorialController = null;
RootSandboxLayout mRootView;
+ View mFingerDotView;
+ View mFakePreviousTaskView;
EdgeBackGestureHandler mEdgeBackGestureHandler;
NavBarGestureHandler mNavBarGestureHandler;
- private ImageView mFeedbackVideoView;
- private ImageView mGestureVideoView;
+ private ImageView mEdgeGestureVideoView;
- @Nullable private AnimatedVectorDrawable mTutorialAnimation = null;
- @Nullable private AnimatedVectorDrawable mGestureAnimation = null;
+ @Nullable private Animator mGestureAnimation = null;
+ @Nullable private AnimatedVectorDrawable mEdgeAnimation = null;
private boolean mIntroductionShown = false;
private boolean mFragmentStopped = false;
@@ -96,24 +99,26 @@
return null;
}
- @Nullable Integer getFeedbackVideoResId(boolean forDarkMode) {
- return null;
- }
-
- @Nullable Integer getGestureVideoResId() {
+ @Nullable Integer getEdgeAnimationResId() {
return null;
}
@Nullable
- AnimatedVectorDrawable getTutorialAnimation() {
- return mTutorialAnimation;
- }
-
- @Nullable
- AnimatedVectorDrawable getGestureAnimation() {
+ Animator getGestureAnimation() {
return mGestureAnimation;
}
+ @Nullable
+ AnimatedVectorDrawable getEdgeAnimation() {
+ return mEdgeAnimation;
+ }
+
+
+ @Nullable
+ protected Animator createGestureAnimation() {
+ return null;
+ }
+
abstract TutorialController createController(TutorialType type);
abstract Class<? extends TutorialController> getControllerClass();
@@ -147,21 +152,22 @@
return insets;
});
mRootView.setOnTouchListener(this);
- mFeedbackVideoView = mRootView.findViewById(R.id.gesture_tutorial_feedback_video);
- mGestureVideoView = mRootView.findViewById(R.id.gesture_tutorial_gesture_video);
+ mEdgeGestureVideoView = mRootView.findViewById(R.id.gesture_tutorial_edge_gesture_video);
+ mFingerDotView = mRootView.findViewById(R.id.gesture_tutorial_finger_dot);
+ mFakePreviousTaskView = mRootView.findViewById(
+ R.id.gesture_tutorial_fake_previous_task_view);
return mRootView;
}
@Override
public void onStop() {
super.onStop();
- releaseFeedbackVideoView();
- releaseGestureVideoView();
+ releaseFeedbackAnimation();
mFragmentStopped = true;
}
void initializeFeedbackVideoView() {
- if (!updateFeedbackVideo()) {
+ if (!updateFeedbackAnimation()) {
return;
}
@@ -176,87 +182,90 @@
}
}
- boolean updateFeedbackVideo() {
- if (getContext() == null) {
+ boolean updateFeedbackAnimation() {
+ if (!updateEdgeAnimation()) {
return false;
}
- Integer feedbackVideoResId = getFeedbackVideoResId(Utilities.isDarkTheme(getContext()));
-
- if (feedbackVideoResId == null || !updateGestureVideo()) {
- return false;
- }
- mTutorialAnimation = (AnimatedVectorDrawable) getContext().getDrawable(feedbackVideoResId);
-
- if (mTutorialAnimation != null) {
- mTutorialAnimation.registerAnimationCallback(new Animatable2.AnimationCallback() {
-
- @Override
- public void onAnimationStart(Drawable drawable) {
- super.onAnimationStart(drawable);
-
- mFeedbackVideoView.setVisibility(View.VISIBLE);
- }
-
- @Override
- public void onAnimationEnd(Drawable drawable) {
- super.onAnimationEnd(drawable);
-
- releaseFeedbackVideoView();
- }
- });
- }
- mFeedbackVideoView.setImageDrawable(mTutorialAnimation);
-
- return true;
- }
-
- boolean updateGestureVideo() {
- Integer gestureVideoResId = getGestureVideoResId();
- if (gestureVideoResId == null || getContext() == null) {
- return false;
- }
- mGestureAnimation = (AnimatedVectorDrawable) getContext().getDrawable(gestureVideoResId);
+ mGestureAnimation = createGestureAnimation();
if (mGestureAnimation != null) {
- mGestureAnimation.registerAnimationCallback(new Animatable2.AnimationCallback() {
+ mGestureAnimation.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ super.onAnimationStart(animation);
+ mFingerDotView.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ super.onAnimationCancel(animation);
+ mFingerDotView.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ mFingerDotView.setVisibility(View.GONE);
+ }
+ });
+ }
+
+ return mGestureAnimation != null;
+ }
+
+ boolean updateEdgeAnimation() {
+ Integer edgeAnimationResId = getEdgeAnimationResId();
+ if (edgeAnimationResId == null || getContext() == null) {
+ return false;
+ }
+ mEdgeAnimation = (AnimatedVectorDrawable) getContext().getDrawable(edgeAnimationResId);
+
+ if (mEdgeAnimation != null) {
+ mEdgeAnimation.registerAnimationCallback(new Animatable2.AnimationCallback() {
@Override
public void onAnimationEnd(Drawable drawable) {
super.onAnimationEnd(drawable);
- mGestureAnimation.start();
+ mEdgeAnimation.start();
}
});
}
- mGestureVideoView.setImageDrawable(mGestureAnimation);
+ mEdgeGestureVideoView.setImageDrawable(mEdgeAnimation);
- return true;
+ return mEdgeAnimation != null;
}
- void releaseFeedbackVideoView() {
- if (mTutorialAnimation != null && mTutorialAnimation.isRunning()) {
- mTutorialAnimation.stop();
+ void releaseFeedbackAnimation() {
+ if (mTutorialController != null) {
+ mTutorialController.cancelQueuedGestureAnimation();
}
-
- mFeedbackVideoView.setVisibility(View.GONE);
- }
-
- void releaseGestureVideoView() {
if (mGestureAnimation != null && mGestureAnimation.isRunning()) {
- mGestureAnimation.stop();
+ mGestureAnimation.cancel();
+ }
+ if (mEdgeAnimation != null && mEdgeAnimation.isRunning()) {
+ mEdgeAnimation.stop();
}
- mGestureVideoView.setVisibility(View.GONE);
+ mEdgeGestureVideoView.setVisibility(View.GONE);
}
@Override
public void onResume() {
super.onResume();
+ releaseFeedbackAnimation();
if (mFragmentStopped && mTutorialController != null) {
mTutorialController.showFeedback();
mFragmentStopped = false;
} else {
- changeController(mTutorialType);
+ mRootView.getViewTreeObserver().addOnGlobalLayoutListener(
+ new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ changeController(mTutorialType);
+ mRootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+ }
+ });
}
}
@@ -292,6 +301,7 @@
mEdgeBackGestureHandler.registerBackGestureAttemptCallback(mTutorialController);
mNavBarGestureHandler.registerNavBarGestureAttemptCallback(mTutorialController);
mTutorialType = tutorialType;
+
initializeFeedbackVideoView();
}
diff --git a/quickstep/robolectric_tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java b/quickstep/tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java
similarity index 65%
rename from quickstep/robolectric_tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java
rename to quickstep/tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java
index f82fbcc..c1b3beb 100644
--- a/quickstep/robolectric_tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java
+++ b/quickstep/tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java
@@ -15,24 +15,31 @@
*/
package com.android.launcher3.model;
+import static android.os.Process.myUserHandle;
+
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_WIDGETS_PREDICTION;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
+import static com.android.launcher3.util.WidgetUtils.createAppWidgetProviderInfo;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
-import static org.robolectric.Shadows.shadowOf;
+import static org.mockito.Mockito.doReturn;
import android.app.prediction.AppTarget;
import android.app.prediction.AppTargetId;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ComponentName;
-import android.content.Context;
-import android.os.Process;
import android.os.UserHandle;
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.config.FeatureFlags;
@@ -40,38 +47,34 @@
import com.android.launcher3.icons.IconCache;
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
import com.android.launcher3.model.QuickstepModelDelegate.PredictorState;
-import com.android.launcher3.shadows.ShadowDeviceFlag;
import com.android.launcher3.util.LauncherModelHelper;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
import com.android.launcher3.widget.PendingAddWidgetInfo;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.shadow.api.Shadow;
-import org.robolectric.shadows.ShadowAppWidgetManager;
-import org.robolectric.shadows.ShadowPackageManager;
-import org.robolectric.util.ReflectionHelpers;
+import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
-@RunWith(RobolectricTestRunner.class)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public final class WidgetsPredicationUpdateTaskTest {
- private AppWidgetProviderInfo mApp1Provider1 = new AppWidgetProviderInfo();
- private AppWidgetProviderInfo mApp1Provider2 = new AppWidgetProviderInfo();
- private AppWidgetProviderInfo mApp2Provider1 = new AppWidgetProviderInfo();
- private AppWidgetProviderInfo mApp4Provider1 = new AppWidgetProviderInfo();
- private AppWidgetProviderInfo mApp4Provider2 = new AppWidgetProviderInfo();
- private AppWidgetProviderInfo mApp5Provider1 = new AppWidgetProviderInfo();
+ private AppWidgetProviderInfo mApp1Provider1;
+ private AppWidgetProviderInfo mApp1Provider2;
+ private AppWidgetProviderInfo mApp2Provider1;
+ private AppWidgetProviderInfo mApp4Provider1;
+ private AppWidgetProviderInfo mApp4Provider2;
+ private AppWidgetProviderInfo mApp5Provider1;
+ private List<AppWidgetProviderInfo> allWidgets;
private FakeBgDataModelCallback mCallback = new FakeBgDataModelCallback();
- private Context mContext;
private LauncherModelHelper mModelHelper;
private UserHandle mUserHandle;
@@ -80,54 +83,56 @@
@Before
public void setup() throws Exception {
+ mModelHelper = new LauncherModelHelper();
MockitoAnnotations.initMocks(this);
doAnswer(invocation -> {
ComponentWithLabel componentWithLabel = invocation.getArgument(0);
return componentWithLabel.getComponent().getShortClassName();
}).when(mIconCache).getTitleNoCache(any());
- mContext = RuntimeEnvironment.application;
- mModelHelper = new LauncherModelHelper();
- mUserHandle = Process.myUserHandle();
+ mUserHandle = myUserHandle();
+ mApp1Provider1 = createAppWidgetProviderInfo(
+ ComponentName.createRelative("app1", "provider1"));
+ mApp1Provider2 = createAppWidgetProviderInfo(
+ ComponentName.createRelative("app1", "provider2"));
+ mApp2Provider1 = createAppWidgetProviderInfo(
+ ComponentName.createRelative("app2", "provider1"));
+ mApp4Provider1 = createAppWidgetProviderInfo(
+ ComponentName.createRelative("app4", "provider1"));
+ mApp4Provider2 = createAppWidgetProviderInfo(
+ ComponentName.createRelative("app4", ".provider2"));
+ mApp5Provider1 = createAppWidgetProviderInfo(
+ ComponentName.createRelative("app5", "provider1"));
+ allWidgets = Arrays.asList(mApp1Provider1, mApp1Provider2, mApp2Provider1,
+ mApp4Provider1, mApp4Provider2, mApp5Provider1);
+
+ AppWidgetManager manager = mModelHelper.sandboxContext.spyService(AppWidgetManager.class);
+ doReturn(allWidgets).when(manager).getInstalledProviders();
+ doReturn(allWidgets).when(manager).getInstalledProvidersForProfile(eq(myUserHandle()));
+ doAnswer(i -> {
+ String pkg = i.getArgument(0);
+ Log.e("Hello", "Getting v " + pkg);
+ return TextUtils.isEmpty(pkg) ? allWidgets : allWidgets.stream()
+ .filter(a -> pkg.equals(a.provider.getPackageName()))
+ .collect(Collectors.toList());
+ }).when(manager).getInstalledProvidersForPackage(any(), eq(myUserHandle()));
+
// 2 widgets, app4/provider1 & app5/provider1, have already been added to the workspace.
- mModelHelper.initializeData("/widgets_predication_update_task_data.txt");
+ mModelHelper.initializeData("widgets_predication_update_task_data");
- ShadowPackageManager packageManager = shadowOf(mContext.getPackageManager());
- mApp1Provider1.provider = ComponentName.createRelative("app1", "provider1");
- ReflectionHelpers.setField(mApp1Provider1, "providerInfo",
- packageManager.addReceiverIfNotPresent(mApp1Provider1.provider));
- mApp1Provider2.provider = ComponentName.createRelative("app1", "provider2");
- ReflectionHelpers.setField(mApp1Provider2, "providerInfo",
- packageManager.addReceiverIfNotPresent(mApp1Provider2.provider));
- mApp2Provider1.provider = ComponentName.createRelative("app2", "provider1");
- ReflectionHelpers.setField(mApp2Provider1, "providerInfo",
- packageManager.addReceiverIfNotPresent(mApp2Provider1.provider));
- mApp4Provider1.provider = ComponentName.createRelative("app4", "provider1");
- ReflectionHelpers.setField(mApp4Provider1, "providerInfo",
- packageManager.addReceiverIfNotPresent(mApp4Provider1.provider));
- mApp4Provider2.provider = ComponentName.createRelative("app4", ".provider2");
- ReflectionHelpers.setField(mApp4Provider2, "providerInfo",
- packageManager.addReceiverIfNotPresent(mApp4Provider2.provider));
- mApp5Provider1.provider = ComponentName.createRelative("app5", "provider1");
- ReflectionHelpers.setField(mApp5Provider1, "providerInfo",
- packageManager.addReceiverIfNotPresent(mApp5Provider1.provider));
-
- ShadowAppWidgetManager shadowAppWidgetManager =
- shadowOf(mContext.getSystemService(AppWidgetManager.class));
- shadowAppWidgetManager.addInstalledProvider(mApp1Provider1);
- shadowAppWidgetManager.addInstalledProvider(mApp1Provider2);
- shadowAppWidgetManager.addInstalledProvider(mApp2Provider1);
- shadowAppWidgetManager.addInstalledProvider(mApp4Provider1);
- shadowAppWidgetManager.addInstalledProvider(mApp4Provider2);
- shadowAppWidgetManager.addInstalledProvider(mApp5Provider1);
-
- mModelHelper.getModel().addCallbacks(mCallback);
-
+ MAIN_EXECUTOR.submit(() -> mModelHelper.getModel().addCallbacks(mCallback)).get();
MODEL_EXECUTOR.post(() -> mModelHelper.getBgDataModel().widgetsModel.update(
- LauncherAppState.getInstance(mContext), /* packageUser= */ null));
- waitUntilIdle();
+ LauncherAppState.getInstance(mModelHelper.sandboxContext),
+ /* packageUser= */ null));
+
+ MODEL_EXECUTOR.submit(() -> { }).get();
+ MAIN_EXECUTOR.submit(() -> { }).get();
}
+ @After
+ public void tearDown() {
+ mModelHelper.destroy();
+ }
@Test
public void widgetsRecommendationRan_shouldOnlyReturnNotAddedWidgetsInAppPredictionOrder()
@@ -165,9 +170,9 @@
@Test
public void widgetsRecommendationRan_localFilterDisabled_shouldReturnWidgetsInPredicationOrder()
throws Exception {
- ShadowDeviceFlag shadowDeviceFlag = Shadow.extract(
- FeatureFlags.ENABLE_LOCAL_RECOMMENDED_WIDGETS_FILTER);
- shadowDeviceFlag.setValue(false);
+ if (FeatureFlags.ENABLE_LOCAL_RECOMMENDED_WIDGETS_FILTER.get()) {
+ return;
+ }
// WHEN newPredicationTask is executed with 5 predicated widgets.
AppTarget widget1 = new AppTarget(new AppTargetId("app1"), "app1", "provider1",
@@ -203,13 +208,8 @@
assertThat(actual.getUser()).isEqualTo(expected.getProfile());
}
- private void waitUntilIdle() {
- shadowOf(MODEL_EXECUTOR.getLooper()).idle();
- shadowOf(MAIN_EXECUTOR.getLooper()).idle();
- }
-
private WidgetsPredictionUpdateTask newWidgetsPredicationTask(List<AppTarget> appTargets) {
- return new WidgetsPredictionUpdateTask(
+ return new WidgetsPredictionUpdateTask(
new PredictorState(CONTAINER_WIDGETS_PREDICTION, "test_widgets_prediction"),
appTargets);
}
diff --git a/res/drawable/gesture_tutorial_motion_overview_light_mode.xml b/res/drawable/gesture_tutorial_motion_overview_light_mode.xml
deleted file mode 100644
index 75887c9..0000000
--- a/res/drawable/gesture_tutorial_motion_overview_light_mode.xml
+++ /dev/null
@@ -1,1587 +0,0 @@
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:aapt="http://schemas.android.com/aapt">
- <target android:name="_R_G_L_4_G_N_3_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="1050"
- android:pathData="M 206,446C 206,446 206,395 206,395"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="217">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_4_G_N_3_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="1050"
- android:propertyName="scaleX"
- android:startOffset="217"
- android:valueFrom="1"
- android:valueTo="0.6"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="1050"
- android:propertyName="scaleY"
- android:startOffset="217"
- android:valueFrom="1"
- android:valueTo="0.6"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_4_G_N_3_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="3400"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_27_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_26_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_25_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_24_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_23_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_22_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_21_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_20_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_19_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_18_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_17_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_16_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_15_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_14_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_13_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_12_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_11_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_10_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_9_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_8_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_7_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_6_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_5_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_4_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_3_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_2_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_L_0_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:pathData="M 206,395C 206,403.5 206,437.5 206,446"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="2083">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleX"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleX"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleY"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_3_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0"
- android:valueTo="0.6"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_D_0_P_0_G_0_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="167"
- android:propertyName="scaleX"
- android:startOffset="2567"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="167"
- android:propertyName="scaleY"
- android:startOffset="2567"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:pathData="M 206,395C 206,403.5 206,437.5 206,446"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="2083">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleX"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleX"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleY"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_2_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="2567"
- android:valueFrom="0"
- android:valueTo="0.6"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="250"
- android:pathData="M -556.176,-7.307C -556.176,-7.307 -421.176,-7.307 -421.176,-7.307"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="1350">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.272,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="417"
- android:pathData="M -421.176,-7.307C -421.176,-7.307 -429.51,-7.307 -429.51,-7.307"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="1600">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:pathData="M 206,395C 206,403.5 206,437.5 206,446"
- android:propertyName="translateXY"
- android:propertyXName="translateX"
- android:propertyYName="translateY"
- android:startOffset="2083">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleX"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="350"
- android:propertyName="scaleY"
- android:startOffset="2083"
- android:valueFrom="0.6"
- android:valueTo="0.72718"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.34,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleX"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="217"
- android:propertyName="scaleY"
- android:startOffset="2433"
- android:valueFrom="0.72718"
- android:valueTo="0.72"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.51,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- </set>
- </aapt:attr>
- </target>
- <target android:name="_R_G_L_1_G_N_2_T_0">
- <aapt:attr name="android:animation">
- <set android:ordering="together">
- <objectAnimator
- android:duration="0"
- android:propertyName="scaleY"
- android:startOffset="1350"
- android:valueFrom="0"
- android:valueTo="0.6"
- android:valueType="floatType" />
- </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="217"
- android:propertyName="fillAlpha"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="0.75"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.833,0.833 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="1833"
- android:propertyName="fillAlpha"
- android:startOffset="217"
- android:valueFrom="0.75"
- android:valueTo="0.75"
- android:valueType="floatType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.667,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="167"
- android:propertyName="fillAlpha"
- android:startOffset="2050"
- android:valueFrom="0.75"
- android:valueTo="0"
- 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="217"
- android:propertyName="pathData"
- android:startOffset="0"
- android:valueFrom="M0 406 C21.54,406 39,423.46 39,445 C39,466.54 21.54,484 0,484 C-21.54,484 -39,466.54 -39,445 C-39,423.46 -21.54,406 0,406c "
- android:valueTo="M0 395 C27.61,395 50,417.39 50,445 C50,472.61 27.61,495 0,495 C-27.61,495 -50,472.61 -50,445 C-50,417.39 -27.61,395 0,395c "
- android:valueType="pathType">
- <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="1050"
- android:propertyName="pathData"
- android:startOffset="217"
- android:valueFrom="M0 395 C27.61,395 50,417.39 50,445 C50,472.61 27.61,495 0,495 C-27.61,495 -50,472.61 -50,445 C-50,417.39 -27.61,395 0,395c "
- android:valueTo="M0 166 C27.61,166 50,188.39 50,216 C50,243.61 27.61,266 0,266 C-27.61,266 -50,243.61 -50,216 C-50,188.39 -27.61,166 0,166c "
- android:valueType="pathType">
- <aapt:attr name="android:interpolator">
- <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0" />
- </aapt:attr>
- </objectAnimator>
- <objectAnimator
- android:duration="783"
- android:propertyName="pathData"
- android:startOffset="1267"
- android:valueFrom="M0 166 C27.61,166 50,188.39 50,216 C50,243.61 27.61,266 0,266 C-27.61,266 -50,243.61 -50,216 C-50,188.39 -27.61,166 0,166c "
- android:valueTo="M0 166 C27.61,166 50,188.39 50,216 C50,243.61 27.61,266 0,266 C-27.61,266 -50,243.61 -50,216 C-50,188.39 -27.61,166 0,166c "
- android:valueType="pathType">
- <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="167"
- android:propertyName="pathData"
- android:startOffset="2050"
- android:valueFrom="M0 166 C27.61,166 50,188.39 50,216 C50,243.61 27.61,266 0,266 C-27.61,266 -50,243.61 -50,216 C-50,188.39 -27.61,166 0,166c "
- android:valueTo="M0 180 C19.88,180 36,196.12 36,216 C36,235.88 19.88,252 0,252 C-19.88,252 -36,235.88 -36,216 C-36,196.12 -19.88,180 0,180c "
- android:valueType="pathType">
- <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="2750"
- android:propertyName="translateX"
- android:startOffset="0"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType" />
- </set>
- </aapt:attr>
- </target>
- <aapt:attr name="android:drawable">
- <vector
- android:width="412dp"
- android:height="892dp"
- android:viewportHeight="892"
- android:viewportWidth="412">
- <group android:name="_R_G">
- <group
- android:name="_R_G_L_5_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="@color/fake_wallpaper_color_light_mode"
- android:fillType="nonZero"
- android:pathData=" M206 -446 C206,-446 206,446 206,446 C206,446 -206,446 -206,446 C-206,446 -206,-446 -206,-446 C-206,-446 206,-446 206,-446c " />
- </group>
- <group
- android:name="_R_G_L_4_G_N_3_T_0"
- android:scaleX="1"
- android:scaleY="1"
- android:translateX="206"
- android:translateY="446">
- <group
- android:name="_R_G_L_4_G"
- android:translateX="-206"
- android:translateY="-446">
- <group android:name="_R_G_L_4_G_L_0_G">
- <group
- android:name="_R_G_L_4_G_L_0_G_L_27_G"
- android:translateX="206"
- android:translateY="422.5">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_27_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -395.5 C206,-395.5 206,395.5 206,395.5 C206,395.5 -206,395.5 -206,395.5 C-206,395.5 -206,-395.5 -206,-395.5 C-206,-395.5 206,-395.5 206,-395.5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_26_G"
- android:translateX="206"
- android:translateY="496.5">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_26_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -377.5 C206,-377.5 206,377.5 206,377.5 C206,387.43 197.93,395.5 188,395.5 C188,395.5 -188,395.5 -188,395.5 C-197.93,395.5 -206,387.43 -206,377.5 C-206,377.5 -206,-377.5 -206,-377.5 C-206,-387.43 -197.93,-395.5 -188,-395.5 C-188,-395.5 188,-395.5 188,-395.5 C197.93,-395.5 206,-387.43 206,-377.5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_25_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_25_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -23.5 C206,-23.5 206,50.5 206,50.5 C206,50.5 -206,50.5 -206,50.5 C-206,50.5 -206,-23.5 -206,-23.5 C-206,-23.5 206,-23.5 206,-23.5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_24_G"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_24_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -32.5 C206,-32.5 206,32.5 206,32.5 C206,42.43 197.93,50.5 188,50.5 C188,50.5 -188,50.5 -188,50.5 C-197.93,50.5 -206,42.43 -206,32.5 C-206,32.5 -206,-32.5 -206,-32.5 C-206,-42.43 -197.93,-50.5 -188,-50.5 C-188,-50.5 188,-50.5 188,-50.5 C197.93,-50.5 206,-42.43 206,-32.5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_23_G"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_23_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_22_G"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_22_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_21_G"
- android:translateX="148.5"
- android:translateY="148">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_21_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M46.5 -5 C46.5,-5 46.5,5 46.5,5 C46.5,7.21 44.71,9 42.5,9 C42.5,9 -42.5,9 -42.5,9 C-44.71,9 -46.5,7.21 -46.5,5 C-46.5,5 -46.5,-5 -46.5,-5 C-46.5,-7.21 -44.71,-9 -42.5,-9 C-42.5,-9 42.5,-9 42.5,-9 C44.71,-9 46.5,-7.21 46.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_20_G"
- android:translateX="186"
- android:translateY="169">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_20_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M84 -4 C84,-4 84,4 84,4 C84,6.21 82.21,8 80,8 C80,8 -80,8 -80,8 C-82.21,8 -84,6.21 -84,4 C-84,4 -84,-4 -84,-4 C-84,-6.21 -82.21,-8 -80,-8 C-80,-8 80,-8 80,-8 C82.21,-8 84,-6.21 84,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_19_G"
- android:translateX="54"
- android:translateY="245">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_19_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_18_G"
- android:translateX="162"
- android:translateY="236">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_18_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60 -5 C60,-5 60,5 60,5 C60,7.21 58.21,9 56,9 C56,9 -56,9 -56,9 C-58.21,9 -60,7.21 -60,5 C-60,5 -60,-5 -60,-5 C-60,-7.21 -58.21,-9 -56,-9 C-56,-9 56,-9 56,-9 C58.21,-9 60,-7.21 60,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_17_G"
- android:translateX="171.5"
- android:translateY="257">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_17_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M69.5 -4 C69.5,-4 69.5,4 69.5,4 C69.5,6.21 67.71,8 65.5,8 C65.5,8 -65.5,8 -65.5,8 C-67.71,8 -69.5,6.21 -69.5,4 C-69.5,4 -69.5,-4 -69.5,-4 C-69.5,-6.21 -67.71,-8 -65.5,-8 C-65.5,-8 65.5,-8 65.5,-8 C67.71,-8 69.5,-6.21 69.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_16_G"
- android:translateX="54"
- android:translateY="333">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_16_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_15_G"
- android:translateX="158"
- android:translateY="324">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_15_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M56 -5 C56,-5 56,5 56,5 C56,7.21 54.21,9 52,9 C52,9 -52,9 -52,9 C-54.21,9 -56,7.21 -56,5 C-56,5 -56,-5 -56,-5 C-56,-7.21 -54.21,-9 -52,-9 C-52,-9 52,-9 52,-9 C54.21,-9 56,-7.21 56,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_14_G"
- android:translateX="217.5"
- android:translateY="345">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_14_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M115.5 -4 C115.5,-4 115.5,4 115.5,4 C115.5,6.21 113.71,8 111.5,8 C111.5,8 -111.5,8 -111.5,8 C-113.71,8 -115.5,6.21 -115.5,4 C-115.5,4 -115.5,-4 -115.5,-4 C-115.5,-6.21 -113.71,-8 -111.5,-8 C-111.5,-8 111.5,-8 111.5,-8 C113.71,-8 115.5,-6.21 115.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_13_G"
- android:translateX="54"
- android:translateY="421">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_13_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_12_G"
- android:translateX="170"
- android:translateY="412">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_12_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M68 -5 C68,-5 68,5 68,5 C68,7.21 66.21,9 64,9 C64,9 -64,9 -64,9 C-66.21,9 -68,7.21 -68,5 C-68,5 -68,-5 -68,-5 C-68,-7.21 -66.21,-9 -64,-9 C-64,-9 64,-9 64,-9 C66.21,-9 68,-7.21 68,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_11_G"
- android:translateX="198.5"
- android:translateY="433">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_10_G"
- android:translateX="54"
- android:translateY="509">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_9_G"
- android:translateX="135"
- android:translateY="500">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M33 -5 C33,-5 33,5 33,5 C33,7.21 31.21,9 29,9 C29,9 -29,9 -29,9 C-31.21,9 -33,7.21 -33,5 C-33,5 -33,-5 -33,-5 C-33,-7.21 -31.21,-9 -29,-9 C-29,-9 29,-9 29,-9 C31.21,-9 33,-7.21 33,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_8_G"
- android:translateX="185.5"
- android:translateY="521">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M83.5 -4 C83.5,-4 83.5,4 83.5,4 C83.5,6.21 81.71,8 79.5,8 C79.5,8 -79.5,8 -79.5,8 C-81.71,8 -83.5,6.21 -83.5,4 C-83.5,4 -83.5,-4 -83.5,-4 C-83.5,-6.21 -81.71,-8 -79.5,-8 C-79.5,-8 79.5,-8 79.5,-8 C81.71,-8 83.5,-6.21 83.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_7_G"
- android:translateX="54"
- android:translateY="597">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_6_G"
- android:translateX="168.5"
- android:translateY="588">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M66.5 -5 C66.5,-5 66.5,5 66.5,5 C66.5,7.21 64.71,9 62.5,9 C62.5,9 -62.5,9 -62.5,9 C-64.71,9 -66.5,7.21 -66.5,5 C-66.5,5 -66.5,-5 -66.5,-5 C-66.5,-7.21 -64.71,-9 -62.5,-9 C-62.5,-9 62.5,-9 62.5,-9 C64.71,-9 66.5,-7.21 66.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_5_G"
- android:translateX="198.5"
- android:translateY="609">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_4_G"
- android:translateX="54"
- android:translateY="685">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_3_G"
- android:translateX="162.5"
- android:translateY="676">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60.5 -5 C60.5,-5 60.5,5 60.5,5 C60.5,7.21 58.71,9 56.5,9 C56.5,9 -56.5,9 -56.5,9 C-58.71,9 -60.5,7.21 -60.5,5 C-60.5,5 -60.5,-5 -60.5,-5 C-60.5,-7.21 -58.71,-9 -56.5,-9 C-56.5,-9 56.5,-9 56.5,-9 C58.71,-9 60.5,-7.21 60.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_2_G"
- android:translateX="174"
- android:translateY="697">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M72 -4 C72,-4 72,4 72,4 C72,6.21 70.21,8 68,8 C68,8 -68,8 -68,8 C-70.21,8 -72,6.21 -72,4 C-72,4 -72,-4 -72,-4 C-72,-6.21 -70.21,-8 -68,-8 C-68,-8 68,-8 68,-8 C70.21,-8 72,-6.21 72,-4c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_1_G"
- android:translateX="313.5"
- android:translateY="798">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M74.5 0 C74.5,0 74.5,0 74.5,0 C74.5,15.45 61.95,28 46.5,28 C46.5,28 -46.5,28 -46.5,28 C-61.95,28 -74.5,15.45 -74.5,0 C-74.5,0 -74.5,0 -74.5,0 C-74.5,-15.45 -61.95,-28 -46.5,-28 C-46.5,-28 46.5,-28 46.5,-28 C61.95,-28 74.5,-15.45 74.5,0c " />
- </group>
- <group
- android:name="_R_G_L_4_G_L_0_G_L_0_G"
- android:translateX="205.5"
- android:translateY="61">
- <path
- android:name="_R_G_L_4_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#f8f9fa"
- android:fillType="nonZero"
- android:pathData=" M171.5 -14 C171.5,-14 171.5,14 171.5,14 C171.5,16.21 169.71,18 167.5,18 C167.5,18 -167.5,18 -167.5,18 C-169.71,18 -171.5,16.21 -171.5,14 C-171.5,14 -171.5,-14 -171.5,-14 C-171.5,-16.21 -169.71,-18 -167.5,-18 C-167.5,-18 167.5,-18 167.5,-18 C169.71,-18 171.5,-16.21 171.5,-14c " />
- </group>
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_3_G_N_2_T_0"
- android:scaleX="0.6"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="395">
- <group
- android:name="_R_G_L_3_G"
- android:translateX="-206"
- android:translateY="-446">
- <group
- android:name="_R_G_L_3_G_L_0_G"
- android:scaleY="0">
- <group
- android:name="_R_G_L_3_G_L_0_G_L_27_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="422.5">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_27_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -395.5 C206,-395.5 206,395.5 206,395.5 C206,395.5 -206,395.5 -206,395.5 C-206,395.5 -206,-395.5 -206,-395.5 C-206,-395.5 206,-395.5 206,-395.5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_26_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="496.5">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_26_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#dadce0"
- android:fillType="nonZero"
- android:pathData=" M206 -377.5 C206,-377.5 206,377.5 206,377.5 C206,387.43 197.93,395.5 188,395.5 C188,395.5 -188,395.5 -188,395.5 C-197.93,395.5 -206,387.43 -206,377.5 C-206,377.5 -206,-377.5 -206,-377.5 C-206,-387.43 -197.93,-395.5 -188,-395.5 C-188,-395.5 188,-395.5 188,-395.5 C197.93,-395.5 206,-387.43 206,-377.5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_25_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_25_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -23.5 C206,-23.5 206,50.5 206,50.5 C206,50.5 -206,50.5 -206,50.5 C-206,50.5 -206,-23.5 -206,-23.5 C-206,-23.5 206,-23.5 206,-23.5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_24_G"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="50.5">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_24_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#e8eaed"
- android:fillType="nonZero"
- android:pathData=" M206 -32.5 C206,-32.5 206,32.5 206,32.5 C206,42.43 197.93,50.5 188,50.5 C188,50.5 -188,50.5 -188,50.5 C-197.93,50.5 -206,42.43 -206,32.5 C-206,32.5 -206,-32.5 -206,-32.5 C-206,-42.43 -197.93,-50.5 -188,-50.5 C-188,-50.5 188,-50.5 188,-50.5 C197.93,-50.5 206,-42.43 206,-32.5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_23_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_23_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_22_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="157">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_22_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_21_G"
- android:scaleY="0"
- android:translateX="148.5"
- android:translateY="148">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_21_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M46.5 -5 C46.5,-5 46.5,5 46.5,5 C46.5,7.21 44.71,9 42.5,9 C42.5,9 -42.5,9 -42.5,9 C-44.71,9 -46.5,7.21 -46.5,5 C-46.5,5 -46.5,-5 -46.5,-5 C-46.5,-7.21 -44.71,-9 -42.5,-9 C-42.5,-9 42.5,-9 42.5,-9 C44.71,-9 46.5,-7.21 46.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_20_G"
- android:scaleY="0"
- android:translateX="186"
- android:translateY="169">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_20_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M84 -4 C84,-4 84,4 84,4 C84,6.21 82.21,8 80,8 C80,8 -80,8 -80,8 C-82.21,8 -84,6.21 -84,4 C-84,4 -84,-4 -84,-4 C-84,-6.21 -82.21,-8 -80,-8 C-80,-8 80,-8 80,-8 C82.21,-8 84,-6.21 84,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_19_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="245">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_19_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_18_G"
- android:scaleY="0"
- android:translateX="162"
- android:translateY="236">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_18_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60 -5 C60,-5 60,5 60,5 C60,7.21 58.21,9 56,9 C56,9 -56,9 -56,9 C-58.21,9 -60,7.21 -60,5 C-60,5 -60,-5 -60,-5 C-60,-7.21 -58.21,-9 -56,-9 C-56,-9 56,-9 56,-9 C58.21,-9 60,-7.21 60,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_17_G"
- android:scaleY="0"
- android:translateX="171.5"
- android:translateY="257">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_17_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M69.5 -4 C69.5,-4 69.5,4 69.5,4 C69.5,6.21 67.71,8 65.5,8 C65.5,8 -65.5,8 -65.5,8 C-67.71,8 -69.5,6.21 -69.5,4 C-69.5,4 -69.5,-4 -69.5,-4 C-69.5,-6.21 -67.71,-8 -65.5,-8 C-65.5,-8 65.5,-8 65.5,-8 C67.71,-8 69.5,-6.21 69.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_16_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="333">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_16_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_15_G"
- android:scaleY="0"
- android:translateX="158"
- android:translateY="324">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_15_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M56 -5 C56,-5 56,5 56,5 C56,7.21 54.21,9 52,9 C52,9 -52,9 -52,9 C-54.21,9 -56,7.21 -56,5 C-56,5 -56,-5 -56,-5 C-56,-7.21 -54.21,-9 -52,-9 C-52,-9 52,-9 52,-9 C54.21,-9 56,-7.21 56,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_14_G"
- android:scaleY="0"
- android:translateX="217.5"
- android:translateY="345">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_14_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M115.5 -4 C115.5,-4 115.5,4 115.5,4 C115.5,6.21 113.71,8 111.5,8 C111.5,8 -111.5,8 -111.5,8 C-113.71,8 -115.5,6.21 -115.5,4 C-115.5,4 -115.5,-4 -115.5,-4 C-115.5,-6.21 -113.71,-8 -111.5,-8 C-111.5,-8 111.5,-8 111.5,-8 C113.71,-8 115.5,-6.21 115.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_13_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="421">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_13_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_12_G"
- android:scaleY="0"
- android:translateX="170"
- android:translateY="412">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_12_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M68 -5 C68,-5 68,5 68,5 C68,7.21 66.21,9 64,9 C64,9 -64,9 -64,9 C-66.21,9 -68,7.21 -68,5 C-68,5 -68,-5 -68,-5 C-68,-7.21 -66.21,-9 -64,-9 C-64,-9 64,-9 64,-9 C66.21,-9 68,-7.21 68,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_11_G"
- android:scaleY="0"
- android:translateX="198.5"
- android:translateY="433">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_11_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_10_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="509">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_10_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_9_G"
- android:scaleY="0"
- android:translateX="135"
- android:translateY="500">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_9_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M33 -5 C33,-5 33,5 33,5 C33,7.21 31.21,9 29,9 C29,9 -29,9 -29,9 C-31.21,9 -33,7.21 -33,5 C-33,5 -33,-5 -33,-5 C-33,-7.21 -31.21,-9 -29,-9 C-29,-9 29,-9 29,-9 C31.21,-9 33,-7.21 33,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_8_G"
- android:scaleY="0"
- android:translateX="185.5"
- android:translateY="521">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_8_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M83.5 -4 C83.5,-4 83.5,4 83.5,4 C83.5,6.21 81.71,8 79.5,8 C79.5,8 -79.5,8 -79.5,8 C-81.71,8 -83.5,6.21 -83.5,4 C-83.5,4 -83.5,-4 -83.5,-4 C-83.5,-6.21 -81.71,-8 -79.5,-8 C-79.5,-8 79.5,-8 79.5,-8 C81.71,-8 83.5,-6.21 83.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_7_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="597">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_7_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_6_G"
- android:scaleY="0"
- android:translateX="168.5"
- android:translateY="588">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_6_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M66.5 -5 C66.5,-5 66.5,5 66.5,5 C66.5,7.21 64.71,9 62.5,9 C62.5,9 -62.5,9 -62.5,9 C-64.71,9 -66.5,7.21 -66.5,5 C-66.5,5 -66.5,-5 -66.5,-5 C-66.5,-7.21 -64.71,-9 -62.5,-9 C-62.5,-9 62.5,-9 62.5,-9 C64.71,-9 66.5,-7.21 66.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_5_G"
- android:scaleY="0"
- android:translateX="198.5"
- android:translateY="609">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_5_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M96.5 -4 C96.5,-4 96.5,4 96.5,4 C96.5,6.21 94.71,8 92.5,8 C92.5,8 -92.5,8 -92.5,8 C-94.71,8 -96.5,6.21 -96.5,4 C-96.5,4 -96.5,-4 -96.5,-4 C-96.5,-6.21 -94.71,-8 -92.5,-8 C-92.5,-8 92.5,-8 92.5,-8 C94.71,-8 96.5,-6.21 96.5,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_4_G"
- android:scaleY="0"
- android:translateX="54"
- android:translateY="685">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_4_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M28 0 C28,15.46 15.46,28 0,28 C-15.46,28 -28,15.46 -28,0 C-28,-15.46 -15.46,-28 0,-28 C15.46,-28 28,-15.46 28,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_3_G"
- android:scaleY="0"
- android:translateX="162.5"
- android:translateY="676">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_3_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M60.5 -5 C60.5,-5 60.5,5 60.5,5 C60.5,7.21 58.71,9 56.5,9 C56.5,9 -56.5,9 -56.5,9 C-58.71,9 -60.5,7.21 -60.5,5 C-60.5,5 -60.5,-5 -60.5,-5 C-60.5,-7.21 -58.71,-9 -56.5,-9 C-56.5,-9 56.5,-9 56.5,-9 C58.71,-9 60.5,-7.21 60.5,-5c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_2_G"
- android:scaleY="0"
- android:translateX="174"
- android:translateY="697">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M72 -4 C72,-4 72,4 72,4 C72,6.21 70.21,8 68,8 C68,8 -68,8 -68,8 C-70.21,8 -72,6.21 -72,4 C-72,4 -72,-4 -72,-4 C-72,-6.21 -70.21,-8 -68,-8 C-68,-8 68,-8 68,-8 C70.21,-8 72,-6.21 72,-4c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_1_G"
- android:scaleY="0"
- android:translateX="313.5"
- android:translateY="798">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#bdc1c6"
- android:fillType="nonZero"
- android:pathData=" M74.5 0 C74.5,0 74.5,0 74.5,0 C74.5,15.45 61.95,28 46.5,28 C46.5,28 -46.5,28 -46.5,28 C-61.95,28 -74.5,15.45 -74.5,0 C-74.5,0 -74.5,0 -74.5,0 C-74.5,-15.45 -61.95,-28 -46.5,-28 C-46.5,-28 46.5,-28 46.5,-28 C61.95,-28 74.5,-15.45 74.5,0c " />
- </group>
- <group
- android:name="_R_G_L_3_G_L_0_G_L_0_G"
- android:scaleY="0"
- android:translateX="205.5"
- android:translateY="61">
- <path
- android:name="_R_G_L_3_G_L_0_G_L_0_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#f8f9fa"
- android:fillType="nonZero"
- android:pathData=" M171.5 -14 C171.5,-14 171.5,14 171.5,14 C171.5,16.21 169.71,18 167.5,18 C167.5,18 -167.5,18 -167.5,18 C-169.71,18 -171.5,16.21 -171.5,14 C-171.5,14 -171.5,-14 -171.5,-14 C-171.5,-16.21 -169.71,-18 -167.5,-18 C-167.5,-18 167.5,-18 167.5,-18 C169.71,-18 171.5,-16.21 171.5,-14c " />
- </group>
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_2_G_N_2_T_0"
- android:scaleX="0.6"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="395">
- <group
- android:name="_R_G_L_2_G"
- android:scaleX="1.3767699999999998"
- android:scaleY="1.3767699999999998"
- android:translateY="-508.163">
- <group
- android:name="_R_G_L_2_G_D_0_P_0_G_0_T_0"
- android:scaleX="0"
- android:scaleY="0">
- <path
- android:name="_R_G_L_2_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="#9aa0a6"
- android:fillType="nonZero"
- android:pathData=" M0 25 C13.81,25 25,13.81 25,0 C25,-13.81 13.81,-25 0,-25 C-13.81,-25 -25,-13.81 -25,0 C-25,13.81 -13.81,25 0,25c " />
- </group>
- </group>
- </group>
- <group
- android:name="_R_G_L_1_G_N_2_T_0"
- android:scaleX="0.6"
- android:scaleY="0"
- android:translateX="206"
- android:translateY="395">
- <group
- android:name="_R_G_L_1_G"
- android:scaleX="1.39"
- android:scaleY="1.39"
- android:translateX="-556.176"
- android:translateY="-7.307">
- <path
- android:name="_R_G_L_1_G_D_0_P_0"
- android:fillAlpha="1"
- android:fillColor="@color/gesture_tutorial_fake_previous_task_view_color"
- android:fillType="nonZero"
- android:pathData=" M135 -301 C135,-301 135,311 135,311 C135,319.28 128.28,326 120,326 C120,326 -120,326 -120,326 C-128.28,326 -135,319.28 -135,311 C-135,311 -135,-301 -135,-301 C-135,-309.28 -128.28,-316 -120,-316 C-120,-316 120,-316 120,-316 C128.28,-316 135,-309.28 135,-301c " />
- </group>
- </group>
- <group
- android:name="_R_G_L_0_G"
- android:translateX="206"
- android:translateY="446">
- <path
- android:name="_R_G_L_0_G_D_0_P_0"
- android:fillAlpha="0"
- android:fillColor="#84ba69"
- android:fillType="nonZero"
- android:pathData=" M0 406 C21.54,406 39,423.46 39,445 C39,466.54 21.54,484 0,484 C-21.54,484 -39,466.54 -39,445 C-39,423.46 -21.54,406 0,406c " />
- </group>
- </group>
- <group android:name="time_group" />
- </vector>
- </aapt:attr>
-</animated-vector>
\ No newline at end of file
diff --git a/res/values/colors.xml b/res/values/colors.xml
index cc5c5a3..5020127 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -36,15 +36,6 @@
<color name="icon_background">#E0E0E0</color> <!-- Gray 300 -->
- <color name="gesture_tutorial_ripple_color">#A0C2F9</color> <!-- Light Blue -->
- <color name="gesture_tutorial_fake_task_view_color">#6DA1FF</color> <!-- Light Blue -->
- <color name="fake_wallpaper_color_dark_mode">#000000</color> <!-- Black -->
- <color name="fake_wallpaper_color_light_mode">#f9f9f9</color> <!-- White -->
- <!-- Must contrast fake_wallpaper_color_dark_mode and fake_wallpaper_color_light_mode -->
- <color name="gesture_tutorial_fake_previous_task_view_color">#3C4043</color> <!-- Gray -->
- <color name="gesture_tutorial_action_button_label_color">#FF000000</color>
- <color name="gesture_tutorial_primary_color">#B7F29F</color> <!-- Light Green -->
-
<color name="popup_color_primary_light">#FFF</color>
<color name="popup_color_secondary_light">#F1F3F4</color>
<color name="popup_color_tertiary_light">#E0E0E0</color> <!-- Gray 300 -->
diff --git a/robolectric_tests/src/com/android/launcher3/secondarydisplay/SDWorkModeTest.java b/robolectric_tests/src/com/android/launcher3/secondarydisplay/SDWorkModeTest.java
deleted file mode 100644
index e3694ae..0000000
--- a/robolectric_tests/src/com/android/launcher3/secondarydisplay/SDWorkModeTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2020 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.
- */
-package com.android.launcher3.secondarydisplay;
-
-import static com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE;
-import static com.android.launcher3.util.LauncherUIHelper.doLayout;
-import static com.android.launcher3.util.Preconditions.assertNotNull;
-
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertTrue;
-
-import android.content.Context;
-import android.os.UserManager;
-import android.provider.Settings;
-
-import com.android.launcher3.InvariantDeviceProfile;
-import com.android.launcher3.allapps.AllAppsPagedView;
-import com.android.launcher3.allapps.AllAppsRecyclerView;
-import com.android.launcher3.util.LauncherLayoutBuilder;
-import com.android.launcher3.util.LauncherModelHelper;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.Robolectric;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.LooperMode;
-import org.robolectric.annotation.LooperMode.Mode;
-import org.robolectric.shadow.api.Shadow;
-import org.robolectric.shadows.ShadowUserManager;
-
-/**
- * Tests for {@link SecondaryDisplayLauncher} with work profile
- */
-@RunWith(RobolectricTestRunner.class)
-@LooperMode(Mode.PAUSED)
-public class SDWorkModeTest {
-
- private static final int SYSTEM_USER = 0;
- private static final int FLAG_SYSTEM = 0x00000800;
- private static final int WORK_PROFILE_ID = 10;
- private static final int FLAG_PROFILE = 0x00001000;
-
- private Context mTargetContext;
- private InvariantDeviceProfile mIdp;
- private LauncherModelHelper mModelHelper;
-
- @Before
- public void setup() throws Exception {
- mModelHelper = new LauncherModelHelper();
- mTargetContext = RuntimeEnvironment.application;
- mIdp = InvariantDeviceProfile.INSTANCE.get(mTargetContext);
- Settings.Global.putFloat(mTargetContext.getContentResolver(),
- Settings.Global.WINDOW_ANIMATION_SCALE, 0);
-
- mModelHelper.installApp(TEST_PACKAGE);
- }
-
- @Test
- public void testAllAppsList_noWorkProfile() throws Exception {
- SecondaryDisplayLauncher launcher = loadLauncher();
- launcher.showAppDrawer(true);
- doLayout(launcher);
-
- verifyRecyclerViewCount(launcher.getAppsView().getActiveRecyclerView());
- }
-
- @Test
- public void testAllAppsList_workProfile() throws Exception {
- ShadowUserManager sum = Shadow.extract(mTargetContext.getSystemService(UserManager.class));
- sum.addUser(SYSTEM_USER, "me", FLAG_SYSTEM);
- sum.addProfile(SYSTEM_USER, WORK_PROFILE_ID, "work", FLAG_PROFILE);
-
- SecondaryDisplayLauncher launcher = loadLauncher();
- launcher.showAppDrawer(true);
- doLayout(launcher);
-
- AllAppsRecyclerView rv1 = launcher.getAppsView().getActiveRecyclerView();
- verifyRecyclerViewCount(rv1);
-
- assertNotNull(launcher.getAppsView().getWorkModeSwitch());
- assertTrue(launcher.getAppsView().getRecyclerViewContainer() instanceof AllAppsPagedView);
-
- AllAppsPagedView pagedView =
- (AllAppsPagedView) launcher.getAppsView().getRecyclerViewContainer();
- pagedView.snapToPageImmediately(1);
- doLayout(launcher);
-
- AllAppsRecyclerView rv2 = launcher.getAppsView().getActiveRecyclerView();
- verifyRecyclerViewCount(rv2);
- assertNotSame(rv1, rv2);
- }
-
- private SecondaryDisplayLauncher loadLauncher() throws Exception {
- // Install 100 apps
- for (int i = 0; i < 100; i++) {
- mModelHelper.installApp(TEST_PACKAGE + i);
- }
- mModelHelper.setupDefaultLayoutProvider(new LauncherLayoutBuilder()).loadModelSync();
- SecondaryDisplayLauncher launcher =
- Robolectric.buildActivity(SecondaryDisplayLauncher.class).setup().get();
- doLayout(launcher);
- return launcher;
- }
-
- private void verifyRecyclerViewCount(AllAppsRecyclerView rv) {
- int childCount = rv.getChildCount();
- assertTrue(childCount > 0);
- assertTrue(childCount < 100);
- }
-}
diff --git a/robolectric_tests/src/com/android/launcher3/testing/TestActivity.java b/robolectric_tests/src/com/android/launcher3/testing/TestActivity.java
deleted file mode 100644
index 17d0ac1..0000000
--- a/robolectric_tests/src/com/android/launcher3/testing/TestActivity.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2021 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.
- */
-package com.android.launcher3.testing;
-
-import com.android.launcher3.BaseActivity;
-import com.android.launcher3.DeviceProfile;
-import com.android.launcher3.views.ActivityContext;
-import com.android.launcher3.views.BaseDragLayer;
-
-/** An empty activity for {@link android.app.Fragment}s, {@link android.view.View}s testing. */
-public class TestActivity extends BaseActivity implements ActivityContext {
-
- private DeviceProfile mDeviceProfile;
-
- @Override
- public BaseDragLayer getDragLayer() {
- return new BaseDragLayer(this, /* attrs= */ null, /* alphaChannelCount= */ 1) {
- @Override
- public void recreateControllers() {
- // Do nothing.
- }
- };
- }
-
- @Override
- public DeviceProfile getDeviceProfile() {
- return mDeviceProfile;
- }
-
- public void setDeviceProfile(DeviceProfile deviceProfile) {
- mDeviceProfile = deviceProfile;
- }
-}
diff --git a/robolectric_tests/src/com/android/launcher3/util/LauncherUIHelper.java b/robolectric_tests/src/com/android/launcher3/util/LauncherUIHelper.java
deleted file mode 100644
index caad40e..0000000
--- a/robolectric_tests/src/com/android/launcher3/util/LauncherUIHelper.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2020 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.
- */
-package com.android.launcher3.util;
-
-import static android.view.View.MeasureSpec.EXACTLY;
-import static android.view.View.MeasureSpec.makeMeasureSpec;
-
-import static com.android.launcher3.Utilities.createHomeIntent;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ResolveInfo;
-import android.graphics.Point;
-import android.view.View;
-import android.view.WindowManager;
-
-import com.android.launcher3.Launcher;
-
-import org.robolectric.Robolectric;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.android.controller.ActivityController;
-import org.robolectric.shadows.ShadowLooper;
-import org.robolectric.util.ReflectionHelpers;
-
-import java.util.List;
-
-/**
- * Utility class to help manage Launcher UI and related objects for test.
- */
-public class LauncherUIHelper {
-
- /**
- * Returns the class name for the Launcher activity as defined in the manifest
- */
- public static String getLauncherClassName() {
- Context context = RuntimeEnvironment.application;
- Intent homeIntent = createHomeIntent().setPackage(context.getPackageName());
-
- List<ResolveInfo> launchers = context.getPackageManager()
- .queryIntentActivities(homeIntent, 0);
- if (launchers.size() != 1) {
- return null;
- }
- return launchers.get(0).activityInfo.name;
- }
-
- /**
- * Returns an activity controller for Launcher activity defined in the manifest
- */
- public static <T extends Launcher> ActivityController<T> buildLauncher() {
- try {
- Class<T> tClass = (Class<T>) Class.forName(getLauncherClassName());
- return Robolectric.buildActivity(tClass);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Creates and binds a Launcher activity defined in the manifest.
- * Note that the model must be bound before calling this
- */
- public static <T extends Launcher> T buildAndBindLauncher() {
- ActivityController<T> controller = buildLauncher();
-
- T launcher = controller.setup().get();
- doLayout(launcher);
- ViewOnDrawExecutor executor = ReflectionHelpers.getField(launcher, "mPendingExecutor");
- if (executor != null) {
- executor.markCompleted();
- }
- return launcher;
- }
-
- /**
- * Performs a measure and layout pass for the given activity
- */
- public static void doLayout(Activity activity) {
- Point size = new Point();
- RuntimeEnvironment.application.getSystemService(WindowManager.class)
- .getDefaultDisplay().getSize(size);
- View view = activity.getWindow().getDecorView();
- view.measure(makeMeasureSpec(size.x, EXACTLY), makeMeasureSpec(size.y, EXACTLY));
- view.layout(0, 0, size.x, size.y);
- ShadowLooper.idleMainLooper();
- }
-}
diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java
index 702b73a..5080824 100644
--- a/src/com/android/launcher3/LauncherAppState.java
+++ b/src/com/android/launcher3/LauncherAppState.java
@@ -50,7 +50,7 @@
import com.android.launcher3.util.Themes;
import com.android.launcher3.widget.custom.CustomWidgetManager;
-public class LauncherAppState {
+public class LauncherAppState implements SafeCloseable {
public static final String ACTION_FORCE_ROLOAD = "force-reload-launcher";
private static final String KEY_ICON_STATE = "pref_icon_shape_path";
@@ -158,7 +158,8 @@
/**
* Call from Application.onTerminate(), which is not guaranteed to ever be called.
*/
- public void onTerminate() {
+ @Override
+ public void close() {
mModel.destroy();
mContext.getSystemService(LauncherApps.class).unregisterCallback(mModel);
CustomWidgetManager.INSTANCE.get(mContext).setWidgetRefreshCallback(null);
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 7b6a5bf..9ebec0a 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -96,9 +96,10 @@
// our monitoring of the package manager provides all updates and we never
// need to do a requery. This is only ever touched from the loader thread.
private boolean mModelLoaded;
+ private boolean mModelDestroyed = false;
public boolean isModelLoaded() {
synchronized (mLock) {
- return mModelLoaded && mLoaderTask == null;
+ return mModelLoaded && mLoaderTask == null && !mModelDestroyed;
}
}
@@ -245,6 +246,7 @@
* Called when the model is destroyed
*/
public void destroy() {
+ mModelDestroyed = true;
MODEL_EXECUTOR.execute(mModelDelegate::destroy);
}
@@ -557,6 +559,9 @@
}
public void enqueueModelUpdateTask(ModelUpdateTask task) {
+ if (mModelDestroyed) {
+ return;
+ }
task.init(mApp, this, mBgDataModel, mBgAllAppsList, MAIN_EXECUTOR);
MODEL_EXECUTOR.execute(task);
}
diff --git a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java
index a96de31..1c8954d 100644
--- a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java
+++ b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java
@@ -86,7 +86,7 @@
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
-import com.android.launcher3.util.MainThreadInitializedObject;
+import com.android.launcher3.util.MainThreadInitializedObject.SandboxContext;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.BaseDragLayer;
import com.android.launcher3.widget.BaseLauncherAppWidgetHostView;
@@ -97,13 +97,10 @@
import com.android.launcher3.widget.custom.CustomWidgetManager;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;
/**
@@ -122,22 +119,16 @@
* Context used just for preview. It also provides a few objects (e.g. UserCache) just for
* preview purposes.
*/
- public static class PreviewContext extends ContextWrapper {
-
- private final Set<MainThreadInitializedObject> mAllowedObjects = new HashSet<>(
- Arrays.asList(UserCache.INSTANCE, InstallSessionHelper.INSTANCE,
- LauncherAppState.INSTANCE, InvariantDeviceProfile.INSTANCE,
- CustomWidgetManager.INSTANCE, PluginManagerWrapper.INSTANCE));
+ public static class PreviewContext extends SandboxContext {
private final InvariantDeviceProfile mIdp;
- private final Map<MainThreadInitializedObject, Object> mObjectMap = new HashMap<>();
private final ConcurrentLinkedQueue<LauncherIconsForPreview> mIconPool =
new ConcurrentLinkedQueue<>();
- private boolean mDestroyed = false;
-
public PreviewContext(Context base, InvariantDeviceProfile idp) {
- super(base);
+ super(base, UserCache.INSTANCE, InstallSessionHelper.INSTANCE,
+ LauncherAppState.INSTANCE, InvariantDeviceProfile.INSTANCE,
+ CustomWidgetManager.INSTANCE, PluginManagerWrapper.INSTANCE);
mIdp = idp;
mObjectMap.put(InvariantDeviceProfile.INSTANCE, idp);
mObjectMap.put(LauncherAppState.INSTANCE,
@@ -145,37 +136,6 @@
}
- @Override
- public Context getApplicationContext() {
- return this;
- }
-
- public void onDestroy() {
- CustomWidgetManager.INSTANCE.get(this).onDestroy();
- LauncherAppState.INSTANCE.get(this).onTerminate();
- mDestroyed = true;
- }
-
- /**
- * Find a cached object from mObjectMap if we have already created one. If not, generate
- * an object using the provider.
- */
- public <T> T getObject(MainThreadInitializedObject<T> mainThreadInitializedObject,
- MainThreadInitializedObject.ObjectProvider<T> provider) {
- if (FeatureFlags.IS_STUDIO_BUILD && mDestroyed) {
- throw new RuntimeException("Context already destroyed");
- }
- if (!mAllowedObjects.contains(mainThreadInitializedObject)) {
- throw new IllegalStateException("Leaking unknown objects");
- }
- if (mObjectMap.containsKey(mainThreadInitializedObject)) {
- return (T) mObjectMap.get(mainThreadInitializedObject);
- }
- T t = provider.get(this);
- mObjectMap.put(mainThreadInitializedObject, t);
- return t;
- }
-
public LauncherIcons newLauncherIcons(Context context, boolean shapeDetection) {
LauncherIconsForPreview launcherIconsForPreview = mIconPool.poll();
if (launcherIconsForPreview != null) {
diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java
index cd13cd0..1a468ae 100644
--- a/src/com/android/launcher3/icons/IconCache.java
+++ b/src/com/android/launcher3/icons/IconCache.java
@@ -134,6 +134,9 @@
* Closes the cache DB. This will clear any in-memory cache.
*/
public void close() {
+ // This will clear all pending updates
+ getUpdateHandler();
+
mIconDb.close();
}
diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java
index e2c0a32..94f29db 100644
--- a/src/com/android/launcher3/util/DisplayController.java
+++ b/src/com/android/launcher3/util/DisplayController.java
@@ -55,7 +55,7 @@
* Utility class to cache properties of default display to avoid a system RPC on every call.
*/
@SuppressLint("NewApi")
-public class DisplayController implements DisplayListener, ComponentCallbacks {
+public class DisplayController implements DisplayListener, ComponentCallbacks, SafeCloseable {
private static final String TAG = "DisplayController";
@@ -79,6 +79,7 @@
private final ArrayList<DisplayInfoChangeListener> mListeners = new ArrayList<>();
private Info mInfo;
+ private boolean mDestroyed = false;
private DisplayController(Context context) {
mContext = context;
@@ -111,6 +112,17 @@
}
@Override
+ public void close() {
+ mDestroyed = true;
+ if (mWindowContext != null) {
+ mWindowContext.unregisterComponentCallbacks(this);
+ } else {
+ // TODO: unregister broadcast receiver
+ }
+ mDM.unregisterDisplayListener(this);
+ }
+
+ @Override
public final void onDisplayAdded(int displayId) { }
@Override
@@ -157,6 +169,9 @@
* Only used for pre-S
*/
private void onConfigChanged(Intent intent) {
+ if (mDestroyed) {
+ return;
+ }
Configuration config = mContext.getResources().getConfiguration();
if (mInfo.fontScale != config.fontScale || mInfo.densityDpi != config.densityDpi) {
Log.d(TAG, "Configuration changed, notifying listeners");
diff --git a/src/com/android/launcher3/util/MainThreadInitializedObject.java b/src/com/android/launcher3/util/MainThreadInitializedObject.java
index f6003dd..ef160b1 100644
--- a/src/com/android/launcher3/util/MainThreadInitializedObject.java
+++ b/src/com/android/launcher3/util/MainThreadInitializedObject.java
@@ -18,13 +18,20 @@
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import android.content.Context;
+import android.content.ContextWrapper;
import android.os.Looper;
+import androidx.annotation.UiThread;
import androidx.annotation.VisibleForTesting;
-import com.android.launcher3.graphics.LauncherPreviewRenderer.PreviewContext;
import com.android.launcher3.util.ResourceBasedOverride.Overrides;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ExecutionException;
/**
@@ -40,8 +47,8 @@
}
public T get(Context context) {
- if (context instanceof PreviewContext) {
- return ((PreviewContext) context).getObject(this, mProvider);
+ if (context instanceof SandboxContext) {
+ return ((SandboxContext) context).getObject(this, mProvider);
}
if (mValue == null) {
@@ -80,4 +87,78 @@
T get(Context context);
}
+
+ /**
+ * Abstract Context which allows custom implementations for
+ * {@link MainThreadInitializedObject} providers
+ */
+ public static abstract class SandboxContext extends ContextWrapper {
+
+ protected final Set<MainThreadInitializedObject> mAllowedObjects;
+ protected final Map<MainThreadInitializedObject, Object> mObjectMap = new HashMap<>();
+ protected final ArrayList<Object> mOrderedObjects = new ArrayList<>();
+
+ private final Object mDestroyLock = new Object();
+ private boolean mDestroyed = false;
+
+ public SandboxContext(Context base, MainThreadInitializedObject... allowedObjects) {
+ super(base);
+ mAllowedObjects = new HashSet<>(Arrays.asList(allowedObjects));
+ }
+
+ @Override
+ public Context getApplicationContext() {
+ return this;
+ }
+
+ public void onDestroy() {
+ synchronized (mDestroyLock) {
+ // Destroy in reverse order
+ for (int i = mOrderedObjects.size() - 1; i >= 0; i--) {
+ Object o = mOrderedObjects.get(i);
+ if (o instanceof SafeCloseable) {
+ ((SafeCloseable) o).close();
+ }
+ }
+ mDestroyed = true;
+ }
+ }
+
+ /**
+ * Find a cached object from mObjectMap if we have already created one. If not, generate
+ * an object using the provider.
+ */
+ private <T> T getObject(MainThreadInitializedObject<T> object, ObjectProvider<T> provider) {
+ synchronized (mDestroyLock) {
+ if (mDestroyed) {
+ throw new RuntimeException("Context already destroyed");
+ }
+ if (!mAllowedObjects.contains(object)) {
+ throw new IllegalStateException(
+ "Leaking unknown objects " + object + " " + provider);
+ }
+ T t = (T) mObjectMap.get(object);
+ if (t != null) {
+ return t;
+ }
+ if (Looper.myLooper() == Looper.getMainLooper()) {
+ t = createObject(provider);
+ mObjectMap.put(object, t);
+ mOrderedObjects.add(t);
+ return t;
+ }
+ }
+
+ try {
+ return MAIN_EXECUTOR.submit(() -> getObject(object, provider)).get();
+ } catch (InterruptedException | ExecutionException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @UiThread
+ protected <T> T createObject(ObjectProvider<T> provider) {
+ return provider.get(this);
+ }
+ }
}
diff --git a/src/com/android/launcher3/util/SettingsCache.java b/src/com/android/launcher3/util/SettingsCache.java
index 10611c7..0c5b722 100644
--- a/src/com/android/launcher3/util/SettingsCache.java
+++ b/src/com/android/launcher3/util/SettingsCache.java
@@ -47,7 +47,7 @@
*
* Cache will also be updated if a key queried is missing (even if it has no listeners registered).
*/
-public class SettingsCache extends ContentObserver {
+public class SettingsCache extends ContentObserver implements SafeCloseable {
/** Hidden field Settings.Secure.NOTIFICATION_BADGING */
public static final Uri NOTIFICATION_BADGING_URI =
@@ -69,7 +69,6 @@
private final Map<Uri, CopyOnWriteArrayList<OnChangeListener>> mListenerMap = new HashMap<>();
protected final ContentResolver mResolver;
-
/**
* Singleton instance
*/
@@ -82,6 +81,11 @@
}
@Override
+ public void close() {
+ mResolver.unregisterContentObserver(this);
+ }
+
+ @Override
public void onChange(boolean selfChange, Uri uri) {
// We use default of 1, but if we're getting an onChange call, can assume a non-default
// value will exist
diff --git a/src/com/android/launcher3/util/UiThreadHelper.java b/src/com/android/launcher3/util/UiThreadHelper.java
index 0f40179..ac5368c 100644
--- a/src/com/android/launcher3/util/UiThreadHelper.java
+++ b/src/com/android/launcher3/util/UiThreadHelper.java
@@ -28,7 +28,7 @@
import android.view.View;
import android.view.inputmethod.InputMethodManager;
-import com.android.launcher3.Launcher;
+import com.android.launcher3.BaseActivity;
import com.android.launcher3.views.ActivityContext;
/**
@@ -56,7 +56,7 @@
STATS_LOGGER_KEY,
Message.obtain(
HANDLER.get(root.getContext()),
- () -> Launcher.cast(activityContext)
+ () -> BaseActivity.fromContext(root.getContext())
.getStatsLogManager()
.logger()
.log(LAUNCHER_ALLAPPS_KEYBOARD_CLOSED)
diff --git a/src/com/android/launcher3/widget/custom/CustomWidgetManager.java b/src/com/android/launcher3/widget/custom/CustomWidgetManager.java
index 329a444..2e2a968 100644
--- a/src/com/android/launcher3/widget/custom/CustomWidgetManager.java
+++ b/src/com/android/launcher3/widget/custom/CustomWidgetManager.java
@@ -33,6 +33,7 @@
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.util.PackageUserKey;
+import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.widget.LauncherAppWidgetHostView;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
import com.android.systemui.plugins.CustomWidgetPlugin;
@@ -46,7 +47,7 @@
/**
* CustomWidgetManager handles custom widgets implemented as a plugin.
*/
-public class CustomWidgetManager implements PluginListener<CustomWidgetPlugin> {
+public class CustomWidgetManager implements PluginListener<CustomWidgetPlugin>, SafeCloseable {
public static final MainThreadInitializedObject<CustomWidgetManager> INSTANCE =
new MainThreadInitializedObject<>(CustomWidgetManager::new);
@@ -71,7 +72,8 @@
.addPluginListener(this, CustomWidgetPlugin.class, true);
}
- public void onDestroy() {
+ @Override
+ public void close() {
PluginManagerWrapper.INSTANCE.get(mContext).removePluginListener(this);
}
diff --git a/robolectric_tests/resources/cache_data_updated_task_data.txt b/tests/res/raw/cache_data_updated_task_data.txt
similarity index 100%
rename from robolectric_tests/resources/cache_data_updated_task_data.txt
rename to tests/res/raw/cache_data_updated_task_data.txt
diff --git a/robolectric_tests/resources/db_schema_v10.json b/tests/res/raw/db_schema_v10.json
similarity index 100%
rename from robolectric_tests/resources/db_schema_v10.json
rename to tests/res/raw/db_schema_v10.json
diff --git a/robolectric_tests/resources/package_install_state_change_task_data.txt b/tests/res/raw/package_install_state_change_task_data.txt
similarity index 100%
rename from robolectric_tests/resources/package_install_state_change_task_data.txt
rename to tests/res/raw/package_install_state_change_task_data.txt
diff --git a/robolectric_tests/resources/widgets_predication_update_task_data.txt b/tests/res/raw/widgets_predication_update_task_data.txt
similarity index 100%
rename from robolectric_tests/resources/widgets_predication_update_task_data.txt
rename to tests/res/raw/widgets_predication_update_task_data.txt
diff --git a/robolectric_tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java b/tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java
similarity index 93%
rename from robolectric_tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java
rename to tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java
index 8aa6f37..8a4590a 100644
--- a/robolectric_tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java
+++ b/tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java
@@ -13,6 +13,9 @@
import android.graphics.Rect;
import android.util.Pair;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings;
@@ -21,19 +24,17 @@
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.util.ContentWriter;
+import com.android.launcher3.util.Executors;
import com.android.launcher3.util.GridOccupancy;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSparseArrayMap;
import com.android.launcher3.util.LauncherModelHelper;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.LooperMode;
-import org.robolectric.annotation.LooperMode.Mode;
import java.util.ArrayList;
import java.util.List;
@@ -41,8 +42,8 @@
/**
* Tests for {@link AddWorkspaceItemsTask}
*/
-@RunWith(RobolectricTestRunner.class)
-@LooperMode(Mode.PAUSED)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class AddWorkspaceItemsTaskTest {
private final ComponentName mComponent1 = new ComponentName("a", "b");
@@ -60,7 +61,7 @@
@Before
public void setup() {
mModelHelper = new LauncherModelHelper();
- mTargetContext = RuntimeEnvironment.application;
+ mTargetContext = mModelHelper.sandboxContext;
mIdp = InvariantDeviceProfile.INSTANCE.get(mTargetContext);
mIdp.numColumns = mIdp.numRows = 5;
mAppState = LauncherAppState.getInstance(mTargetContext);
@@ -70,6 +71,11 @@
mNewScreens = new IntArray();
}
+ @After
+ public void tearDown() {
+ mModelHelper.destroy();
+ }
+
private AddWorkspaceItemsTask newTask(ItemInfo... items) {
List<Pair<ItemInfo, Object>> list = new ArrayList<>();
for (ItemInfo item : items) {
@@ -88,7 +94,7 @@
int[] spaceFound = newTask().findSpaceForItem(
mAppState, mModelHelper.getBgDataModel(), mExistingScreens, mNewScreens, 1, 1);
- assertEquals(2, spaceFound[0]);
+ assertEquals(1, spaceFound[0]);
assertTrue(mScreenOccupancy.get(spaceFound[0])
.isRegionVacant(spaceFound[1], spaceFound[2], 1, 1));
@@ -127,7 +133,7 @@
@Test
public void testAddItem_some_items_added() throws Exception {
Callbacks callbacks = mock(Callbacks.class);
- mModelHelper.getModel().addCallbacks(callbacks);
+ Executors.MAIN_EXECUTOR.submit(() -> mModelHelper.getModel().addCallbacks(callbacks)).get();
WorkspaceItemInfo info = new WorkspaceItemInfo();
info.intent = new Intent().setComponent(mComponent1);
diff --git a/robolectric_tests/src/com/android/launcher3/model/BackupRestoreTest.java b/tests/src/com/android/launcher3/model/BackupRestoreTest.java
similarity index 62%
rename from robolectric_tests/src/com/android/launcher3/model/BackupRestoreTest.java
rename to tests/src/com/android/launcher3/model/BackupRestoreTest.java
index a397db5..41914de 100644
--- a/robolectric_tests/src/com/android/launcher3/model/BackupRestoreTest.java
+++ b/tests/src/com/android/launcher3/model/BackupRestoreTest.java
@@ -17,6 +17,7 @@
package com.android.launcher3.model;
import static android.content.pm.PackageManager.INSTALL_REASON_DEVICE_RESTORE;
+import static android.os.Process.myUserHandle;
import static com.android.launcher3.LauncherSettings.Favorites.BACKUP_TABLE_NAME;
import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME;
@@ -26,74 +27,110 @@
import static com.android.launcher3.util.LauncherModelHelper.APP_ICON;
import static com.android.launcher3.util.LauncherModelHelper.NO__ICON;
import static com.android.launcher3.util.LauncherModelHelper.SHORTCUT;
+import static com.android.launcher3.util.ReflectionHelpers.getField;
+import static com.android.launcher3.util.ReflectionHelpers.setField;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.robolectric.util.ReflectionHelpers.setField;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
import android.app.backup.BackupManager;
import android.content.pm.PackageInstaller;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
-import android.os.Process;
import android.os.UserHandle;
-import android.os.UserManager;
+import android.util.ArrayMap;
+import android.util.LongSparseArray;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
import com.android.launcher3.InvariantDeviceProfile;
+import com.android.launcher3.pm.UserCache;
import com.android.launcher3.provider.RestoreDbTask;
-import com.android.launcher3.shadows.LShadowBackupManager;
import com.android.launcher3.util.LauncherModelHelper;
+import com.android.launcher3.util.SafeCloseable;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.LooperMode;
-import org.robolectric.shadow.api.Shadow;
-import org.robolectric.shadows.ShadowUserManager;
/**
* Tests to verify backup and restore flow.
*/
-@RunWith(RobolectricTestRunner.class)
-@LooperMode(LooperMode.Mode.PAUSED)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class BackupRestoreTest {
- private static final long MY_OLD_PROFILE_ID = 1;
- private static final long MY_PROFILE_ID = 0;
- private static final long OLD_WORK_PROFILE_ID = 11;
- private static final int WORK_PROFILE_ID = 10;
+ private static final int PER_USER_RANGE = 200000;
- private ShadowUserManager mUserManager;
+
+ private long mCurrentMyProfileId;
+ private long mOldMyProfileId;
+
+ private long mCurrentWorkProfileId;
+ private long mOldWorkProfileId;
+
private BackupManager mBackupManager;
private LauncherModelHelper mModelHelper;
private SQLiteDatabase mDb;
private InvariantDeviceProfile mIdp;
+ private UserHandle mWorkUserHandle;
+
+ private SafeCloseable mUserChangeListener;
+
@Before
public void setUp() {
+ mModelHelper = new LauncherModelHelper();
+
+ mCurrentMyProfileId = mModelHelper.defaultProfileId;
+ mOldMyProfileId = mCurrentMyProfileId + 1;
+ mCurrentWorkProfileId = mOldMyProfileId + 1;
+ mOldWorkProfileId = mCurrentWorkProfileId + 1;
+
+ mWorkUserHandle = UserHandle.getUserHandleForUid(PER_USER_RANGE);
+ mUserChangeListener = UserCache.INSTANCE.get(mModelHelper.sandboxContext)
+ .addUserChangeListener(() -> { });
+
setupUserManager();
setupBackupManager();
- mModelHelper = new LauncherModelHelper();
- RestoreDbTask.setPending(RuntimeEnvironment.application);
+ RestoreDbTask.setPending(mModelHelper.sandboxContext);
mDb = mModelHelper.provider.getDb();
- mIdp = InvariantDeviceProfile.INSTANCE.get(RuntimeEnvironment.application);
+ mIdp = InvariantDeviceProfile.INSTANCE.get(mModelHelper.sandboxContext);
+
+ }
+
+ @After
+ public void tearDown() {
+ mUserChangeListener.close();
+ mModelHelper.destroy();
}
private void setupUserManager() {
- final UserManager userManager = RuntimeEnvironment.application.getSystemService(
- UserManager.class);
- mUserManager = Shadow.extract(userManager);
- // sign in to work profile
- mUserManager.addUser(WORK_PROFILE_ID, "work", ShadowUserManager.FLAG_MANAGED_PROFILE);
+ UserCache cache = UserCache.INSTANCE.get(mModelHelper.sandboxContext);
+ synchronized (cache) {
+ LongSparseArray<UserHandle> users = getField(cache, "mUsers");
+ users.clear();
+ users.put(mCurrentMyProfileId, myUserHandle());
+ users.put(mCurrentWorkProfileId, mWorkUserHandle);
+
+ ArrayMap<UserHandle, Long> userMap = getField(cache, "mUserToSerialMap");
+ userMap.clear();
+ userMap.put(myUserHandle(), mCurrentMyProfileId);
+ userMap.put(mWorkUserHandle, mCurrentWorkProfileId);
+ }
}
private void setupBackupManager() {
- mBackupManager = new BackupManager(RuntimeEnvironment.application);
- final LShadowBackupManager bm = Shadow.extract(mBackupManager);
- bm.addProfile(MY_OLD_PROFILE_ID, Process.myUserHandle());
- bm.addProfile(OLD_WORK_PROFILE_ID, UserHandle.of(WORK_PROFILE_ID));
+ mBackupManager = spy(new BackupManager(mModelHelper.sandboxContext));
+ doReturn(myUserHandle()).when(mBackupManager)
+ .getUserForAncestralSerialNumber(eq(mOldMyProfileId));
+ doReturn(mWorkUserHandle).when(mBackupManager)
+ .getUserForAncestralSerialNumber(eq(mOldWorkProfileId));
}
@Test
@@ -118,18 +155,18 @@
{ SHORTCUT, SHORTCUT, NO__ICON, NO__ICON},
{ NO__ICON, NO__ICON, SHORTCUT, SHORTCUT},
{ APP_ICON, SHORTCUT, SHORTCUT, APP_ICON},
- }}, 1, MY_OLD_PROFILE_ID);
+ }}, 1, mOldMyProfileId);
// setup grid for work profile on second screen
mModelHelper.createGrid(new int[][][]{{
{ NO__ICON, APP_ICON, SHORTCUT, SHORTCUT},
{ SHORTCUT, SHORTCUT, NO__ICON, NO__ICON},
{ NO__ICON, NO__ICON, SHORTCUT, SHORTCUT},
{ APP_ICON, SHORTCUT, SHORTCUT, NO__ICON},
- }}, 2, OLD_WORK_PROFILE_ID);
+ }}, 2, mOldWorkProfileId);
// simulates the creation of backup upon restore
- new GridBackupTable(RuntimeEnvironment.application, mDb, mIdp.numDatabaseHotseatIcons,
+ new GridBackupTable(mModelHelper.sandboxContext, mDb, mIdp.numDatabaseHotseatIcons,
mIdp.numColumns, mIdp.numRows).doBackup(
- MY_OLD_PROFILE_ID, GridBackupTable.OPTION_REQUIRES_SANITIZATION);
+ mOldMyProfileId, GridBackupTable.OPTION_REQUIRES_SANITIZATION);
// reset favorites table
createTableUsingOldProfileId();
}
@@ -141,28 +178,28 @@
private void verifyTableIsFilled(String tableName, boolean sanitized) {
assertEquals(sanitized ? 12 : 13, getCount(mDb,
"SELECT * FROM " + tableName + " WHERE profileId = "
- + (sanitized ? MY_PROFILE_ID : MY_OLD_PROFILE_ID)));
+ + (sanitized ? mCurrentMyProfileId : mOldMyProfileId)));
assertEquals(10, getCount(mDb, "SELECT * FROM " + tableName + " WHERE profileId = "
- + (sanitized ? WORK_PROFILE_ID : OLD_WORK_PROFILE_ID)));
+ + (sanitized ? mCurrentWorkProfileId : mOldWorkProfileId)));
}
private void createTableUsingOldProfileId() {
// simulates the creation of favorites table on old device
dropTable(mDb, TABLE_NAME);
- addTableToDb(mDb, MY_OLD_PROFILE_ID, false);
+ addTableToDb(mDb, mOldMyProfileId, false);
}
private void createRestoreSession() throws Exception {
final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
- final PackageInstaller installer = RuntimeEnvironment.application.getPackageManager()
+ final PackageInstaller installer = mModelHelper.sandboxContext.getPackageManager()
.getPackageInstaller();
final int sessionId = installer.createSession(params);
final PackageInstaller.SessionInfo info = installer.getSessionInfo(sessionId);
setField(info, "installReason", INSTALL_REASON_DEVICE_RESTORE);
// TODO: (b/148410677) we should verify the following call instead
// InstallSessionHelper.INSTANCE.get(getContext()).restoreDbIfApplicable(info);
- RestoreDbTask.restoreIfPossible(RuntimeEnvironment.application,
+ RestoreDbTask.restoreIfPossible(mModelHelper.sandboxContext,
mModelHelper.provider.getHelper(), mBackupManager);
}
diff --git a/robolectric_tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java b/tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
similarity index 92%
rename from robolectric_tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
rename to tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
index 9ac3fe7..dba0a40 100644
--- a/robolectric_tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
+++ b/tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
@@ -16,6 +16,8 @@
import android.os.UserManager;
import androidx.annotation.NonNull;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.icons.BitmapInfo;
@@ -26,13 +28,10 @@
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.util.LauncherModelHelper;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.LooperMode;
-import org.robolectric.annotation.LooperMode.Mode;
import java.util.Arrays;
import java.util.HashSet;
@@ -40,8 +39,8 @@
/**
* Tests for {@link CacheDataUpdatedTask}
*/
-@RunWith(RobolectricTestRunner.class)
-@LooperMode(Mode.PAUSED)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class CacheDataUpdatedTaskTest {
private static final String NEW_LABEL_PREFIX = "new-label-";
@@ -51,10 +50,10 @@
@Before
public void setup() throws Exception {
mModelHelper = new LauncherModelHelper();
- mModelHelper.initializeData("/cache_data_updated_task_data.txt");
+ mModelHelper.initializeData("cache_data_updated_task_data");
// Add placeholder entries in the cache to simulate update
- Context context = RuntimeEnvironment.application;
+ Context context = mModelHelper.sandboxContext;
IconCache iconCache = LauncherAppState.getInstance(context).getIconCache();
CachingLogic<ItemInfo> placeholderLogic = new CachingLogic<ItemInfo>() {
@Override
@@ -86,6 +85,11 @@
}
}
+ @After
+ public void tearDown() {
+ mModelHelper.destroy();
+ }
+
private CacheDataUpdatedTask newTask(int op, String... pkg) {
return new CacheDataUpdatedTask(op, Process.myUserHandle(),
new HashSet<>(Arrays.asList(pkg)));
diff --git a/robolectric_tests/src/com/android/launcher3/model/DbDowngradeHelperTest.java b/tests/src/com/android/launcher3/model/DbDowngradeHelperTest.java
similarity index 91%
rename from robolectric_tests/src/com/android/launcher3/model/DbDowngradeHelperTest.java
rename to tests/src/com/android/launcher3/model/DbDowngradeHelperTest.java
index be03c7d..d849c8f 100644
--- a/robolectric_tests/src/com/android/launcher3/model/DbDowngradeHelperTest.java
+++ b/tests/src/com/android/launcher3/model/DbDowngradeHelperTest.java
@@ -15,12 +15,13 @@
*/
package com.android.launcher3.model;
+import static androidx.test.InstrumentationRegistry.getContext;
+
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotSame;
import static junit.framework.Assert.assertTrue;
-import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -32,6 +33,10 @@
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+
import com.android.launcher3.LauncherProvider;
import com.android.launcher3.LauncherProvider.DatabaseHelper;
import com.android.launcher3.LauncherSettings.Favorites;
@@ -40,15 +45,14 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
import java.io.File;
/**
* Tests for {@link DbDowngradeHelper}
*/
-@RunWith(RobolectricTestRunner.class)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class DbDowngradeHelperTest {
private static final String SCHEMA_FILE = "test_schema.json";
@@ -60,7 +64,7 @@
@Before
public void setup() {
- mContext = RuntimeEnvironment.application;
+ mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
mSchemaFile = mContext.getFileStreamPath(SCHEMA_FILE);
mDbFile = mContext.getDatabasePath(DB_FILE);
}
@@ -77,8 +81,10 @@
public void testUpdateSchemaFile() throws Exception {
// Setup mock resources
Resources res = spy(mContext.getResources());
- doAnswer(i ->this.getClass().getResourceAsStream("/db_schema_v10.json"))
- .when(res).openRawResource(eq(R.raw.downgrade_schema));
+ Resources myRes = getContext().getResources();
+ doAnswer(i -> myRes.openRawResource(
+ myRes.getIdentifier("db_schema_v10", "raw", getContext().getPackageName())))
+ .when(res).openRawResource(R.raw.downgrade_schema);
Context context = spy(mContext);
when(context.getResources()).thenReturn(res);
diff --git a/robolectric_tests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java b/tests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java
similarity index 77%
rename from robolectric_tests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java
rename to tests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java
index 655237d..004ed06 100644
--- a/robolectric_tests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java
+++ b/tests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java
@@ -16,18 +16,18 @@
package com.android.launcher3.model;
+import static com.android.launcher3.util.LauncherModelHelper.TEST_ACTIVITY;
import static com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE;
import static org.junit.Assert.assertEquals;
-import static org.robolectric.Shadows.shadowOf;
-import static org.robolectric.util.ReflectionHelpers.setField;
-import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageInstaller;
-import android.content.pm.PackageInstaller.SessionInfo;
import android.content.pm.PackageInstaller.SessionParams;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.icons.BitmapInfo;
import com.android.launcher3.model.data.FolderInfo;
@@ -35,19 +35,16 @@
import com.android.launcher3.util.LauncherLayoutBuilder;
import com.android.launcher3.util.LauncherModelHelper;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.LooperMode;
-import org.robolectric.annotation.LooperMode.Mode;
/**
* Tests for layout parser for remote layout
*/
-@RunWith(RobolectricTestRunner.class)
-@LooperMode(Mode.PAUSED)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class DefaultLayoutProviderTest {
private LauncherModelHelper mModelHelper;
@@ -56,16 +53,18 @@
@Before
public void setUp() {
mModelHelper = new LauncherModelHelper();
- mTargetContext = RuntimeEnvironment.application;
+ mTargetContext = mModelHelper.sandboxContext;
+ }
- shadowOf(mTargetContext.getPackageManager())
- .addActivityIfNotPresent(new ComponentName(TEST_PACKAGE, TEST_PACKAGE));
+ @After
+ public void tearDown() {
+ mModelHelper.destroy();
}
@Test
public void testCustomProfileLoaded_with_icon_on_hotseat() throws Exception {
writeLayoutAndLoad(new LauncherLayoutBuilder().atHotseat(0)
- .putApp(TEST_PACKAGE, TEST_PACKAGE));
+ .putApp(TEST_PACKAGE, TEST_ACTIVITY));
// Verify one item in hotseat
assertEquals(1, mModelHelper.getBgDataModel().workspaceItems.size());
@@ -77,9 +76,9 @@
@Test
public void testCustomProfileLoaded_with_folder() throws Exception {
writeLayoutAndLoad(new LauncherLayoutBuilder().atHotseat(0).putFolder(android.R.string.copy)
- .addApp(TEST_PACKAGE, TEST_PACKAGE)
- .addApp(TEST_PACKAGE, TEST_PACKAGE)
- .addApp(TEST_PACKAGE, TEST_PACKAGE)
+ .addApp(TEST_PACKAGE, TEST_ACTIVITY)
+ .addApp(TEST_PACKAGE, TEST_ACTIVITY)
+ .addApp(TEST_PACKAGE, TEST_ACTIVITY)
.build());
// Verify folder
@@ -92,9 +91,9 @@
@Test
public void testCustomProfileLoaded_with_folder_custom_title() throws Exception {
writeLayoutAndLoad(new LauncherLayoutBuilder().atHotseat(0).putFolder("CustomFolder")
- .addApp(TEST_PACKAGE, TEST_PACKAGE)
- .addApp(TEST_PACKAGE, TEST_PACKAGE)
- .addApp(TEST_PACKAGE, TEST_PACKAGE)
+ .addApp(TEST_PACKAGE, TEST_ACTIVITY)
+ .addApp(TEST_PACKAGE, TEST_ACTIVITY)
+ .addApp(TEST_PACKAGE, TEST_ACTIVITY)
.build());
// Verify folder
@@ -112,12 +111,10 @@
// Add a placeholder session info so that the widget exists
SessionParams params = new SessionParams(SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(pendingAppPkg);
+ params.setAppIcon(BitmapInfo.LOW_RES_ICON);
PackageInstaller installer = mTargetContext.getPackageManager().getPackageInstaller();
- int sessionId = installer.createSession(params);
- SessionInfo sessionInfo = installer.getSessionInfo(sessionId);
- setField(sessionInfo, "installerPackageName", "com.test");
- setField(sessionInfo, "appIcon", BitmapInfo.LOW_RES_ICON);
+ installer.createSession(params);
writeLayoutAndLoad(new LauncherLayoutBuilder().atWorkspace(0, 1, 0)
.putWidget(pendingAppPkg, "PlaceholderWidget", 2, 2));
diff --git a/robolectric_tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.java b/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.java
similarity index 88%
rename from robolectric_tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.java
rename to tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.java
index 87b0887..005389e 100644
--- a/robolectric_tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.java
+++ b/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.java
@@ -30,26 +30,31 @@
import static org.junit.Assert.assertTrue;
import android.content.Context;
+import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Point;
import android.os.Process;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.pm.UserCache;
import com.android.launcher3.util.LauncherModelHelper;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
+import java.util.HashMap;
import java.util.HashSet;
/** Unit tests for {@link GridSizeMigrationTaskV2} */
-@RunWith(RobolectricTestRunner.class)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class GridSizeMigrationTaskV2Test {
private LauncherModelHelper mModelHelper;
@@ -73,7 +78,7 @@
@Before
public void setUp() {
mModelHelper = new LauncherModelHelper();
- mContext = RuntimeEnvironment.application;
+ mContext = mModelHelper.sandboxContext;
mDb = mModelHelper.provider.getDb();
mValidPackages = new HashSet<>();
@@ -98,8 +103,13 @@
LauncherSettings.Favorites.TMP_TABLE);
}
+ @After
+ public void tearDown() {
+ mModelHelper.destroy();
+ }
+
@Test
- public void testMigration() {
+ public void testMigration() throws Exception {
int[] srcHotseatItems = {
mModelHelper.addItem(APP_ICON, 0, HOTSEAT, 0, 0, testPackage1, 1, TMP_CONTENT_URI),
mModelHelper.addItem(SHORTCUT, 1, HOTSEAT, 0, 0, testPackage2, 2, TMP_CONTENT_URI),
@@ -134,17 +144,17 @@
// Check hotseat items
Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI,
new String[]{LauncherSettings.Favorites.SCREEN, LauncherSettings.Favorites.INTENT},
- "container=" + CONTAINER_HOTSEAT, null, null, null);
+ "container=" + CONTAINER_HOTSEAT, null, LauncherSettings.Favorites.SCREEN, null);
assertEquals(c.getCount(), mIdp.numDatabaseHotseatIcons);
int screenIndex = c.getColumnIndex(LauncherSettings.Favorites.SCREEN);
int intentIndex = c.getColumnIndex(LauncherSettings.Favorites.INTENT);
c.moveToNext();
- assertEquals(c.getInt(screenIndex), 1);
- assertTrue(c.getString(intentIndex).contains(testPackage2));
- c.moveToNext();
assertEquals(c.getInt(screenIndex), 0);
assertTrue(c.getString(intentIndex).contains(testPackage1));
c.moveToNext();
+ assertEquals(c.getInt(screenIndex), 1);
+ assertTrue(c.getString(intentIndex).contains(testPackage2));
+ c.moveToNext();
assertEquals(c.getInt(screenIndex), 2);
assertTrue(c.getString(intentIndex).contains(testPackage3));
c.moveToNext();
@@ -157,35 +167,24 @@
new String[]{LauncherSettings.Favorites.CELLX, LauncherSettings.Favorites.CELLY,
LauncherSettings.Favorites.INTENT},
"container=" + CONTAINER_DESKTOP, null, null, null);
- assertEquals(c.getCount(), 6);
intentIndex = c.getColumnIndex(LauncherSettings.Favorites.INTENT);
int cellXIndex = c.getColumnIndex(LauncherSettings.Favorites.CELLX);
int cellYIndex = c.getColumnIndex(LauncherSettings.Favorites.CELLY);
- c.moveToNext();
- assertTrue(c.getString(intentIndex).contains(testPackage7));
- c.moveToNext();
- assertTrue(c.getString(intentIndex).contains(testPackage6));
- assertEquals(c.getInt(cellXIndex), 0);
- assertEquals(c.getInt(cellYIndex), 3);
- c.moveToNext();
- assertTrue(c.getString(intentIndex).contains(testPackage10));
- assertEquals(c.getInt(cellXIndex), 1);
- assertEquals(c.getInt(cellYIndex), 3);
- c.moveToNext();
- assertTrue(c.getString(intentIndex).contains(testPackage5));
- assertEquals(c.getInt(cellXIndex), 2);
- assertEquals(c.getInt(cellYIndex), 3);
- c.moveToNext();
- assertTrue(c.getString(intentIndex).contains(testPackage9));
- assertEquals(c.getInt(cellXIndex), 3);
- assertEquals(c.getInt(cellYIndex), 3);
- c.moveToNext();
- assertTrue(c.getString(intentIndex).contains(testPackage8));
- assertEquals(c.getInt(cellXIndex), 0);
- assertEquals(c.getInt(cellYIndex), 2);
-
+ HashMap<String, Point> locMap = new HashMap<>();
+ while (c.moveToNext()) {
+ locMap.put(
+ Intent.parseUri(c.getString(intentIndex), 0).getPackage(),
+ new Point(c.getInt(cellXIndex), c.getInt(cellYIndex)));
+ }
c.close();
+
+ assertEquals(locMap.size(), 6);
+ assertEquals(new Point(0, 2), locMap.get(testPackage8));
+ assertEquals(new Point(0, 3), locMap.get(testPackage6));
+ assertEquals(new Point(1, 3), locMap.get(testPackage10));
+ assertEquals(new Point(2, 3), locMap.get(testPackage5));
+ assertEquals(new Point(3, 3), locMap.get(testPackage9));
}
@Test
@@ -212,7 +211,7 @@
// Check hotseat items
Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI,
new String[]{LauncherSettings.Favorites.SCREEN, LauncherSettings.Favorites.INTENT},
- "container=" + CONTAINER_HOTSEAT, null, null, null);
+ "container=" + CONTAINER_HOTSEAT, null, LauncherSettings.Favorites.SCREEN, null);
assertEquals(c.getCount(), numSrcDatabaseHotseatIcons);
int screenIndex = c.getColumnIndex(LauncherSettings.Favorites.SCREEN);
int intentIndex = c.getColumnIndex(LauncherSettings.Favorites.INTENT);
@@ -257,7 +256,7 @@
// Check hotseat items
Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI,
new String[]{LauncherSettings.Favorites.SCREEN, LauncherSettings.Favorites.INTENT},
- "container=" + CONTAINER_HOTSEAT, null, null, null);
+ "container=" + CONTAINER_HOTSEAT, null, LauncherSettings.Favorites.SCREEN, null);
assertEquals(c.getCount(), mIdp.numDatabaseHotseatIcons);
int screenIndex = c.getColumnIndex(LauncherSettings.Favorites.SCREEN);
int intentIndex = c.getColumnIndex(LauncherSettings.Favorites.INTENT);
diff --git a/robolectric_tests/src/com/android/launcher3/model/LoaderCursorTest.java b/tests/src/com/android/launcher3/model/LoaderCursorTest.java
similarity index 93%
rename from robolectric_tests/src/com/android/launcher3/model/LoaderCursorTest.java
rename to tests/src/com/android/launcher3/model/LoaderCursorTest.java
index 800311a..6444ef6 100644
--- a/robolectric_tests/src/com/android/launcher3/model/LoaderCursorTest.java
+++ b/tests/src/com/android/launcher3/model/LoaderCursorTest.java
@@ -16,6 +16,8 @@
package com.android.launcher3.model;
+import static androidx.test.InstrumentationRegistry.getContext;
+
import static com.android.launcher3.LauncherSettings.Favorites.CELLX;
import static com.android.launcher3.LauncherSettings.Favorites.CELLY;
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER;
@@ -33,7 +35,7 @@
import static com.android.launcher3.LauncherSettings.Favorites.SCREEN;
import static com.android.launcher3.LauncherSettings.Favorites.TITLE;
import static com.android.launcher3.LauncherSettings.Favorites._ID;
-import static com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE;
+import static com.android.launcher3.util.LauncherModelHelper.TEST_ACTIVITY;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
@@ -41,37 +43,37 @@
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
-import static org.robolectric.Shadows.shadowOf;
-
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.database.MatrixCursor;
import android.os.Process;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.util.Executors;
+import com.android.launcher3.util.LauncherModelHelper;
import com.android.launcher3.util.PackageManagerHelper;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.LooperMode;
-import org.robolectric.annotation.LooperMode.Mode;
/**
* Tests for {@link LoaderCursor}
*/
-@RunWith(RobolectricTestRunner.class)
-@LooperMode(Mode.PAUSED)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class LoaderCursorTest {
+ private LauncherModelHelper mModelHelper;
private LauncherAppState mApp;
private MatrixCursor mCursor;
@@ -82,7 +84,8 @@
@Before
public void setup() {
- mContext = RuntimeEnvironment.application;
+ mModelHelper = new LauncherModelHelper();
+ mContext = mModelHelper.sandboxContext;
mIDP = InvariantDeviceProfile.INSTANCE.get(mContext);
mApp = LauncherAppState.getInstance(mContext);
@@ -97,6 +100,11 @@
ums.allUsers.put(0, Process.myUserHandle());
}
+ @After
+ public void tearDown() {
+ mModelHelper.destroy();
+ }
+
private void initCursor(int itemType, String title) {
mCursor.newRow()
.add(_ID, 1)
@@ -117,9 +125,7 @@
@Test
public void getAppShortcutInfo_dontAllowMissing_validComponent() throws Exception {
- ComponentName cn = new ComponentName(TEST_PACKAGE, TEST_PACKAGE);
- shadowOf(mContext.getPackageManager()).addActivityIfNotPresent(cn);
-
+ ComponentName cn = new ComponentName(getContext(), TEST_ACTIVITY);
initCursor(ITEM_TYPE_APPLICATION, "");
assertTrue(mLoaderCursor.moveToNext());
diff --git a/robolectric_tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java b/tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java
similarity index 65%
rename from robolectric_tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java
rename to tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java
index 4319355..42c9f11 100644
--- a/robolectric_tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java
+++ b/tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java
@@ -15,69 +15,60 @@
*/
package com.android.launcher3.model;
-import static com.android.launcher3.util.Executors.createAndStartNewLooper;
import static com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.spy;
-import static org.robolectric.Shadows.shadowOf;
import android.os.Process;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
import com.android.launcher3.model.BgDataModel.Callbacks;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.ItemInfo;
-import com.android.launcher3.shadows.ShadowLooperExecutor;
import com.android.launcher3.util.Executors;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.LauncherLayoutBuilder;
import com.android.launcher3.util.LauncherModelHelper;
-import com.android.launcher3.util.LooperExecutor;
import com.android.launcher3.util.RunnableList;
+import com.android.launcher3.util.TestUtil;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.LooperMode;
-import org.robolectric.annotation.LooperMode.Mode;
-import org.robolectric.shadow.api.Shadow;
-import org.robolectric.shadows.ShadowPackageManager;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
/**
* Tests to verify multiple callbacks in Loader
*/
-@RunWith(RobolectricTestRunner.class)
-@LooperMode(Mode.PAUSED)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class ModelMultiCallbacksTest {
private LauncherModelHelper mModelHelper;
- private ShadowPackageManager mSpm;
- private LooperExecutor mTempMainExecutor;
-
@Before
- public void setUp() throws Exception {
+ public void setUp() {
mModelHelper = new LauncherModelHelper();
- mModelHelper.installApp(TEST_PACKAGE);
+ }
- mSpm = shadowOf(RuntimeEnvironment.application.getPackageManager());
-
- // Since robolectric tests run on main thread, we run the loader-UI calls on a temp thread,
- // so that we can wait appropriately for the loader to complete.
- mTempMainExecutor = new LooperExecutor(createAndStartNewLooper("tempMain"));
- ShadowLooperExecutor sle = Shadow.extract(Executors.MAIN_EXECUTOR);
- sle.setHandler(mTempMainExecutor.getHandler());
+ @After
+ public void tearDown() throws Exception {
+ mModelHelper.destroy();
+ TestUtil.uninstallDummyApp();
}
@Test
@@ -85,7 +76,7 @@
setupWorkspacePages(3);
MyCallbacks cb1 = spy(MyCallbacks.class);
- mModelHelper.getModel().addCallbacksAndLoad(cb1);
+ Executors.MAIN_EXECUTOR.execute(() -> mModelHelper.getModel().addCallbacksAndLoad(cb1));
waitForLoaderAndTempMainThread();
cb1.verifySynchronouslyBound(3);
@@ -94,10 +85,10 @@
cb1.reset();
MyCallbacks cb2 = spy(MyCallbacks.class);
cb2.mPageToBindSync = IntSet.wrap(2);
- mModelHelper.getModel().addCallbacksAndLoad(cb2);
+ Executors.MAIN_EXECUTOR.execute(() -> mModelHelper.getModel().addCallbacksAndLoad(cb2));
waitForLoaderAndTempMainThread();
- cb1.verifySynchronouslyBound(3);
+ assertFalse(cb1.bindStarted);
cb2.verifySynchronouslyBound(3);
// Remove callbacks
@@ -105,7 +96,7 @@
cb2.reset();
// No effect on callbacks when removing an callback
- mModelHelper.getModel().removeCallbacks(cb2);
+ Executors.MAIN_EXECUTOR.execute(() -> mModelHelper.getModel().removeCallbacks(cb2));
waitForLoaderAndTempMainThread();
assertNull(cb1.mPendingTasks);
assertNull(cb2.mPendingTasks);
@@ -119,52 +110,48 @@
@Test
public void testTwoCallbacks_receiveUpdates() throws Exception {
+ TestUtil.uninstallDummyApp();
+
setupWorkspacePages(1);
MyCallbacks cb1 = spy(MyCallbacks.class);
MyCallbacks cb2 = spy(MyCallbacks.class);
- mModelHelper.getModel().addCallbacksAndLoad(cb1);
- mModelHelper.getModel().addCallbacksAndLoad(cb2);
+ Executors.MAIN_EXECUTOR.execute(() -> mModelHelper.getModel().addCallbacksAndLoad(cb1));
+ Executors.MAIN_EXECUTOR.execute(() -> mModelHelper.getModel().addCallbacksAndLoad(cb2));
waitForLoaderAndTempMainThread();
- cb1.verifyApps(TEST_PACKAGE);
- cb2.verifyApps(TEST_PACKAGE);
+ assertTrue(cb1.allApps().contains(TEST_PACKAGE));
+ assertTrue(cb2.allApps().contains(TEST_PACKAGE));
// Install package 1
- String pkg1 = "com.test.pkg1";
- mModelHelper.installApp(pkg1);
- mModelHelper.getModel().onPackageAdded(pkg1, Process.myUserHandle());
+ TestUtil.installDummyApp();
+ mModelHelper.getModel().onPackageAdded(TestUtil.DUMMY_PACKAGE, Process.myUserHandle());
waitForLoaderAndTempMainThread();
- cb1.verifyApps(TEST_PACKAGE, pkg1);
- cb2.verifyApps(TEST_PACKAGE, pkg1);
-
- // Install package 2
- String pkg2 = "com.test.pkg2";
- mModelHelper.installApp(pkg2);
- mModelHelper.getModel().onPackageAdded(pkg2, Process.myUserHandle());
- waitForLoaderAndTempMainThread();
- cb1.verifyApps(TEST_PACKAGE, pkg1, pkg2);
- cb2.verifyApps(TEST_PACKAGE, pkg1, pkg2);
+ assertTrue(cb1.allApps().contains(TestUtil.DUMMY_PACKAGE));
+ assertTrue(cb2.allApps().contains(TestUtil.DUMMY_PACKAGE));
// Uninstall package 2
- mSpm.removePackage(pkg1);
- mModelHelper.getModel().onPackageRemoved(pkg1, Process.myUserHandle());
+ TestUtil.uninstallDummyApp();
+ mModelHelper.getModel().onPackageRemoved(TestUtil.DUMMY_PACKAGE, Process.myUserHandle());
waitForLoaderAndTempMainThread();
- cb1.verifyApps(TEST_PACKAGE, pkg2);
- cb2.verifyApps(TEST_PACKAGE, pkg2);
+ assertFalse(cb1.allApps().contains(TestUtil.DUMMY_PACKAGE));
+ assertFalse(cb2.allApps().contains(TestUtil.DUMMY_PACKAGE));
// Unregister a callback and verify updates no longer received
- mModelHelper.getModel().removeCallbacks(cb2);
- mSpm.removePackage(pkg2);
- mModelHelper.getModel().onPackageRemoved(pkg2, Process.myUserHandle());
+ Executors.MAIN_EXECUTOR.execute(() -> mModelHelper.getModel().removeCallbacks(cb2));
+ TestUtil.installDummyApp();
+ mModelHelper.getModel().onPackageAdded(TestUtil.DUMMY_PACKAGE, Process.myUserHandle());
waitForLoaderAndTempMainThread();
- cb1.verifyApps(TEST_PACKAGE);
- cb2.verifyApps(TEST_PACKAGE, pkg2);
+
+ // cb2 didn't get the update
+ assertTrue(cb1.allApps().contains(TestUtil.DUMMY_PACKAGE));
+ assertFalse(cb2.allApps().contains(TestUtil.DUMMY_PACKAGE));
}
private void waitForLoaderAndTempMainThread() throws Exception {
+ Executors.MAIN_EXECUTOR.submit(() -> { }).get();
Executors.MODEL_EXECUTOR.submit(() -> { }).get();
- mTempMainExecutor.submit(() -> { }).get();
+ Executors.MAIN_EXECUTOR.submit(() -> { }).get();
}
private void setupWorkspacePages(int pageCount) throws Exception {
@@ -183,10 +170,16 @@
IntSet mPageBoundSync = new IntSet();
RunnableList mPendingTasks;
AppInfo[] mAppInfos;
+ boolean bindStarted;
MyCallbacks() { }
@Override
+ public void startBinding() {
+ bindStarted = true;
+ }
+
+ @Override
public void onInitialBindComplete(IntSet boundPages, RunnableList pendingTasks) {
mPageBoundSync = boundPages;
mPendingTasks = pendingTasks;
@@ -212,10 +205,12 @@
mPageBoundSync = new IntSet();
mPendingTasks = null;
mAppInfos = null;
+ bindStarted = false;
}
public void verifySynchronouslyBound(int totalItems) {
// Verify that the requested page is bound synchronously
+ assertTrue(bindStarted);
assertEquals(mPageToBindSync, mPageBoundSync);
assertEquals(mItems.size(), 1);
assertEquals(IntSet.wrap(mItems.get(0).screenId), mPageBoundSync);
@@ -226,12 +221,14 @@
assertEquals(mItems.size(), totalItems);
}
- public void verifyApps(String... apps) {
- assertEquals(apps.length, mAppInfos.length);
- assertEquals(Arrays.stream(mAppInfos)
+ public Set<String> allApps() {
+ return Arrays.stream(mAppInfos)
.map(ai -> ai.getTargetComponent().getPackageName())
- .collect(Collectors.toSet()),
- new HashSet<>(Arrays.asList(apps)));
+ .collect(Collectors.toSet());
+ }
+
+ public void verifyApps(String... apps) {
+ assertTrue(allApps().containsAll(Arrays.asList(apps)));
}
}
}
diff --git a/robolectric_tests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java b/tests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java
similarity index 87%
rename from robolectric_tests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java
rename to tests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java
index 412ace0..519191e 100644
--- a/robolectric_tests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java
+++ b/tests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java
@@ -2,18 +2,19 @@
import static org.junit.Assert.assertEquals;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.pm.PackageInstallInfo;
import com.android.launcher3.util.LauncherModelHelper;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.LooperMode;
-import org.robolectric.annotation.LooperMode.Mode;
import java.util.Arrays;
import java.util.HashSet;
@@ -21,8 +22,8 @@
/**
* Tests for {@link PackageInstallStateChangedTask}
*/
-@RunWith(RobolectricTestRunner.class)
-@LooperMode(Mode.PAUSED)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class PackageInstallStateChangedTaskTest {
private LauncherModelHelper mModelHelper;
@@ -30,7 +31,12 @@
@Before
public void setup() throws Exception {
mModelHelper = new LauncherModelHelper();
- mModelHelper.initializeData("/package_install_state_change_task_data.txt");
+ mModelHelper.initializeData("package_install_state_change_task_data");
+ }
+
+ @After
+ public void tearDown() {
+ mModelHelper.destroy();
}
private PackageInstallStateChangedTask newTask(String pkg, int progress) {
@@ -66,7 +72,7 @@
HashSet<Integer> updates = new HashSet<>(Arrays.asList(idsUpdated));
for (ItemInfo info : mModelHelper.getBgDataModel().itemsIdMap) {
if (info instanceof WorkspaceItemInfo) {
- assertEquals(updates.contains(info.id) ? progress: 0,
+ assertEquals(updates.contains(info.id) ? progress: 100,
((WorkspaceItemInfo) info).getProgressLevel());
} else {
assertEquals(updates.contains(info.id) ? progress: -1,
diff --git a/robolectric_tests/src/com/android/launcher3/provider/RestoreDbTaskTest.java b/tests/src/com/android/launcher3/provider/RestoreDbTaskTest.java
similarity index 92%
rename from robolectric_tests/src/com/android/launcher3/provider/RestoreDbTaskTest.java
rename to tests/src/com/android/launcher3/provider/RestoreDbTaskTest.java
index 4184d33..48305ee 100644
--- a/robolectric_tests/src/com/android/launcher3/provider/RestoreDbTaskTest.java
+++ b/tests/src/com/android/launcher3/provider/RestoreDbTaskTest.java
@@ -21,18 +21,21 @@
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.launcher3.LauncherProvider.DatabaseHelper;
import com.android.launcher3.LauncherSettings.Favorites;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
/**
* Tests for {@link RestoreDbTask}
*/
-@RunWith(RobolectricTestRunner.class)
+@SmallTest
+@RunWith(AndroidJUnit4.class)
public class RestoreDbTaskTest {
@Test
@@ -95,7 +98,7 @@
private final long mProfileId;
MyDatabaseHelper(long profileId) {
- super(RuntimeEnvironment.application, null, false);
+ super(InstrumentationRegistry.getInstrumentation().getTargetContext(), null, false);
mProfileId = profileId;
}
diff --git a/tests/src/com/android/launcher3/secondarydisplay/SDLauncherTest.java b/tests/src/com/android/launcher3/secondarydisplay/SDLauncherTest.java
new file mode 100644
index 0000000..fd86cf1
--- /dev/null
+++ b/tests/src/com/android/launcher3/secondarydisplay/SDLauncherTest.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+package com.android.launcher3.secondarydisplay;
+
+import static androidx.test.core.app.ActivityScenario.launch;
+
+import androidx.test.core.app.ActivityScenario;
+import androidx.test.espresso.intent.Intents;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.MediumTest;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for {@link SecondaryDisplayLauncher}
+ */
+@MediumTest
+@RunWith(AndroidJUnit4.class)
+public class SDLauncherTest {
+
+ @Before
+ public void setUp() {
+ Intents.init();
+ }
+
+ @After
+ public void tearDown() {
+ Intents.release();
+ }
+
+ @Test
+ public void testAllAppsListOpens() {
+ ActivityScenario<SecondaryDisplayLauncher> launcher =
+ launch(SecondaryDisplayLauncher.class);
+ launcher.onActivity(l -> l.showAppDrawer(true));
+ }
+}
diff --git a/robolectric_tests/src/com/android/launcher3/util/LauncherLayoutBuilder.java b/tests/src/com/android/launcher3/util/LauncherLayoutBuilder.java
similarity index 100%
rename from robolectric_tests/src/com/android/launcher3/util/LauncherLayoutBuilder.java
rename to tests/src/com/android/launcher3/util/LauncherLayoutBuilder.java
diff --git a/robolectric_tests/src/com/android/launcher3/util/LauncherModelHelper.java b/tests/src/com/android/launcher3/util/LauncherModelHelper.java
similarity index 60%
rename from robolectric_tests/src/com/android/launcher3/util/LauncherModelHelper.java
rename to tests/src/com/android/launcher3/util/LauncherModelHelper.java
index 846e201..c9b63ae 100644
--- a/robolectric_tests/src/com/android/launcher3/util/LauncherModelHelper.java
+++ b/tests/src/com/android/launcher3/util/LauncherModelHelper.java
@@ -15,26 +15,40 @@
*/
package com.android.launcher3.util;
-import static android.content.Intent.ACTION_CREATE_SHORTCUT;
+import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static com.android.launcher3.LauncherSettings.Favorites.CONTENT_URI;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.robolectric.Shadows.shadowOf;
import android.content.ComponentName;
+import android.content.ContentProvider;
+import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PackageManager;
+import android.content.pm.ProviderInfo;
+import android.content.res.Resources;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+import android.os.ParcelFileDescriptor.AutoCloseOutputStream;
import android.os.Process;
import android.provider.Settings;
+import android.test.mock.MockContentResolver;
+import android.util.ArrayMap;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.uiautomator.UiDevice;
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherAppState;
@@ -45,27 +59,30 @@
import com.android.launcher3.model.AllAppsList;
import com.android.launcher3.model.BgDataModel;
import com.android.launcher3.model.BgDataModel.Callbacks;
+import com.android.launcher3.model.ItemInstallQueue;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.ItemInfo;
+import com.android.launcher3.pm.InstallSessionHelper;
import com.android.launcher3.pm.UserCache;
-import com.android.launcher3.shadows.ShadowLooperExecutor;
+import com.android.launcher3.testing.TestInformationProvider;
+import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
+import com.android.launcher3.util.MainThreadInitializedObject.ObjectProvider;
+import com.android.launcher3.util.MainThreadInitializedObject.SandboxContext;
+import com.android.launcher3.widget.custom.CustomWidgetManager;
import org.mockito.ArgumentCaptor;
-import org.robolectric.Robolectric;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.shadow.api.Shadow;
-import org.robolectric.shadows.ShadowContentResolver;
-import org.robolectric.shadows.ShadowPackageManager;
-import org.robolectric.util.ReflectionHelpers;
import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.function.Function;
@@ -81,7 +98,9 @@
public static final int APP_ICON = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
public static final int SHORTCUT = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
public static final int NO__ICON = -1;
- public static final String TEST_PACKAGE = "com.android.launcher3.validpackage";
+
+ public static final String TEST_PACKAGE = testContext().getPackageName();
+ public static final String TEST_ACTIVITY = "com.android.launcher3.tests.Activity2";
// Authority for providing a test default-workspace-layout data.
private static final String TEST_PROVIDER_AUTHORITY =
@@ -90,21 +109,42 @@
private static final int DEFAULT_GRID_SIZE = 4;
private final HashMap<Class, HashMap<String, Field>> mFieldCache = new HashMap<>();
+ private final MockContentResolver mMockResolver = new MockContentResolver();
public final TestLauncherProvider provider;
- private final long mDefaultProfileId;
+ public final SanboxModelContext sandboxContext;
+
+ public final long defaultProfileId;
private BgDataModel mDataModel;
private AllAppsList mAllAppsList;
public LauncherModelHelper() {
- provider = Robolectric.setupContentProvider(TestLauncherProvider.class);
- mDefaultProfileId = UserCache.INSTANCE.get(RuntimeEnvironment.application)
+ Context context = getApplicationContext();
+ // System settings cache content provider. Ensure that they are statically initialized
+ Settings.Secure.getString(context.getContentResolver(), "test");
+ Settings.System.getString(context.getContentResolver(), "test");
+ Settings.Global.getString(context.getContentResolver(), "test");
+
+ provider = new TestLauncherProvider();
+ sandboxContext = new SanboxModelContext();
+ defaultProfileId = UserCache.INSTANCE.get(sandboxContext)
.getSerialNumberForUser(Process.myUserHandle());
- ShadowContentResolver.registerProviderInternal(LauncherProvider.AUTHORITY, provider);
+ setupProvider(LauncherProvider.AUTHORITY, provider);
+ }
+
+ protected void setupProvider(String authority, ContentProvider provider) {
+ ProviderInfo providerInfo = new ProviderInfo();
+ providerInfo.authority = authority;
+ providerInfo.applicationInfo = sandboxContext.getApplicationInfo();
+ provider.attachInfo(sandboxContext, providerInfo);
+ mMockResolver.addProvider(providerInfo.authority, provider);
+ doReturn(providerInfo)
+ .when(sandboxContext.mPm)
+ .resolveContentProvider(eq(authority), anyInt());
}
public LauncherModel getModel() {
- return LauncherAppState.getInstance(RuntimeEnvironment.application).getModel();
+ return LauncherAppState.getInstance(sandboxContext).getModel();
}
public synchronized BgDataModel getBgDataModel() {
@@ -121,6 +161,28 @@
return mAllAppsList;
}
+ public void destroy() {
+ // When destroying the context, make sure that the model thread is blocked, so that no
+ // new jobs get posted while we are cleaning up
+ CountDownLatch l1 = new CountDownLatch(1);
+ CountDownLatch l2 = new CountDownLatch(1);
+ MODEL_EXECUTOR.execute(() -> {
+ l1.countDown();
+ waitOrThrow(l2);
+ });
+ waitOrThrow(l1);
+ sandboxContext.onDestroy();
+ l2.countDown();
+ }
+
+ private void waitOrThrow(CountDownLatch latch) {
+ try {
+ latch.await();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
/**
* Synchronously executes the task and returns all the UI callbacks posted.
*/
@@ -161,13 +223,16 @@
* Initializes mock data for the test.
*/
public void initializeData(String resourceName) throws Exception {
- Context targetContext = RuntimeEnvironment.application;
BgDataModel bgDataModel = getBgDataModel();
AllAppsList allAppsList = getAllAppsList();
MODEL_EXECUTOR.submit(() -> {
+ // Copy apk from resources to a local file and install from there.
+ Resources resources = testContext().getResources();
+ int resId = resources.getIdentifier(
+ resourceName, "raw", testContext().getPackageName());
try (BufferedReader reader = new BufferedReader(new InputStreamReader(
- this.getClass().getResourceAsStream(resourceName)))) {
+ resources.openRawResource(resId)))) {
String line;
HashMap<String, Class> classMap = new HashMap<>();
while ((line = reader.readLine()) != null) {
@@ -181,7 +246,7 @@
classMap.put(commands[1], Class.forName(commands[2]));
break;
case "bgItem":
- bgDataModel.addItem(targetContext,
+ bgDataModel.addItem(sandboxContext,
(ItemInfo) initItem(classMap.get(commands[1]), commands, 2),
false);
break;
@@ -236,7 +301,7 @@
}
public int addItem(int type, int screen, int container, int x, int y) {
- return addItem(type, screen, container, x, y, mDefaultProfileId, TEST_PACKAGE);
+ return addItem(type, screen, container, x, y, defaultProfileId, TEST_PACKAGE);
}
public int addItem(int type, int screen, int container, int x, int y, long profileId) {
@@ -244,12 +309,12 @@
}
public int addItem(int type, int screen, int container, int x, int y, String packageName) {
- return addItem(type, screen, container, x, y, mDefaultProfileId, packageName);
+ return addItem(type, screen, container, x, y, defaultProfileId, packageName);
}
public int addItem(int type, int screen, int container, int x, int y, String packageName,
int id, Uri contentUri) {
- addItem(type, screen, container, x, y, mDefaultProfileId, packageName, id, contentUri);
+ addItem(type, screen, container, x, y, defaultProfileId, packageName, id, contentUri);
return id;
}
@@ -260,8 +325,7 @@
*/
public int addItem(int type, int screen, int container, int x, int y, long profileId,
String packageName) {
- Context context = RuntimeEnvironment.application;
- int id = LauncherSettings.Settings.call(context.getContentResolver(),
+ int id = LauncherSettings.Settings.call(sandboxContext.getContentResolver(),
LauncherSettings.Settings.METHOD_NEW_ITEM_ID)
.getInt(LauncherSettings.Settings.EXTRA_VALUE);
addItem(type, screen, container, x, y, profileId, packageName, id, CONTENT_URI);
@@ -270,8 +334,6 @@
public void addItem(int type, int screen, int container, int x, int y, long profileId,
String packageName, int id, Uri contentUri) {
- Context context = RuntimeEnvironment.application;
-
ContentValues values = new ContentValues();
values.put(LauncherSettings.Favorites._ID, id);
values.put(LauncherSettings.Favorites.CONTAINER, container);
@@ -295,7 +357,7 @@
}
}
- context.getContentResolver().insert(contentUri, values);
+ sandboxContext.getContentResolver().insert(contentUri, values);
}
public int[][][] createGrid(int[][][] typeArray) {
@@ -303,12 +365,11 @@
}
public int[][][] createGrid(int[][][] typeArray, int startScreen) {
- final Context context = RuntimeEnvironment.application;
- LauncherSettings.Settings.call(context.getContentResolver(),
+ LauncherSettings.Settings.call(sandboxContext.getContentResolver(),
LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB);
- LauncherSettings.Settings.call(context.getContentResolver(),
+ LauncherSettings.Settings.call(sandboxContext.getContentResolver(),
LauncherSettings.Settings.METHOD_CLEAR_EMPTY_DB_FLAG);
- return createGrid(typeArray, startScreen, mDefaultProfileId);
+ return createGrid(typeArray, startScreen, defaultProfileId);
}
/**
@@ -320,14 +381,13 @@
* @return the same grid representation where each entry is the corresponding item id.
*/
public int[][][] createGrid(int[][][] typeArray, int startScreen, long profileId) {
- Context context = RuntimeEnvironment.application;
int[][][] ids = new int[typeArray.length][][];
for (int i = 0; i < typeArray.length; i++) {
// Add screen to DB
int screenId = startScreen + i;
// Keep the screen id counter up to date
- LauncherSettings.Settings.call(context.getContentResolver(),
+ LauncherSettings.Settings.call(sandboxContext.getContentResolver(),
LauncherSettings.Settings.METHOD_NEW_SCREEN_ID);
ids[i] = new int[typeArray[i].length][];
@@ -353,69 +413,45 @@
*/
public LauncherModelHelper setupDefaultLayoutProvider(LauncherLayoutBuilder builder)
throws Exception {
- Context context = RuntimeEnvironment.application;
- InvariantDeviceProfile idp = InvariantDeviceProfile.INSTANCE.get(context);
+ InvariantDeviceProfile idp = InvariantDeviceProfile.INSTANCE.get(sandboxContext);
idp.numRows = idp.numColumns = idp.numDatabaseHotseatIcons = DEFAULT_GRID_SIZE;
idp.iconBitmapSize = DEFAULT_BITMAP_SIZE;
- Settings.Secure.putString(context.getContentResolver(),
- "launcher3.layout.provider", TEST_PROVIDER_AUTHORITY);
+ UiDevice.getInstance(getInstrumentation()).executeShellCommand(
+ "settings put secure launcher3.layout.provider " + TEST_PROVIDER_AUTHORITY);
+ ContentProvider cp = new TestInformationProvider() {
- shadowOf(context.getPackageManager())
- .addProviderIfNotPresent(new ComponentName("com.test", "Mock")).authority =
- TEST_PROVIDER_AUTHORITY;
-
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- builder.build(new OutputStreamWriter(bos));
- Uri layoutUri = LauncherProvider.getLayoutUri(TEST_PROVIDER_AUTHORITY, context);
- shadowOf(context.getContentResolver()).registerInputStream(layoutUri,
- new ByteArrayInputStream(bos.toByteArray()));
+ @Override
+ public ParcelFileDescriptor openFile(Uri uri, String mode)
+ throws FileNotFoundException {
+ try {
+ ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
+ AutoCloseOutputStream outputStream = new AutoCloseOutputStream(pipe[1]);
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ builder.build(new OutputStreamWriter(bos));
+ outputStream.write(bos.toByteArray());
+ outputStream.flush();
+ outputStream.close();
+ return pipe[0];
+ } catch (Exception e) {
+ throw new FileNotFoundException(e.getMessage());
+ }
+ }
+ };
+ setupProvider(TEST_PROVIDER_AUTHORITY, cp);
return this;
}
/**
- * Simulates an apk install with a default main activity with same class and package name
- */
- public void installApp(String component) throws NameNotFoundException {
- IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
- filter.addCategory(Intent.CATEGORY_LAUNCHER);
- installApp(component, component, filter);
- }
-
- /**
- * Simulates a custom shortcut install
- */
- public void installCustomShortcut(String pkg, String clazz) throws NameNotFoundException {
- installApp(pkg, clazz, new IntentFilter(ACTION_CREATE_SHORTCUT));
- }
-
- private void installApp(String pkg, String clazz, IntentFilter filter)
- throws NameNotFoundException {
- ShadowPackageManager spm = shadowOf(RuntimeEnvironment.application.getPackageManager());
- ComponentName cn = new ComponentName(pkg, clazz);
- spm.addActivityIfNotPresent(cn);
-
- filter.addCategory(Intent.CATEGORY_DEFAULT);
- spm.addIntentFilterForActivity(cn, filter);
- }
-
- /**
* Loads the model in memory synchronously
*/
public void loadModelSync() throws ExecutionException, InterruptedException {
- // Since robolectric tests run on main thread, we run the loader-UI calls on a temp thread,
- // so that we can wait appropriately for the loader to complete.
- ShadowLooperExecutor sle = Shadow.extract(Executors.MAIN_EXECUTOR);
- sle.setHandler(Executors.UI_HELPER_EXECUTOR.getHandler());
-
- Callbacks mockCb = mock(Callbacks.class);
- getModel().addCallbacksAndLoad(mockCb);
+ Callbacks mockCb = new Callbacks() { };
+ Executors.MAIN_EXECUTOR.submit(() -> getModel().addCallbacksAndLoad(mockCb)).get();
Executors.MODEL_EXECUTOR.submit(() -> { }).get();
- Executors.UI_HELPER_EXECUTOR.submit(() -> { }).get();
-
- sle.setHandler(null);
- getModel().removeCallbacks(mockCb);
+ Executors.MAIN_EXECUTOR.submit(() -> { }).get();
+ Executors.MAIN_EXECUTOR.submit(() -> getModel().removeCallbacks(mockCb)).get();
}
/**
@@ -437,4 +473,97 @@
return mOpenHelper;
}
}
+
+ public static boolean deleteContents(File dir) {
+ File[] files = dir.listFiles();
+ boolean success = true;
+ if (files != null) {
+ for (File file : files) {
+ if (file.isDirectory()) {
+ success &= deleteContents(file);
+ }
+ if (!file.delete()) {
+ success = false;
+ }
+ }
+ }
+ return success;
+ }
+
+ public class SanboxModelContext extends SandboxContext {
+
+ private final ArrayMap<String, Object> mSpiedServices = new ArrayMap<>();
+ private final PackageManager mPm;
+ private final File mDbDir;
+
+ SanboxModelContext() {
+ super(ApplicationProvider.getApplicationContext(),
+ UserCache.INSTANCE, InstallSessionHelper.INSTANCE,
+ LauncherAppState.INSTANCE, InvariantDeviceProfile.INSTANCE,
+ DisplayController.INSTANCE, CustomWidgetManager.INSTANCE,
+ SettingsCache.INSTANCE, PluginManagerWrapper.INSTANCE,
+ ItemInstallQueue.INSTANCE);
+ mPm = spy(getBaseContext().getPackageManager());
+ mDbDir = new File(getCacheDir(), UUID.randomUUID().toString());
+ }
+
+ public SanboxModelContext allow(MainThreadInitializedObject object) {
+ mAllowedObjects.add(object);
+ return this;
+ }
+
+ @Override
+ public File getDatabasePath(String name) {
+ if (!mDbDir.exists()) {
+ mDbDir.mkdirs();
+ }
+ return new File(mDbDir, name);
+ }
+
+ @Override
+ public ContentResolver getContentResolver() {
+ return mMockResolver;
+ }
+
+ @Override
+ public void onDestroy() {
+ if (deleteContents(mDbDir)) {
+ mDbDir.delete();
+ }
+ super.onDestroy();
+ }
+
+
+ @Override
+ protected <T> T createObject(ObjectProvider<T> provider) {
+ return spy(provider.get(this));
+ }
+
+ @Override
+ public PackageManager getPackageManager() {
+ return mPm;
+ }
+
+ @Override
+ public Object getSystemService(String name) {
+ Object service = mSpiedServices.get(name);
+ return service != null ? service : super.getSystemService(name);
+ }
+
+ public <T> T spyService(Class<T> tClass) {
+ String name = getSystemServiceName(tClass);
+ Object service = mSpiedServices.get(name);
+ if (service != null) {
+ return (T) service;
+ }
+
+ T result = spy(getSystemService(tClass));
+ mSpiedServices.put(name, result);
+ return result;
+ }
+ }
+
+ private static Context testContext() {
+ return getInstrumentation().getContext();
+ }
}
diff --git a/tests/src/com/android/launcher3/util/ReflectionHelpers.java b/tests/src/com/android/launcher3/util/ReflectionHelpers.java
new file mode 100644
index 0000000..d89975d
--- /dev/null
+++ b/tests/src/com/android/launcher3/util/ReflectionHelpers.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+
+package com.android.launcher3.util;
+
+import java.lang.reflect.Field;
+
+public class ReflectionHelpers {
+
+ /**
+ * Reflectively get the value of a field.
+ *
+ * @param object Target object.
+ * @param fieldName The field name.
+ * @param <R> The return type.
+ * @return Value of the field on the object.
+ */
+ public static <R> R getField(Object object, String fieldName) {
+ try {
+ Field field = object.getClass().getDeclaredField(fieldName);
+ field.setAccessible(true);
+ return (R) field.get(object);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Reflectively set the value of a field.
+ *
+ * @param object Target object.
+ * @param fieldName The field name.
+ * @param fieldNewValue New value.
+ */
+ public static void setField(Object object, String fieldName, Object fieldNewValue) {
+ try {
+ Field field = object.getClass().getDeclaredField(fieldName);
+ field.setAccessible(true);
+ field.set(object, fieldNewValue);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}