Update tapl widget header click to be more accurate to help with flakiness

Bug: 422814320
Bug: 428201604
Bug: 428204850
Test: atest NexusLauncherTests:com.android.launcher3.widget.TaplAddWidgetTest
Flag: com.android.launcher3.enable_widget_picker_refactor
Change-Id: I74ecd95a169d0da39806878f04cc5d42966b1bf8
diff --git a/tests/tapl/com/android/launcher3/tapl/Widgets.java b/tests/tapl/com/android/launcher3/tapl/Widgets.java
index 476966c..302a673 100644
--- a/tests/tapl/com/android/launcher3/tapl/Widgets.java
+++ b/tests/tapl/com/android/launcher3/tapl/Widgets.java
@@ -257,8 +257,9 @@
         mLauncher.assertTrue("Header not found", header != null);
 
         mLauncher.waitForIdle();
-        header.click();
-        mLauncher.waitForIdle();
+        UiObject2 headerParent = header.getParent();
+        headerParent.wait(Until.clickable(true), WAIT_TIME_MS);
+        headerParent.click();
 
         LauncherInstrumentation.log("Clicked header");
 
@@ -299,17 +300,13 @@
                 mLauncher.waitForObjectBySelector(BROWSE_WIDGETS_LIST_SELECTOR);
             } else {
                 if (isSinglePane) {
-                    // Ensure header is fully visible.
-                    mLauncher.linearGesture(
-                            startX,
-                            startY,
-                            endX,
-                            endY,
-                            SCROLL_STEPS,
-                            /* slowDown= */ true,
-                            LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER);
+                    // Ensure header is fully visible (e.g. not occluded by browse tabs) and
+                    // scroll is finished.
+                    scrollAndWait(startX, startY, endX, endY);
+                } else {
+                    // Wait for scroll to be stabilized
+                    scrollAndWait(startX, startY, endX, startY - 1);
                 }
-                mLauncher.waitForIdle();
                 // Return latest matching header.
                 return mLauncher.waitForObjectBySelector(headerSelector);
             }
@@ -318,6 +315,18 @@
         return null;
     }
 
+    private void scrollAndWait(int startX, int startY, int endX, int endY) {
+        mLauncher.getDevice().performActionAndWait(() -> mLauncher.linearGesture(
+                        startX,
+                        startY,
+                        endX,
+                        endY,
+                        SCROLL_STEPS,
+                        /* slowDown= */ true,
+                        LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER),
+                Until.scrollFinished(Direction.DOWN), WAIT_TIME_MS);
+    }
+
     private UiObject2 findWidget(String labelText, boolean isSinglePane) {
         final BySelector labelTextSelector =
                 By.clazz("android.widget.TextView").textContains(labelText);