Show back button when a floating view is visible

Bug: 74184060
Bug: 74243869
Change-Id: I3b1806e10d3f910ce3a8a980c2b1e0609e01582b
diff --git a/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java b/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java
index 352cd9c..a8bcb11 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java
@@ -19,11 +19,14 @@
 import static com.android.launcher3.LauncherState.NORMAL;
 
 import android.graphics.PointF;
+import android.view.View;
 import android.view.View.AccessibilityDelegate;
 
+import com.android.launcher3.AbstractFloatingView;
 import com.android.launcher3.Launcher;
 import com.android.launcher3.LauncherStateManager.StateHandler;
 import com.android.launcher3.config.FeatureFlags;
+import com.android.launcher3.dragndrop.DragLayer;
 import com.android.launcher3.util.TouchController;
 import com.android.quickstep.OverviewInteractionState;
 import com.android.quickstep.RecentsModel;
@@ -62,8 +65,21 @@
     }
 
     public static void onLauncherStateOrFocusChanged(Launcher launcher) {
-        OverviewInteractionState.setBackButtonVisible(launcher, launcher == null
-                || !launcher.isInState(NORMAL) || !launcher.hasWindowFocus());
+        boolean shouldBackButtonBeVisible = launcher == null
+                || !launcher.isInState(NORMAL)
+                || !launcher.hasWindowFocus();
+        if (!shouldBackButtonBeVisible) {
+            // Show the back button if there is a floating view visible.
+            DragLayer dragLayer = launcher.getDragLayer();
+            for (int i = dragLayer.getChildCount() - 1; i >= 0; i--) {
+                View child = dragLayer.getChildAt(i);
+                if (child instanceof AbstractFloatingView) {
+                    shouldBackButtonBeVisible = true;
+                    break;
+                }
+            }
+        }
+        OverviewInteractionState.setBackButtonVisible(launcher, shouldBackButtonBeVisible);
     }
 
     public static void resetOverview(Launcher launcher) {
diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java
index 301070c..f5d0b24 100644
--- a/src/com/android/launcher3/dragndrop/DragLayer.java
+++ b/src/com/android/launcher3/dragndrop/DragLayer.java
@@ -709,12 +709,14 @@
     public void onViewAdded(View child) {
         super.onViewAdded(child);
         updateChildIndices();
+        UiFactory.onLauncherStateOrFocusChanged(mLauncher);
     }
 
     @Override
     public void onViewRemoved(View child) {
         super.onViewRemoved(child);
         updateChildIndices();
+        UiFactory.onLauncherStateOrFocusChanged(mLauncher);
     }
 
     @Override