Fix gesture insets issue for IMEs

- Setting the override frame for the gesture insets sources prevents
  the insets from being calculated correctly for the IME window
- Update the set of provided insets based on the current nav mode
  so that we don't report gesture insets in button nav

Bug: 265614886
Test: Dump IME window insets for button/gesture nav
Change-Id: I22f9d09a66b50d6e2fb5002af19058657a06404d
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt
index 1adbf39..5fedb3d 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt
@@ -70,20 +70,9 @@
     fun init(controllers: TaskbarControllers) {
         this.controllers = controllers
         windowLayoutParams = context.windowLayoutParams
-        windowLayoutParams.providedInsets =
-            arrayOf(
-                InsetsFrameProvider(insetsOwner, 0, navigationBars()),
-                InsetsFrameProvider(insetsOwner, 0, tappableElement()),
-                InsetsFrameProvider(insetsOwner, 0, mandatorySystemGestures()),
-                InsetsFrameProvider(insetsOwner, INDEX_LEFT, systemGestures())
-                    .setSource(SOURCE_DISPLAY),
-                InsetsFrameProvider(insetsOwner, INDEX_RIGHT, systemGestures())
-                    .setSource(SOURCE_DISPLAY)
-            )
-
+        windowLayoutParams.insetsRoundedCornerFrame = true
         onTaskbarWindowHeightOrInsetsChanged()
 
-        windowLayoutParams.insetsRoundedCornerFrame = true
         context.addOnDeviceProfileChangeListener(deviceProfileChangeListener)
         gestureNavSettingsObserver.registerForCallingUser()
     }
@@ -94,6 +83,25 @@
     }
 
     fun onTaskbarWindowHeightOrInsetsChanged() {
+        if (context.isGestureNav) {
+            windowLayoutParams.providedInsets =
+                    arrayOf(
+                            InsetsFrameProvider(insetsOwner, 0, navigationBars()),
+                            InsetsFrameProvider(insetsOwner, 0, tappableElement()),
+                            InsetsFrameProvider(insetsOwner, 0, mandatorySystemGestures()),
+                            InsetsFrameProvider(insetsOwner, INDEX_LEFT, systemGestures())
+                                    .setSource(SOURCE_DISPLAY),
+                            InsetsFrameProvider(insetsOwner, INDEX_RIGHT, systemGestures())
+                                    .setSource(SOURCE_DISPLAY)
+                    )
+        } else {
+            windowLayoutParams.providedInsets =
+                    arrayOf(
+                            InsetsFrameProvider(insetsOwner, 0, navigationBars()),
+                            InsetsFrameProvider(insetsOwner, 0, tappableElement())
+                    )
+        }
+
         val touchableHeight = controllers.taskbarStashController.touchableHeight
         touchableRegion.set(
             0,
@@ -146,7 +154,8 @@
         for (provider in windowLayoutParams.providedInsets) {
             if (context.isGestureNav && provider.type == tappableElement()) {
                 provider.insetsSizeOverrides = insetsSizeOverrideForGestureNavTappableElement
-            } else {
+            } else if (provider.type != systemGestures()) {
+                // We only override insets at the bottom of the screen
                 provider.insetsSizeOverrides = insetsSizeOverride
             }
         }