Merge "Cleanup taskbar+assistant interactions" into tm-qpr-dev
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
index 2f6c2c0..3145ec3 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
@@ -627,7 +627,9 @@
 
     /** Adds the given view to WindowManager with the provided LayoutParams (creates new window). */
     public void addWindowView(View view, WindowManager.LayoutParams windowLayoutParams) {
-        mWindowManager.addView(view, windowLayoutParams);
+        if (!view.isAttachedToWindow()) {
+            mWindowManager.addView(view, windowLayoutParams);
+        }
     }
 
     /** Removes the given view from WindowManager. See {@link #addWindowView}. */
diff --git a/quickstep/src/com/android/launcher3/taskbar/VoiceInteractionWindowController.kt b/quickstep/src/com/android/launcher3/taskbar/VoiceInteractionWindowController.kt
index 946873e..81acda3 100644
--- a/quickstep/src/com/android/launcher3/taskbar/VoiceInteractionWindowController.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/VoiceInteractionWindowController.kt
@@ -36,7 +36,10 @@
 
                 override fun draw(canvas: Canvas) {
                     super.draw(canvas)
-                    taskbarBackgroundRenderer.draw(canvas)
+                    if (this@VoiceInteractionWindowController.context.isGestureNav
+                        && controllers.taskbarStashController.isInAppAndNotStashed) {
+                        taskbarBackgroundRenderer.draw(canvas)
+                    }
                 }
             }
         separateWindowForTaskbarBackground.recreateControllers()
@@ -74,18 +77,20 @@
             fadeStashedHandle.end()
         }
 
-        if (context.isGestureNav && controllers.taskbarStashController.isInAppAndNotStashed) {
-            moveTaskbarBackgroundToLowerLayer()
-        }
+        moveTaskbarBackgroundToAppropriateLayer()
     }
 
     /**
+     * Either:
      * Hides the TaskbarDragLayer background and creates a new window to draw just that background.
+     * OR
+     * Removes the temporary window and show the TaskbarDragLayer background again.
      */
-    private fun moveTaskbarBackgroundToLowerLayer() {
+    private fun moveTaskbarBackgroundToAppropriateLayer() {
         val taskbarBackgroundOverride = controllers.taskbarDragLayerController
             .overrideBackgroundAlpha
-        if (isVoiceInteractionWindowVisible) {
+        val moveToLowerLayer = isVoiceInteractionWindowVisible
+        if (moveToLowerLayer) {
             // First add the temporary window, then hide the overlapping taskbar background.
             context.addWindowView(separateWindowForTaskbarBackground, separateWindowLayoutParams)
             ViewRootSync.synchronizeNextDraw(separateWindowForTaskbarBackground, context.dragLayer