Merge "Introducing CellPosMapper which allows mapping between UI position and model position" into tm-qpr-dev
diff --git a/quickstep/res/drawable/mock_app_icon.xml b/quickstep/res/drawable/mock_app_icon.xml
new file mode 100644
index 0000000..92cdea3
--- /dev/null
+++ b/quickstep/res/drawable/mock_app_icon.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/mock_app_icon" />
+    <corners android:radius="@dimen/gesture_tutorial_taskbar_icon_corner_radius" />
+</shape>
\ No newline at end of file
diff --git a/quickstep/res/drawable/mock_taskbar_background.xml b/quickstep/res/drawable/mock_taskbar_background.xml
new file mode 100644
index 0000000..8ac9080
--- /dev/null
+++ b/quickstep/res/drawable/mock_taskbar_background.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/gesture_tutorial_taskbar_color" />
+    <corners android:radius="@dimen/gesture_tutorial_taskbar_corner_radius" />
+</shape>
\ No newline at end of file
diff --git a/quickstep/res/layout-land/gesture_tutorial_mock_hotseat.xml b/quickstep/res/layout-land/gesture_tutorial_mock_hotseat.xml
index 20d2ecc..1e2e014 100644
--- a/quickstep/res/layout-land/gesture_tutorial_mock_hotseat.xml
+++ b/quickstep/res/layout-land/gesture_tutorial_mock_hotseat.xml
@@ -31,7 +31,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_1"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintVertical_chainStyle="spread_inside"
         app:layout_constraintTop_toTopOf="parent"
@@ -45,7 +45,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_2"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_icon_1"
         app:layout_constraintBottom_toTopOf="@id/hotseat_icon_3"
@@ -58,7 +58,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_3"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_icon_2"
         app:layout_constraintBottom_toTopOf="@id/hotseat_icon_4"
@@ -71,7 +71,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_4"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_icon_3"
         app:layout_constraintBottom_toBottomOf="parent"
diff --git a/quickstep/res/layout-land/gesture_tutorial_tablet_mock_hotseat.xml b/quickstep/res/layout-land/gesture_tutorial_tablet_mock_hotseat.xml
index 6877b89..f04fbb6 100644
--- a/quickstep/res/layout-land/gesture_tutorial_tablet_mock_hotseat.xml
+++ b/quickstep/res/layout-land/gesture_tutorial_tablet_mock_hotseat.xml
@@ -43,7 +43,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_1"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
@@ -57,7 +57,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_2"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
@@ -71,7 +71,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_3"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
@@ -85,7 +85,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_1"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
@@ -99,25 +99,11 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_4"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_4"
-        app:layout_constraintEnd_toStartOf="@id/hotseat_icon_6"/>
-
-    <androidx.cardview.widget.CardView
-        android:id="@+id/hotseat_icon_6"
-        android:layout_width="@dimen/gesture_tutorial_hotseat_icon_size"
-        android:layout_height="@dimen/gesture_tutorial_hotseat_icon_size"
-
-        app:cardElevation="0dp"
-        app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_2"
-        app:layout_constraintDimensionRatio="1:1"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toEndOf="@id/hotseat_icon_5"
         app:layout_constraintEnd_toEndOf="parent"/>
 
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/quickstep/res/layout/gesture_tutorial_foldable_mock_hotseat.xml b/quickstep/res/layout/gesture_tutorial_foldable_mock_hotseat.xml
index 027e4a0..363f14e 100644
--- a/quickstep/res/layout/gesture_tutorial_foldable_mock_hotseat.xml
+++ b/quickstep/res/layout/gesture_tutorial_foldable_mock_hotseat.xml
@@ -42,7 +42,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_1"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintHorizontal_chainStyle="spread_inside"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
@@ -57,7 +57,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_2"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_1"
@@ -71,7 +71,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_3"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_2"
@@ -85,7 +85,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_1"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_3"
@@ -99,24 +99,10 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_4"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_4"
-        app:layout_constraintEnd_toStartOf="@id/hotseat_icon_6"/>
-
-    <androidx.cardview.widget.CardView
-        android:id="@+id/hotseat_icon_6"
-        android:layout_width="@dimen/gesture_tutorial_hotseat_icon_size"
-        android:layout_height="@dimen/gesture_tutorial_hotseat_icon_size"
-        android:layout_marginTop="@dimen/gesture_tutorial_hotseat_icon_search_margin"
-
-        app:cardElevation="0dp"
-        app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_2"
-        app:layout_constraintDimensionRatio="1:1"
-        app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
-        app:layout_constraintStart_toEndOf="@id/hotseat_icon_5"
         app:layout_constraintEnd_toEndOf="parent"/>
 
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/quickstep/res/layout/gesture_tutorial_fragment.xml b/quickstep/res/layout/gesture_tutorial_fragment.xml
index b3ca297..8eeef67 100644
--- a/quickstep/res/layout/gesture_tutorial_fragment.xml
+++ b/quickstep/res/layout/gesture_tutorial_fragment.xml
@@ -102,11 +102,11 @@
     <include
         layout="@layout/gesture_tutorial_tablet_mock_taskbar"
         android:id="@+id/gesture_tutorial_fake_taskbar_view"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/gesture_tutorial_mock_taskbar_height"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentEnd="true" />
+        android:layout_centerHorizontal="true"
+        android:layout_marginBottom="@dimen/gesture_tutorial_taskbar_margin_bottom"/>
 
     <ImageView
         android:id="@+id/gesture_tutorial_edge_gesture_video"
diff --git a/quickstep/res/layout/gesture_tutorial_mock_hotseat.xml b/quickstep/res/layout/gesture_tutorial_mock_hotseat.xml
index b3e86cf..8513dcf 100644
--- a/quickstep/res/layout/gesture_tutorial_mock_hotseat.xml
+++ b/quickstep/res/layout/gesture_tutorial_mock_hotseat.xml
@@ -15,7 +15,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_1"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintHorizontal_chainStyle="spread_inside"
         app:layout_constraintTop_toTopOf="parent"
@@ -29,7 +29,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_2"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_1"
@@ -42,7 +42,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_3"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_2"
@@ -55,7 +55,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_4"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_3"
diff --git a/quickstep/res/layout/gesture_tutorial_tablet_mock_hotseat.xml b/quickstep/res/layout/gesture_tutorial_tablet_mock_hotseat.xml
index 027e4a0..363f14e 100644
--- a/quickstep/res/layout/gesture_tutorial_tablet_mock_hotseat.xml
+++ b/quickstep/res/layout/gesture_tutorial_tablet_mock_hotseat.xml
@@ -42,7 +42,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_1"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintHorizontal_chainStyle="spread_inside"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
@@ -57,7 +57,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_2"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_1"
@@ -71,7 +71,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_3"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_2"
@@ -85,7 +85,7 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_1"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_3"
@@ -99,24 +99,10 @@
 
         app:cardElevation="0dp"
         app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_4"
+        app:cardBackgroundColor="@color/mock_app_icon"
         app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
         app:layout_constraintStart_toEndOf="@id/hotseat_icon_4"
-        app:layout_constraintEnd_toStartOf="@id/hotseat_icon_6"/>
-
-    <androidx.cardview.widget.CardView
-        android:id="@+id/hotseat_icon_6"
-        android:layout_width="@dimen/gesture_tutorial_hotseat_icon_size"
-        android:layout_height="@dimen/gesture_tutorial_hotseat_icon_size"
-        android:layout_marginTop="@dimen/gesture_tutorial_hotseat_icon_search_margin"
-
-        app:cardElevation="0dp"
-        app:cardCornerRadius="@dimen/gesture_tutorial_hotseat_icon_corner_radius"
-        app:cardBackgroundColor="@color/mock_app_icon_2"
-        app:layout_constraintDimensionRatio="1:1"
-        app:layout_constraintTop_toBottomOf="@id/hotseat_search_bar"
-        app:layout_constraintStart_toEndOf="@id/hotseat_icon_5"
         app:layout_constraintEnd_toEndOf="parent"/>
 
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/quickstep/res/layout/gesture_tutorial_tablet_mock_taskbar.xml b/quickstep/res/layout/gesture_tutorial_tablet_mock_taskbar.xml
index ddfeeec..bc68928 100644
--- a/quickstep/res/layout/gesture_tutorial_tablet_mock_taskbar.xml
+++ b/quickstep/res/layout/gesture_tutorial_tablet_mock_taskbar.xml
@@ -2,115 +2,240 @@
 <com.android.quickstep.interaction.AnimatedTaskbarView
     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="@dimen/gesture_tutorial_mock_taskbar_height">
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:clipChildren="false">
 
+    <!-- Pill-shaped background -->
     <View
         android:id="@+id/taskbar_background"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:background="@color/gesture_tutorial_taskbar_color"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:background="@drawable/mock_taskbar_background"
+        android:clipToOutline="true"
 
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintEnd_toEndOf="parent"/>
 
+    <!-- Container for the all apps button and app icons -->
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/icon_container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="@dimen/gesture_tutorial_taskbar_padding"
 
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintEnd_toEndOf="parent">
 
-        <androidx.cardview.widget.CardView
+        <!-- All apps button -->
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/taskbar_all_apps"
+            android:layout_width="@dimen/gesture_tutorial_taskbar_icon_size"
+            android:layout_height="@dimen/gesture_tutorial_taskbar_icon_size"
+            android:layout_marginEnd="@dimen/taskbar_icon_spacing"
+            android:padding="@dimen/gesture_tutorial_taskbar_padding"
+
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/taskbar_icon_1"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent">
+
+            <!-- 9 mini circles representing the all apps button icon -->
+            <View
+                android:id="@+id/all_apps_mini_1"
+                android:layout_width="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:layout_height="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:background="@drawable/mock_app_icon"
+                android:clipToOutline="true"
+
+                app:layout_constraintDimensionRatio="1:1"
+                app:layout_constraintHorizontal_chainStyle="spread_inside"
+                app:layout_constraintVertical_chainStyle="spread_inside"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toTopOf="@id/all_apps_mini_4"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintEnd_toStartOf="@id/all_apps_mini_2"/>
+
+            <View
+                android:id="@+id/all_apps_mini_2"
+                android:layout_width="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:layout_height="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:background="@drawable/mock_app_icon"
+                android:clipToOutline="true"
+
+                app:layout_constraintDimensionRatio="1:1"
+                app:layout_constraintVertical_chainStyle="spread_inside"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toTopOf="@id/all_apps_mini_5"
+                app:layout_constraintStart_toEndOf="@id/all_apps_mini_1"
+                app:layout_constraintEnd_toStartOf="@id/all_apps_mini_3"/>
+
+            <View
+                android:id="@+id/all_apps_mini_3"
+                android:layout_width="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:layout_height="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:background="@drawable/mock_app_icon"
+                android:clipToOutline="true"
+
+                app:layout_constraintDimensionRatio="1:1"
+                app:layout_constraintVertical_chainStyle="spread_inside"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toTopOf="@id/all_apps_mini_6"
+                app:layout_constraintStart_toEndOf="@id/all_apps_mini_2"
+                app:layout_constraintEnd_toEndOf="parent"/>
+
+            <View
+                android:id="@+id/all_apps_mini_4"
+                android:layout_width="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:layout_height="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:background="@drawable/mock_app_icon"
+                android:clipToOutline="true"
+
+                app:layout_constraintHorizontal_chainStyle="spread_inside"
+                app:layout_constraintDimensionRatio="1:1"
+                app:layout_constraintTop_toBottomOf="@id/all_apps_mini_1"
+                app:layout_constraintBottom_toTopOf="@id/all_apps_mini_7"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintEnd_toStartOf="@id/all_apps_mini_5"/>
+
+            <View
+                android:id="@+id/all_apps_mini_5"
+                android:layout_width="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:layout_height="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:background="@drawable/mock_app_icon"
+                android:clipToOutline="true"
+
+                app:layout_constraintDimensionRatio="1:1"
+                app:layout_constraintTop_toBottomOf="@id/all_apps_mini_2"
+                app:layout_constraintBottom_toTopOf="@id/all_apps_mini_8"
+                app:layout_constraintStart_toEndOf="@id/all_apps_mini_4"
+                app:layout_constraintEnd_toStartOf="@id/all_apps_mini_6"/>
+
+            <View
+                android:id="@+id/all_apps_mini_6"
+                android:layout_width="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:layout_height="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:background="@drawable/mock_app_icon"
+                android:clipToOutline="true"
+
+                app:layout_constraintDimensionRatio="1:1"
+                app:layout_constraintTop_toBottomOf="@id/all_apps_mini_3"
+                app:layout_constraintBottom_toTopOf="@id/all_apps_mini_9"
+                app:layout_constraintStart_toEndOf="@id/all_apps_mini_5"
+                app:layout_constraintEnd_toEndOf="parent"/>
+
+            <View
+                android:id="@+id/all_apps_mini_7"
+                android:layout_width="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:layout_height="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:background="@drawable/mock_app_icon"
+                android:clipToOutline="true"
+
+                app:layout_constraintHorizontal_chainStyle="spread_inside"
+                app:layout_constraintTop_toBottomOf="@id/all_apps_mini_4"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintEnd_toStartOf="@id/all_apps_mini_8"/>
+
+            <View
+                android:id="@+id/all_apps_mini_8"
+                android:layout_width="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:layout_height="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:background="@drawable/mock_app_icon"
+                android:clipToOutline="true"
+
+                app:layout_constraintTop_toBottomOf="@id/all_apps_mini_5"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toEndOf="@id/all_apps_mini_7"
+                app:layout_constraintEnd_toStartOf="@id/all_apps_mini_9"/>
+
+            <View
+                android:id="@+id/all_apps_mini_9"
+                android:layout_width="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:layout_height="@dimen/gesture_tutorial_taskbar_all_apps_mini_size"
+                android:background="@drawable/mock_app_icon"
+                android:clipToOutline="true"
+
+                app:layout_constraintTop_toBottomOf="@id/all_apps_mini_6"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toEndOf="@id/all_apps_mini_8"
+                app:layout_constraintEnd_toEndOf="parent"/>
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <!-- App icons -->
+        <View
             android:id="@+id/taskbar_icon_1"
             android:layout_width="@dimen/gesture_tutorial_taskbar_icon_size"
             android:layout_height="@dimen/gesture_tutorial_taskbar_icon_size"
-            android:layout_marginStart="@dimen/gesture_tutorial_taskbar_padding_start_end"
+            android:layout_marginStart="@dimen/taskbar_icon_spacing"
+            android:layout_marginEnd="@dimen/taskbar_icon_spacing"
+            android:background="@drawable/mock_app_icon"
+            android:clipToOutline="true"
 
-            app:cardElevation="0dp"
-            app:cardCornerRadius="@dimen/gesture_tutorial_taskbar_icon_corner_radius"
-            app:cardBackgroundColor="@color/mock_app_icon_1"
-            app:layout_constraintDimensionRatio="1:1"
             app:layout_constraintHorizontal_chainStyle="spread_inside"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintStart_toEndOf="@id/taskbar_all_apps"
             app:layout_constraintEnd_toStartOf="@id/taskbar_icon_2"/>
 
-        <androidx.cardview.widget.CardView
+        <View
             android:id="@+id/taskbar_icon_2"
             android:layout_width="@dimen/gesture_tutorial_taskbar_icon_size"
             android:layout_height="@dimen/gesture_tutorial_taskbar_icon_size"
+            android:layout_marginStart="@dimen/taskbar_icon_spacing"
+            android:layout_marginEnd="@dimen/taskbar_icon_spacing"
+            android:background="@drawable/mock_app_icon"
+            android:clipToOutline="true"
 
-            app:cardElevation="0dp"
-            app:cardCornerRadius="@dimen/gesture_tutorial_taskbar_icon_corner_radius"
-            app:cardBackgroundColor="@color/mock_app_icon_2"
-            app:layout_constraintDimensionRatio="1:1"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintStart_toEndOf="@id/taskbar_icon_1"
             app:layout_constraintEnd_toStartOf="@id/taskbar_icon_3"/>
 
-        <androidx.cardview.widget.CardView
+        <View
             android:id="@+id/taskbar_icon_3"
             android:layout_width="@dimen/gesture_tutorial_taskbar_icon_size"
             android:layout_height="@dimen/gesture_tutorial_taskbar_icon_size"
+            android:layout_marginStart="@dimen/taskbar_icon_spacing"
+            android:layout_marginEnd="@dimen/taskbar_icon_spacing"
+            android:background="@drawable/mock_app_icon"
+            android:clipToOutline="true"
 
-            app:cardElevation="0dp"
-            app:cardCornerRadius="@dimen/gesture_tutorial_taskbar_icon_corner_radius"
-            app:cardBackgroundColor="@color/mock_app_icon_3"
-            app:layout_constraintDimensionRatio="1:1"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintStart_toEndOf="@id/taskbar_icon_2"
             app:layout_constraintEnd_toStartOf="@id/taskbar_icon_4"/>
 
-        <androidx.cardview.widget.CardView
+        <View
             android:id="@+id/taskbar_icon_4"
             android:layout_width="@dimen/gesture_tutorial_taskbar_icon_size"
             android:layout_height="@dimen/gesture_tutorial_taskbar_icon_size"
+            android:layout_marginStart="@dimen/taskbar_icon_spacing"
+            android:layout_marginEnd="@dimen/taskbar_icon_spacing"
+            android:background="@drawable/mock_app_icon"
+            android:clipToOutline="true"
 
-            app:cardElevation="0dp"
-            app:cardCornerRadius="@dimen/gesture_tutorial_taskbar_icon_corner_radius"
-            app:cardBackgroundColor="@color/mock_app_icon_1"
-            app:layout_constraintDimensionRatio="1:1"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintStart_toEndOf="@id/taskbar_icon_3"
             app:layout_constraintEnd_toStartOf="@id/taskbar_icon_5"/>
 
-        <androidx.cardview.widget.CardView
+        <View
             android:id="@+id/taskbar_icon_5"
             android:layout_width="@dimen/gesture_tutorial_taskbar_icon_size"
             android:layout_height="@dimen/gesture_tutorial_taskbar_icon_size"
+            android:layout_marginStart="@dimen/taskbar_icon_spacing"
+            android:background="@drawable/mock_app_icon"
+            android:clipToOutline="true"
 
-            app:cardElevation="0dp"
-            app:cardCornerRadius="@dimen/gesture_tutorial_taskbar_icon_corner_radius"
-            app:cardBackgroundColor="@color/mock_app_icon_4"
-            app:layout_constraintDimensionRatio="1:1"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintStart_toEndOf="@id/taskbar_icon_4"
-            app:layout_constraintEnd_toStartOf="@id/taskbar_icon_6"/>
-
-        <androidx.cardview.widget.CardView
-            android:id="@+id/taskbar_icon_6"
-            android:layout_width="@dimen/gesture_tutorial_taskbar_icon_size"
-            android:layout_height="@dimen/gesture_tutorial_taskbar_icon_size"
-            android:layout_marginEnd="@dimen/gesture_tutorial_taskbar_padding_start_end"
-
-            app:cardElevation="0dp"
-            app:cardCornerRadius="@dimen/gesture_tutorial_taskbar_icon_corner_radius"
-            app:cardBackgroundColor="@color/mock_app_icon_2"
-            app:layout_constraintDimensionRatio="1:1"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toEndOf="@id/taskbar_icon_5"
             app:layout_constraintEnd_toEndOf="parent"/>
 
     </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/quickstep/res/values-am/strings.xml b/quickstep/res/values-am/strings.xml
index 6b63deb..fad5d9e 100644
--- a/quickstep/res/values-am/strings.xml
+++ b/quickstep/res/values-am/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"የተግባር አሞሌ ትምህርት"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"የተግባር አሞሌ ትምህርት ይታያል"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"የተግባር አሞሌ ትምህርት ተዘግቷል"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"በአንድ ጊዜ 2 መተግበሪያዎችን ለመጠቀም አንድ መተግበሪያን ወደ ጎን ይጎትቱ"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"የተግባር አሞሌውን ለማሳየት አጭር ወደ ላይ ያንሸራትቱ"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"በዕለት ተዕለት ተግባርዎ መሠረት የመተግበሪያ አስተያየቶችን ያግኙ"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"በተግባር አሞሌው ተጨማሪ ነገር ያድርጉ"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"ቀጣይ"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"ተመለስ"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"ዝጋ"</string>
diff --git a/quickstep/res/values-ar/strings.xml b/quickstep/res/values-ar/strings.xml
index ed98f69..a98075b 100644
--- a/quickstep/res/values-ar/strings.xml
+++ b/quickstep/res/values-ar/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"التعريف بشريط التطبيقات"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"ظهرت لوحة تعليم استخدام شريط المهام."</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"تم إغلاق لوحة تعليم استخدام شريط المهام."</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"اسحب تطبيقًا إلى جانب الشاشة لاستخدام تطبيقََين في آنٍ واحد."</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"مرِّر سريعًا للأعلى تمريرة قصيرة لإظهار شريط التطبيقات."</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"احصل على اقتراحات التطبيقات بناءً على سلسلة إجراءاتك."</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"إنجاز المزيد باستخدام شريط التطبيقات"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"الشاشة التالية"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"رجوع"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"إغلاق"</string>
diff --git a/quickstep/res/values-as/strings.xml b/quickstep/res/values-as/strings.xml
index a9be2c3..e327395 100644
--- a/quickstep/res/values-as/strings.xml
+++ b/quickstep/res/values-as/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"টাস্কবাৰৰ শিক্ষা"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"টাস্কবাৰৰ শিক্ষাৰ পেনেলটো প্ৰদর্শিত হৈছে"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"টাস্কবাৰৰ শিক্ষাৰ পেনেলটো বন্ধ হৈছে"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"এবাৰতে ২ টা এপ্‌ ব্যৱহাৰ কৰিবলৈ কোনো এপ্‌ কাষলৈ টানি আনি এৰক"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"টাস্কবাৰ দেখুৱাবলৈ সামান্য পৰিমাণে ওপৰলৈ ছোৱাইপ কৰক"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"আপোনাৰ ৰুটিনৰ ওপৰত আধাৰিত এপৰ পৰামৰ্শ পাওক"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"টাস্কবাৰৰ জৰিয়তে অধিক কাৰ্য সম্পাদন কৰক"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"পৰৱৰ্তী"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"উভতি যাওক"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"বন্ধ কৰক"</string>
diff --git a/quickstep/res/values-be/strings.xml b/quickstep/res/values-be/strings.xml
index b951c7a..0ff4aee 100644
--- a/quickstep/res/values-be/strings.xml
+++ b/quickstep/res/values-be/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Інфармацыя пра панэль задач"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"З\'явілася панэль навучання на панэлі задач"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Панэль навучання на панэлі задач закрыта"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Каб карыстацца 2 праграмамі, перацягніце адну з іх убок"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Хутка правядзіце пальцам уверх, каб убачыць панэль задач"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Атрымлівайце прапановы праграм з улікам вашых дзеянняў"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Выкарыстоўвайце магчымасці панэлі задач"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Далей"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Назад"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Закрыць"</string>
diff --git a/quickstep/res/values-bg/strings.xml b/quickstep/res/values-bg/strings.xml
index 4900627..3e98fc8 100644
--- a/quickstep/res/values-bg/strings.xml
+++ b/quickstep/res/values-bg/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Урок за лентата на задачите"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Показва се урокът за лентата на задачите"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Урокът за лентата на задачите бе затворен"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Плъзнете приложение встрани, за да използвате едновременно 2"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Прекарайте пръст нагоре, за да видите лентата на задачите"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Получавайте предложения за приложения според навиците си"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Правете повече неща с лентата на задачите"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Напред"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Назад"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Затваряне"</string>
diff --git a/quickstep/res/values-bs/strings.xml b/quickstep/res/values-bs/strings.xml
index e50d45c..c51d74d 100644
--- a/quickstep/res/values-bs/strings.xml
+++ b/quickstep/res/values-bs/strings.xml
@@ -95,10 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Edukacija o traci zadataka"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Edukacija o programskoj traci je prikazana"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Edukacija o programskoj traci je zatvorena"</string>
-    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Povucite apl. u stranu radi istodobne upotrebe 2 aplikacije"</string>
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Prevucite aplikaciju ustranu da odjednom koristite 2 aplikacije"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Nakratko prevucite nagore da prikažete traku zadataka"</string>
-    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Primajte prijedloge aplikacija na temelju svoje rutine"</string>
-    <string name="taskbar_edu_features" msgid="2338325667726857642">"Učinite više uz pomoć trake sa zadacima"</string>
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Dobijajte prijedloge aplikacija zasnovane na vašoj rutini"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Ostvarite više pomoću trake zadataka"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Naprijed"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Nazad"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Zatvori"</string>
diff --git a/quickstep/res/values-ca/strings.xml b/quickstep/res/values-ca/strings.xml
index 0eb529b..352e9cb 100644
--- a/quickstep/res/values-ca/strings.xml
+++ b/quickstep/res/values-ca/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Informació sobre Barra de tasques"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Ha aparegut el tauler educatiu de la barra de tasques"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"S\'ha tancat el tauler educatiu de la barra de tasques"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Arrossega una app al costat per utilitzar 2 apps alhora"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Llisca una mica cap amunt per mostrar la barra de tasques"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Obtén suggeriments d\'aplicacions basats en la teva rutina"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Fes més coses amb la barra de tasques"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Següent"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Enrere"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Tanca"</string>
diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml
index 23a98cb..392aae8 100644
--- a/quickstep/res/values-cs/strings.xml
+++ b/quickstep/res/values-cs/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Informace o panelu aplikací"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Zobrazila se výuka k hlavnímu panelu"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Výuka k hlavnímu panelu byla zavřena"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Pokud chcete používat 2 aplikace najednou, přetáhněte aplikaci na stranu"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Krátkým přejetím nahoru zobrazíte panel aplikací"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Získejte návrhy aplikací na základě vašeho používání"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Pomocí panelu aplikací můžete dělat více věcí"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Další"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Zpět"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Zavřít"</string>
diff --git a/quickstep/res/values-da/strings.xml b/quickstep/res/values-da/strings.xml
index ce1bdf8..34b950b 100644
--- a/quickstep/res/values-da/strings.xml
+++ b/quickstep/res/values-da/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Oplysninger om proceslinjen"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Vejledningen om proceslinjen blev åbnet"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Vejledningen om proceslinjen blev lukket"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Træk en app til siden for at bruge 2 apps på én gang"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Stryg hurtigt opad for at se proceslinjen"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Få appforslag baseret på din rutine"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Få mere fra hånden med proceslinjen"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Næste"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Tilbage"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Luk"</string>
diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml
index 84c078c..b1807f8 100644
--- a/quickstep/res/values-es/strings.xml
+++ b/quickstep/res/values-es/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Información sobre la barra de tareas"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Ha aparecido una nota sobre la barra de tareas"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Nota sobre la barra de tareas cerrada"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Arrastra una aplicación hacia un lado para usar 2 a la vez"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Desliza un poco hacia arriba para ver la barra de tareas"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Obtén sugerencias de aplicaciones basadas en tu rutina"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Sácale más partido a la barra de tareas"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Siguiente"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Atrás"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Cerrar"</string>
diff --git a/quickstep/res/values-et/strings.xml b/quickstep/res/values-et/strings.xml
index 5badec9..263aa44 100644
--- a/quickstep/res/values-et/strings.xml
+++ b/quickstep/res/values-et/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Tegumiriba tutvustus"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Tegumiriba juhised kuvati"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Tegumiriba juhised on suletud"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"2 rakenduse korraga kasutamiseks lohistage rakendus kõrvale"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Tegumiriba kuvamiseks pühkige korraks"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Hankige oma rutiini põhjal rakenduste soovitusi"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Tehke tegumiriba abil enamat"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Järgmine"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Tagasi"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Sule"</string>
diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml
index e2912ef..990ece2 100644
--- a/quickstep/res/values-eu/strings.xml
+++ b/quickstep/res/values-eu/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Zereginen barra erabiltzeko argibideak"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Agertu egin da zereginen barraren tutoriala"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Itxi egin da zereginen barraren tutoriala"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Bi aplikazio batera erabiltzeko, arrastatu bat albo batera"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Ataza-barra ikusteko, pasatu hatza bizkor gora"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Jaso erabileran oinarritutako aplikazioen iradokizunak"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Egin gauza gehiago zereginen barrarekin"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Hurrengoa"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Atzera"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Itxi"</string>
diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml
index c3cd69e..0ae7fd2 100644
--- a/quickstep/res/values-fi/strings.xml
+++ b/quickstep/res/values-fi/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Tehtäväpalkin ohje"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Tehtäväpalkin ohje näkyvissä"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Tehtäväpalkin ohje suljettu"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Vedä sovellus sivuun, niin voit käyttää samalla 2 sellaista"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Näytä tehtäväpalkki pyyhkäisemällä ylös lyhyesti"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Sovellussuosituksia käytön perusteella"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Vinkkejä tehtäväpalkin tehokkaampaan käyttöön"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Seuraava"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Takaisin"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Sulje"</string>
diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml
index 5293ed6..1048ac6 100644
--- a/quickstep/res/values-fr-rCA/strings.xml
+++ b/quickstep/res/values-fr-rCA/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Informations sur la barre des tâches"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"La barre des tâches éducatives s\'est affichée"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"La barre des tâches éducatives est fermée"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Pour utiliser deux applis, faites-les glisser vers le côté"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Faites glisser vers le haut pour afficher la barre de tâches"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Obtenez des suggestions d\'applis en fonction de vos routines"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Faites-en plus avec la barre des tâches"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Suivant"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Retour"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Fermer"</string>
diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml
index cff4659..63d4cf8 100644
--- a/quickstep/res/values-fr/strings.xml
+++ b/quickstep/res/values-fr/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Fonctionnement de la barre des tâches"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Infos sur la barre des tâches affichées"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Infos sur la barre des tâches fermées"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Faites glisser une appli sur le côté pour utiliser 2 applis"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Balayez rapidement vers haut pour afficher barre des tâches"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Obtenez des suggestions d\'applis basées sur vos habitudes"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Exploitez les possibilités de la barre des tâches"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Suivant"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Retour"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Fermer"</string>
diff --git a/quickstep/res/values-gl/strings.xml b/quickstep/res/values-gl/strings.xml
index 5988433..e78502b 100644
--- a/quickstep/res/values-gl/strings.xml
+++ b/quickstep/res/values-gl/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Información sobre a función Barra de tarefas"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Panel de información de barra de tarefas aberto"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Panel de información de barra de tarefas pechado"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Arrastra unha aplicación cara a un lado para usar dúas á vez"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Pasa o dedo un pouco cara arriba para ver a barra de tarefas"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Obtén suxestións de aplicacións en función da túa rutina"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Tira máis proveito da barra de tarefas"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Seguinte"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Atrás"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Pechar"</string>
diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml
index 540530d..937dcc6 100644
--- a/quickstep/res/values-hi/strings.xml
+++ b/quickstep/res/values-hi/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"टास्कबार का ट्यूटोरियल"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"टास्कबार ट्यूटोरियल दिखाया गया"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"टास्कबार ट्यूटोरियल बंद किया गया"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"किसी ऐप को किनारे की ओर ड्रैग करके, दो ऐप एक साथ यूज़ करें"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"टास्कबार दिखाने के लिए, ऊपर की ओर थोड़ा स्वाइप करें"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"डिवाइस के इस्तेमाल के आधार पर ऐप्लिकेशन के सुझाव पाएं"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"टास्कबार की मदद से अन्य काम करें"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"आगे बढ़ें"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"वापस जाएं"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"बंद करें"</string>
diff --git a/quickstep/res/values-hu/strings.xml b/quickstep/res/values-hu/strings.xml
index 9646f3e..33b781d 100644
--- a/quickstep/res/values-hu/strings.xml
+++ b/quickstep/res/values-hu/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Tálca használatának ismertetése"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Az eszköztár használatát ismertető panel megjelent"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Az eszköztár használatát ismertető panel bezárult"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Húzzon egy appot oldalra, ha kettőt használna egyidejűleg"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Röviden csúsztasson fel a Feladatsáv megjelenítéséhez"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Alkalmazásjavaslatokat kaphat a rutinja alapján"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Jobban kihasználhatja a feladatsávot"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Tovább"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Vissza"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Bezárás"</string>
diff --git a/quickstep/res/values-hy/strings.xml b/quickstep/res/values-hy/strings.xml
index fa32a31..f6d0c3e 100644
--- a/quickstep/res/values-hy/strings.xml
+++ b/quickstep/res/values-hy/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Խնդրագոտու «Կրթություն» պատուհան"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Խնդրագոտու «Կրթություն» վահանակը բացվեց"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Խնդրագոտու «Կրթություն» վահանակը փակվեց"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Միաժամանակ օգտագործեք երկու հավելված՝ մեկը մի կողմ քաշելով"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Հավելվածների վահանակը բացելու համար մատն արագ սահեցրեք վերև"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Ստացեք առաջարկներ ձեր գործողությունների հիման վրա"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Օգտվեք հավելվածների վահանակի բոլոր հնարավորություններից"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Առաջ"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Հետ"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Փակել"</string>
diff --git a/quickstep/res/values-in/strings.xml b/quickstep/res/values-in/strings.xml
index 4e4a3ea..689ade4 100644
--- a/quickstep/res/values-in/strings.xml
+++ b/quickstep/res/values-in/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Pengantar Taskbar"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Edukasi taskbar ditampilkan"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Edukasi taskbar ditutup"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Tarik aplikasi ke samping untuk menggunakan 2 aplikasi sekaligus"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Geser sedikit ke atas untuk menampilkan taskbar"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Dapatkan saran aplikasi berdasarkan rutinitas Anda"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Lakukan banyak hal dengan taskbar"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Berikutnya"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Kembali"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Tutup"</string>
diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml
index cef57e00..863707c 100644
--- a/quickstep/res/values-iw/strings.xml
+++ b/quickstep/res/values-iw/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"הסבר על סרגל האפליקציות"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"חלונית ההסברים על שורת המשימות מופיעה"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"חלונית ההסברים על שורת המשימות נסגרה"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"כדי להשתמש בשתי אפליקציות בו-זמנית, צריך לגרור אפליקציה לצד"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"צריך להחליק מעט כדי להציג את סרגל האפליקציות"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"קבלת הצעות לאפליקציות על סמך השימוש השגרתי שלך"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"פעולות נוספות שאפשר לעשות עם סרגל האפליקציות"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"הבא"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"חזרה"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"סגירה"</string>
diff --git a/quickstep/res/values-ka/strings.xml b/quickstep/res/values-ka/strings.xml
index 86d369b..b1b27df 100644
--- a/quickstep/res/values-ka/strings.xml
+++ b/quickstep/res/values-ka/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"ამოცანათა ზოლი: განათლება"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"ამოცანების ზოლის სასწავლო არე გამოჩნდა"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"ამოცანების ზოლის სასწავლო არე დაიხურა"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"2 აპის ერთდროულად გამოსაყენებლად გადაათრიეთ აპი კიდეზე"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"მოკლედ გადაფურცლეთ ზემოთ, რომ ამოცანათა ზოლი გამოაჩინოთ"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"მიიღეთ აპის შეთავაზებები თქვენი რუტინის მიხედვით"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"გააკეთეთ მეტი ამოცანათა ზოლის მეშვეობით"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"შემდეგი"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"უკან"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"დახურვა"</string>
diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml
index f4f33ca..a5a367f 100644
--- a/quickstep/res/values-kk/strings.xml
+++ b/quickstep/res/values-kk/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Тапсырмалар жолағы: үйрену"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Тапсырмалар тақтасы бойынша нұсқаулық ашылды."</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Тапсырмалар тақтасы бойынша нұсқаулық жабылды."</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"2 қолданбаны бір мезгілде пайдалану үшін қолданбаны шетке сүйреңіз."</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Тапсырмалар жолағын көру үшін жоғары қарай тез сырғытыңыз."</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Іс-әрекеттеріңізге негізделген қолданба ұсыныстарын алыңыз."</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Тапсырмалар жолағы арқылы көп әрекетті орындаңыз"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Келесі"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Артқа"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Жабу"</string>
diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml
index bcf6a4e..2557e04 100644
--- a/quickstep/res/values-ko/strings.xml
+++ b/quickstep/res/values-ko/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"태스크 바 정보"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"작업 표시줄 튜토리얼 패널 표시됨"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"작업 표시줄 튜토리얼 패널 닫힘"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"앱을 옆으로 드래그하여 앱 2개를 동시에 사용합니다."</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"위로 짧게 스와이프하여 태스크 바를 표시합니다."</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"루틴에 따라 앱 제안을 받습니다."</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"태스크 바로 더 많은 작업 하기"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"다음"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"뒤로"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"닫기"</string>
diff --git a/quickstep/res/values-lo/strings.xml b/quickstep/res/values-lo/strings.xml
index 963f497..7115617 100644
--- a/quickstep/res/values-lo/strings.xml
+++ b/quickstep/res/values-lo/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"ແຖບໜ້າວຽກ Education"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"ສະແດງການສຶກສາແຖບໜ້າວຽກແລ້ວ"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"ປິດການສຶກສາແຖບໜ້າວຽກແລ້ວ"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"ລາກແອັບໄປດ້ານຂ້າງເພື່ອໃຊ້ 2 ແອັບໃນເວລາດຽວກັນ"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"ປັດຂຶ້ນສັ້ນໆເພື່ອສະແດງແຖບໜ້າວຽກ"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"ຮັບການແນະນຳແອັບໂດຍອີງໃສ່ສິ່ງທີ່ເຮັດປະຈຳຂອງທ່ານ"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"ເຮັດໄດ້ຫຼາຍຂຶ້ນດ້ວຍແຖບໜ້າວຽກ"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"ຕໍ່ໄປ"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"ກັບຄືນ"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"ປິດ"</string>
diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml
index 07af6dd..85490c0 100644
--- a/quickstep/res/values-mk/strings.xml
+++ b/quickstep/res/values-mk/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Обука за лентата со задачи"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Се појави лентата за задачи за образование"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Затворена е лентата за задачи за образование"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Повлечете апликација настрана за да користите 2 апликации"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Кратко повлечете нагоре за да се прикаже лентата со задачи"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Добивајте предлози за апликации според вашата рутина"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Правете повеќе со една лента со задачи"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Следно"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Назад"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Затвори"</string>
diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml
index f9fd5fb..4cd07f9 100644
--- a/quickstep/res/values-mn/strings.xml
+++ b/quickstep/res/values-mn/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Ажлын хэсгийн боловсрол"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Боловсролын ажлын талбар гарч ирсэн"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Боловсролын ажлын талбарыг хаасан"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"2 аппыг зэрэг ашиглахын тулд аппыг хажуу тийш чирнэ үү"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Ажлын хэсгийг харуулахын тулд бага зэрэг дээш шударна уу"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Таны хэвшилд тулгуурлан санал болгож буй аппуудыг аваарай"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Ажлын хэсгээр илүү ихийг хийгээрэй"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Дараах"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Буцах"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Хаах"</string>
diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml
index 60e5a64..fd79f03 100644
--- a/quickstep/res/values-mr/strings.xml
+++ b/quickstep/res/values-mr/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"टास्कबारशी संबंधित माहिती"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"टास्कबारशी संबंधित माहिती देणारे पॅनल उघडले आहे"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"टास्कबारशी संबंधित माहिती देणारे पॅनल बंद केले आहे"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"दोन ॲप्स एकत्र वापरण्यासाठी एक अ‍ॅप बाजूला ड्रॅग करा"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"टास्कबार दाखवण्यासाठी थोडे वरती स्वाइप करा"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"तुमच्या दिनक्रमावर आधारित ॲप सूचना मिळवा"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"टास्कबारसह आणखी बरेच काही करा"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"पुढे"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"मागे जा"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"बंद करा"</string>
diff --git a/quickstep/res/values-my/strings.xml b/quickstep/res/values-my/strings.xml
index b459c60..0a3dd86 100644
--- a/quickstep/res/values-my/strings.xml
+++ b/quickstep/res/values-my/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"လုပ်ဆောင်စရာဘား ပညာပေး"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"ပညာရေး လုပ်ဆောင်စရာဘား ပြထားသည်"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"ပညာရေး လုပ်ဆောင်စရာဘား ပိတ်ထားသည်"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"အက်ပ် ၂ ခုကို တစ်ပြိုက်တည်းသုံးရန် အက်ပ်ကို ဘေးသို့ ဖိဆွဲပါ"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"လုပ်ဆောင်စရာဘားပြရန် အမြန် အပေါ်ပွတ်ဆွဲပါ"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"ပုံမှန်အစီအစဉ်ပေါ် အခြေခံ၍ အက်ပ်အကြံပြုချက်များကို ရယူပါ"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"လုပ်ဆောင်စရာဘားဖြင့် ပိုမိုလုပ်ဆောင်နိုင်ခြင်း"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"ရှေ့သို့"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"နောက်သို့"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"ပိတ်ရန်"</string>
diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml
index 6b6094f..bb592b2 100644
--- a/quickstep/res/values-nb/strings.xml
+++ b/quickstep/res/values-nb/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Veiledning for oppgavelinjen"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Opplæringen for oppgavelinjen vises"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Opplæringen for oppgavelinjen er lukket"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Dra en app til siden for å bruke 2 apper samtidig"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Kort sveip opp for å vise oppgavelinjen"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Få appforslag som er basert på rutinene dine"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Gjør mer med oppgavelinjen"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Neste"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Tilbake"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Lukk"</string>
diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml
index 2af016e..ac782e8 100644
--- a/quickstep/res/values-ne/strings.xml
+++ b/quickstep/res/values-ne/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"टास्कबार एजुकेसन"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"टास्कबार एजुकेसन देखिएको छ"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"टास्कबार एजुकेसन बन्द गरिएको छ"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"एपलाई छेउतिर ड्र्याग गरेर एकै पटक २ वटा एप चलाउनुहोस्"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"टास्कबार देखाउन माथितिर थोरै स्वाइप गर्नुहोस्"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"आफ्नो रुटिनका आधारमा एपसम्बन्धी सुझावहरू प्राप्त गर्नुहोस्"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"टास्कबार प्रयोग गरेर अझ धेरै कार्य गर्नुहोस्"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"अर्को"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"पछाडि"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"बन्द गर्नुहोस्"</string>
diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml
index b2f2484..9102860 100644
--- a/quickstep/res/values-or/strings.xml
+++ b/quickstep/res/values-or/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"ଟାସ୍କବାର ଶିକ୍ଷା"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"ଟାସ୍କବାର୍ ଶିକ୍ଷା ଦେଖାଯାଇଛି"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"ଟାସ୍କବାର୍ ଶିକ୍ଷା ବନ୍ଦ ହୋଇଯାଇଛି"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"ଥରକେ 2ଟି ଆପ୍ସ ବ୍ୟବହାର କରିବା ପାଇଁ ଏକ ଆପକୁ ପାର୍ଶ୍ୱକୁ ଡ୍ରାଗ କର"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"ଟାସ୍କବାର ଦେଖାଇବା ପାଇଁ ଉପରକୁ ଅଳ୍ପ ସମୟ ସ୍ୱାଇପ କରନ୍ତୁ"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"ଆପଣଙ୍କ ରୁଟିନ ଆଧାରରେ ଆପ ପରାମର୍ଶଗୁଡ଼ିକୁ ପାଆନ୍ତୁ"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"ଟାସ୍କବାର ମାଧ୍ୟମରେ ଆହୁରି ଅନେକ କିଛି କରନ୍ତୁ"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"ପରବର୍ତ୍ତୀ"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"ପଛକୁ ଫେରନ୍ତୁ"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"ବନ୍ଦ କରନ୍ତୁ"</string>
diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml
index 963486d..8ca7173 100644
--- a/quickstep/res/values-pa/strings.xml
+++ b/quickstep/res/values-pa/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"ਟਾਸਕਬਾਰ ਸਿੱਖਿਆ"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"ਟਾਸਕਵਾਰ ਸਿੱਖਿਆ ਪੈਨਲ ਦਿਖਾਇਆ ਗਿਆ"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"ਟਾਸਕਵਾਰ ਸਿੱਖਿਆ ਪੈਨਲ ਬੰਦ ਕੀਤਾ ਗਿਆ"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"ਇੱਕ ਵਾਰ ਵਿੱਚ 2 ਐਪਾਂ ਵਰਤਣ ਲਈ, ਐਪ ਨੂੰ ਪਾਸੇ ਵੱਲ ਘਸੀਟੋ"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"ਟਾਸਕਬਾਰ ਦਿਖਾਉਣ ਲਈ ਥੋੜ੍ਹਾ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"ਤੁਹਾਡੇ ਨਿਯਮਬੱਧ ਕੰਮ ਦੇ ਆਧਾਰ \'ਤੇ ਐਪ ਸੁਝਾਅ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"ਟਾਸਕਬਾਰ ਦਾ ਹੋਰ ਲਾਹਾ ਲਓ"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"ਅੱਗੇ"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"ਪਿੱਛੇ"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"ਬੰਦ ਕਰੋ"</string>
diff --git a/quickstep/res/values-pl/strings.xml b/quickstep/res/values-pl/strings.xml
index f9d0853..c67078f 100644
--- a/quickstep/res/values-pl/strings.xml
+++ b/quickstep/res/values-pl/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Informacje o pasku aplikacji"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Wskazówki na temat paska zadań zostały wyświetlone"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Wskazówki na temat paska zadań zostały zamknięte"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Przeciągnij aplikację w bok, aby używać 2 aplikacji naraz"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Przesuń palcem krótko w górę, aby wyświetlić pasek aplikacji"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Otrzymuj sugestie aplikacji na podstawie rutyny"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Wykorzystaj potencjał paska aplikacji"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Dalej"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Wstecz"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Zamknij"</string>
diff --git a/quickstep/res/values-si/strings.xml b/quickstep/res/values-si/strings.xml
index 6f9734a..eb55925 100644
--- a/quickstep/res/values-si/strings.xml
+++ b/quickstep/res/values-si/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"කාර්ය තීරු අධ්‍යාපනය"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"කාර්ය තීරු අධ්‍යාපනය දිස් විය"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"කාර්ය තීරු අධ්‍යාපනය වසා ඇත"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"එකවර යෙදුම් 2ක් භාවිතා කිරීමට යෙදුමක් පැත්තට අදින්න"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"කාර්ය තීරුව පෙන්වීමට ඉහළට කෙටි ස්වයිප් කරන්න"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"ඔබේ දිනචරියාව මත පදනම්ව යෙදුම් යෝජනා ලබා ගන්න"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"කාර්ය තීරුව සමග තවත් කරන්න"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"ඊළඟ"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"ආපසු"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"වසන්න"</string>
diff --git a/quickstep/res/values-sl/strings.xml b/quickstep/res/values-sl/strings.xml
index 3753acf..0d948cc 100644
--- a/quickstep/res/values-sl/strings.xml
+++ b/quickstep/res/values-sl/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Poučni nasveti o opravilni vrstici"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Poučni nasveti o opravilni vrstici so prikazani."</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Poučni nasveti o opravilni vrstici so zaprti."</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Povlecite aplikacijo vstran za uporabo 2 aplikacij hkrati."</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Na kratko povlecite navzgor za prikaz opravilne vrstice."</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Prejemajte predloge aplikacij na podlagi svojih navad."</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Naredite več z opravilno vrstico"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Naprej"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Nazaj"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Zapri"</string>
diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml
index 387eb69..51cbc9c 100644
--- a/quickstep/res/values-sv/strings.xml
+++ b/quickstep/res/values-sv/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Aktivitetsfältsutbildning"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Information om aktivitetsfältet visades"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Information om aktivitetsfältet stängdes"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Dra en app till sidan om du vill använda två appar samtidigt"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Svep en kort bit uppåt för att visa aktivitetsfältet"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Få appförslag utifrån dina rutiner"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Gör mer med aktivitetsfältet"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Nästa"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Tillbaka"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Stäng"</string>
diff --git a/quickstep/res/values-sw/strings.xml b/quickstep/res/values-sw/strings.xml
index a0360f1..e61f4a9 100644
--- a/quickstep/res/values-sw/strings.xml
+++ b/quickstep/res/values-sw/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Elimu ya Upauzana"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Paneli ya elimu kwenye upau wa shughuli inaonyeshwa"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Paneli ya elimu kwenye upau wa shughuli imefungwa"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Buruta programu pembeni ili utumie programu 2 kwa wakati mmoja"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Telezesha kidole juu ili uonyeshe upauzana"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Pata mapendekezo ya programu kulingana na ratiba yako"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Kamilisha mengi kwa kutumia upauzana huu"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Endelea"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Nyuma"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Funga"</string>
diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml
index 3347074..d79d8f0 100644
--- a/quickstep/res/values-tr/strings.xml
+++ b/quickstep/res/values-tr/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Görev çubuğu eğitimi"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Görev çubuğu eğitimi görüntülendi"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Görev çubuğu eğitimi kapatıldı"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Aynı anda iki uygulama kullanmak için birini yana sürükleyin"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Görev çubuğunu göstermek için yukarı doğru kısa kaydırın"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Rutininize göre uygulama önerileri alın"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Görev çubuğuyla daha fazla şey yapın"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"İleri"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Geri"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Kapat"</string>
diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml
index ee0314b..2f9a424 100644
--- a/quickstep/res/values-uk/strings.xml
+++ b/quickstep/res/values-uk/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Панель завдань Education"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Панель завдань Education відкрито"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Панель завдань Education закрито"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Перетягніть убік, щоб використовувати 2 додатки одночасно"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Швидко проведіть пальцем угору, щоб відкрити панель завдань"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Отримуйте рекомендації додатків залежно від їх використання"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Більше можливостей завдяки панелі завдань"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Далі"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Назад"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Закрити"</string>
diff --git a/quickstep/res/values-vi/strings.xml b/quickstep/res/values-vi/strings.xml
index 5591c52..cfba7ba 100644
--- a/quickstep/res/values-vi/strings.xml
+++ b/quickstep/res/values-vi/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Cách sử dụng thanh tác vụ"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Đã hiện bảng hướng dẫn trên thanh tác vụ"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Đã đóng bảng hướng dẫn trên thanh tác vụ"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Kéo một ứng dụng sang bên để dùng 2 ứng dụng cùng lúc"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Vuốt lên một chút để hiển thị thanh tác vụ"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Nhận ứng dụng đề xuất dựa trên quy trình của bạn"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Làm nhiều việc hơn bằng thanh tác vụ"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Tiếp theo"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Quay lại"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Đóng"</string>
diff --git a/quickstep/res/values-zh-rCN/strings.xml b/quickstep/res/values-zh-rCN/strings.xml
index c15c40d..05cf3f4 100644
--- a/quickstep/res/values-zh-rCN/strings.xml
+++ b/quickstep/res/values-zh-rCN/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"任务栏教程"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"任务栏教程已显示"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"任务栏教程已关闭"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"将一个应用拖动到一侧,即可一次使用两个应用"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"稍微向上滑动即可显示任务栏"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"根据您的日常安排获取应用建议"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"体验任务栏的更多功能"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"继续"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"返回"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"关闭"</string>
diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml
index 28cf4fc..1cf77e8 100644
--- a/quickstep/res/values-zh-rTW/strings.xml
+++ b/quickstep/res/values-zh-rTW/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"工作列教學課程"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"工作列教學課程已顯示"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"工作列教學課程已關閉"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"將應用程式拖曳到一邊即可同時使用 2 個應用程式"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"稍微向上滑動即可讓工作列顯示在畫面上"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"根據你的日常安排建議應用程式"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"充分發揮工作列的功用"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"繼續"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"返回"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"關閉"</string>
diff --git a/quickstep/res/values-zu/strings.xml b/quickstep/res/values-zu/strings.xml
index 18b8efb..a27f78e 100644
--- a/quickstep/res/values-zu/strings.xml
+++ b/quickstep/res/values-zu/strings.xml
@@ -95,13 +95,10 @@
     <string name="taskbar_edu_a11y_title" msgid="5417986057866415355">"Imfundo ye-taskbar"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Imfuno yebha yomsebenzi ivelile"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Imfundo yebha yomsebenzi ivaliwe"</string>
-    <!-- no translation found for taskbar_edu_splitscreen (5605512479258053350) -->
-    <skip />
+    <string name="taskbar_edu_splitscreen" msgid="5605512479258053350">"Hudula i-app ukusebenzisa ama-app ama-2 ngesikhathi esisodwa"</string>
     <string name="taskbar_edu_stashing" msgid="2805035263048176462">"Swayiphela phezulu okufushane ukuze ubonise i-taskbar"</string>
-    <!-- no translation found for taskbar_edu_suggestions (8215044496435527982) -->
-    <skip />
-    <!-- no translation found for taskbar_edu_features (2338325667726857642) -->
-    <skip />
+    <string name="taskbar_edu_suggestions" msgid="8215044496435527982">"Thola iziphakamiso ze-app ngokusekelwe kumjikelezo wakho"</string>
+    <string name="taskbar_edu_features" msgid="2338325667726857642">"Yenza okwengeziwe ngebha yomsebenzi"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Okulandelayo"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Emuva"</string>
     <string name="taskbar_edu_close" msgid="887022990168191073">"Vala"</string>
diff --git a/quickstep/res/values/colors.xml b/quickstep/res/values/colors.xml
index 262e418..86244b9 100644
--- a/quickstep/res/values/colors.xml
+++ b/quickstep/res/values/colors.xml
@@ -40,13 +40,10 @@
     <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_taskbar_color">#202124</color>
+    <color name="gesture_tutorial_taskbar_color">#E8EAED</color>
 
     <!-- Mock hotseat -->
-    <color name="mock_app_icon_1">#8AB4F8</color>
-    <color name="mock_app_icon_2">#F28B82</color>
-    <color name="mock_app_icon_3">#FDD663</color>
-    <color name="mock_app_icon_4">#81C995</color>
+    <color name="mock_app_icon">#BDC1C6</color>
     <color name="mock_search_bar">#3C4043</color>
 
     <!-- Mock conversation -->
diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml
index d97e435..d339d28 100644
--- a/quickstep/res/values/dimens.xml
+++ b/quickstep/res/values/dimens.xml
@@ -196,9 +196,13 @@
     <integer name="gesture_tutorial_webpage_extra_lines_visibility">0</integer> <!-- VISIBLE -->
 
     <!-- Gesture Tutorial mock taskbar -->
-    <dimen name="gesture_tutorial_taskbar_icon_size">44dp</dimen>
+    <dimen name="gesture_tutorial_taskbar_icon_size">52dp</dimen>
+    <dimen name="gesture_tutorial_taskbar_all_apps_mini_size">7dp</dimen>
     <dimen name="gesture_tutorial_taskbar_icon_corner_radius">100dp</dimen>
-    <dimen name="gesture_tutorial_taskbar_padding_start_end">52dp</dimen>
+    <dimen name="gesture_tutorial_taskbar_corner_radius">100dp</dimen>
+    <dimen name="gesture_tutorial_taskbar_padding">12dp</dimen>
+    <dimen name="gesture_tutorial_taskbar_icon_spacing">24dp</dimen>
+    <dimen name="gesture_tutorial_taskbar_margin_bottom">24dp</dimen>
 
     <!-- All Set page -->
     <dimen name="allset_page_margin_horizontal">40dp</dimen>
diff --git a/quickstep/res/values/strings.xml b/quickstep/res/values/strings.xml
index 761934e..4f30791 100644
--- a/quickstep/res/values/strings.xml
+++ b/quickstep/res/values/strings.xml
@@ -231,20 +231,20 @@
     <string name="accessibility_rotate_button">Rotate screen</string>
 
     <!-- ******* Taskbar Edu ******* -->
-    <!-- Accessibility title for the taskbar education window. [CHAR_LIMIT=NONE] -->
+    <!-- Accessibility title for the Taskbar education window. [CHAR_LIMIT=NONE] -->
     <string name="taskbar_edu_a11y_title">Taskbar education</string>
-    <!-- Accessibility text spoken when the taskbar education panel appears [CHAR_LIMIT=NONE] -->
+    <!-- Accessibility text spoken when the Taskbar education panel appears [CHAR_LIMIT=NONE] -->
     <string name="taskbar_edu_opened">Taskbar education appeared</string>
-    <!-- Accessibility text spoken when the taskbar education panel disappears [CHAR_LIMIT=NONE] -->
+    <!-- Accessibility text spoken when the Taskbar education panel disappears [CHAR_LIMIT=NONE] -->
     <string name="taskbar_edu_closed">Taskbar education closed</string>
-    <!-- Text in dialog that lets a user know how they can use the taskbar to use multiple apps at once on their device. [CHAR_LIMIT=60] -->
+    <!-- Text in dialog that lets a user know how they can use the Taskbar to use multiple apps at once on their device. [CHAR_LIMIT=60] -->
     <string name="taskbar_edu_splitscreen">Drag an app to the side to use 2 apps at once</string>
-    <!-- Text in dialog that lets a user know how they can show the taskbar on their device. [CHAR_LIMIT=60] -->
-    <string name="taskbar_edu_stashing">Short swipe up to show the taskbar</string>
-    <!-- Text in dialog that lets a user know how the taskbar suggests apps based on their usage. [CHAR_LIMIT=60] -->
+    <!-- Text in dialog that lets a user know how they can show the Taskbar on their device. [CHAR_LIMIT=60] -->
+    <string name="taskbar_edu_stashing">Slow swipe up to show the Taskbar</string>
+    <!-- Text in dialog that lets a user know how the Taskbar suggests apps based on their usage. [CHAR_LIMIT=60] -->
     <string name="taskbar_edu_suggestions">Get app suggestions based on your routine</string>
-    <!-- Title in dialog that shows a user what they can do with the taskbar. [CHAR_LIMIT=60] -->
-    <string name="taskbar_edu_features">Do more with the taskbar</string>
+    <!-- Title in dialog that shows a user what they can do with the Taskbar. [CHAR_LIMIT=60] -->
+    <string name="taskbar_edu_features">Do more with the Taskbar</string>
     <!-- Text on button to go to the next screen of a tutorial [CHAR_LIMIT=16] -->
     <string name="taskbar_edu_next">Next</string>
     <!-- Text on button to go to the previous screen of a tutorial [CHAR_LIMIT=16] -->
@@ -267,13 +267,13 @@
     <string name="taskbar_button_notifications">Notifications</string>
     <!-- Content description for quick settings button [CHAR_LIMIT=16] -->
     <string name="taskbar_button_quick_settings">Quick Settings</string>
-    <!-- Accessibility title for the taskbar window. [CHAR_LIMIT=NONE] -->
+    <!-- Accessibility title for the Taskbar window. [CHAR_LIMIT=NONE] -->
     <string name="taskbar_a11y_title">Taskbar</string>
-    <!-- Accessibility title for the taskbar window on phones. [CHAR_LIMIT=NONE] -->
+    <!-- Accessibility title for the Taskbar window on phones. [CHAR_LIMIT=NONE] -->
     <string name="taskbar_phone_a11y_title">Navigation bar</string>
 
-    <!-- Label for moving drop target to the top or left side of the screen, depending on orientation (from the taskbar only). -->
+    <!-- Label for moving drop target to the top or left side of the screen, depending on orientation (from the Taskbar only). -->
     <string name="move_drop_target_top_or_left">Move to top&#47;left</string>
-    <!-- Label for moving drop target to the bottom or right side of the screen, depending on orientation (from the taskbar only). -->
+    <!-- Label for moving drop target to the bottom or right side of the screen, depending on orientation (from the Taskbar only). -->
     <string name="move_drop_target_bottom_or_right">Move to bottom&#47;right</string>
 </resources>
diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
index 7948ca4..b880a7e 100644
--- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
+++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
@@ -89,6 +89,7 @@
 import android.util.Pair;
 import android.util.Size;
 import android.view.CrossWindowBlurListeners;
+import android.view.IRemoteAnimationFinishedCallback;
 import android.view.RemoteAnimationAdapter;
 import android.view.RemoteAnimationDefinition;
 import android.view.RemoteAnimationTarget;
@@ -114,6 +115,7 @@
 import com.android.launcher3.config.FeatureFlags;
 import com.android.launcher3.dragndrop.DragLayer;
 import com.android.launcher3.icons.FastBitmapDrawable;
+import com.android.launcher3.model.data.ItemInfo;
 import com.android.launcher3.shortcuts.DeepShortcutView;
 import com.android.launcher3.statehandlers.DepthController;
 import com.android.launcher3.taskbar.LauncherTaskbarUIController;
@@ -143,6 +145,9 @@
 import com.android.quickstep.util.WorkspaceRevealAnim;
 import com.android.quickstep.views.FloatingWidgetView;
 import com.android.quickstep.views.RecentsView;
+import com.android.systemui.animation.ActivityLaunchAnimator;
+import com.android.systemui.animation.DelegateLaunchAnimatorController;
+import com.android.systemui.animation.RemoteAnimationDelegate;
 import com.android.systemui.shared.system.BlurUtils;
 import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
 import com.android.systemui.shared.system.QuickStepContract;
@@ -222,7 +227,6 @@
     private RemoteAnimationProvider mRemoteAnimationProvider;
     // Strong refs to runners which are cleared when the launcher activity is destroyed
     private RemoteAnimationFactory mWallpaperOpenRunner;
-    private RemoteAnimationFactory mAppLaunchRunner;
     private RemoteAnimationFactory mKeyguardGoingAwayRunner;
 
     private RemoteAnimationFactory mWallpaperOpenTransitionRunner;
@@ -291,9 +295,18 @@
     public ActivityOptionsWrapper getActivityLaunchOptions(View v) {
         boolean fromRecents = isLaunchingFromRecents(v, null /* targets */);
         RunnableList onEndCallback = new RunnableList();
-        mAppLaunchRunner = new AppLaunchAnimationRunner(v, onEndCallback);
+
+        RemoteAnimationFactory delegateRunner = new AppLaunchAnimationRunner(v, onEndCallback);
+        ItemInfo tag = (ItemInfo) v.getTag();
+        if (tag != null && tag.shouldUseBackgroundAnimation()) {
+            ContainerAnimationRunner containerAnimationRunner =
+                    ContainerAnimationRunner.from(v, mStartingWindowListener);
+            if (containerAnimationRunner != null) {
+                delegateRunner = containerAnimationRunner;
+            }
+        }
         RemoteAnimationRunnerCompat runner = new LauncherAnimationRunner(
-                mHandler, mAppLaunchRunner, true /* startAtFrontOfQueue */);
+                mHandler, delegateRunner, true /* startAtFrontOfQueue */);
 
         // Note that this duration is a guess as we do not know if the animation will be a
         // recents launch or not for sure until we know the opening app targets.
@@ -1160,7 +1173,6 @@
             // Also clear strong references to the runners registered with the remote animation
             // definition so we don't have to wait for the system gc
             mWallpaperOpenRunner = null;
-            mAppLaunchRunner = null;
             mKeyguardGoingAwayRunner = null;
         }
     }
@@ -1754,6 +1766,79 @@
         }
     }
 
+    /** Remote animation runner to launch an app using System UI's animation library. */
+    private static class ContainerAnimationRunner implements RemoteAnimationFactory {
+
+        /** The delegate runner that handles the actual animation. */
+        private final RemoteAnimationDelegate<IRemoteAnimationFinishedCallback> mDelegate;
+
+        private ContainerAnimationRunner(
+                RemoteAnimationDelegate<IRemoteAnimationFinishedCallback> delegate) {
+            mDelegate = delegate;
+        }
+
+        @Nullable
+        private static ContainerAnimationRunner from(
+                View v, StartingWindowListener startingWindowListener) {
+            View viewToUse = findViewWithBackground(v);
+            if (viewToUse == null) {
+                viewToUse = v;
+            }
+
+            // TODO(b/265134143): create a CUJ type for interaction jank monitoring.
+            ActivityLaunchAnimator.Controller controllerDelegate =
+                    ActivityLaunchAnimator.Controller.fromView(viewToUse, null /* cujType */);
+
+            if (controllerDelegate == null) {
+                return null;
+            }
+
+            // This wrapper allows us to override the default value, telling the controller that the
+            // current window is below the animating window.
+            ActivityLaunchAnimator.Controller controller =
+                    new DelegateLaunchAnimatorController(controllerDelegate) {
+                        @Override
+                        public boolean isBelowAnimatingWindow() {
+                            return true;
+                        }
+                    };
+
+            ActivityLaunchAnimator.Callback callback = task -> ColorUtils.setAlphaComponent(
+                    startingWindowListener.getBackgroundColor(), 255);
+
+            return new ContainerAnimationRunner(
+                    new ActivityLaunchAnimator.AnimationDelegate(controller, callback));
+        }
+
+        /** Finds the closest parent of [view] (inclusive) with a background drawable. */
+        @Nullable
+        private static View findViewWithBackground(View view) {
+            View current = view;
+            while (current.getBackground() == null) {
+                if (!(current.getParent() instanceof View)) {
+                    return null;
+                }
+
+                current = (View) view.getParent();
+            }
+
+            return current;
+        }
+
+        @Override
+        public void onAnimationStart(int transit, RemoteAnimationTarget[] appTargets,
+                RemoteAnimationTarget[] wallpaperTargets, RemoteAnimationTarget[] nonAppTargets,
+                LauncherAnimationRunner.AnimationResult result) {
+            mDelegate.onAnimationStart(
+                    transit, appTargets, wallpaperTargets, nonAppTargets, result);
+        }
+
+        @Override
+        public void onAnimationCancelled(boolean isKeyguardOccluded) {
+            mDelegate.onAnimationCancelled(isKeyguardOccluded);
+        }
+    }
+
     /**
      * Class that holds all the variables for the app open animation.
      */
@@ -1822,8 +1907,9 @@
         }
     }
 
-    private static class StartingWindowListener extends IStartingWindowListener.Stub {
+    private class StartingWindowListener extends IStartingWindowListener.Stub {
         private QuickstepTransitionManager mTransitionManager;
+        private int mBackgroundColor;
 
         public void setTransitionManager(QuickstepTransitionManager transitionManager) {
             mTransitionManager = transitionManager;
@@ -1832,6 +1918,13 @@
         @Override
         public void onTaskLaunching(int taskId, int supportedType, int color) {
             mTransitionManager.mTaskStartParams.put(taskId, Pair.create(supportedType, color));
+            mBackgroundColor = color;
+        }
+
+        public int getBackgroundColor() {
+            return mBackgroundColor == Color.TRANSPARENT
+                    ? mLauncher.getScrimView().getBackgroundColor()
+                    : mBackgroundColor;
         }
     }
 
diff --git a/quickstep/src/com/android/launcher3/popup/QuickstepSystemShortcut.java b/quickstep/src/com/android/launcher3/popup/QuickstepSystemShortcut.java
index 45d1b11..184ea71 100644
--- a/quickstep/src/com/android/launcher3/popup/QuickstepSystemShortcut.java
+++ b/quickstep/src/com/android/launcher3/popup/QuickstepSystemShortcut.java
@@ -15,38 +15,14 @@
  */
 package com.android.launcher3.popup;
 
-import static com.android.launcher3.config.FeatureFlags.ENABLE_SPLIT_FROM_WORKSPACE_TO_WORKSPACE;
-import static com.android.launcher3.util.SplitConfigurationOptions.getLogEventForPosition;
-import static com.android.quickstep.util.SplitAnimationTimings.TABLET_HOME_TO_SPLIT;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.util.Log;
 import android.view.View;
 
-import androidx.annotation.Nullable;
-
-import com.android.launcher3.AbstractFloatingView;
-import com.android.launcher3.R;
-import com.android.launcher3.anim.PendingAnimation;
-import com.android.launcher3.logging.StatsLogManager;
 import com.android.launcher3.model.data.ItemInfo;
-import com.android.launcher3.model.data.WorkspaceItemInfo;
+import com.android.launcher3.splitscreen.SplitShortcut;
 import com.android.launcher3.uioverrides.QuickstepLauncher;
 import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
-import com.android.quickstep.util.SplitSelectStateController;
-import com.android.quickstep.views.FloatingTaskView;
-import com.android.quickstep.views.RecentsView;
-import com.android.systemui.shared.recents.model.Task;
 
-import java.util.function.Consumer;
-
+/** {@link SystemShortcut.Factory} implementation to create workspace split shortcuts */
 public interface QuickstepSystemShortcut {
 
     String TAG = QuickstepSystemShortcut.class.getSimpleName();
@@ -58,116 +34,12 @@
                         originalView, position);
     }
 
-    class SplitSelectSystemShortcut extends SystemShortcut<QuickstepLauncher> {
-
-        private final int mSplitPlaceholderSize;
-        private final int mSplitPlaceholderInset;
-
-        private final Rect mTempRect = new Rect();
-        private final SplitPositionOption mPosition;
+    class SplitSelectSystemShortcut extends SplitShortcut<QuickstepLauncher> {
 
         public SplitSelectSystemShortcut(QuickstepLauncher launcher, ItemInfo itemInfo,
                 View originalView, SplitPositionOption position) {
-            super(position.iconResId, position.textResId, launcher, itemInfo, originalView);
-
-            mPosition = position;
-
-            mSplitPlaceholderSize = launcher.getResources().getDimensionPixelSize(
-                    R.dimen.split_placeholder_size);
-            mSplitPlaceholderInset = launcher.getResources().getDimensionPixelSize(
-                    R.dimen.split_placeholder_inset);
-        }
-
-        @Override
-        public void onClick(View view) {
-            // Initiate splitscreen from the Home screen or Home All Apps
-            Bitmap bitmap;
-            Intent intent;
-            if (mItemInfo instanceof WorkspaceItemInfo) {
-                final WorkspaceItemInfo workspaceItemInfo = (WorkspaceItemInfo) mItemInfo;
-                bitmap = workspaceItemInfo.bitmap.icon;
-                intent = workspaceItemInfo.intent;
-            } else if (mItemInfo instanceof com.android.launcher3.model.data.AppInfo) {
-                final com.android.launcher3.model.data.AppInfo appInfo =
-                        (com.android.launcher3.model.data.AppInfo) mItemInfo;
-                bitmap = appInfo.bitmap.icon;
-                intent = appInfo.intent;
-            } else {
-                Log.e(TAG, "unknown item type");
-                return;
-            }
-
-            StatsLogManager.EventEnum splitEvent = getLogEventForPosition(mPosition.stagePosition);
-            RecentsView recentsView = mTarget.getOverviewPanel();
-            // Check if there is already an instance of this app running, if so, initiate the split
-            // using that.
-            recentsView.findLastActiveTaskAndRunCallback(
-                    intent.getComponent(),
-                    (Consumer<Task>) foundTask -> {
-                        SplitSelectSource source = new SplitSelectSource(mOriginalView,
-                                new BitmapDrawable(bitmap), intent, mPosition, mItemInfo,
-                                splitEvent, foundTask);
-                        if (ENABLE_SPLIT_FROM_WORKSPACE_TO_WORKSPACE.get()) {
-                            startSplitToHome(source);
-                        } else {
-                            recentsView.initiateSplitSelect(source);
-                        }
-                    }
-            );
-        }
-
-        private void startSplitToHome(SplitSelectSource source) {
-            AbstractFloatingView.closeAllOpenViews(mTarget);
-
-            SplitSelectStateController controller = mTarget.getSplitSelectStateController();
-            controller.setInitialTaskSelect(source.intent, source.position.stagePosition,
-                    source.itemInfo, source.splitEvent, source.alreadyRunningTask);
-
-            RecentsView recentsView = mTarget.getOverviewPanel();
-            recentsView.getPagedOrientationHandler().getInitialSplitPlaceholderBounds(
-                    mSplitPlaceholderSize, mSplitPlaceholderInset, mTarget.getDeviceProfile(),
-                    controller.getActiveSplitStagePosition(), mTempRect);
-
-            PendingAnimation anim = new PendingAnimation(TABLET_HOME_TO_SPLIT.getDuration());
-            RectF startingTaskRect = new RectF();
-            final FloatingTaskView floatingTaskView = FloatingTaskView.getFloatingTaskView(mTarget,
-                    source.view, null /* thumbnail */, source.drawable, startingTaskRect);
-            floatingTaskView.setAlpha(1);
-            floatingTaskView.addStagingAnimation(anim, startingTaskRect, mTempRect,
-                    false /* fadeWithThumbnail */, true /* isStagedTask */);
-            controller.setFirstFloatingTaskView(floatingTaskView);
-            anim.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationCancel(Animator animation) {
-                    mTarget.getDragLayer().removeView(floatingTaskView);
-                    controller.resetState();
-                }
-            });
-            anim.buildAnim().start();
-        }
-    }
-
-    class SplitSelectSource {
-
-        public final View view;
-        public final Drawable drawable;
-        public final Intent intent;
-        public final SplitPositionOption position;
-        public final ItemInfo itemInfo;
-        public final StatsLogManager.EventEnum splitEvent;
-        @Nullable
-        public final Task alreadyRunningTask;
-
-        public SplitSelectSource(View view, Drawable drawable, Intent intent,
-                SplitPositionOption position, ItemInfo itemInfo,
-                StatsLogManager.EventEnum splitEvent, @Nullable Task foundTask) {
-            this.view = view;
-            this.drawable = drawable;
-            this.intent = intent;
-            this.position = position;
-            this.itemInfo = itemInfo;
-            this.splitEvent = splitEvent;
-            this.alreadyRunningTask = foundTask;
+            super(position.iconResId, position.textResId, launcher, itemInfo, originalView,
+                    position);
         }
     }
 }
diff --git a/quickstep/src/com/android/launcher3/splitscreen/SplitShortcut.kt b/quickstep/src/com/android/launcher3/splitscreen/SplitShortcut.kt
new file mode 100644
index 0000000..20c8c44
--- /dev/null
+++ b/quickstep/src/com/android/launcher3/splitscreen/SplitShortcut.kt
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ */
+
+package com.android.launcher3.splitscreen
+
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.drawable.BitmapDrawable
+import android.util.Log
+import android.view.View
+import com.android.launcher3.model.data.ItemInfo
+import com.android.launcher3.model.data.WorkspaceItemInfo
+import com.android.launcher3.popup.QuickstepSystemShortcut
+import com.android.launcher3.popup.SystemShortcut
+import com.android.launcher3.util.SplitConfigurationOptions
+import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption
+import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource
+import com.android.launcher3.views.ActivityContext
+
+/**
+ * Shortcut to allow starting split. Default interaction for [onClick] is to launch
+ * split selection mode
+ */
+abstract class SplitShortcut<T>(
+    iconResId: Int,
+    labelResId: Int,
+    target: T,
+    itemInfo: ItemInfo?,
+    originalView: View?,
+    protected val position: SplitPositionOption
+) : SystemShortcut<T>(iconResId, labelResId, target, itemInfo, originalView) where
+T : Context?,
+T : ActivityContext? {
+    private val TAG = SystemShortcut::class.java.simpleName
+
+    // Initiate splitscreen from the Home screen or Home All Apps
+    protected val splitSelectSource: SplitSelectSource?
+        get() {
+            // Initiate splitscreen from the Home screen or Home All Apps
+            val bitmap: Bitmap
+            val intent: Intent
+            when (mItemInfo) {
+                is WorkspaceItemInfo -> {
+                    val workspaceItemInfo = mItemInfo
+                    bitmap = workspaceItemInfo.bitmap.icon
+                    intent = workspaceItemInfo.intent
+                }
+                is com.android.launcher3.model.data.AppInfo -> {
+                    val appInfo = mItemInfo
+                    bitmap = appInfo.bitmap.icon
+                    intent = appInfo.intent
+                }
+                else -> {
+                    Log.e(TAG, "unknown item type")
+                    return null
+                }
+            }
+            val splitEvent =
+                SplitConfigurationOptions.getLogEventForPosition(position.stagePosition)
+            return SplitSelectSource(
+                mOriginalView,
+                BitmapDrawable(bitmap),
+                intent,
+                position,
+                mItemInfo,
+                splitEvent
+            )
+        }
+
+    /** Starts split selection on the provided [mTarget] */
+    override fun onClick(view: View?) {
+        val splitSelectSource = splitSelectSource
+        if (splitSelectSource == null) {
+            Log.w(QuickstepSystemShortcut.TAG, "no split selection source")
+            return
+        }
+        mTarget!!.startSplitSelection(splitSelectSource)
+    }
+}
diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
index 2b976df..9cec881 100644
--- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
@@ -18,6 +18,7 @@
 import static android.view.View.AccessibilityDelegate;
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION;
+import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
 
 import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X;
 import static com.android.launcher3.Utilities.getDescendantCoordRelativeToAncestor;
@@ -299,7 +300,8 @@
                     R.dimen.floating_rotation_button_taskbar_left_margin,
                     R.dimen.floating_rotation_button_taskbar_bottom_margin,
                     R.dimen.floating_rotation_button_diameter,
-                    R.dimen.key_button_ripple_max_width);
+                    R.dimen.key_button_ripple_max_width,
+                    R.bool.floating_rotation_button_position_left);
             mControllers.rotationButtonController.setRotationButton(mFloatingRotationButton,
                     mRotationButtonListener);
 
@@ -486,13 +488,6 @@
     }
 
     /**
-     * Returns true if IME switcher is visible
-     */
-    public boolean isImeSwitcherVisible() {
-        return (mState & FLAG_SWITCHER_SHOWING) != 0;
-    }
-
-    /**
      * Returns true if the home button is disabled
      */
     public boolean isHomeDisabled() {
@@ -870,8 +865,8 @@
         mAreNavButtonsInSeparateWindow = true;
         mContext.getDragLayer().removeView(mNavButtonsView);
         mSeparateWindowParent.addView(mNavButtonsView);
-        WindowManager.LayoutParams windowLayoutParams = mContext.createDefaultWindowLayoutParams();
-        windowLayoutParams.setTitle(NAV_BUTTONS_SEPARATE_WINDOW_TITLE);
+        WindowManager.LayoutParams windowLayoutParams = mContext.createDefaultWindowLayoutParams(
+                TYPE_NAVIGATION_BAR_PANEL, NAV_BUTTONS_SEPARATE_WINDOW_TITLE);
         mContext.addWindowView(mSeparateWindowParent, windowLayoutParams);
 
     }
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
index 8a5b2c5..dc2c720 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
@@ -15,6 +15,7 @@
  */
 package com.android.launcher3.taskbar;
 
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
 import static android.content.pm.PackageManager.FEATURE_PC;
 import static android.os.Trace.TRACE_TAG_APP;
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
@@ -92,6 +93,7 @@
 import com.android.launcher3.util.NavigationMode;
 import com.android.launcher3.util.PackageManagerHelper;
 import com.android.launcher3.util.SettingsCache;
+import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource;
 import com.android.launcher3.util.TraceHelper;
 import com.android.launcher3.util.ViewCache;
 import com.android.launcher3.views.ActivityContext;
@@ -239,7 +241,8 @@
 
     public void init(@NonNull TaskbarSharedState sharedState) {
         mLastRequestedNonFullscreenHeight = getDefaultTaskbarWindowHeight();
-        mWindowLayoutParams = createDefaultWindowLayoutParams();
+        mWindowLayoutParams =
+                createDefaultWindowLayoutParams(TYPE_NAVIGATION_BAR_PANEL, WINDOW_TITLE);
 
         // Initialize controllers after all are constructed.
         mControllers.init(sharedState);
@@ -315,16 +318,12 @@
         return super.getStatsLogManager();
     }
 
-    /** @see #createDefaultWindowLayoutParams(int) */
-    public WindowManager.LayoutParams createDefaultWindowLayoutParams() {
-        return createDefaultWindowLayoutParams(TYPE_NAVIGATION_BAR_PANEL);
-    }
-
     /**
      * Creates LayoutParams for adding a view directly to WindowManager as a new window.
      * @param type The window type to pass to the created WindowManager.LayoutParams.
+     * @param title The window title to pass to the created WindowManager.LayoutParams.
      */
-    public WindowManager.LayoutParams createDefaultWindowLayoutParams(int type) {
+    public WindowManager.LayoutParams createDefaultWindowLayoutParams(int type, String title) {
         DeviceProfile deviceProfile = getDeviceProfile();
         // Taskbar is on the logical bottom of the screen
         boolean isVerticalBarLayout = TaskbarManager.isPhoneMode(deviceProfile) &&
@@ -344,7 +343,7 @@
                 type,
                 windowFlags,
                 PixelFormat.TRANSLUCENT);
-        windowLayoutParams.setTitle(WINDOW_TITLE);
+        windowLayoutParams.setTitle(title);
         windowLayoutParams.packageName = getPackageName();
         windowLayoutParams.gravity = !isVerticalBarLayout ?
                 Gravity.BOTTOM :
@@ -555,8 +554,6 @@
                 fromInit);
         mControllers.taskbarViewController.setImeIsVisible(
                 mControllers.navbarButtonsViewController.isImeVisible());
-        mControllers.taskbarViewController.setIsImeSwitcherVisible(
-                mControllers.navbarButtonsViewController.isImeSwitcherVisible());
         int shadeExpandedFlags = SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED
                 | SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
         onNotificationShadeExpandChanged((systemUiStateFlags & shadeExpandedFlags) != 0, fromInit);
@@ -754,6 +751,11 @@
         }
     }
 
+    @Override
+    public void startSplitSelection(SplitSelectSource splitSelectSource) {
+        mControllers.uiController.startSplitSelection(splitSelectSource);
+    }
+
     protected void onTaskbarIconClicked(View view) {
         Object tag = view.getTag();
         if (tag instanceof Task) {
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
index cd27a46..267bee1 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
@@ -49,6 +49,8 @@
     private final AnimatedFloat mNotificationShadeBgTaskbar = new AnimatedFloat(
             this::updateBackgroundAlpha);
     private final AnimatedFloat mImeBgTaskbar = new AnimatedFloat(this::updateBackgroundAlpha);
+    private final AnimatedFloat mAssistantBgTaskbar = new AnimatedFloat(
+            this::updateBackgroundAlpha);
     // Used to hide our background color when someone else (e.g. ScrimView) is handling it.
     private final AnimatedFloat mBgOverride = new AnimatedFloat(this::updateBackgroundAlpha);
 
@@ -60,6 +62,7 @@
     private AnimatedFloat mNavButtonDarkIntensityMultiplier;
 
     private float mLastSetBackgroundAlpha;
+    private boolean mIsBackgroundDrawnElsewhere;
 
     public TaskbarDragLayerController(TaskbarActivityContext activity,
             TaskbarDragLayer taskbarDragLayer) {
@@ -81,6 +84,7 @@
         mKeyguardBgTaskbar.value = 1;
         mNotificationShadeBgTaskbar.value = 1;
         mImeBgTaskbar.value = 1;
+        mAssistantBgTaskbar.value = 1;
         mBgOverride.value = 1;
         updateBackgroundAlpha();
     }
@@ -119,6 +123,10 @@
         return mImeBgTaskbar;
     }
 
+    public AnimatedFloat getAssistantBgTaskbar() {
+        return mAssistantBgTaskbar;
+    }
+
     public AnimatedFloat getOverrideBackgroundAlpha() {
         return mBgOverride;
     }
@@ -143,7 +151,8 @@
     private void updateBackgroundAlpha() {
         final float bgNavbar = mBgNavbar.value;
         final float bgTaskbar = mBgTaskbar.value * mKeyguardBgTaskbar.value
-                * mNotificationShadeBgTaskbar.value * mImeBgTaskbar.value;
+                * mNotificationShadeBgTaskbar.value * mImeBgTaskbar.value
+                * mAssistantBgTaskbar.value;
         mLastSetBackgroundAlpha = mBgOverride.value * Math.max(bgNavbar, bgTaskbar);
         mTaskbarDragLayer.setTaskbarBackgroundAlpha(mLastSetBackgroundAlpha);
 
@@ -168,9 +177,23 @@
         mTaskbarDragLayer.setCornerRoundness(cornerRoundness);
     }
 
+    /**
+     * Set if another controller is temporarily handling background drawing. In this case we:
+     * - Override our background alpha to be 0.
+     * - Keep the nav bar dark intensity assuming taskbar background is at full alpha.
+     */
+    public void setIsBackgroundDrawnElsewhere(boolean isBackgroundDrawnElsewhere) {
+        mIsBackgroundDrawnElsewhere = isBackgroundDrawnElsewhere;
+        mBgOverride.updateValue(mIsBackgroundDrawnElsewhere ? 0 : 1);
+        updateNavBarDarkIntensityMultiplier();
+    }
+
     private void updateNavBarDarkIntensityMultiplier() {
         // Zero out the app-requested dark intensity when we're drawing our own background.
         float effectiveBgAlpha = mLastSetBackgroundAlpha * (1 - mBgOffset.value);
+        if (mIsBackgroundDrawnElsewhere) {
+            effectiveBgAlpha = 1;
+        }
         mNavButtonDarkIntensityMultiplier.updateValue(1 - effectiveBgAlpha);
     }
 
@@ -181,6 +204,13 @@
         pw.println(prefix + "\tmBgOffset=" + mBgOffset.value);
         pw.println(prefix + "\tmFolderMargin=" + mFolderMargin);
         pw.println(prefix + "\tmLastSetBackgroundAlpha=" + mLastSetBackgroundAlpha);
+        pw.println(prefix + "\t\tmBgOverride=" + mBgOverride.value);
+        pw.println(prefix + "\t\tmBgNavbar=" + mBgNavbar.value);
+        pw.println(prefix + "\t\tmBgTaskbar=" + mBgTaskbar.value);
+        pw.println(prefix + "\t\tmKeyguardBgTaskbar=" + mKeyguardBgTaskbar.value);
+        pw.println(prefix + "\t\tmNotificationShadeBgTaskbar=" + mNotificationShadeBgTaskbar.value);
+        pw.println(prefix + "\t\tmImeBgTaskbar=" + mImeBgTaskbar.value);
+        pw.println(prefix + "\t\tmAssistantBgTaskbar=" + mAssistantBgTaskbar.value);
     }
 
     /**
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltipController.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltipController.kt
index c4d1ab2..faf7451 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltipController.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltipController.kt
@@ -151,7 +151,7 @@
     }
 
     override fun dumpLogs(prefix: String?, pw: PrintWriter?) {
-        pw?.println("$(prefix)TaskbarEduController:")
+        pw?.println(prefix + "TaskbarEduTooltipController:")
         pw?.println("$prefix\tisTooltipEnabled=$isTooltipEnabled")
         pw?.println("$prefix\tisOpen=$isOpen")
         pw?.println("$prefix\ttooltipStep=$tooltipStep")
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java
index d9773d4..3e51e67 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java
@@ -125,7 +125,8 @@
                     mControllers.taskbarDragController.setDisallowLongClick(disallowLongClick);
                     mControllers.taskbarAllAppsController.setDisallowGlobalDrag(disallowGlobalDrag);
                     mControllers.taskbarAllAppsController.setDisallowLongClick(disallowLongClick);
-                    mControllers.taskbarPopupController.setHideSplitOptions(disallowGlobalDrag);
+                    mControllers.taskbarPopupController.setAllowInitialSplitSelection(
+                            disallowGlobalDrag);
                 }
             };
 
@@ -160,6 +161,7 @@
 
         mIconAlignment.finishAnimation();
 
+        Log.d("b/260135164", "onDestroy - updateIconAlphaForHome(1)");
         mLauncher.getHotseat().setIconsAlpha(1f);
         mLauncher.getStateManager().removeStateListener(mStateListener);
 
@@ -410,6 +412,8 @@
                 public void onAnimationEnd(Animator animation) {
                     if (isInStashedState && committed) {
                         // Reset hotseat alpha to default
+                        Log.d("b/260135164",
+                                "playStateTransitionAnim#onAnimationEnd - setIconsAlpha(1)");
                         mLauncher.getHotseat().setIconsAlpha(1);
                     }
                 }
@@ -458,6 +462,9 @@
          * Hide Launcher Hotseat icons when Taskbar icons have opacity. Both icon sets
          * should not be visible at the same time.
          */
+        Log.d("b/260135164",
+                "updateIconAlphaForHome - setIconsAlpha(" + (hotseatVisible ? 1 : 0)
+                        + "), isTaskbarPresent: " + mLauncher.getDeviceProfile().isTaskbarPresent);
         mLauncher.getHotseat().setIconsAlpha(hotseatVisible ? 1 : 0);
         mLauncher.getHotseat().setQsbAlpha(
                 mLauncher.getDeviceProfile().isQsbInline && !hotseatVisible ? 0 : 1);
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java
index 9b27c9d..30d6eb4 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java
@@ -17,11 +17,9 @@
 
 import static com.android.launcher3.util.SplitConfigurationOptions.getLogEventForPosition;
 
-import android.content.ClipDescription;
 import android.content.Intent;
 import android.content.pm.LauncherApps;
 import android.graphics.Point;
-import android.os.Bundle;
 import android.util.Pair;
 import android.view.MotionEvent;
 import android.view.View;
@@ -46,6 +44,7 @@
 import com.android.launcher3.popup.PopupLiveUpdateHandler;
 import com.android.launcher3.popup.SystemShortcut;
 import com.android.launcher3.shortcuts.DeepShortcutView;
+import com.android.launcher3.splitscreen.SplitShortcut;
 import com.android.launcher3.util.ComponentKey;
 import com.android.launcher3.util.LauncherBindableItemsContainer;
 import com.android.launcher3.util.PackageUserKey;
@@ -75,7 +74,7 @@
 
     // Initialized in init.
     private TaskbarControllers mControllers;
-    private boolean mHideSplitOptions;
+    private boolean mAllowInitialSplitSelection;
 
     public TaskbarPopupController(TaskbarActivityContext context) {
         mContext = context;
@@ -101,8 +100,8 @@
         mPopupDataProvider.setDeepShortcutMap(deepShortcutMapCopy);
     }
 
-    public void setHideSplitOptions(boolean hideSplitOptions) {
-        mHideSplitOptions = hideSplitOptions;
+    public void setAllowInitialSplitSelection(boolean allowInitialSplitSelection) {
+        mAllowInitialSplitSelection = allowInitialSplitSelection;
     }
 
     private void updateNotificationDots(Predicate<PackageUserKey> updatedDots) {
@@ -188,13 +187,9 @@
     }
 
     // Create a Stream of all applicable system shortcuts
-    // TODO(b/227800345): Add "Split bottom" option when tablet is in portrait mode.
     private Stream<SystemShortcut.Factory> getSystemShortcuts() {
         // concat a Stream of split options with a Stream of APP_INFO
         Stream<SystemShortcut.Factory> appInfo = Stream.of(APP_INFO);
-        if (mHideSplitOptions) {
-            return appInfo;
-        }
 
         return Stream.concat(
                 Utilities.getSplitPositionOptions(mContext.getDeviceProfile())
@@ -261,7 +256,7 @@
     private SystemShortcut.Factory<BaseTaskbarContext> createSplitShortcutFactory(
             SplitPositionOption position) {
         return (context, itemInfo, originalView) -> new TaskbarSplitShortcut(context, itemInfo,
-                originalView, position);
+                originalView, position, mAllowInitialSplitSelection);
     }
 
      /**
@@ -269,32 +264,43 @@
      * from the taskbar, as if the user performed a drag and drop split.
      * Includes an onClick method that initiates the actual split.
      */
-    private static class TaskbarSplitShortcut extends SystemShortcut<BaseTaskbarContext> {
-        private final SplitPositionOption mPosition;
+    private static class TaskbarSplitShortcut extends
+             SplitShortcut<BaseTaskbarContext> {
+         /**
+          * If {@code true}, clicking this shortcut will not attempt to start a split app directly,
+          * but be the first app in split selection mode
+          */
+         private final boolean mAllowInitialSplitSelection;
 
-        TaskbarSplitShortcut(BaseTaskbarContext context, ItemInfo itemInfo, View originalView,
-                SplitPositionOption position) {
-            super(position.iconResId, position.textResId, context, itemInfo, originalView);
-            mPosition = position;
-        }
+         TaskbarSplitShortcut(BaseTaskbarContext context, ItemInfo itemInfo, View originalView,
+                SplitPositionOption position, boolean allowInitialSplitSelection) {
+             super(position.iconResId, position.textResId, context, itemInfo, originalView,
+                     position);
+             mAllowInitialSplitSelection = allowInitialSplitSelection;
+         }
 
         @Override
         public void onClick(View view) {
+            AbstractFloatingView.closeAllOpenViews(mTarget);
+             if (mAllowInitialSplitSelection) {
+                 super.onClick(view);
+                 return;
+             }
+
             // Initiate splitscreen from the in-app Taskbar or Taskbar All Apps
             Pair<InstanceId, com.android.launcher3.logging.InstanceId> instanceIds =
                     LogUtils.getShellShareableInstanceId();
             mTarget.getStatsLogManager().logger()
                     .withItemInfo(mItemInfo)
                     .withInstanceId(instanceIds.second)
-                    .log(getLogEventForPosition(mPosition.stagePosition));
+                    .log(getLogEventForPosition(getPosition().stagePosition));
 
-            AbstractFloatingView.closeAllOpenViews(mTarget);
             if (mItemInfo.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT) {
                 WorkspaceItemInfo workspaceItemInfo = (WorkspaceItemInfo) mItemInfo;
                 SystemUiProxy.INSTANCE.get(mTarget).startShortcut(
                         workspaceItemInfo.getIntent().getPackage(),
                         workspaceItemInfo.getDeepShortcutId(),
-                        mPosition.stagePosition,
+                        getPosition().stagePosition,
                         null,
                         workspaceItemInfo.user,
                         instanceIds.first);
@@ -305,7 +311,7 @@
                                 null,
                                 mItemInfo.user),
                         new Intent(),
-                        mPosition.stagePosition,
+                        getPosition().stagePosition,
                         null,
                         instanceIds.first);
             }
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarScrimViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarScrimViewController.java
index 88767dd..5ea00cf 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarScrimViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarScrimViewController.java
@@ -67,7 +67,8 @@
         final boolean manageMenuExpanded =
                 (stateFlags & SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED) != 0;
         final boolean showScrim = !mControllers.navbarButtonsViewController.isImeVisible()
-                && bubblesExpanded && mControllers.taskbarStashController.isInAppAndNotStashed();
+                && bubblesExpanded
+                && mControllers.taskbarStashController.isTaskbarVisibleAndNotStashing();
         final float scrimAlpha = manageMenuExpanded
                 // When manage menu shows there's the first scrim and second scrim so figure out
                 // what the total transparency would be.
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
index ef79b8e..6b7bfa0 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
@@ -35,8 +35,6 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
-import android.animation.ValueAnimator;
-import android.annotation.Nullable;
 import android.content.SharedPreferences;
 import android.content.res.Resources;
 import android.util.Log;
@@ -45,6 +43,7 @@
 import android.view.ViewConfiguration;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
 import com.android.internal.jank.InteractionJankMonitor;
@@ -184,12 +183,13 @@
             flags -> {
                 boolean inApp = hasAnyFlag(flags, FLAGS_IN_APP);
                 boolean stashedInApp = hasAnyFlag(flags, FLAGS_STASHED_IN_APP);
+                boolean stashedSysUIState = hasAnyFlag(flags, FLAG_STASHED_IN_SYSUI_STATE);
                 boolean stashedLauncherState = hasAnyFlag(flags, FLAG_IN_STASHED_LAUNCHER_STATE);
                 boolean stashedInTaskbarAllApps =
                         hasAnyFlag(flags, FLAG_STASHED_IN_TASKBAR_ALL_APPS);
                 boolean stashedForSmallScreen = hasAnyFlag(flags, FLAG_STASHED_SMALL_SCREEN);
                 return (inApp && stashedInApp) || (!inApp && stashedLauncherState)
-                        || stashedInTaskbarAllApps || stashedForSmallScreen;
+                        || stashedInTaskbarAllApps || stashedForSmallScreen || stashedSysUIState;
             });
 
     public TaskbarStashController(TaskbarActivityContext activity) {
@@ -349,10 +349,10 @@
 
 
     /**
-     * Returns whether the taskbar is currently visible and in an app.
+     * Returns whether the taskbar is currently visible and not in the process of being stashed.
      */
-    public boolean isInAppAndNotStashed() {
-        return !mIsStashed && isInApp();
+    public boolean isTaskbarVisibleAndNotStashing() {
+        return !mIsStashed && mControllers.taskbarViewController.areIconsVisible();
     }
 
     public boolean isInApp() {
@@ -696,15 +696,26 @@
     }
 
     public void applyState(long duration) {
-        createApplyStateAnimator(duration).start();
+        Animator animator = createApplyStateAnimator(duration);
+        if (animator != null) {
+            animator.start();
+        }
     }
 
     public void applyState(long duration, long startDelay) {
         Animator animator = createApplyStateAnimator(duration);
-        animator.setStartDelay(startDelay);
-        animator.start();
+        if (animator != null) {
+            animator.setStartDelay(startDelay);
+            animator.start();
+        }
     }
 
+
+    /**
+     * Returns an animator which applies the latest state if mIsStashed is changed, or {@code null}
+     * otherwise.
+     */
+    @Nullable
     public Animator createApplyStateAnimator(long duration) {
         return mStatePropertyHolder.createSetStateAnimator(mState, duration);
     }
@@ -945,9 +956,9 @@
          * creating a new animation (stored in mAnimator).
          * @param flags The latest flags to apply (see the top of this file).
          * @param duration The length of the animation.
-         * @return mAnimator if mIsStashed changed or an empty animator.
+         * @return mAnimator if mIsStashed changed, or {@code null} otherwise.
          */
-        @NonNull
+        @Nullable
         public Animator createSetStateAnimator(int flags, long duration) {
             int changedFlags = mPrevFlags ^ flags;
             if (mPrevFlags != flags) {
@@ -976,7 +987,7 @@
                 createAnimToIsStashed(mIsStashed, duration, /* animateBg= */ true, changedFlags);
                 return mAnimator;
             }
-            return ValueAnimator.ofFloat(0, 1).setDuration(duration);
+            return null;
         }
     }
 }
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarTranslationController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarTranslationController.java
index 586115d..80f030f 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarTranslationController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarTranslationController.java
@@ -113,7 +113,7 @@
                 return;
             }
             reset();
-            if (mControllers.taskbarStashController.isInAppAndNotStashed()) {
+            if (mControllers.taskbarStashController.isTaskbarVisibleAndNotStashing()) {
                 mControllers.taskbarEduTooltipController.maybeShowFeaturesEdu();
             }
         }));
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
index ebb37a8..1c11bf7 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
@@ -15,6 +15,8 @@
  */
 package com.android.launcher3.taskbar;
 
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
+
 import android.content.Intent;
 import android.graphics.drawable.BitmapDrawable;
 import android.view.MotionEvent;
@@ -26,6 +28,7 @@
 import com.android.launcher3.model.data.ItemInfo;
 import com.android.launcher3.model.data.ItemInfoWithIcon;
 import com.android.launcher3.util.DisplayController;
+import com.android.launcher3.util.SplitConfigurationOptions;
 import com.android.quickstep.views.RecentsView;
 import com.android.quickstep.views.TaskView;
 import com.android.systemui.shared.recents.model.Task;
@@ -165,6 +168,23 @@
         return null;
     }
 
+    public void startSplitSelection(SplitConfigurationOptions.SplitSelectSource splitSelectSource) {
+        RecentsView recentsView = getRecentsView();
+        if (recentsView == null) {
+            return;
+        }
+        recentsView.findLastActiveTaskAndRunCallback(
+                splitSelectSource.intent.getComponent(),
+                (Consumer<Task>) foundTask -> {
+                    splitSelectSource.alreadyRunningTaskId = foundTask == null
+                            ? INVALID_TASK_ID
+                            : foundTask.key.id;
+                    splitSelectSource.animateCurrentTaskDismissal = foundTask != null;
+                    recentsView.initiateSplitSelect(splitSelectSource);
+                }
+        );
+    }
+
     /**
      * Uses the clicked Taskbar icon to launch a second app for splitscreen.
      */
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
index 2fcd64b..db584d8 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
@@ -15,8 +15,9 @@
  */
 package com.android.launcher3.taskbar;
 
+import static android.content.pm.PackageManager.FEATURE_PC;
+
 import android.content.Context;
-import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.graphics.Canvas;
 import android.graphics.Rect;
@@ -81,6 +82,9 @@
     // Only non-null when device supports having an All Apps button.
     private @Nullable View mAllAppsButton;
 
+    // Only non-null when device supports having an All Apps button.
+    private @Nullable View mTaskbarDivider;
+
     private View mQsb;
 
     public TaskbarView(@NonNull Context context) {
@@ -119,13 +123,16 @@
 
         mThemeIconsBackground = calculateThemeIconsBackground();
 
-        if (FeatureFlags.ENABLE_ALL_APPS_IN_TASKBAR.get()) {
+        if (FeatureFlags.ENABLE_ALL_APPS_IN_TASKBAR.get()
+                && !mActivityContext.getPackageManager().hasSystemFeature(FEATURE_PC)) {
             mAllAppsButton = LayoutInflater.from(context)
                     .inflate(R.layout.taskbar_all_apps_button, this, false);
             mAllAppsButton.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding);
             mAllAppsButton.setScaleX(mIsRtl ? -1 : 1);
-            if (mActivityContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_PC)) {
-                mAllAppsButton.setVisibility(GONE);
+
+            if (FeatureFlags.ENABLE_TASKBAR_PINNING.get()) {
+                mTaskbarDivider = LayoutInflater.from(context).inflate(R.layout.taskbar_divider,
+                        this, false);
             }
         }
 
@@ -159,6 +166,9 @@
         if (mAllAppsButton != null) {
             mAllAppsButton.setOnClickListener(mControllerCallbacks.getAllAppsButtonClickListener());
         }
+        if (mTaskbarDivider != null) {
+            //TODO(b/265434705): set long press listener
+        }
     }
 
     private void removeAndRecycle(View view) {
@@ -180,6 +190,10 @@
 
         if (mAllAppsButton != null) {
             removeView(mAllAppsButton);
+
+            if (mTaskbarDivider != null) {
+                removeView(mTaskbarDivider);
+            }
         }
         removeView(mQsb);
 
@@ -256,8 +270,11 @@
         }
 
         if (mAllAppsButton != null) {
-            int index = mIsRtl ? getChildCount() : 0;
-            addView(mAllAppsButton, index);
+            addView(mAllAppsButton, mIsRtl ? getChildCount() : 0);
+
+            if (mTaskbarDivider != null) {
+                addView(mTaskbarDivider, mIsRtl ? (getChildCount() - 1) : 1);
+            }
         }
         if (mActivityContext.getDeviceProfile().isQsbInline) {
             addView(mQsb, mIsRtl ? getChildCount() : 0);
@@ -328,6 +345,11 @@
                 int qsbTop = (bottom - top - deviceProfile.hotseatQsbHeight) / 2;
                 int qsbBottom = qsbTop + deviceProfile.hotseatQsbHeight;
                 child.layout(qsbStart, qsbTop, qsbEnd, qsbBottom);
+            } else if (child == mTaskbarDivider) {
+                iconEnd += mItemMarginLeftRight;
+                int iconStart = iconEnd - mIconTouchSize;
+                child.layout(iconStart, mIconLayoutBounds.top, iconEnd, mIconLayoutBounds.bottom);
+                iconEnd = iconStart + mItemMarginLeftRight;
             } else {
                 iconEnd -= mItemMarginLeftRight;
                 int iconStart = iconEnd - mIconTouchSize;
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
index 168c353..69f79ba 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
@@ -79,9 +79,8 @@
     public static final int ALPHA_INDEX_RECENTS_DISABLED = 3;
     public static final int ALPHA_INDEX_NOTIFICATION_EXPANDED = 4;
     public static final int ALPHA_INDEX_ASSISTANT_INVOKED = 5;
-    public static final int ALPHA_INDEX_IME_BUTTON_NAV = 6;
-    public static final int ALPHA_INDEX_SMALL_SCREEN = 7;
-    private static final int NUM_ALPHA_CHANNELS = 8;
+    public static final int ALPHA_INDEX_SMALL_SCREEN = 6;
+    private static final int NUM_ALPHA_CHANNELS = 7;
 
     private final TaskbarActivityContext mActivity;
     private final TaskbarView mTaskbarView;
@@ -201,14 +200,6 @@
     }
 
     /**
-     * Should be called when the IME switcher visibility changes.
-     */
-    public void setIsImeSwitcherVisible(boolean isImeSwitcherVisible) {
-        mTaskbarIconAlpha.get(ALPHA_INDEX_IME_BUTTON_NAV).setValue(
-                isImeSwitcherVisible ? 0 : 1);
-    }
-
-    /**
      * Should be called when the recents button is disabled, so we can hide taskbar icons as well.
      */
     public void setRecentsButtonDisabled(boolean isDisabled) {
diff --git a/quickstep/src/com/android/launcher3/taskbar/VoiceInteractionWindowController.kt b/quickstep/src/com/android/launcher3/taskbar/VoiceInteractionWindowController.kt
index be34fb1..7a5deb7 100644
--- a/quickstep/src/com/android/launcher3/taskbar/VoiceInteractionWindowController.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/VoiceInteractionWindowController.kt
@@ -1,31 +1,70 @@
+/*
+ * 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.
+ */
 package com.android.launcher3.taskbar
 
+import android.animation.AnimatorSet
 import android.graphics.Canvas
+import android.view.View
+import android.view.ViewTreeObserver
+import android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION
 import android.view.WindowManager
 import android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
+import com.android.launcher3.util.DisplayController
 import com.android.launcher3.views.BaseDragLayer
 import com.android.systemui.animation.ViewRootSync
 import java.io.PrintWriter
 
 private const val TASKBAR_ICONS_FADE_DURATION = 300L
 private const val STASHED_HANDLE_FADE_DURATION = 180L
+private const val TEMP_BACKGROUND_WINDOW_TITLE = "VoiceInteractionTaskbarBackground"
 
-/** Controls Taskbar behavior while Voice Interaction Window (assistant) is showing. */
+/**
+ * Controls Taskbar behavior while Voice Interaction Window (assistant) is showing. Specifically:
+ * - We always hide the taskbar icons or stashed handle, whichever is currently showing.
+ * - For persistent taskbar, we also move the taskbar background to a new window/layer
+ * (TYPE_APPLICATION_OVERLAY) which is behind the assistant.
+ * - For transient taskbar, we hide the real taskbar background (if it's showing).
+ */
 class VoiceInteractionWindowController(val context: TaskbarActivityContext) :
     TaskbarControllers.LoggableTaskbarController, TaskbarControllers.BackgroundRendererController {
 
+    private val isSeparateBackgroundEnabled = !DisplayController.isTransientTaskbar(context)
     private val taskbarBackgroundRenderer = TaskbarBackgroundRenderer(context)
+    private val nonTouchableInsetsComputer =
+        ViewTreeObserver.OnComputeInternalInsetsListener {
+            it.touchableRegion.setEmpty()
+            it.setTouchableInsets(TOUCHABLE_INSETS_REGION)
+        }
 
     // Initialized in init.
     private lateinit var controllers: TaskbarControllers
-    private lateinit var separateWindowForTaskbarBackground: BaseDragLayer<TaskbarActivityContext>
-    private lateinit var separateWindowLayoutParams: WindowManager.LayoutParams
+    // Only initialized if isSeparateBackgroundEnabled
+    private var separateWindowForTaskbarBackground: BaseDragLayer<TaskbarActivityContext>? = null
+    private var separateWindowLayoutParams: WindowManager.LayoutParams? = null
 
     private var isVoiceInteractionWindowVisible: Boolean = false
+    private var pendingAttachedToWindowListener: View.OnAttachStateChangeListener? = null
 
     fun init(controllers: TaskbarControllers) {
         this.controllers = controllers
 
+        if (!isSeparateBackgroundEnabled) {
+            return
+        }
+
         separateWindowForTaskbarBackground =
             object : BaseDragLayer<TaskbarActivityContext>(context, null, 0) {
                 override fun recreateControllers() {
@@ -34,24 +73,39 @@
 
                 override fun draw(canvas: Canvas) {
                     super.draw(canvas)
-                    if (
-                        this@VoiceInteractionWindowController.context.isGestureNav &&
-                            controllers.taskbarStashController.isInAppAndNotStashed
-                    ) {
+                    if (controllers.taskbarStashController.isTaskbarVisibleAndNotStashing) {
                         taskbarBackgroundRenderer.draw(canvas)
                     }
                 }
+
+                override fun onAttachedToWindow() {
+                    super.onAttachedToWindow()
+                    viewTreeObserver.addOnComputeInternalInsetsListener(nonTouchableInsetsComputer)
+                }
+
+                override fun onDetachedFromWindow() {
+                    super.onDetachedFromWindow()
+                    viewTreeObserver.removeOnComputeInternalInsetsListener(
+                        nonTouchableInsetsComputer
+                    )
+                }
             }
-        separateWindowForTaskbarBackground.recreateControllers()
-        separateWindowForTaskbarBackground.setWillNotDraw(false)
+        separateWindowForTaskbarBackground?.recreateControllers()
+        separateWindowForTaskbarBackground?.setWillNotDraw(false)
 
         separateWindowLayoutParams =
-            context.createDefaultWindowLayoutParams(TYPE_APPLICATION_OVERLAY)
-        separateWindowLayoutParams.isSystemApplicationOverlay = true
+            context.createDefaultWindowLayoutParams(
+                TYPE_APPLICATION_OVERLAY,
+                TEMP_BACKGROUND_WINDOW_TITLE
+            )
+        separateWindowLayoutParams?.isSystemApplicationOverlay = true
     }
 
     fun onDestroy() {
         setIsVoiceInteractionWindowVisible(visible = false, skipAnim = true)
+        separateWindowForTaskbarBackground?.removeOnAttachStateChangeListener(
+            pendingAttachedToWindowListener
+        )
     }
 
     fun setIsVoiceInteractionWindowVisible(visible: Boolean, skipAnim: Boolean) {
@@ -72,14 +126,24 @@
                 .get(StashedHandleViewController.ALPHA_INDEX_ASSISTANT_INVOKED)
                 .animateToValue(taskbarIconAlpha)
                 .setDuration(STASHED_HANDLE_FADE_DURATION)
-        fadeTaskbarIcons.start()
-        fadeStashedHandle.start()
+        val animSet = AnimatorSet()
+        animSet.play(fadeTaskbarIcons)
+        animSet.play(fadeStashedHandle)
+        if (!isSeparateBackgroundEnabled) {
+            val fadeTaskbarBackground =
+                controllers.taskbarDragLayerController.assistantBgTaskbar
+                    .animateToValue(taskbarIconAlpha)
+                    .setDuration(TASKBAR_ICONS_FADE_DURATION)
+            animSet.play(fadeTaskbarBackground)
+        }
+        animSet.start()
         if (skipAnim) {
-            fadeTaskbarIcons.end()
-            fadeStashedHandle.end()
+            animSet.end()
         }
 
-        moveTaskbarBackgroundToAppropriateLayer(skipAnim)
+        if (isSeparateBackgroundEnabled) {
+            moveTaskbarBackgroundToAppropriateLayer(skipAnim)
+        }
     }
 
     /**
@@ -92,8 +156,6 @@
      * Removes the temporary window and show the TaskbarDragLayer background again.
      */
     private fun moveTaskbarBackgroundToAppropriateLayer(skipAnim: Boolean) {
-        val taskbarBackgroundOverride =
-            controllers.taskbarDragLayerController.overrideBackgroundAlpha
         val moveToLowerLayer = isVoiceInteractionWindowVisible
         val onWindowsSynchronized =
             if (moveToLowerLayer) {
@@ -102,31 +164,60 @@
                     separateWindowForTaskbarBackground,
                     separateWindowLayoutParams
                 );
-                { taskbarBackgroundOverride.updateValue(0f) }
+                { controllers.taskbarDragLayerController.setIsBackgroundDrawnElsewhere(true) }
             } else {
                 // First reapply the original taskbar background, then remove the temporary window.
-                taskbarBackgroundOverride.updateValue(1f);
+                controllers.taskbarDragLayerController.setIsBackgroundDrawnElsewhere(false);
                 { context.removeWindowView(separateWindowForTaskbarBackground) }
             }
 
         if (skipAnim) {
             onWindowsSynchronized()
         } else {
-            ViewRootSync.synchronizeNextDraw(
-                separateWindowForTaskbarBackground,
-                context.dragLayer,
-                onWindowsSynchronized
-            )
+            separateWindowForTaskbarBackground?.runWhenAttachedToWindow {
+                ViewRootSync.synchronizeNextDraw(
+                    separateWindowForTaskbarBackground!!,
+                    context.dragLayer,
+                    onWindowsSynchronized
+                )
+            }
         }
     }
 
+    private fun View.runWhenAttachedToWindow(onAttachedToWindow: () -> Unit) {
+        if (isAttachedToWindow) {
+            onAttachedToWindow()
+            return
+        }
+        removeOnAttachStateChangeListener(pendingAttachedToWindowListener)
+        pendingAttachedToWindowListener =
+            object : View.OnAttachStateChangeListener {
+                override fun onViewAttachedToWindow(v: View?) {
+                    onAttachedToWindow()
+                    removeOnAttachStateChangeListener(this)
+                    pendingAttachedToWindowListener = null
+                }
+
+                override fun onViewDetachedFromWindow(v: View?) {}
+            }
+        addOnAttachStateChangeListener(pendingAttachedToWindowListener)
+    }
+
     override fun setCornerRoundness(cornerRoundness: Float) {
+        if (!isSeparateBackgroundEnabled) {
+            return
+        }
         taskbarBackgroundRenderer.setCornerRoundness(cornerRoundness)
-        separateWindowForTaskbarBackground.invalidate()
+        separateWindowForTaskbarBackground?.invalidate()
     }
 
     override fun dumpLogs(prefix: String, pw: PrintWriter) {
         pw.println(prefix + "VoiceInteractionWindowController:")
+        pw.println("$prefix\tisSeparateBackgroundEnabled=$isSeparateBackgroundEnabled")
         pw.println("$prefix\tisVoiceInteractionWindowVisible=$isVoiceInteractionWindowVisible")
+        pw.println(
+            "$prefix\tisSeparateTaskbarBackgroundAttachedToWindow=" +
+                "${separateWindowForTaskbarBackground?.isAttachedToWindow}"
+        )
     }
 }
diff --git a/quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayContext.java b/quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayContext.java
index d7a0b03..3edb375 100644
--- a/quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayContext.java
@@ -15,6 +15,8 @@
  */
 package com.android.launcher3.taskbar.overlay;
 
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
+
 import android.content.Context;
 import android.view.View;
 
@@ -28,7 +30,13 @@
 import com.android.launcher3.taskbar.TaskbarControllers;
 import com.android.launcher3.taskbar.TaskbarDragController;
 import com.android.launcher3.taskbar.TaskbarStashController;
+import com.android.launcher3.taskbar.TaskbarUIController;
 import com.android.launcher3.taskbar.allapps.TaskbarAllAppsContainerView;
+import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource;
+import com.android.quickstep.views.RecentsView;
+import com.android.systemui.shared.recents.model.Task;
+
+import java.util.function.Consumer;
 
 /**
  * Window context for the taskbar overlays such as All Apps and EDU.
@@ -46,6 +54,7 @@
     // We automatically stash taskbar when All Apps is opened in gesture navigation mode.
     private final boolean mWillTaskbarBeVisuallyStashed;
     private final int mStashedTaskbarHeight;
+    private final TaskbarUIController mUiController;
 
     public TaskbarOverlayContext(
             Context windowContext,
@@ -61,6 +70,8 @@
         TaskbarStashController taskbarStashController = controllers.taskbarStashController;
         mWillTaskbarBeVisuallyStashed = taskbarStashController.supportsVisualStashing();
         mStashedTaskbarHeight = taskbarStashController.getStashedHeight();
+
+        mUiController = controllers.uiController;
     }
 
     boolean willTaskbarBeVisuallyStashed() {
@@ -111,6 +122,11 @@
     }
 
     @Override
+    public void startSplitSelection(SplitSelectSource splitSelectSource) {
+        mUiController.startSplitSelection(splitSelectSource);
+    }
+
+    @Override
     public DotInfo getDotInfoForItem(ItemInfo info) {
         return mTaskbarContext.getDotInfoForItem(info);
     }
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index 30850b9..5537878 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -15,6 +15,7 @@
  */
 package com.android.launcher3.uioverrides;
 
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
 import static android.os.Trace.TRACE_TAG_APP;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPTIMIZE_MEASURE;
 import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED;
@@ -32,6 +33,7 @@
 import static com.android.launcher3.anim.Interpolators.EMPHASIZED;
 import static com.android.launcher3.compat.AccessibilityManagerCompat.sendCustomAccessibilityEvent;
 import static com.android.launcher3.config.FeatureFlags.ENABLE_SPLIT_FROM_WORKSPACE;
+import static com.android.launcher3.config.FeatureFlags.ENABLE_SPLIT_FROM_WORKSPACE_TO_WORKSPACE;
 import static com.android.launcher3.config.FeatureFlags.ENABLE_WIDGET_PICKER_DEPTH;
 import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_APP_LAUNCH_TAP;
 import static com.android.launcher3.model.data.ItemInfo.NO_MATCHING_ID;
@@ -46,8 +48,11 @@
 import static com.android.launcher3.util.DisplayController.CHANGE_ACTIVE_SCREEN;
 import static com.android.launcher3.util.DisplayController.CHANGE_NAVIGATION_MODE;
 import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
+import static com.android.quickstep.util.SplitAnimationTimings.TABLET_HOME_TO_SPLIT;
 import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_HOME_KEY;
 
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ValueAnimator;
 import android.app.ActivityManager;
@@ -57,6 +62,8 @@
 import android.content.IntentSender;
 import android.content.SharedPreferences;
 import android.content.res.Configuration;
+import android.graphics.Rect;
+import android.graphics.RectF;
 import android.hardware.SensorManager;
 import android.hardware.devicestate.DeviceStateManager;
 import android.media.permission.SafeCloseable;
@@ -79,7 +86,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
-import com.android.app.viewcapture.ViewCapture;
+import com.android.app.viewcapture.SettingsAwareViewCapture;
+import com.android.launcher3.AbstractFloatingView;
 import com.android.launcher3.DeviceProfile;
 import com.android.launcher3.Launcher;
 import com.android.launcher3.LauncherSettings.Favorites;
@@ -92,6 +100,7 @@
 import com.android.launcher3.Workspace;
 import com.android.launcher3.accessibility.LauncherAccessibilityDelegate;
 import com.android.launcher3.anim.AnimatorPlaybackController;
+import com.android.launcher3.anim.PendingAnimation;
 import com.android.launcher3.appprediction.PredictionRowView;
 import com.android.launcher3.config.FeatureFlags;
 import com.android.launcher3.dragndrop.DragOptions;
@@ -133,6 +142,7 @@
 import com.android.launcher3.util.PendingSplitSelectInfo;
 import com.android.launcher3.util.RunnableList;
 import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
+import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource;
 import com.android.launcher3.util.TouchController;
 import com.android.launcher3.widget.LauncherWidgetHolder;
 import com.android.quickstep.OverviewCommandHelper;
@@ -150,9 +160,11 @@
 import com.android.quickstep.util.SplitWithKeyboardShortcutController;
 import com.android.quickstep.util.TISBindHelper;
 import com.android.quickstep.views.DesktopTaskView;
+import com.android.quickstep.views.FloatingTaskView;
 import com.android.quickstep.views.OverviewActionsView;
 import com.android.quickstep.views.RecentsView;
 import com.android.quickstep.views.TaskView;
+import com.android.systemui.shared.recents.model.Task;
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 import com.android.systemui.unfold.UnfoldSharedComponent;
 import com.android.systemui.unfold.UnfoldTransitionFactory;
@@ -168,6 +180,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.function.Consumer;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 
@@ -362,7 +375,7 @@
         Stream<SystemShortcut.Factory> base = Stream.of(WellbeingModel.SHORTCUT_FACTORY);
         if (ENABLE_SPLIT_FROM_WORKSPACE.get() && mDeviceProfile.isTablet) {
             RecentsView recentsView = getOverviewPanel();
-            // TODO: Pull it out of PagedOrentationHandler for split from workspace.
+            // TODO(b/266482558): Pull it out of PagedOrentationHandler for split from workspace.
             List<SplitPositionOption> positions =
                     recentsView.getPagedOrientationHandler().getSplitPositionOptions(
                             mDeviceProfile);
@@ -543,12 +556,70 @@
         addMultiWindowModeChangedListener(mDepthController);
         initUnfoldTransitionProgressProvider();
         if (FeatureFlags.CONTINUOUS_VIEW_TREE_CAPTURE.get()) {
-            mViewCapture = ViewCapture.getInstance().startCapture(getWindow());
+            mViewCapture = SettingsAwareViewCapture.getInstance(this).startCapture(getWindow());
         }
         getWindow().addPrivateFlags(PRIVATE_FLAG_OPTIMIZE_MEASURE);
     }
 
     @Override
+    public void startSplitSelection(SplitSelectSource splitSelectSource) {
+        RecentsView recentsView = getOverviewPanel();
+        // Check if there is already an instance of this app running, if so, initiate the split
+        // using that.
+        recentsView.findLastActiveTaskAndRunCallback(
+                splitSelectSource.intent.getComponent(),
+                (Consumer<Task>) foundTask -> {
+                    splitSelectSource.alreadyRunningTaskId = foundTask == null
+                            ? INVALID_TASK_ID
+                            : foundTask.key.id;
+                    if (ENABLE_SPLIT_FROM_WORKSPACE_TO_WORKSPACE.get()) {
+                        startSplitToHome(splitSelectSource);
+                    } else {
+                        recentsView.initiateSplitSelect(splitSelectSource);
+                    }
+                }
+        );
+    }
+
+    /** TODO(b/266482558) Migrate into SplitSelectStateController or someplace split specific. */
+    private void startSplitToHome(
+            SplitSelectSource source) {
+        AbstractFloatingView.closeAllOpenViews(this);
+        int splitPlaceholderSize = getResources().getDimensionPixelSize(
+                R.dimen.split_placeholder_size);
+        int splitPlaceholderInset = getResources().getDimensionPixelSize(
+                R.dimen.split_placeholder_inset);
+        Rect tempRect = new Rect();
+
+        SplitSelectStateController controller = getSplitSelectStateController();
+        controller.setInitialTaskSelect(source.intent, source.position.stagePosition,
+                source.itemInfo, source.splitEvent, source.alreadyRunningTaskId);
+
+        RecentsView recentsView = getOverviewPanel();
+        recentsView.getPagedOrientationHandler().getInitialSplitPlaceholderBounds(
+                splitPlaceholderSize, splitPlaceholderInset, getDeviceProfile(),
+                controller.getActiveSplitStagePosition(), tempRect);
+
+        PendingAnimation anim = new PendingAnimation(TABLET_HOME_TO_SPLIT.getDuration());
+        RectF startingTaskRect = new RectF();
+        final FloatingTaskView floatingTaskView = FloatingTaskView.getFloatingTaskView(this,
+                source.view, null /* thumbnail */, source.drawable, startingTaskRect);
+        floatingTaskView.setAlpha(1);
+        floatingTaskView.addStagingAnimation(anim, startingTaskRect, tempRect,
+                false /* fadeWithThumbnail */, true /* isStagedTask */);
+        controller.setFirstFloatingTaskView(floatingTaskView);
+        anim.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationCancel(Animator animation) {
+                getDragLayer().removeView(floatingTaskView);
+                controller.resetState();
+            }
+        });
+        anim.buildAnim().start();
+    }
+
+
+    @Override
     protected void onResume() {
         super.onResume();
 
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index deeb027..e3427b7 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -51,7 +51,6 @@
 import static com.android.quickstep.MultiStateCallback.DEBUG_STATES;
 import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.CANCEL_RECENTS_ANIMATION;
 import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.EXPECTING_TASK_APPEARED;
-import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.LAUNCHER_DESTROYED;
 import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.ON_SETTLED_ON_END_TARGET;
 import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD;
 import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS;
@@ -183,7 +182,6 @@
                     if (mActivity != activity) {
                         return;
                     }
-                    handleActivityDestroyed();
                     mRecentsView = null;
                     mActivity = null;
                 }
@@ -464,7 +462,6 @@
         if (mStateCallback.hasStates(STATE_HANDLER_INVALIDATED)) {
             return false;
         }
-        mStateCallback.resumeCallbacks();
 
         T createdActivity = mActivityInterface.getCreatedActivity();
         if (createdActivity != null) {
@@ -534,15 +531,6 @@
         return true;
     }
 
-    private void handleActivityDestroyed() {
-        ActiveGestureLog.INSTANCE.addLog("Launcher activity destroyed", LAUNCHER_DESTROYED);
-        if (mActivityInterface.shouldCancelGestureOnDestroy()) {
-            onGestureCancelled();
-        } else {
-            mStateCallback.pauseCallbacks();
-        }
-    }
-
     /**
      * Return true if the window should be translated horizontally if the recents view scrolls
      */
diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
index 22eaa97..274b686 100644
--- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
@@ -123,14 +123,6 @@
     public abstract AnimationFactory prepareRecentsUI(RecentsAnimationDeviceState deviceState,
             boolean activityVisible, Consumer<AnimatorControllerWithResistance> callback);
 
-    /**
-     * Returns {@code true} iff an ongoing navigational gesture should be cancelled on activity
-     * destroy. Otherwise, the MultiStateCallbacks will be paused until the activity is recreated.
-     */
-    public boolean shouldCancelGestureOnDestroy() {
-        return true;
-    }
-
     public abstract ActivityInitListener createActivityInitListener(
             Predicate<Boolean> onInitListener);
 
diff --git a/quickstep/src/com/android/quickstep/FallbackActivityInterface.java b/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
index 4cb4665..ae9fb0b 100644
--- a/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
@@ -88,11 +88,6 @@
     }
 
     @Override
-    public boolean shouldCancelGestureOnDestroy() {
-        return false;
-    }
-
-    @Override
     public ActivityInitListener createActivityInitListener(
             Predicate<Boolean> onInitListener) {
         return new ActivityInitListener<>((activity, alreadyOnHome) ->
diff --git a/quickstep/src/com/android/quickstep/MultiStateCallback.java b/quickstep/src/com/android/quickstep/MultiStateCallback.java
index 6d767ed..a68bea2 100644
--- a/quickstep/src/com/android/quickstep/MultiStateCallback.java
+++ b/quickstep/src/com/android/quickstep/MultiStateCallback.java
@@ -31,7 +31,6 @@
 
 import java.util.ArrayList;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.StringJoiner;
 import java.util.function.Consumer;
 
@@ -53,9 +52,6 @@
 
     private int mState = 0;
 
-    private boolean mCallbacksPaused = false;
-    private final List<Runnable> mPendingCallbacks = new ArrayList<>();
-
     public MultiStateCallback(String[] stateNames) {
         this(stateNames, stateFlag -> null);
     }
@@ -82,24 +78,6 @@
         }
     }
 
-    /** Pauses callbacks. */
-    public void pauseCallbacks() {
-        mCallbacksPaused = true;
-    }
-
-    /** Immediately queues any callbacks that were pending paused. */
-    public void resumeCallbacks() {
-        if (!mCallbacksPaused) {
-            return;
-        }
-        mCallbacksPaused = false;
-        List<Runnable> queuedCallbacks = new ArrayList<>(mPendingCallbacks);
-        mPendingCallbacks.clear();
-        for (Runnable runnable : queuedCallbacks) {
-            runnable.run();
-        }
-    }
-
     /**
      * Adds the provided state flags to the global state and executes any callbacks as a result.
      */
@@ -121,12 +99,7 @@
             if ((mState & state) == state) {
                 LinkedList<Runnable> callbacks = mCallbacks.valueAt(i);
                 while (!callbacks.isEmpty()) {
-                    Runnable cb = callbacks.pollFirst();
-                    if (mCallbacksPaused) {
-                        mPendingCallbacks.add(cb);
-                    } else {
-                        cb.run();
-                    }
+                    callbacks.pollFirst().run();
                 }
             }
         }
@@ -178,11 +151,7 @@
             if (wasOn != isOn) {
                 ArrayList<Consumer<Boolean>> listeners = mStateChangeListeners.valueAt(i);
                 for (Consumer<Boolean> listener : listeners) {
-                    if (mCallbacksPaused) {
-                        mPendingCallbacks.add(() -> listener.accept(isOn));
-                    } else {
-                        listener.accept(isOn);
-                    }
+                    listener.accept(isOn);
                 }
             }
         }
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index d19f124..687ed36 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -68,7 +68,7 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.UiThread;
 
-import com.android.app.viewcapture.ViewCapture;
+import com.android.app.viewcapture.SettingsAwareViewCapture;
 import com.android.launcher3.BaseDraggingActivity;
 import com.android.launcher3.LauncherPrefs;
 import com.android.launcher3.R;
@@ -1208,7 +1208,7 @@
             mTaskbarManager.dumpLogs("", pw);
 
             if (FeatureFlags.CONTINUOUS_VIEW_TREE_CAPTURE.get()) {
-                ViewCapture.getInstance().dump(pw, fd, this);
+                SettingsAwareViewCapture.getInstance(this).dump(pw, fd, this);
             }
         }
     }
diff --git a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java
index bcaae99..db6d56b 100644
--- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java
+++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java
@@ -34,9 +34,9 @@
 import com.android.launcher3.anim.AnimatorPlaybackController;
 import com.android.launcher3.anim.PendingAnimation;
 import com.android.launcher3.logging.StatsLogManager;
-import com.android.launcher3.popup.QuickstepSystemShortcut;
 import com.android.launcher3.statemanager.StateManager.StateListener;
 import com.android.launcher3.util.SplitConfigurationOptions;
+import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource;
 import com.android.quickstep.FallbackActivityInterface;
 import com.android.quickstep.GestureState;
 import com.android.quickstep.RecentsActivity;
@@ -269,7 +269,7 @@
     }
 
     @Override
-    public void initiateSplitSelect(QuickstepSystemShortcut.SplitSelectSource splitSelectSource) {
+    public void initiateSplitSelect(SplitSelectSource splitSelectSource) {
         super.initiateSplitSelect(splitSelectSource);
         mActivity.getStateManager().goToState(OVERVIEW_SPLIT_SELECT);
     }
diff --git a/quickstep/src/com/android/quickstep/interaction/AnimatedTaskbarView.java b/quickstep/src/com/android/quickstep/interaction/AnimatedTaskbarView.java
index e8cc45b..d706711 100644
--- a/quickstep/src/com/android/quickstep/interaction/AnimatedTaskbarView.java
+++ b/quickstep/src/com/android/quickstep/interaction/AnimatedTaskbarView.java
@@ -43,12 +43,12 @@
 
     private View mBackground;
     private View mIconContainer;
+    private View mAllAppsButton;
     private View mIcon1;
     private View mIcon2;
     private View mIcon3;
     private View mIcon4;
     private View mIcon5;
-    private View mIcon6;
 
     @Nullable private Animator mRunningAnimator;
 
@@ -78,12 +78,12 @@
 
         mBackground = findViewById(R.id.taskbar_background);
         mIconContainer = findViewById(R.id.icon_container);
+        mAllAppsButton = findViewById(R.id.taskbar_all_apps);
         mIcon1 = findViewById(R.id.taskbar_icon_1);
         mIcon2 = findViewById(R.id.taskbar_icon_2);
         mIcon3 = findViewById(R.id.taskbar_icon_3);
         mIcon4 = findViewById(R.id.taskbar_icon_4);
         mIcon5 = findViewById(R.id.taskbar_icon_5);
-        mIcon6 = findViewById(R.id.taskbar_icon_6);
     }
 
     /**
@@ -92,22 +92,20 @@
     public void animateDisappearanceToHotseat(ViewGroup hotseat) {
         ArrayList<Animator> animators = new ArrayList<>();
         int hotseatTop = hotseat.getTop();
+        int hotseatLeft = hotseat.getLeft();
 
-        animators.add(ObjectAnimator.ofFloat(
-                mBackground, View.TRANSLATION_Y, 0, mBackground.getHeight()));
         animators.add(ObjectAnimator.ofFloat(mBackground, View.ALPHA, 1f, 0f));
+        animators.add(ObjectAnimator.ofFloat(mAllAppsButton, View.ALPHA, 1f, 0f));
         animators.add(createIconDisappearanceToHotseatAnimator(
-                mIcon1, hotseat.findViewById(R.id.hotseat_icon_1), hotseatTop));
+                mIcon1, hotseat.findViewById(R.id.hotseat_icon_1), hotseatTop, hotseatLeft));
         animators.add(createIconDisappearanceToHotseatAnimator(
-                mIcon2, hotseat.findViewById(R.id.hotseat_icon_2), hotseatTop));
+                mIcon2, hotseat.findViewById(R.id.hotseat_icon_2), hotseatTop, hotseatLeft));
         animators.add(createIconDisappearanceToHotseatAnimator(
-                mIcon3, hotseat.findViewById(R.id.hotseat_icon_3), hotseatTop));
+                mIcon3, hotseat.findViewById(R.id.hotseat_icon_3), hotseatTop, hotseatLeft));
         animators.add(createIconDisappearanceToHotseatAnimator(
-                mIcon4, hotseat.findViewById(R.id.hotseat_icon_4), hotseatTop));
+                mIcon4, hotseat.findViewById(R.id.hotseat_icon_4), hotseatTop, hotseatLeft));
         animators.add(createIconDisappearanceToHotseatAnimator(
-                mIcon5, hotseat.findViewById(R.id.hotseat_icon_5), hotseatTop));
-        animators.add(createIconDisappearanceToHotseatAnimator(
-                mIcon6, hotseat.findViewById(R.id.hotseat_icon_6), hotseatTop));
+                mIcon5, hotseat.findViewById(R.id.hotseat_icon_5), hotseatTop, hotseatLeft));
 
         AnimatorSet animatorSet = new AnimatorSet();
 
@@ -135,22 +133,20 @@
     public void animateAppearanceFromHotseat(ViewGroup hotseat) {
         ArrayList<Animator> animators = new ArrayList<>();
         int hotseatTop = hotseat.getTop();
+        int hotseatLeft = hotseat.getLeft();
 
-        animators.add(ObjectAnimator.ofFloat(
-                mBackground, View.TRANSLATION_Y, mBackground.getHeight(), 0));
         animators.add(ObjectAnimator.ofFloat(mBackground, View.ALPHA, 0f, 1f));
+        animators.add(ObjectAnimator.ofFloat(mAllAppsButton, View.ALPHA, 0f, 1f));
         animators.add(createIconAppearanceFromHotseatAnimator(
-                mIcon1, hotseat.findViewById(R.id.hotseat_icon_1), hotseatTop));
+                mIcon1, hotseat.findViewById(R.id.hotseat_icon_1), hotseatTop, hotseatLeft));
         animators.add(createIconAppearanceFromHotseatAnimator(
-                mIcon2, hotseat.findViewById(R.id.hotseat_icon_2), hotseatTop));
+                mIcon2, hotseat.findViewById(R.id.hotseat_icon_2), hotseatTop, hotseatLeft));
         animators.add(createIconAppearanceFromHotseatAnimator(
-                mIcon3, hotseat.findViewById(R.id.hotseat_icon_3), hotseatTop));
+                mIcon3, hotseat.findViewById(R.id.hotseat_icon_3), hotseatTop, hotseatLeft));
         animators.add(createIconAppearanceFromHotseatAnimator(
-                mIcon4, hotseat.findViewById(R.id.hotseat_icon_4), hotseatTop));
+                mIcon4, hotseat.findViewById(R.id.hotseat_icon_4), hotseatTop, hotseatLeft));
         animators.add(createIconAppearanceFromHotseatAnimator(
-                mIcon5, hotseat.findViewById(R.id.hotseat_icon_5), hotseatTop));
-        animators.add(createIconAppearanceFromHotseatAnimator(
-                mIcon6, hotseat.findViewById(R.id.hotseat_icon_6), hotseatTop));
+                mIcon5, hotseat.findViewById(R.id.hotseat_icon_5), hotseatTop, hotseatLeft));
 
         AnimatorSet animatorSet = new AnimatorSet();
 
@@ -166,98 +162,6 @@
         start(animatorSet);
     }
 
-    /**
-     * Animates this fake taskbar's disappearance to the bottom of the screen.
-     */
-    public void animateDisappearanceToBottom() {
-        ArrayList<Animator> animators = new ArrayList<>();
-
-        animators.add(ObjectAnimator.ofFloat(
-                mBackground, View.TRANSLATION_Y, 0, mBackground.getHeight()));
-        animators.add(ObjectAnimator.ofFloat(mBackground, View.ALPHA, 1f, 0f));
-        animators.add(ObjectAnimator.ofFloat(mIconContainer, View.SCALE_X, 1f, 0f));
-        animators.add(ObjectAnimator.ofFloat(mIconContainer, View.SCALE_Y, 1f, 0f));
-
-        initializeIconContainerPivot();
-
-        AnimatorSet animatorSet = new AnimatorSet();
-
-        animatorSet.playTogether(animators);
-        animatorSet.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                super.onAnimationEnd(animation);
-                setVisibility(INVISIBLE);
-                resetIconContainerPivot();
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                super.onAnimationCancel(animation);
-                resetIconContainerPivot();
-            }
-
-            @Override
-            public void onAnimationStart(Animator animation) {
-                super.onAnimationStart(animation);
-                setVisibility(VISIBLE);
-            }
-        });
-
-        start(animatorSet);
-    }
-
-    /**
-     * Animates this fake taskbar's appearance from the bottom of the screen.
-     */
-    public void animateAppearanceFromBottom() {
-        ArrayList<Animator> animators = new ArrayList<>();
-
-        animators.add(ObjectAnimator.ofFloat(
-                mBackground, View.TRANSLATION_Y, mBackground.getHeight(), 0));
-        animators.add(ObjectAnimator.ofFloat(mBackground, View.ALPHA, 0f, 1f));
-        animators.add(ObjectAnimator.ofFloat(mIconContainer, View.SCALE_X, 0f, 1f));
-        animators.add(ObjectAnimator.ofFloat(mIconContainer, View.SCALE_Y, 0f, 1f));
-
-        initializeIconContainerPivot();
-
-        AnimatorSet animatorSet = new AnimatorSet();
-
-        animatorSet.playTogether(animators);
-        animatorSet.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                super.onAnimationStart(animation);
-                setVisibility(VISIBLE);
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                super.onAnimationEnd(animation);
-                resetIconContainerPivot();
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                super.onAnimationCancel(animation);
-                resetIconContainerPivot();
-            }
-        });
-
-        start(animatorSet);
-    }
-
-    private void initializeIconContainerPivot() {
-        mIconContainer.setPivotX(getWidth() / 2f);
-        mIconContainer.setPivotY(getHeight() * 0.8f);
-    }
-
-    private void resetIconContainerPivot() {
-        mIconContainer.resetPivot();
-        mIconContainer.setScaleX(1f);
-        mIconContainer.setScaleY(1f);
-    }
-
     private void start(Animator animator) {
         if (mRunningAnimator != null) {
             mRunningAnimator.cancel();
@@ -287,7 +191,7 @@
     }
 
     private Animator createIconDisappearanceToHotseatAnimator(
-            View taskbarIcon, View hotseatIcon, int hotseatTop) {
+            View taskbarIcon, View hotseatIcon, int hotseatTop, int hotseatLeft) {
         ArrayList<Animator> animators = new ArrayList<>();
 
         animators.add(ObjectAnimator.ofFloat(
@@ -296,7 +200,10 @@
                 0,
                 (hotseatTop + hotseatIcon.getTop()) - (getTop() + taskbarIcon.getTop())));
         animators.add(ObjectAnimator.ofFloat(
-                taskbarIcon, View.TRANSLATION_X, 0, hotseatIcon.getLeft() - taskbarIcon.getLeft()));
+                taskbarIcon,
+                View.TRANSLATION_X,
+                0,
+                (hotseatLeft + hotseatIcon.getLeft()) - (getLeft() + taskbarIcon.getLeft())));
         animators.add(ObjectAnimator.ofFloat(
                 taskbarIcon,
                 View.SCALE_X,
@@ -330,7 +237,7 @@
     }
 
     private Animator createIconAppearanceFromHotseatAnimator(
-            View taskbarIcon, View hotseatIcon, int hotseatTop) {
+            View taskbarIcon, View hotseatIcon, int hotseatTop, int hotseatLeft) {
         ArrayList<Animator> animators = new ArrayList<>();
 
         animators.add(ObjectAnimator.ofFloat(
@@ -339,7 +246,10 @@
                 (hotseatTop + hotseatIcon.getTop()) - (getTop() + taskbarIcon.getTop()),
                 0));
         animators.add(ObjectAnimator.ofFloat(
-                taskbarIcon, View.TRANSLATION_X, hotseatIcon.getLeft() - taskbarIcon.getLeft(), 0));
+                taskbarIcon,
+                View.TRANSLATION_X,
+                (hotseatLeft + hotseatIcon.getLeft()) - (getLeft() + taskbarIcon.getLeft()),
+                0));
         animators.add(ObjectAnimator.ofFloat(
                 taskbarIcon,
                 View.SCALE_X,
diff --git a/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialController.java b/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialController.java
index 05b246b..b00dc47 100644
--- a/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialController.java
@@ -154,7 +154,6 @@
 
         AnimatorSet animset = new AnimatorSet();
         animset.playTogether(animators);
-        hideFakeTaskbar(/* animateToHotseat= */ false);
         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 4e1521f..1e8b48d0 100644
--- a/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java
@@ -76,7 +76,7 @@
             @Override
             public void onAnimationEnd(Animator animation) {
                 super.onAnimationEnd(animation);
-                controller.resetFakeTaskView(false);
+                controller.resetFakeTaskViewFromOverview();
             }
         });
         ArrayList<Animator> animators = new ArrayList<>();
diff --git a/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java b/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
index 670ee9b..de93818 100644
--- a/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
@@ -203,7 +203,15 @@
         mRunningWindowAnim = RunningWindowAnim.wrap(animset);
     }
 
+    void resetFakeTaskViewFromOverview() {
+        resetFakeTaskView(false, false);
+    }
+
     void resetFakeTaskView(boolean animateFromHome) {
+        resetFakeTaskView(animateFromHome, true);
+    }
+
+    void resetFakeTaskView(boolean animateFromHome, boolean animateTaskbar) {
         mFakeTaskView.setVisibility(View.VISIBLE);
         PendingAnimation anim = new PendingAnimation(300);
         anim.setFloat(mTaskViewSwipeUpAnimation
@@ -211,7 +219,9 @@
         anim.setViewAlpha(mFakeTaskView, 1, ACCEL);
         anim.addListener(mResetTaskView);
         AnimatorSet animset = anim.buildAnim();
-        showFakeTaskbar(animateFromHome);
+        if (animateTaskbar) {
+            showFakeTaskbar(animateFromHome);
+        }
         animset.start();
         mRunningWindowAnim = RunningWindowAnim.wrap(animset);
     }
diff --git a/quickstep/src/com/android/quickstep/interaction/TutorialController.java b/quickstep/src/com/android/quickstep/interaction/TutorialController.java
index fa7d848..e775ce3 100644
--- a/quickstep/src/com/android/quickstep/interaction/TutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/TutorialController.java
@@ -478,8 +478,6 @@
         if (animateToHotseat) {
             mFakeTaskbarViewCallback = () ->
                     mFakeTaskbarView.animateDisappearanceToHotseat(mFakeHotseatView);
-        } else {
-            mFakeTaskbarViewCallback = mFakeTaskbarView::animateDisappearanceToBottom;
         }
         mFakeTaskbarView.post(mFakeTaskbarViewCallback);
     }
@@ -494,8 +492,6 @@
         if (animateFromHotseat) {
             mFakeTaskbarViewCallback = () ->
                     mFakeTaskbarView.animateAppearanceFromHotseat(mFakeHotseatView);
-        } else {
-            mFakeTaskbarViewCallback = mFakeTaskbarView::animateAppearanceFromBottom;
         }
         mFakeTaskbarView.post(mFakeTaskbarViewCallback);
     }
diff --git a/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java b/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java
index 0fdd8b5..60065fb 100644
--- a/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java
+++ b/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java
@@ -37,7 +37,7 @@
         ON_SETTLED_ON_END_TARGET, START_RECENTS_ANIMATION, FINISH_RECENTS_ANIMATION,
         CANCEL_RECENTS_ANIMATION, SET_ON_PAGE_TRANSITION_END_CALLBACK, CANCEL_CURRENT_ANIMATION,
         CLEANUP_SCREENSHOT, SCROLLER_ANIMATION_ABORTED, TASK_APPEARED, EXPECTING_TASK_APPEARED,
-        FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER, LAUNCHER_DESTROYED,
+        FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER,
 
         /**
          * These GestureEvents are specifically associated to state flags that get set in
@@ -162,13 +162,6 @@
                                         + "before/without setting end target to new task",
                                 writer);
                         break;
-                    case LAUNCHER_DESTROYED:
-                        errorDetected |= printErrorIfTrue(
-                                true,
-                                prefix,
-                                /* errorMessage= */ "Launcher destroyed mid-gesture",
-                                writer);
-                        break;
                     case STATE_GESTURE_COMPLETED:
                         errorDetected |= printErrorIfTrue(
                                 !encounteredEvents.contains(GestureEvent.MOTION_UP),
diff --git a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
index 681f068..e5d54d7 100644
--- a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
+++ b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
@@ -90,6 +90,8 @@
     private Intent mSecondTaskIntent;
     private int mSecondTaskId = INVALID_TASK_ID;
     private boolean mRecentsAnimationRunning;
+    /** If {@code true}, animates the existing task view split placeholder view */
+    private boolean mAnimateCurrentTaskDismissal;
     @Nullable
     private UserHandle mUser;
     /** If not null, this is the TaskView we want to launch from */
@@ -111,22 +113,15 @@
     }
 
     /**
-     * To be called after first task selected in Overview.
+     * @param alreadyRunningTask if set to {@link android.app.ActivityTaskManager#INVALID_TASK_ID}
+     *                           then @param intent will be used to launch the initial task
+     * @param intent will be ignored if @param alreadyRunningTask is set
      */
-    public void setInitialTaskSelect(Task task, @StagePosition int stagePosition,
-            StatsLogManager.EventEnum splitEvent, ItemInfo itemInfo) {
-        mInitialTaskId = task.key.id;
-        setInitialData(stagePosition, splitEvent, itemInfo);
-    }
-
-    /**
-     * To be called after first task selected from home or all apps.
-     */
-    public void setInitialTaskSelect(Intent intent, @StagePosition int stagePosition,
+    public void setInitialTaskSelect(@Nullable Intent intent, @StagePosition int stagePosition,
             @NonNull ItemInfo itemInfo, StatsLogManager.EventEnum splitEvent,
-            @Nullable Task alreadyRunningTask) {
-        if (alreadyRunningTask != null) {
-            mInitialTaskId = alreadyRunningTask.key.id;
+            int alreadyRunningTask) {
+        if (alreadyRunningTask != INVALID_TASK_ID) {
+            mInitialTaskId = alreadyRunningTask;
         } else {
             mInitialTaskIntent = intent;
             mUser = itemInfo.user;
@@ -348,6 +343,14 @@
         return null;
     }
 
+    public boolean isAnimateCurrentTaskDismissal() {
+        return mAnimateCurrentTaskDismissal;
+    }
+
+    public void setAnimateCurrentTaskDismissal(boolean animateCurrentTaskDismissal) {
+        mAnimateCurrentTaskDismissal = animateCurrentTaskDismissal;
+    }
+
     /**
      * Requires Shell Transitions
      */
@@ -454,6 +457,7 @@
         mLaunchingTaskView = null;
         mItemInfo = null;
         mSplitEvent = null;
+        mAnimateCurrentTaskDismissal = false;
     }
 
     /**
diff --git a/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java b/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java
index 74e4acc..ca4365f 100644
--- a/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java
+++ b/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java
@@ -22,27 +22,23 @@
 import android.animation.RectEvaluator;
 import android.content.ComponentName;
 import android.content.Context;
-import android.graphics.Color;
 import android.graphics.Matrix;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.util.Log;
 import android.view.Surface;
 import android.view.SurfaceControl;
-import android.view.SurfaceSession;
 import android.view.View;
 import android.window.PictureInPictureSurfaceTransaction;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
-import com.android.launcher3.Utilities;
 import com.android.launcher3.anim.AnimationSuccessListener;
-import com.android.launcher3.anim.Interpolators;
-import com.android.launcher3.util.Themes;
 import com.android.quickstep.TaskAnimationManager;
 import com.android.systemui.shared.pip.PipSurfaceTransactionHelper;
 import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
+import com.android.wm.shell.pip.PipContentOverlay;
 
 /**
  * Subclass of {@link RectFSpringAnim} that animates an Activity to PiP (picture-in-picture) window
@@ -65,7 +61,10 @@
     private final Rect mDestinationBounds = new Rect();
     private final PipSurfaceTransactionHelper mSurfaceTransactionHelper;
 
-    /** for calculating transform in {@link #onAnimationUpdate(AppCloseConfig, RectF, float)} */
+    /**
+     * For calculating transform in
+     * {@link #onAnimationUpdate(SurfaceControl.Transaction, RectF, float)}
+     */
     private final RectEvaluator mInsetsEvaluator = new RectEvaluator(new Rect());
     private final Rect mSourceHintRectInsets;
     private final Rect mSourceInsets = new Rect();
@@ -144,31 +143,17 @@
             mSourceRectHint.setEmpty();
             mSourceHintRectInsets = null;
 
-            // Create a new overlay layer
-            SurfaceSession session = new SurfaceSession();
-            mContentOverlay = new SurfaceControl.Builder(session)
-                    .setCallsite("SwipePipToHomeAnimator")
-                    .setName("PipContentOverlay")
-                    .setColorLayer()
-                    .build();
-            SurfaceControl.Transaction t = new SurfaceControl.Transaction();
-            t.show(mContentOverlay);
-            t.setLayer(mContentOverlay, Integer.MAX_VALUE);
-            int color = Themes.getColorBackground(view.getContext());
-            float[] bgColor = new float[] {Color.red(color) / 255f, Color.green(color) / 255f,
-                    Color.blue(color) / 255f};
-            t.setColor(mContentOverlay, bgColor);
-            t.setAlpha(mContentOverlay, 0f);
-            t.reparent(mContentOverlay, mLeash);
-            t.apply();
-
+            // Create a new overlay layer. We do not call detach on this instance, it's propagated
+            // to other classes like PipTaskOrganizer / RecentsAnimationController to complete
+            // the cleanup.
+            final PipContentOverlay.PipColorOverlay overlay =
+                    new PipContentOverlay.PipColorOverlay(view.getContext());
+            final SurfaceControl.Transaction tx = new SurfaceControl.Transaction();
+            mContentOverlay = overlay.getLeash();
+            overlay.attach(tx, mLeash);
             addOnUpdateListener((currentRect, progress) -> {
-                float alpha = progress < 0.5f
-                        ? 0
-                        : Utilities.mapToRange(Math.min(progress, 1f), 0.5f, 1f,
-                                0f, 1f, Interpolators.FAST_OUT_SLOW_IN);
-                t.setAlpha(mContentOverlay, alpha);
-                t.apply();
+                overlay.onAnimationUpdate(tx, progress);
+                tx.apply();
             });
         } else {
             mSourceRectHint.set(sourceRectHint);
diff --git a/quickstep/src/com/android/quickstep/views/LauncherRecentsView.java b/quickstep/src/com/android/quickstep/views/LauncherRecentsView.java
index cf033a6..886fc80 100644
--- a/quickstep/src/com/android/quickstep/views/LauncherRecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/LauncherRecentsView.java
@@ -34,13 +34,13 @@
 import com.android.launcher3.AbstractFloatingView;
 import com.android.launcher3.LauncherState;
 import com.android.launcher3.logging.StatsLogManager;
-import com.android.launcher3.popup.QuickstepSystemShortcut;
 import com.android.launcher3.statehandlers.DepthController;
 import com.android.launcher3.statehandlers.DesktopVisibilityController;
 import com.android.launcher3.statemanager.StateManager.StateListener;
 import com.android.launcher3.uioverrides.QuickstepLauncher;
 import com.android.launcher3.util.PendingSplitSelectInfo;
 import com.android.launcher3.util.SplitConfigurationOptions;
+import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource;
 import com.android.quickstep.LauncherActivityInterface;
 import com.android.quickstep.RotationTouchHelper;
 import com.android.quickstep.util.SplitSelectStateController;
@@ -199,7 +199,7 @@
     }
 
     @Override
-    public void initiateSplitSelect(QuickstepSystemShortcut.SplitSelectSource splitSelectSource) {
+    public void initiateSplitSelect(SplitSelectSource splitSelectSource) {
         super.initiateSplitSelect(splitSelectSource);
         mActivity.getStateManager().goToState(LauncherState.OVERVIEW_SPLIT_SELECT);
     }
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index cdc0574..8facb0a 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -16,6 +16,7 @@
 
 package com.android.quickstep.views;
 
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
 import static android.view.Surface.ROTATION_0;
 import static android.view.View.MeasureSpec.EXACTLY;
 import static android.view.View.MeasureSpec.makeMeasureSpec;
@@ -144,7 +145,6 @@
 import com.android.launcher3.config.FeatureFlags;
 import com.android.launcher3.icons.cache.HandlerRunnable;
 import com.android.launcher3.logging.StatsLogManager;
-import com.android.launcher3.popup.QuickstepSystemShortcut;
 import com.android.launcher3.statehandlers.DepthController;
 import com.android.launcher3.statemanager.BaseState;
 import com.android.launcher3.statemanager.StatefulActivity;
@@ -156,6 +156,7 @@
 import com.android.launcher3.util.ResourceBasedOverride.Overrides;
 import com.android.launcher3.util.RunnableList;
 import com.android.launcher3.util.SplitConfigurationOptions.SplitBounds;
+import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource;
 import com.android.launcher3.util.SplitConfigurationOptions.StagePosition;
 import com.android.launcher3.util.Themes;
 import com.android.launcher3.util.TranslateEdgeEffect;
@@ -677,7 +678,7 @@
     private SplitInstructionsView mSplitInstructionsView;
 
     @Nullable
-    private QuickstepSystemShortcut.SplitSelectSource mSplitSelectSource;
+    private SplitSelectSource mSplitSelectSource;
 
     /**
      * Keeps track of the index of the TaskView that split screen was initialized with so we know
@@ -1607,8 +1608,9 @@
 
         // If we are entering Overview as a result of initiating a split from somewhere else
         // (e.g. split from Home), we need to make sure the staged app is not drawn as a thumbnail.
-        Task stagedTaskToBeRemovedFromGrid =
-                mSplitSelectSource != null ? mSplitSelectSource.alreadyRunningTask : null;
+        int stagedTaskIdToBeRemovedFromGrid = mSplitSelectSource != null
+                ? mSplitSelectSource.alreadyRunningTaskId
+                : INVALID_TASK_ID;
 
         // update the map of instance counts
         mFilterState.updateInstanceCountMap(taskGroups);
@@ -1617,8 +1619,8 @@
         // taskGroups backwards populates the thumbnail grid from least recent to most recent.
         for (int i = taskGroups.size() - 1; i >= 0; i--) {
             GroupTask groupTask = taskGroups.get(i);
-            boolean isRemovalNeeded = stagedTaskToBeRemovedFromGrid != null
-                    && groupTask.containsTask(stagedTaskToBeRemovedFromGrid.key.id);
+            boolean isRemovalNeeded = stagedTaskIdToBeRemovedFromGrid != INVALID_TASK_ID
+                    && groupTask.containsTask(stagedTaskIdToBeRemovedFromGrid);
 
             TaskView taskView;
             if (isRemovalNeeded && groupTask.hasMultipleTasks()) {
@@ -1632,7 +1634,7 @@
             addView(taskView);
 
             if (isRemovalNeeded && groupTask.hasMultipleTasks()) {
-                if (groupTask.task1.equals(stagedTaskToBeRemovedFromGrid)) {
+                if (groupTask.task1.key.id == stagedTaskIdToBeRemovedFromGrid) {
                     taskView.bind(groupTask.task2, mOrientationState);
                 } else {
                     taskView.bind(groupTask.task1, mOrientationState);
@@ -3019,7 +3021,7 @@
 
         RectF startingTaskRect = new RectF();
         safeRemoveDragLayerView(mFirstFloatingTaskView);
-        if (mSplitHiddenTaskView != null) {
+        if (mSplitSelectStateController.isAnimateCurrentTaskDismissal()) {
             // Create the split select animation from Overview
             mSplitHiddenTaskView.setThumbnailVisibility(INVISIBLE);
             anim.setViewAlpha(mSplitHiddenTaskView.getIconView(), 0, clampToProgress(LINEAR,
@@ -4393,29 +4395,38 @@
         initiateSplitSelect(taskView, defaultSplitPosition, LAUNCHER_OVERVIEW_ACTIONS_SPLIT);
     }
 
+    /** TODO(b/266477929): Consolidate this call w/ the one below */
     public void initiateSplitSelect(TaskView taskView, @StagePosition int stagePosition,
             StatsLogManager.EventEnum splitEvent) {
         mSplitHiddenTaskView = taskView;
-        mSplitSelectStateController.setInitialTaskSelect(taskView.getTask(),
-                stagePosition, splitEvent, taskView.getItemInfo());
+        mSplitSelectStateController.setInitialTaskSelect(null /*intent*/,
+                stagePosition, taskView.getItemInfo(), splitEvent, taskView.mTask.key.id);
+        mSplitSelectStateController.setAnimateCurrentTaskDismissal(
+                true /*animateCurrentTaskDismissal*/);
         mSplitHiddenTaskViewIndex = indexOfChild(taskView);
     }
 
     /**
-     * Called when staging a split from Home/AllApps, using the icon long-press menu.
+     * Called when staging a split from Home/AllApps/Overview (Taskbar),
+     * using the icon long-press menu.
+     * Attempts to initiate split with an existing taskView, if one exists
      */
-    public void initiateSplitSelect(QuickstepSystemShortcut.SplitSelectSource splitSelectSource) {
+    public void initiateSplitSelect(SplitSelectSource splitSelectSource) {
         mSplitSelectSource = splitSelectSource;
+        mSplitHiddenTaskView = getTaskViewByTaskId(splitSelectSource.alreadyRunningTaskId);
+        mSplitHiddenTaskViewIndex = indexOfChild(mSplitHiddenTaskView);
+        mSplitSelectStateController
+                .setAnimateCurrentTaskDismissal(splitSelectSource.animateCurrentTaskDismissal);
         mSplitSelectStateController.setInitialTaskSelect(splitSelectSource.intent,
                 splitSelectSource.position.stagePosition, splitSelectSource.itemInfo,
-                splitSelectSource.splitEvent, splitSelectSource.alreadyRunningTask);
+                splitSelectSource.splitEvent, splitSelectSource.alreadyRunningTaskId);
     }
 
     /**
      * Modifies a PendingAnimation with the animations for entering split staging
      */
     public void createSplitSelectInitAnimation(PendingAnimation builder, int duration) {
-        if (mSplitHiddenTaskView != null) {
+        if (mSplitSelectStateController.isAnimateCurrentTaskDismissal()) {
             // Splitting from Overview
             createTaskDismissAnimation(builder, mSplitHiddenTaskView, true, false, duration,
                     true /* dismissingForSplitSelection*/);
diff --git a/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java b/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
index a4dbf6a..62d46d3 100644
--- a/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
+++ b/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
@@ -32,6 +32,8 @@
 import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
 import static com.android.launcher3.util.rule.ShellCommandRule.disableHeadsUpNotification;
 import static com.android.launcher3.util.rule.ShellCommandRule.getLauncherCommand;
+import static com.android.launcher3.util.rule.TestStabilityRule.LOCAL;
+import static com.android.launcher3.util.rule.TestStabilityRule.PLATFORM_POSTSUBMIT;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -59,6 +61,7 @@
 import com.android.launcher3.util.rule.FailureWatcher;
 import com.android.launcher3.util.rule.SamplerRule;
 import com.android.launcher3.util.rule.ScreenRecordRule;
+import com.android.launcher3.util.rule.TestStabilityRule;
 import com.android.quickstep.views.RecentsView;
 
 import org.junit.After;
@@ -168,6 +171,7 @@
 
     // b/143488140
     //@NavigationModeSwitch
+    @TestStabilityRule.Stability(flavors = LOCAL | PLATFORM_POSTSUBMIT) // b/266606727
     @Test
     public void goToOverviewFromHome() {
         mDevice.pressHome();
@@ -215,6 +219,7 @@
 
     // b/143488140
     //@NavigationModeSwitch
+    @TestStabilityRule.Stability(flavors = LOCAL | PLATFORM_POSTSUBMIT) // b/266606727
     @Test
     public void testOverview() {
         startAppFast(getAppPackageName());
diff --git a/res/layout/taskbar_divider.xml b/res/layout/taskbar_divider.xml
new file mode 100644
index 0000000..e25e7a3
--- /dev/null
+++ b/res/layout/taskbar_divider.xml
@@ -0,0 +1,28 @@
+<?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.
+-->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/taskbar_divider_container"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <View
+        android:id="@+id/taskbar_divider_bar"
+        android:layout_height="32dp"
+        android:layout_width="2dp"
+        android:layout_gravity="center"
+        android:background="@drawable/bg_rounded_corner_bottom_sheet_handle" />
+    <!-- TODO(b/265347148): Create separate drawable -->
+</FrameLayout>
diff --git a/res/values/config.xml b/res/values/config.xml
index 016420b..1206dd8 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -203,4 +203,7 @@
     <!-- The max scale for the wallpaper when it's zoomed in -->
     <item name="config_wallpaperMaxScale" format="float" type="dimen">0</item>
 
+    <!-- Whether the floating rotation button should be on the left/right in the device's natural
+         orientation -->
+    <bool name="floating_rotation_button_position_left">true</bool>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d041dfe..321aef5 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -93,6 +93,8 @@
     -->
     <dimen name="fastscroll_width">58dp</dimen>
     <dimen name="fastscroll_end_margin">-26dp</dimen>
+    <!-- Extra margin between bottom of the scrollbar and the search bar protection layer. -->
+    <dimen name="fastscroll_bottom_margin_floating_search">4dp</dimen>
 
     <!-- PagedView -->
     <dimen name="fling_threshold_velocity">500dp</dimen>
@@ -139,11 +141,6 @@
     <dimen name="arrow_toast_elevation">2dp</dimen>
     <dimen name="arrow_toast_arrow_width">10dp</dimen>
 
-    <!-- Search bar in All Apps -->
-    <dimen name="all_apps_header_max_elevation">3dp</dimen>
-    <dimen name="all_apps_header_scroll_to_elevation">16dp</dimen>
-    <dimen name="all_apps_header_shadow_height">6dp</dimen>
-
     <dimen name="all_apps_divider_margin_vertical">8dp</dimen>
 
     <!-- Floating action button inside work tab to toggle work profile -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index dfff926..6b57532 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -54,7 +54,7 @@
         <item name="folderPreviewColor">@color/folder_preview_light</item>
         <item name="folderBackgroundColor">@color/folder_background_light</item>
         <item name="folderIconBorderColor">?android:attr/colorPrimary</item>
-        <item name="folderTextColor">@color/workspace_text_color_dark</item>
+        <item name="folderTextColor">?android:attr/textColorPrimary</item>
         <item name="isFolderDarkText">true</item>
         <item name="folderHintColor">@color/folder_hint_text_color_dark</item>
         <item name="loadingIconColor">#CCFFFFFF</item>
@@ -109,7 +109,6 @@
         <item name="folderPreviewColor">@color/folder_preview_dark</item>
         <item name="folderBackgroundColor">@color/folder_background_dark</item>
         <item name="folderIconBorderColor">?android:attr/colorPrimary</item>
-        <item name="folderTextColor">@color/workspace_text_color_light</item>
         <item name="isFolderDarkText">false</item>
         <item name="folderHintColor">@color/folder_hint_text_color_light</item>
         <item name="isMainColorDark">true</item>
diff --git a/src/com/android/launcher3/FastScrollRecyclerView.java b/src/com/android/launcher3/FastScrollRecyclerView.java
index 2f927d3..3504b24 100644
--- a/src/com/android/launcher3/FastScrollRecyclerView.java
+++ b/src/com/android/launcher3/FastScrollRecyclerView.java
@@ -77,11 +77,15 @@
         return getPaddingTop();
     }
 
+    public int getScrollBarMarginBottom() {
+        return getPaddingBottom();
+    }
+
     /**
      * Returns the height of the fast scroll bar
      */
     public int getScrollbarTrackHeight() {
-        return mScrollbar.getHeight() - getScrollBarTop() - getPaddingBottom();
+        return mScrollbar.getHeight() - getScrollBarTop() - getScrollBarMarginBottom();
     }
 
     /**
diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java
index 6ea331d..66ea616 100644
--- a/src/com/android/launcher3/LauncherSettings.java
+++ b/src/com/android/launcher3/LauncherSettings.java
@@ -30,6 +30,20 @@
 public class LauncherSettings {
 
     /**
+     * Types of animations.
+     */
+    public static final class Animation {
+        /**
+         * The default animation for a given view/item info type.
+         */
+        public static final int DEFAULT = 0;
+        /**
+         * An animation using the view's background.
+         */
+        public static final int VIEW_BACKGROUND = 1;
+    }
+
+    /**
      * Favorites.
      */
     public static final class Favorites implements BaseColumns {
diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
index 3aa9f7c..da47398 100644
--- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
@@ -215,9 +215,9 @@
         mBottomSheetHandleArea = findViewById(R.id.bottom_sheet_handle_area);
         mSearchRecyclerView = findViewById(R.id.search_results_list_view);
 
-        // Add the search box next to the header
+        // Add the search box above everything else.
         mSearchContainer = inflateSearchBox();
-        addView(mSearchContainer, indexOfChild(mHeader) + 1);
+        addView(mSearchContainer);
         mSearchUiManager = (SearchUiManager) mSearchContainer;
     }
 
@@ -426,6 +426,10 @@
             return;
         }
 
+        RecyclerView.ItemDecoration decoration = getMainAdapterProvider().getDecorator();
+        getSearchRecyclerView().removeItemDecoration(decoration);
+        getSearchRecyclerView().addItemDecoration(decoration);
+
         // replaceAppsRVcontainer() needs to use both mUsingTabs value to remove the old view AND
         // showTabs value to create new view. Hence the mUsingTabs new value assignment MUST happen
         // after this call.
@@ -469,6 +473,16 @@
         }
         setupHeader();
 
+        if (FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get()) {
+            // Keep the scroller above the search bar.
+            RelativeLayout.LayoutParams scrollerLayoutParams =
+                    (LayoutParams) findViewById(R.id.fast_scroller).getLayoutParams();
+            scrollerLayoutParams.addRule(RelativeLayout.ABOVE, R.id.search_container_all_apps);
+            scrollerLayoutParams.removeRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
+            scrollerLayoutParams.bottomMargin = getResources().getDimensionPixelSize(
+                    R.dimen.fastscroll_bottom_margin_floating_search);
+        }
+
         mAllAppsStore.registerIconContainer(mAH.get(AdapterHolder.MAIN).mRecyclerView);
         mAllAppsStore.registerIconContainer(mAH.get(AdapterHolder.WORK).mRecyclerView);
         mAllAppsStore.registerIconContainer(mAH.get(AdapterHolder.SEARCH).mRecyclerView);
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index 7789191..6b45fe6 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -261,12 +261,19 @@
         }
     }
 
+    @Override
     public int getScrollBarTop() {
         return ActivityContext.lookupContext(getContext()).getAppsView().isSearchSupported()
                 ? getResources().getDimensionPixelOffset(R.dimen.all_apps_header_top_padding)
                 : 0;
     }
 
+    @Override
+    public int getScrollBarMarginBottom() {
+        return getRootWindowInsets() == null ? 0
+                : getRootWindowInsets().getSystemWindowInsetBottom();
+    }
+
     public RecyclerViewFastScroller getScrollbar() {
         return mScrollbar;
     }
diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java
index c90c6bf..2841129 100644
--- a/src/com/android/launcher3/config/FeatureFlags.java
+++ b/src/com/android/launcher3/config/FeatureFlags.java
@@ -272,7 +272,7 @@
 
     public static final BooleanFlag ENABLE_SEARCH_RESULT_LAUNCH_TRANSITION = new DeviceFlag(
             "ENABLE_SEARCH_RESULT_LAUNCH_TRANSITION", false,
-            "Enable option to launch search results using the new standardized transitions");
+            "Enable option to launch search results using the new view container transitions");
 
     public static final BooleanFlag TWO_PREDICTED_ROWS_ALL_APPS_SEARCH = new DeviceFlag(
             "TWO_PREDICTED_ROWS_ALL_APPS_SEARCH", false,
diff --git a/src/com/android/launcher3/model/data/ItemInfo.java b/src/com/android/launcher3/model/data/ItemInfo.java
index 2dd44a4..4eb2e9e 100644
--- a/src/com/android/launcher3/model/data/ItemInfo.java
+++ b/src/com/android/launcher3/model/data/ItemInfo.java
@@ -47,8 +47,10 @@
 import androidx.annotation.Nullable;
 
 import com.android.launcher3.LauncherSettings;
+import com.android.launcher3.LauncherSettings.Animation;
 import com.android.launcher3.LauncherSettings.Favorites;
 import com.android.launcher3.Workspace;
+import com.android.launcher3.config.FeatureFlags;
 import com.android.launcher3.logger.LauncherAtom;
 import com.android.launcher3.logger.LauncherAtom.AllAppsContainer;
 import com.android.launcher3.logger.LauncherAtom.ContainerInfo;
@@ -94,6 +96,12 @@
     public int itemType;
 
     /**
+     * One of {@link Animation#DEFAULT},
+     * {@link Animation#VIEW_BACKGROUND}.
+     */
+    public int animationType = Animation.DEFAULT;
+
+    /**
      * The id of the container that holds this item. For the desktop, this will be
      * {@link Favorites#CONTAINER_DESKTOP}. For the all applications folder it
      * will be {@link #NO_ID} (since it is not stored in the settings DB). For user folders
@@ -185,6 +193,7 @@
         rank = info.rank;
         screenId = info.screenId;
         itemType = info.itemType;
+        animationType = info.animationType;
         container = info.container;
         user = info.user;
         contentDescription = info.contentDescription;
@@ -298,6 +307,15 @@
     }
 
     /**
+     * Returns whether this item should use the background animation.
+     */
+    public boolean shouldUseBackgroundAnimation() {
+        return animationType == LauncherSettings.Animation.VIEW_BACKGROUND
+                && FeatureFlags.ENABLE_SEARCH_RESULT_BACKGROUND_DRAWABLES.get()
+                && FeatureFlags.ENABLE_SEARCH_RESULT_LAUNCH_TRANSITION.get();
+    }
+
+    /**
      * Creates {@link LauncherAtom.ItemInfo} with important fields and parent container info.
      */
     @NonNull
diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java
index 0e25984c..69bba69 100644
--- a/src/com/android/launcher3/popup/SystemShortcut.java
+++ b/src/com/android/launcher3/popup/SystemShortcut.java
@@ -40,6 +40,7 @@
 public abstract class SystemShortcut<T extends Context & ActivityContext> extends ItemInfo
         implements View.OnClickListener {
 
+    private static final String TAG = SystemShortcut.class.getSimpleName();
     private final int mIconResId;
     protected final int mLabelResId;
     protected int mAccessibilityActionId;
diff --git a/src/com/android/launcher3/touch/ItemClickHandler.java b/src/com/android/launcher3/touch/ItemClickHandler.java
index 64951ca..790c226 100644
--- a/src/com/android/launcher3/touch/ItemClickHandler.java
+++ b/src/com/android/launcher3/touch/ItemClickHandler.java
@@ -343,7 +343,8 @@
                 return;
             }
         }
-        if (v != null && launcher.supportsAdaptiveIconAnimation(v)) {
+        if (v != null && launcher.supportsAdaptiveIconAnimation(v)
+                && !item.shouldUseBackgroundAnimation()) {
             // Preload the icon to reduce latency b/w swapping the floating view with the original.
             FloatingIconView.fetchIcon(launcher, v, item, true /* isOpening */);
         }
diff --git a/src/com/android/launcher3/util/SplitConfigurationOptions.java b/src/com/android/launcher3/util/SplitConfigurationOptions.java
index 19a3948..8c5e782 100644
--- a/src/com/android/launcher3/util/SplitConfigurationOptions.java
+++ b/src/com/android/launcher3/util/SplitConfigurationOptions.java
@@ -21,11 +21,15 @@
 
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
+import android.content.Intent;
 import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.view.View;
 
 import androidx.annotation.IntDef;
 
 import com.android.launcher3.logging.StatsLogManager;
+import com.android.launcher3.model.data.ItemInfo;
 
 import java.lang.annotation.Retention;
 
@@ -190,4 +194,35 @@
         return position == STAGE_POSITION_TOP_OR_LEFT ? STAGE_POSITION_BOTTOM_OR_RIGHT
                 : STAGE_POSITION_TOP_OR_LEFT;
     }
+
+    public static class SplitSelectSource {
+
+        /** Keep in sync w/ ActivityTaskManager#INVALID_TASK_ID (unreference-able) */
+        private static final int INVALID_TASK_ID = -1;
+
+        public final View view;
+        public final Drawable drawable;
+        public final Intent intent;
+        public final SplitPositionOption position;
+        public final ItemInfo itemInfo;
+        public final StatsLogManager.EventEnum splitEvent;
+        /** Represents the taskId of the first app to start in split screen */
+        public int alreadyRunningTaskId = INVALID_TASK_ID;
+        /**
+         * If {@code true}, animates the view represented by {@link #alreadyRunningTaskId} into the
+         * split placeholder view
+         */
+        public boolean animateCurrentTaskDismissal;
+
+        public SplitSelectSource(View view, Drawable drawable, Intent intent,
+                SplitPositionOption position, ItemInfo itemInfo,
+                StatsLogManager.EventEnum splitEvent) {
+            this.view = view;
+            this.drawable = drawable;
+            this.intent = intent;
+            this.position = position;
+            this.itemInfo = itemInfo;
+            this.splitEvent = splitEvent;
+        }
+    }
 }
diff --git a/src/com/android/launcher3/views/ActivityContext.java b/src/com/android/launcher3/views/ActivityContext.java
index 86028e7..2ab4601 100644
--- a/src/com/android/launcher3/views/ActivityContext.java
+++ b/src/com/android/launcher3/views/ActivityContext.java
@@ -23,6 +23,7 @@
 import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
 
 import android.app.ActivityOptions;
+import android.app.PendingIntent;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.ContextWrapper;
@@ -45,6 +46,7 @@
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Toast;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.android.launcher3.BubbleTextView;
@@ -71,6 +73,7 @@
 import com.android.launcher3.util.PackageManagerHelper;
 import com.android.launcher3.util.Preconditions;
 import com.android.launcher3.util.RunnableList;
+import com.android.launcher3.util.SplitConfigurationOptions;
 import com.android.launcher3.util.ViewCache;
 
 import java.util.List;
@@ -131,6 +134,12 @@
         return null;
     }
 
+    /** Called when the first app in split screen has been selected */
+    default void startSplitSelection(
+            SplitConfigurationOptions.SplitSelectSource splitSelectSource) {
+        // Overridden, intentionally empty
+    }
+
     /**
      * The root view to support drag-and-drop and popup support.
      */
@@ -271,6 +280,29 @@
         }
     }
 
+
+    /**
+     * Sends a pending intent animating from a view.
+     *
+     * @param v View to animate.
+     * @param intent The pending intent being launched.
+     * @param item Item associated with the view.
+     * @return {@code true} if the intent is sent successfully.
+     */
+    default boolean sendPendingIntentWithAnimation(
+            @NonNull View v, PendingIntent intent, @Nullable ItemInfo item) {
+        Bundle optsBundle = getActivityLaunchOptions(v, item).toBundle();
+        try {
+            intent.send(null, 0, null, null, null, null, optsBundle);
+            return true;
+        } catch (PendingIntent.CanceledException e) {
+            Toast.makeText(v.getContext(),
+                    v.getContext().getResources().getText(R.string.shortcut_not_available),
+                    Toast.LENGTH_SHORT).show();
+        }
+        return false;
+    }
+
     /**
      * Safely starts an activity.
      *
diff --git a/src/com/android/launcher3/views/ScrimView.java b/src/com/android/launcher3/views/ScrimView.java
index 870ff12..ca80c51 100644
--- a/src/com/android/launcher3/views/ScrimView.java
+++ b/src/com/android/launcher3/views/ScrimView.java
@@ -77,6 +77,10 @@
         super.setBackgroundColor(color);
     }
 
+    public int getBackgroundColor() {
+        return mBackgroundColor;
+    }
+
     @Override
     public void onVisibilityAggregated(boolean isVisible) {
         super.onVisibilityAggregated(isVisible);