Merge "Redesign the gesture tutorial for the Back gesture" into tm-qpr-dev am: 60c419b9b7
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/21779343 Change-Id: I00170b244f7e51be704d980b526c19b4980ed954 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
813a373212
18 files changed
+268
-43
No files matched your search
@@ -103,6 +103,7 @@
|
||||
<activity android:name="com.android.quickstep.interaction.GestureSandboxActivity"
|
||||
android:autoRemoveFromRecents="true"
|
||||
android:excludeFromRecents="true"
|
||||
android:theme="@style/GestureTutorialActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="com.android.quickstep.action.GESTURE_SANDBOX"/>
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2023 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="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingVertical="26dp"
|
||||
android:paddingHorizontal="56dp">
|
||||
|
||||
<View
|
||||
android:id="@+id/hotseat_icon_1"
|
||||
android:layout_width="@dimen/gesture_tutorial_hotseat_icon_size"
|
||||
android:layout_height="@dimen/gesture_tutorial_hotseat_icon_size"
|
||||
android:background="@drawable/hotseat_icon_home"
|
||||
android:clipToOutline="true"
|
||||
|
||||
app:layout_constraintBottom_toTopOf="@id/hotseat_icon_2"
|
||||
app:layout_constraintVertical_chainStyle="spread_inside"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<View
|
||||
android:id="@+id/hotseat_icon_2"
|
||||
android:layout_width="@dimen/gesture_tutorial_hotseat_icon_size"
|
||||
android:layout_height="@dimen/gesture_tutorial_hotseat_icon_size"
|
||||
android:background="@drawable/hotseat_icon_home"
|
||||
android:clipToOutline="true"
|
||||
|
||||
app:layout_constraintBottom_toTopOf="@id/hotseat_icon_3"
|
||||
app:layout_constraintTop_toBottomOf="@id/hotseat_icon_1"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<View
|
||||
android:id="@+id/hotseat_icon_3"
|
||||
android:layout_width="@dimen/gesture_tutorial_hotseat_icon_size"
|
||||
android:layout_height="@dimen/gesture_tutorial_hotseat_icon_size"
|
||||
android:background="@drawable/hotseat_icon_home"
|
||||
android:clipToOutline="true"
|
||||
|
||||
app:layout_constraintBottom_toTopOf="@id/hotseat_icon_4"
|
||||
app:layout_constraintTop_toBottomOf="@id/hotseat_icon_2"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<View
|
||||
android:id="@+id/hotseat_icon_4"
|
||||
android:layout_width="@dimen/gesture_tutorial_hotseat_icon_size"
|
||||
android:layout_height="@dimen/gesture_tutorial_hotseat_icon_size"
|
||||
android:background="@drawable/hotseat_icon_home"
|
||||
android:clipToOutline="true"
|
||||
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/hotseat_icon_3"
|
||||
app:layout_constraintBottom_toBottomOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2023 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.
|
||||
-->
|
||||
<View
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/back_gesture_tutorial_background"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
@@ -118,6 +118,14 @@
|
||||
android:scaleType="fitXY"
|
||||
android:visibility="gone" />
|
||||
|
||||
<View
|
||||
android:id="@+id/exiting_app_back"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_centerVertical="true"
|
||||
android:background="@color/gesture_back_tutorial_exiting_app"
|
||||
android:visibility="gone" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/full_gesture_demonstration"
|
||||
android:layout_width="match_parent"
|
||||
@@ -193,43 +201,33 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/gesture_tutorial_fragment_feedback_subtitle" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/gesture_tutorial_checkbox_bg"
|
||||
<com.airbnb.lottie.LottieAnimationView
|
||||
android:id="@+id/checkmark_animation"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="48dp"
|
||||
android:layout_marginTop="100dp"
|
||||
android:background="@drawable/gesture_tutorial_complete_checkmark_bg"
|
||||
android:gravity="center"
|
||||
android:scaleType="centerCrop"
|
||||
app:lottie_loop="false"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="@id/gesture_tutorial_fragment_action_button"
|
||||
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/gesture_tutorial_fragment_feedback_subtitle" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/gesture_tutorial_checkbox"
|
||||
android:layout_width="124dp"
|
||||
android:layout_height="124dp"
|
||||
android:background="@drawable/gesture_tutorial_complete_checkmark"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="@id/gesture_tutorial_checkbox_bg"
|
||||
app:layout_constraintEnd_toEndOf="@id/gesture_tutorial_checkbox_bg"
|
||||
app:layout_constraintStart_toStartOf="@id/gesture_tutorial_checkbox_bg"
|
||||
app:layout_constraintTop_toTopOf="@id/gesture_tutorial_checkbox_bg" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/gesture_tutorial_fragment_action_button"
|
||||
style="@style/TextAppearance.GestureTutorial.ButtonLabel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="48dp"
|
||||
android:background="@drawable/gesture_tutorial_action_button_background"
|
||||
android:stateListAnimator="@null"
|
||||
android:text="@string/gesture_tutorial_action_button_label"
|
||||
android:visibility="gone"
|
||||
android:visibility="invisible"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/gesture_tutorial_checkbox_bg" />
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/checkmark_animation" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.10.0","fr":60,"ip":0,"op":1980,"w":412,"h":892,"nm":"SUW_BackThumb_Combined_Preview","ddd":0,"assets":[{"id":"comp_0","nm":"Part01_ThumbDemo_Back_V01","fr":60,"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"HAND NULL","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.22],"y":[1]},"o":{"x":[0.18],"y":[-0.364]},"t":89,"s":[62]},{"i":{"x":[0.56],"y":[1]},"o":{"x":[0.44],"y":[0]},"t":140,"s":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":195,"s":[67]},{"i":{"x":[0.31],"y":[1]},"o":{"x":[0.77],"y":[0]},"t":224,"s":[67]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":257,"s":[47]},{"i":{"x":[0.48],"y":[1]},"o":{"x":[0.48],"y":[0]},"t":272,"s":[47]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":305,"s":[67]},{"i":{"x":[0.31],"y":[1]},"o":{"x":[0.77],"y":[0]},"t":322,"s":[67]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":355,"s":[47]},{"i":{"x":[0.53],"y":[1]},"o":{"x":[0.69],"y":[0]},"t":363,"s":[47]},{"t":410,"s":[62]}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":89,"s":[489]},{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.44],"y":[0]},"t":159,"s":[385]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":195,"s":[404]},{"i":{"x":[0.31],"y":[1]},"o":{"x":[0.77],"y":[0]},"t":224,"s":[404]},{"i":{"x":[0.31],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":257,"s":[358]},{"i":{"x":[0.48],"y":[1]},"o":{"x":[0.48],"y":[0]},"t":272,"s":[358]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":305,"s":[404]},{"i":{"x":[0.31],"y":[1]},"o":{"x":[0.77],"y":[0]},"t":322,"s":[404]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":355,"s":[358]},{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.48],"y":[0]},"t":363,"s":[358]},{"t":410,"s":[489]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.194],"y":[0]},"t":89,"s":[932.366]},{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":149,"s":[812.366]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":195,"s":[798.366]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":257,"s":[798.366]},{"i":{"x":[0.44],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":265,"s":[814.366]},{"i":{"x":[0.48],"y":[1]},"o":{"x":[0.48],"y":[0]},"t":272,"s":[814.366]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":305,"s":[798.366]},{"i":{"x":[0.55],"y":[1]},"o":{"x":[0.86],"y":[0]},"t":355,"s":[798.366]},{"t":410,"s":[932.366]}],"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"Void","np":20,"mn":"Pseudo/289611","ix":1,"en":1,"ef":[{"ty":0,"nm":"Width","mn":"Pseudo/289611-0001","ix":1,"v":{"a":0,"k":100,"ix":1}},{"ty":0,"nm":"Height","mn":"Pseudo/289611-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Offset X","mn":"Pseudo/289611-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":0,"nm":"Offset Y","mn":"Pseudo/289611-0004","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":6,"nm":"About","mn":"Pseudo/289611-0005","ix":5,"v":0},{"ty":6,"nm":"Plague of null layers.","mn":"Pseudo/289611-0006","ix":6,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0007","ix":7,"v":0},{"ty":6,"nm":"Following projects","mn":"Pseudo/289611-0008","ix":8,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0009","ix":9,"v":0},{"ty":6,"nm":"through time.","mn":"Pseudo/289611-0010","ix":10,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0011","ix":11,"v":0},{"ty":6,"nm":"Be free of the past.","mn":"Pseudo/289611-0012","ix":12,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0013","ix":13,"v":0},{"ty":6,"nm":"Void - 1.0.0","mn":"Pseudo/289611-0014","ix":14,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0015","ix":15,"v":0},{"ty":6,"nm":"© 2022 Battle Axe Inc","mn":"Pseudo/289611-0016","ix":16,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0017","ix":17,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0018","ix":18,"v":0}]}],"ip":89,"op":410,"st":89,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"⨳ Thumb KO","parent":1,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"k":[{"s":[27.686],"t":161,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[27.665],"t":162,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[27.634],"t":163,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[27.59],"t":164,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[27.53],"t":165,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[27.45],"t":166,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[27.35],"t":167,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[27.227],"t":168,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[27.086],"t":169,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[26.935],"t":170,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[26.785],"t":171,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[26.646],"t":172,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[26.519],"t":173,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[26.408],"t":174,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[26.31],"t":175,"i":Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.10.0","fr":60,"ip":0,"op":2011,"w":1280,"h":800,"nm":"SUW_Tablet_Back_Combined_Preview","ddd":0,"assets":[{"id":"comp_0","nm":"Part03_Demonstration_Back_Tablet_V01","fr":60,"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Pill Snap Release (RHS)","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":359,"s":[245]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":369,"s":[206]},{"i":{"x":[0.634],"y":[0.952]},"o":{"x":[1],"y":[0]},"t":434,"s":[206]},{"i":{"x":[0.27],"y":[1]},"o":{"x":[0.386],"y":[-0.394]},"t":485,"s":[-287.2]},{"t":545,"s":[-227.2]}],"ix":3},"y":{"a":0,"k":469,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"Void","np":20,"mn":"Pseudo/289611","ix":1,"en":1,"ef":[{"ty":0,"nm":"Width","mn":"Pseudo/289611-0001","ix":1,"v":{"a":0,"k":100,"ix":1}},{"ty":0,"nm":"Height","mn":"Pseudo/289611-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Offset X","mn":"Pseudo/289611-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":0,"nm":"Offset Y","mn":"Pseudo/289611-0004","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":6,"nm":"About","mn":"Pseudo/289611-0005","ix":5,"v":0},{"ty":6,"nm":"Plague of null layers.","mn":"Pseudo/289611-0006","ix":6,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0007","ix":7,"v":0},{"ty":6,"nm":"Following projects","mn":"Pseudo/289611-0008","ix":8,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0009","ix":9,"v":0},{"ty":6,"nm":"through time.","mn":"Pseudo/289611-0010","ix":10,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0011","ix":11,"v":0},{"ty":6,"nm":"Be free of the past.","mn":"Pseudo/289611-0012","ix":12,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0013","ix":13,"v":0},{"ty":6,"nm":"Void - 1.0.0","mn":"Pseudo/289611-0014","ix":14,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0015","ix":15,"v":0},{"ty":6,"nm":"© 2022 Battle Axe Inc","mn":"Pseudo/289611-0016","ix":16,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0017","ix":17,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0018","ix":18,"v":0}]}],"ip":0,"op":637,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"Center to Right Side","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.31],"y":[1]},"o":{"x":[0.74],"y":[0]},"t":193,"s":[-39]},{"t":254,"s":[1003]}],"ix":3},"y":{"a":0,"k":0,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"Void","np":20,"mn":"Pseudo/289611","ix":1,"en":1,"ef":[{"ty":0,"nm":"Width","mn":"Pseudo/289611-0001","ix":1,"v":{"a":0,"k":100,"ix":1}},{"ty":0,"nm":"Height","mn":"Pseudo/289611-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Offset X","mn":"Pseudo/289611-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":0,"nm":"Offset Y","mn":"Pseudo/289611-0004","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":6,"nm":"About","mn":"Pseudo/289611-0005","ix":5,"v":0},{"ty":6,"nm":"Plague of null layers.","mn":"Pseudo/289611-0006","ix":6,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0007","ix":7,"v":0},{"ty":6,"nm":"Following projects","mn":"Pseudo/289611-0008","ix":8,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0009","ix":9,"v":0},{"ty":6,"nm":"through time.","mn":"Pseudo/289611-0010","ix":10,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0011","ix":11,"v":0},{"ty":6,"nm":"Be free of the past.","mn":"Pseudo/289611-0012","ix":12,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0013","ix":13,"v":0},{"ty":6,"nm":"Void - 1.0.0","mn":"Pseudo/289611-0014","ix":14,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0015","ix":15,"v":0},{"ty":6,"nm":"© 2022 Battle Axe Inc","mn":"Pseudo/289611-0016","ix":16,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0017","ix":17,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0018","ix":18,"v":0}]}],"ip":0,"op":637,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"Pill Snap Release (LHS)","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":99,"s":[-36]},{"t":109,"s":[0]}],"ix":3},"y":{"a":0,"k":0,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"Void","np":20,"mn":"Pseudo/289611","ix":1,"en":1,"ef":[{"ty":0,"nm":"Width","mn":"Pseudo/289611-0001","ix":1,"v":{"a":0,"k":100,"ix":1}},{"ty":0,"nm":"Height","mn":"Pseudo/289611-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Offset X","mn":"Pseudo/289611-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":0,"nm":"Offset Y","mn":"Pseudo/289611-0004","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":6,"nm":"About","mn":"Pseudo/289611-0005","ix":5,"v":0},{"ty":6,"nm":"Plague of null layers.","mn":"Pseudo/289611-0006","ix":6,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0007","ix":7,"v":0},{"ty":6,"nm":"Following projects","mn":"Pseudo/289611-0008","ix":8,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/28Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.10.0","fr":60,"ip":0,"op":76,"w":280,"h":280,"nm":"Checkmark_08_V02_Confetti_EasedRock_Lottie","ddd":0,"assets":[{"id":"comp_0","nm":"Explosion.pre","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Explosion 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[0]},{"t":51,"s":[45]}],"ix":10},"p":{"s":true,"x":{"a":0,"k":0,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.22],"y":[1]},"o":{"x":[0.18],"y":[0.857]},"t":0,"s":[-29]},{"t":44,"s":[-120]}],"ix":4}},"a":{"a":0,"k":[70.773,-46.256,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.73,0.73],"y":[0.04,0.04]},"o":{"x":[0.6,0.6],"y":[-0.28,-0.28]},"t":18,"s":[12,12]},{"t":46,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":2,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8784314394,0.913725554943,0.580392181873,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[70.773,-46.256],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":51,"st":-73,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Explosion 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":200,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.22],"y":[1]},"o":{"x":[0.18],"y":[1]},"t":0,"s":[171]},{"t":44,"s":[93]}],"ix":4}},"a":{"a":0,"k":[70.773,-46.256,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.72,0.72],"y":[0.8,0.8]},"o":{"x":[0.9,0.9],"y":[0,0]},"t":21,"s":[12,12]},{"t":45,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8784314394,0.913725554943,0.580392181873,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[70.773,-46.256],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":45,"st":-73,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"Explosion 2 ROTATE","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":1,"s":[10]},{"t":21,"s":[15]}],"ix":10},"p":{"a":0,"k":[200,200,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"Size","np":3,"mn":"ADBE Point Control","ix":1,"en":1,"ef":[{"ty":3,"nm":"Point","mn":"ADBE Point Control-0001","ix":1,"v":{"a":0,"k":[97.087,44.843],"ix":1}}]}],"ip":0,"op":21,"st":-73,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"Explosion 2","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":60,"ix":10},"p":{"a":0,"k":[200,200,0],"ix":2,"l":2},"a":{"a":0,"k":[200,200,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":400,"h":400,"ip":1,"op":50,"st":1,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"Explosion 2","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":240,"ix":10},"p":{"a":0,"k":[200,200,0],"ix":2,"l":2},"a":{"a":0,"k":[200,200,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"w":400,"h":400,"ip":0,"op":50,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"Explosion 3","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-60,"ix":10},"p":{"a":0,"k":[200,200,0],"ix":2,"l":2},"a":{"a":0,"k":[200,200,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":400,"h":400,"ip":1,"op":50,"st":1,"bm":0},{"ddd":0,"ind":7,"ty":0,"nm":"Explosion 3","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":120,"ix":10},"p":{"a":0,"k":[200,200,0],"ix":2,"l":2},"a":{"a":0,"k":[200,200,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":400,"h":400,"ip":2,"op":50,"st":2,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Explosion 5","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[0]},{"t":51,"s":[45]}],"ix":10},"p":{"s":true,"x":{"a":0,"k":0,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.22],"y":[1]},"o":{"x":[0.18],"y":[0.857]},"t":0,"s":[-29]},{"t":44,"s":[-120]}],"ix":4}},"a":{"a":0,"k":[70.773,-46.256,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.73,0.7Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.10.0","fr":60,"ip":0,"op":44,"w":190,"h":190,"nm":"Checkmark_01_PopIn_V03_EasedRock_Lottie","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Check Rotate","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.44],"y":[0]},"t":2,"s":[-16]},{"t":20,"s":[6]}],"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[95.049,95.049,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"Size","np":3,"mn":"ADBE Point Control","ix":1,"en":1,"ef":[{"ty":3,"nm":"Point","mn":"ADBE Point Control-0001","ix":1,"v":{"a":0,"k":[46.117,21.3],"ix":1}}]}],"ip":0,"op":228,"st":-72,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"Bounce","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.44],"y":[0]},"t":12,"s":[0]},{"t":36,"s":[-6]}],"ix":10},"p":{"a":0,"k":[81,127,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.263,0.263,0.833],"y":[1.126,1.126,-8.048]},"o":{"x":[0.05,0.05,0.05],"y":[0.958,0.958,0]},"t":1,"s":[80,80,100]},{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.45,0.45,0.167],"y":[0.325,0.325,7.619]},"t":20,"s":[105,105,100]},{"t":36,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"Size","np":3,"mn":"ADBE Point Control","ix":1,"en":1,"ef":[{"ty":3,"nm":"Point","mn":"ADBE Point Control-0001","ix":1,"v":{"a":0,"k":[46.117,21.3],"ix":1}}]}],"ip":0,"op":300,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Top Matte","parent":1,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0.001,"ix":10},"p":{"a":0,"k":[14.451,-31.977,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[105.208,105.208,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[115,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":1,"k":[{"i":{"x":0.22,"y":1},"o":{"x":0.18,"y":1},"t":7,"s":[-67,-83],"to":[0,0],"ti":[0,0]},{"t":27,"s":[-67,-2]}],"ix":1},"s":{"a":0,"k":[10,100],"ix":3},"r":{"a":0,"k":45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"POST 2","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"TOP MATTE","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":8,"op":523,"st":-77,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Top Post","parent":1,"tt":1,"tp":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[14.451,-31.977,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[105.208,105.208,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-21.368,24.466],[34.156,-31.011],[40.677,-24.489],[-14.823,31.011]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"icon 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":8,"op":523,"st":-77,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Bottom Matte","parent":1,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0.001,"ix":10},"p":{"a":0,"k":[14.451,-31.977,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[105.208,105.208,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[115,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"tr","p":{"a":0,"k":[0.25,0],"ix":2},"a":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":3,"s":[278,77],"to":[0,0],"ti":[0,0]},{"t":10,"s":[278,39]}],"ix":1},"s":{"a":0,"k":[10,100],"ix":3},"r":{"a":0,"k":-45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"POST 1","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ixLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.10.0","fr":60,"ip":0,"op":1327,"w":1280,"h":800,"nm":"SUW_Home_Tablet","ddd":0,"assets":[{"id":"comp_0","nm":"Part03_Demonstration_Tablet_Home_V01","fr":60,"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"CHARACTER REPO","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":640,"ix":3},"y":{"a":0,"k":779,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"Void","np":20,"mn":"Pseudo/289611","ix":1,"en":1,"ef":[{"ty":0,"nm":"Width","mn":"Pseudo/289611-0001","ix":1,"v":{"a":0,"k":100,"ix":1}},{"ty":0,"nm":"Height","mn":"Pseudo/289611-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Offset X","mn":"Pseudo/289611-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":0,"nm":"Offset Y","mn":"Pseudo/289611-0004","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":6,"nm":"About","mn":"Pseudo/289611-0005","ix":5,"v":0},{"ty":6,"nm":"Plague of null layers.","mn":"Pseudo/289611-0006","ix":6,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0007","ix":7,"v":0},{"ty":6,"nm":"Following projects","mn":"Pseudo/289611-0008","ix":8,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0009","ix":9,"v":0},{"ty":6,"nm":"through time.","mn":"Pseudo/289611-0010","ix":10,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0011","ix":11,"v":0},{"ty":6,"nm":"Be free of the past.","mn":"Pseudo/289611-0012","ix":12,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0013","ix":13,"v":0},{"ty":6,"nm":"Void - 1.0.0","mn":"Pseudo/289611-0014","ix":14,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0015","ix":15,"v":0},{"ty":6,"nm":"© 2022 Battle Axe Inc","mn":"Pseudo/289611-0016","ix":16,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0017","ix":17,"v":0},{"ty":6,"nm":"Void","mn":"Pseudo/289611-0018","ix":18,"v":0}]}],"ip":0,"op":82,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"Y Movement","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":0,"ix":3},"y":{"k":[{"s":[0],"t":53,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-0.35],"t":54,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-1.448],"t":55,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-3.38],"t":56,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-6.246],"t":57,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-10.17],"t":58,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-15.303],"t":59,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-21.839],"t":60,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-30.026],"t":61,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-40.193],"t":62,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-52.792],"t":63,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-68.472],"t":64,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-88.211],"t":65,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-113.603],"t":66,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-147.481],"t":67,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-195.318],"t":68,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-263.349],"t":69,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-316.952],"t":70,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-329],"t":71,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-385.283],"t":72,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-416.494],"t":73,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-435.864],"t":74,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-449.465],"t":75,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-459.751],"t":76,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-467.9],"t":77,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-474.564],"t":78,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-480.138],"t":79,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-484.877],"t":80,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-488.958],"t":81,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-492.507],"t":82,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-495.618],"t":83,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-498.362],"t":84,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-500.793],"t":85,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-502.957],"t":86,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-504.887],"t":87,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-506.614],"t":88,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-508.16],"t":89,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-509.547],"t":90,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-510.791],"t":91,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-511.906],"t":92,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-512.904],"t":93,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-513.798],"t":94,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-514.596],"t":95,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-515.306],"t":96,"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]}},{"s":[-515.935],"t":97,"i":{"x":[1],"y":[1]},"o"Line truncated
|
||||
@@ -45,8 +45,8 @@
|
||||
<!-- Redesigned gesture navigation tutorial -->
|
||||
<color name="gesture_home_tutorial_background">#FFB399</color>
|
||||
<color name="gesture_home_tutorial_swipe_up_rect">#3857C7</color>
|
||||
<color name="gesture_back_tutorial_background">#F3A5B9</color>
|
||||
<color name="gesture_back_tutorial_swipe_rect">#217500</color>
|
||||
<color name="gesture_back_tutorial_exiting_app">#F3A5B9</color>
|
||||
<color name="gesture_back_tutorial_background">#3857C7</color>
|
||||
<color name="gesture_overview_tutorial_swipe_rect">#7E44AD</color>
|
||||
|
||||
<!-- Mock hotseat -->
|
||||
|
||||
@@ -121,6 +121,8 @@
|
||||
<dimen name="gesture_tutorial_multi_row_task_view_spacing">72dp</dimen>
|
||||
<dimen name="gesture_tutorial_small_task_view_corner_radius">18dp</dimen>
|
||||
<dimen name="gesture_tutorial_mock_taskbar_height">80dp</dimen>
|
||||
<dimen name="gesture_tutorial_back_gesture_exiting_app_margin">8dp</dimen>
|
||||
<dimen name="gesture_tutorial_back_gesture_end_corner_radius">36dp</dimen>
|
||||
|
||||
<!-- Gesture Tutorial mock conversations -->
|
||||
<dimen name="gesture_tutorial_message_icon_size">44dp</dimen>
|
||||
|
||||
@@ -117,6 +117,8 @@
|
||||
<string name="back_gesture_intro_subtitle">To go back to the last screen, swipe from the left or right edge to the middle of the screen.</string>
|
||||
<!-- Introduction subtitle for the Back gesture tutorial that will be spoken by screen readers. [CHAR LIMIT=200] -->
|
||||
<string name="back_gesture_spoken_intro_subtitle">To go back to the last screen, swipe with 2 fingers from the left or right edge to the middle of the screen.</string>
|
||||
<!-- Title of the gesture tutorial section educating users on how to go back to the previous screen. [CHAR LIMIT=100] -->
|
||||
<string name="back_gesture_tutorial_title">Go back</string>
|
||||
|
||||
<string name="home_gesture_feedback_swipe_too_far_from_edge">Make sure you swipe up from the bottom edge of the screen.</string>
|
||||
<!-- Feedback shown during interactive parts of Home gesture tutorial when the Overview gesture is detected. [CHAR LIMIT=100] -->
|
||||
|
||||
@@ -230,4 +230,9 @@
|
||||
<item name="android:textColor">?android:attr/textColorPrimary</item>
|
||||
<item name="lineHeight">20sp</item>
|
||||
</style>
|
||||
|
||||
<style name="GestureTutorialActivity"
|
||||
parent="@style/AppTheme">
|
||||
<item name="background">@android:color/transparent</item>
|
||||
</style>
|
||||
</resources>
|
||||
+71
-10
@@ -15,18 +15,24 @@
|
||||
*/
|
||||
package com.android.quickstep.interaction;
|
||||
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_NEW_GESTURE_NAV_TUTORIAL;
|
||||
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 android.view.View;
|
||||
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.quickstep.interaction.EdgeBackGestureHandler.BackGestureResult;
|
||||
import com.android.quickstep.interaction.NavBarGestureHandler.NavBarGestureResult;
|
||||
|
||||
/** A {@link TutorialController} for the Back tutorial. */
|
||||
final class BackGestureTutorialController extends TutorialController {
|
||||
private static final float Y_TRANSLATION_SMOOTHENING_FACTOR = .2f;
|
||||
private static final float EXITING_APP_MIN_SIZE_PERCENTAGE = .8f;
|
||||
|
||||
BackGestureTutorialController(BackGestureTutorialFragment fragment, TutorialType tutorialType) {
|
||||
super(fragment, tutorialType);
|
||||
@@ -34,7 +40,9 @@ final class BackGestureTutorialController extends TutorialController {
|
||||
|
||||
@Override
|
||||
public int getIntroductionTitle() {
|
||||
return R.string.back_gesture_intro_title;
|
||||
return ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()
|
||||
? R.string.back_gesture_tutorial_title
|
||||
: R.string.back_gesture_intro_title;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,27 +69,32 @@ final class BackGestureTutorialController extends TutorialController {
|
||||
|
||||
@Override
|
||||
protected int getGestureLottieAnimationId() {
|
||||
// TODO(b/253521922): Change to correct LottieAnimationView
|
||||
return R.raw.home_gesture_tutorial_animation;
|
||||
return mTutorialFragment.isLargeScreen()
|
||||
? R.raw.back_gesture_tutorial_tablet_animation
|
||||
: R.raw.back_gesture_tutorial_animation;
|
||||
}
|
||||
|
||||
@LayoutRes
|
||||
int getMockAppTaskCurrentPageLayoutResId() {
|
||||
return mTutorialFragment.isLargeScreen()
|
||||
? R.layout.gesture_tutorial_tablet_mock_conversation
|
||||
: R.layout.gesture_tutorial_mock_conversation;
|
||||
return ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()
|
||||
? R.layout.back_gesture_tutorial_background
|
||||
: mTutorialFragment.isLargeScreen()
|
||||
? R.layout.gesture_tutorial_tablet_mock_conversation
|
||||
: R.layout.gesture_tutorial_mock_conversation;
|
||||
}
|
||||
|
||||
@LayoutRes
|
||||
int getMockAppTaskPreviousPageLayoutResId() {
|
||||
return mTutorialFragment.isLargeScreen()
|
||||
? R.layout.gesture_tutorial_tablet_mock_conversation_list
|
||||
: R.layout.gesture_tutorial_mock_conversation_list;
|
||||
return ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()
|
||||
? R.layout.back_gesture_tutorial_background
|
||||
: mTutorialFragment.isLargeScreen()
|
||||
? R.layout.gesture_tutorial_tablet_mock_conversation_list
|
||||
: R.layout.gesture_tutorial_mock_conversation_list;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getSwipeActionColorResId() {
|
||||
return R.color.gesture_back_tutorial_swipe_rect;
|
||||
return R.color.gesture_back_tutorial_background;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -102,11 +115,59 @@ final class BackGestureTutorialController extends TutorialController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackGestureProgress(float diffx, float diffy, boolean isLeftGesture) {
|
||||
if (isGestureCompleted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
float normalizedSwipeProgress = Math.abs(diffx / mScreenWidth);
|
||||
float smoothedExitingAppScale = Utilities.mapBoundToRange(
|
||||
normalizedSwipeProgress,
|
||||
/* lowerBound = */ 0f,
|
||||
/* upperBound = */ 1f,
|
||||
/* toMin = */ 1f,
|
||||
/* toMax = */ EXITING_APP_MIN_SIZE_PERCENTAGE,
|
||||
Interpolators.DEACCEL);
|
||||
|
||||
// shrink the exiting app as we progress through the back gesture
|
||||
mExitingAppView.setPivotX(isLeftGesture ? mScreenWidth : 0);
|
||||
mExitingAppView.setPivotY(mScreenHeight / 2f);
|
||||
mExitingAppView.setScaleX(smoothedExitingAppScale);
|
||||
mExitingAppView.setScaleY(smoothedExitingAppScale);
|
||||
mExitingAppView.setTranslationY(diffy * Y_TRANSLATION_SMOOTHENING_FACTOR);
|
||||
mExitingAppView.setTranslationX(Utilities.mapBoundToRange(
|
||||
normalizedSwipeProgress,
|
||||
/* lowerBound = */ 0f,
|
||||
/* upperBound = */ 1f,
|
||||
/* toMin = */ 0,
|
||||
/* toMax = */ mExitingAppMargin,
|
||||
Interpolators.DEACCEL)
|
||||
* (isLeftGesture ? -1 : 1));
|
||||
|
||||
// round the corners of the exiting app as we progress through the back gesture
|
||||
mExitingAppRadius = (int) Utilities.mapBoundToRange(
|
||||
normalizedSwipeProgress,
|
||||
/* lowerBound = */ 0f,
|
||||
/* upperBound = */ 1f,
|
||||
/* toMin = */ mExitingAppStartingCornerRadius,
|
||||
/* toMax = */ mExitingAppEndingCornerRadius,
|
||||
Interpolators.EMPHASIZED_DECELERATE);
|
||||
mExitingAppView.invalidateOutline();
|
||||
}
|
||||
|
||||
private void handleBackAttempt(BackGestureResult result) {
|
||||
if (ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()) {
|
||||
resetViewsForBackGesture();
|
||||
}
|
||||
|
||||
switch (result) {
|
||||
case BACK_COMPLETED_FROM_LEFT:
|
||||
case BACK_COMPLETED_FROM_RIGHT:
|
||||
mTutorialFragment.releaseFeedbackAnimation();
|
||||
if (ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()) {
|
||||
mExitingAppView.setVisibility(View.GONE);
|
||||
}
|
||||
updateFakeAppTaskViewLayout(getMockAppTaskPreviousPageLayoutResId());
|
||||
showSuccessFeedback();
|
||||
break;
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.android.quickstep.interaction;
|
||||
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_NEW_GESTURE_NAV_TUTORIAL;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Point;
|
||||
@@ -29,8 +31,8 @@ import android.view.ViewGroup.LayoutParams;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.testing.shared.ResourceUtils;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.testing.shared.ResourceUtils;
|
||||
import com.android.launcher3.util.DisplayController;
|
||||
|
||||
/**
|
||||
@@ -207,7 +209,11 @@ public class EdgeBackGestureHandler implements OnTouchListener {
|
||||
mThresholdCrossed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()) {
|
||||
mGestureCallback.onBackGestureProgress(ev.getX() - mDownPoint.x,
|
||||
ev.getY() - mDownPoint.y, mEdgeBackPanel.getIsLeftPanel());
|
||||
}
|
||||
|
||||
// forward touch
|
||||
@@ -242,5 +248,8 @@ public class EdgeBackGestureHandler implements OnTouchListener {
|
||||
interface BackGestureAttemptCallback {
|
||||
/** Called whenever any touch is completed. */
|
||||
void onBackGestureAttempted(BackGestureResult result);
|
||||
|
||||
/** Called when the back gesture is recognized and is in progress. */
|
||||
default void onBackGestureProgress(float diffx, float diffy, boolean isLeftGesture) {}
|
||||
}
|
||||
}
|
||||
@@ -70,7 +70,9 @@ final class HomeGestureTutorialController extends SwipeUpGestureTutorialControll
|
||||
|
||||
@Override
|
||||
protected int getGestureLottieAnimationId() {
|
||||
return R.raw.home_gesture_tutorial_animation;
|
||||
return mTutorialFragment.isLargeScreen()
|
||||
? R.raw.home_gesture_tutorial_tablet_animation
|
||||
: R.raw.home_gesture_tutorial_animation;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -30,12 +30,15 @@ import android.annotation.ColorRes;
|
||||
import android.annotation.RawRes;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Outline;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.RippleDrawable;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewOutlineProvider;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.widget.Button;
|
||||
import android.widget.FrameLayout;
|
||||
@@ -59,6 +62,7 @@ import com.android.launcher3.anim.AnimatorListeners;
|
||||
import com.android.launcher3.views.ClipIconView;
|
||||
import com.android.quickstep.interaction.EdgeBackGestureHandler.BackGestureAttemptCallback;
|
||||
import com.android.quickstep.interaction.NavBarGestureHandler.NavBarGestureAttemptCallback;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
|
||||
import com.airbnb.lottie.LottieAnimationView;
|
||||
|
||||
@@ -81,6 +85,11 @@ abstract class TutorialController implements BackGestureAttemptCallback,
|
||||
private static final int GESTURE_ANIMATION_DELAY_MS = 1500;
|
||||
private static final int ADVANCE_TUTORIAL_TIMEOUT_MS = 2000;
|
||||
private static final long GESTURE_ANIMATION_PAUSE_DURATION_MILLIS = 1000;
|
||||
protected float mExitingAppEndingCornerRadius;
|
||||
protected float mExitingAppStartingCornerRadius;
|
||||
protected int mScreenHeight;
|
||||
protected float mScreenWidth;
|
||||
protected float mExitingAppMargin;
|
||||
|
||||
final TutorialFragment mTutorialFragment;
|
||||
TutorialType mTutorialType;
|
||||
@@ -103,10 +112,14 @@ abstract class TutorialController implements BackGestureAttemptCallback,
|
||||
final RippleDrawable mRippleDrawable;
|
||||
final TutorialStepIndicator mTutorialStepView;
|
||||
final ImageView mFingerDotView;
|
||||
private final Rect mExitingAppRect = new Rect();
|
||||
protected View mExitingAppView;
|
||||
protected int mExitingAppRadius;
|
||||
private final AlertDialog mSkipTutorialDialog;
|
||||
|
||||
private boolean mGestureCompleted = false;
|
||||
private LottieAnimationView mAnimatedGestureDemonstration;
|
||||
private LottieAnimationView mCheckmarkAnimation;
|
||||
private RelativeLayout mFullGestureDemonstration;
|
||||
|
||||
// These runnables should be used when posting callbacks to their views and cleared from their
|
||||
@@ -147,13 +160,28 @@ abstract class TutorialController implements BackGestureAttemptCallback,
|
||||
mSkipTutorialDialog = createSkipTutorialDialog();
|
||||
|
||||
if (ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()) {
|
||||
mAnimatedGestureDemonstration = mTutorialFragment.getRootView().findViewById(
|
||||
mFullGestureDemonstration = rootView.findViewById(R.id.full_gesture_demonstration);
|
||||
mCheckmarkAnimation = rootView.findViewById(R.id.checkmark_animation);
|
||||
mAnimatedGestureDemonstration = rootView.findViewById(
|
||||
R.id.gesture_demonstration_animations);
|
||||
mFullGestureDemonstration = mTutorialFragment.getRootView().findViewById(
|
||||
R.id.full_gesture_demonstration);
|
||||
mExitingAppView = rootView.findViewById(R.id.exiting_app_back);
|
||||
mScreenWidth = mTutorialFragment.getDeviceProfile().widthPx;
|
||||
mScreenHeight = mTutorialFragment.getDeviceProfile().heightPx;
|
||||
mExitingAppMargin = mContext.getResources().getDimensionPixelSize(
|
||||
R.dimen.gesture_tutorial_back_gesture_exiting_app_margin);
|
||||
mExitingAppStartingCornerRadius = QuickStepContract.getWindowCornerRadius(mContext);
|
||||
mExitingAppEndingCornerRadius = mContext.getResources().getDimensionPixelSize(
|
||||
R.dimen.gesture_tutorial_back_gesture_end_corner_radius);
|
||||
|
||||
mFeedbackTitleView.setText(getIntroductionTitle());
|
||||
mFeedbackSubtitleView.setText(getIntroductionSubtitle());
|
||||
mExitingAppView.setClipToOutline(true);
|
||||
mExitingAppView.setOutlineProvider(new ViewOutlineProvider() {
|
||||
@Override
|
||||
public void getOutline(View view, Outline outline) {
|
||||
outline.setRoundRect(mExitingAppRect, mExitingAppRadius);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
mTitleViewCallback = () -> mFeedbackTitleView.sendAccessibilityEvent(
|
||||
@@ -373,10 +401,8 @@ abstract class TutorialController implements BackGestureAttemptCallback,
|
||||
}
|
||||
|
||||
private void showSuccessPage() {
|
||||
mFeedbackView.findViewById(
|
||||
R.id.gesture_tutorial_checkbox_bg).setVisibility(View.VISIBLE);
|
||||
mFeedbackView.findViewById(
|
||||
R.id.gesture_tutorial_checkbox).setVisibility(View.VISIBLE);
|
||||
mCheckmarkAnimation.setVisibility(View.VISIBLE);
|
||||
mCheckmarkAnimation.playAnimation();
|
||||
mFeedbackTitleView.setTextAppearance(R.style.TextAppearance_GestureTutorial_SuccessTitle);
|
||||
mFeedbackSubtitleView.setTextAppearance(
|
||||
R.style.TextAppearance_GestureTutorial_SuccessSubtitle);
|
||||
@@ -496,7 +522,17 @@ abstract class TutorialController implements BackGestureAttemptCallback,
|
||||
updateLayout();
|
||||
|
||||
if (ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()) {
|
||||
startGestureAnimation();
|
||||
mCheckmarkAnimation.setAnimation(mTutorialFragment.isAtFinalStep()
|
||||
? R.raw.checkmark_animation_end
|
||||
: R.raw.checkmark_animation_in_progress);
|
||||
if (!isGestureCompleted()) {
|
||||
mCheckmarkAnimation.setVisibility(GONE);
|
||||
startGestureAnimation();
|
||||
if (mTutorialType == TutorialType.BACK_NAVIGATION) {
|
||||
resetViewsForBackGesture();
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
hideFeedback();
|
||||
hideActionButton();
|
||||
@@ -508,6 +544,23 @@ abstract class TutorialController implements BackGestureAttemptCallback,
|
||||
}
|
||||
}
|
||||
|
||||
protected void resetViewsForBackGesture() {
|
||||
mFakeTaskView.setVisibility(View.VISIBLE);
|
||||
mFakeTaskView.setBackgroundColor(
|
||||
mContext.getColor(R.color.gesture_back_tutorial_background));
|
||||
mExitingAppView.setVisibility(View.VISIBLE);
|
||||
|
||||
// reset the exiting app's dimensions
|
||||
mExitingAppRect.set(0, 0, (int) mScreenWidth, (int) mScreenHeight);
|
||||
mExitingAppRadius = 0;
|
||||
mExitingAppView.resetPivot();
|
||||
mExitingAppView.setScaleX(1f);
|
||||
mExitingAppView.setScaleY(1f);
|
||||
mExitingAppView.setTranslationX(0);
|
||||
mExitingAppView.setTranslationY(0);
|
||||
mExitingAppView.invalidateOutline();
|
||||
}
|
||||
|
||||
private void startGestureAnimation() {
|
||||
mAnimatedGestureDemonstration.setAnimation(getGestureLottieAnimationId());
|
||||
mAnimatedGestureDemonstration.playAnimation();
|
||||
|
||||
@@ -312,7 +312,6 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
|
||||
if (mEdgeAnimation != null && mEdgeAnimation.isRunning()) {
|
||||
mEdgeAnimation.stop();
|
||||
}
|
||||
|
||||
mEdgeGestureVideoView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user