Merge "Making taskbar to stay stashed if user launches app for split screen view  from all apps view" into tm-qpr-dev
diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
index 0b6e5d3..ac584bf 100644
--- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
@@ -312,6 +312,7 @@
 
     @Override
     public void onTaskbarIconLaunched(ItemInfo item) {
+        super.onTaskbarIconLaunched(item);
         InstanceId instanceId = new InstanceIdSequence().newInstanceId();
         mLauncher.logAppLaunch(mControllers.taskbarActivityContext.getStatsLogManager(), item,
                 instanceId);
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
index 6e746ef..9b0f8c4 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
@@ -836,15 +836,17 @@
                             launchFromTaskbarPreservingSplitIfVisible(recents, info);
                         }
 
-                        mControllers.uiController.onTaskbarIconLaunched(info);
                     } catch (NullPointerException
                             | ActivityNotFoundException
                             | SecurityException e) {
                         Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT)
                                 .show();
                         Log.e(TAG, "Unable to launch. tag=" + info + " intent=" + intent, e);
+                        return;
                     }
+
                 }
+                mControllers.uiController.onTaskbarIconLaunched(info);
                 mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true);
             }
         } else if (tag instanceof AppInfo) {
@@ -858,8 +860,8 @@
                 taskbarUIController.triggerSecondAppForSplit(info, info.intent, view);
             } else {
                 launchFromTaskbarPreservingSplitIfVisible(recents, info);
-                mControllers.uiController.onTaskbarIconLaunched(info);
             }
+            mControllers.uiController.onTaskbarIconLaunched(info);
             mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true);
         } else if (tag instanceof ItemClickProxy) {
             ((ItemClickProxy) tag).onItemClicked(view);
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
index 6324715..76b8b6d 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
@@ -17,6 +17,8 @@
 
 import static android.app.ActivityTaskManager.INVALID_TASK_ID;
 
+import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_APP;
+
 import android.content.Intent;
 import android.graphics.drawable.BitmapDrawable;
 import android.view.MotionEvent;
@@ -74,7 +76,13 @@
     protected void onStashedInAppChanged() { }
 
     /** Called when an icon is launched. */
-    public void onTaskbarIconLaunched(ItemInfo item) { }
+    @CallSuper
+    public void onTaskbarIconLaunched(ItemInfo item) {
+        // When launching from Taskbar, e.g. from Overview, set FLAG_IN_APP immediately instead of
+        // waiting for onPause, to reduce potential visual noise during the app open transition.
+        mControllers.taskbarStashController.updateStateForFlag(FLAG_IN_APP, true);
+        mControllers.taskbarStashController.applyState();
+    }
 
     public View getRootView() {
         return mControllers.taskbarActivityContext.getDragLayer();
@@ -104,7 +112,7 @@
     public void onExpandPip() {
         if (mControllers != null) {
             final TaskbarStashController stashController = mControllers.taskbarStashController;
-            stashController.updateStateForFlag(TaskbarStashController.FLAG_IN_APP, true);
+            stashController.updateStateForFlag(FLAG_IN_APP, true);
             stashController.applyState();
         }
     }