Add test for widget picker on landscape mode for tablets

When we added widget picker two pane layout, it broke some tests with the flag on. Here we fix those tests.
Bug: 256684299
Test: AddWidgetsTest and TaplTestsLauncher3#testWidget

Change-Id: I383c754016d82fba51fa0b7b0459cd7e83b274d8
diff --git a/res/layout/widgets_full_sheet_large_screen.xml b/res/layout/widgets_full_sheet_large_screen.xml
index b99ac5c..808d3eb 100644
--- a/res/layout/widgets_full_sheet_large_screen.xml
+++ b/res/layout/widgets_full_sheet_large_screen.xml
@@ -20,68 +20,89 @@
     android:orientation="vertical"
     android:theme="?attr/widgetsTheme">
 
-    <androidx.constraintlayout.widget.ConstraintLayout
+    <com.android.launcher3.views.SpringRelativeLayout
         android:id="@+id/container"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:focusable="true"
         android:importantForAccessibility="no">
 
-        <FrameLayout
-            android:id="@+id/recycler_view_container"
-            android:layout_width="0dp"
-            android:layout_height="0dp"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/title"
-            app:layout_constraintWidth_percent="0.33">
+        <View
+            android:id="@+id/collapse_handle"
+            android:layout_width="@dimen/bottom_sheet_handle_width"
+            android:layout_height="@dimen/bottom_sheet_handle_height"
+            android:layout_marginTop="@dimen/bottom_sheet_handle_margin"
+            android:layout_centerHorizontal="true"
+            android:background="@drawable/bg_rounded_corner_bottom_sheet_handle"/>
 
-            <TextView
-                android:id="@+id/fast_scroller_popup"
-                style="@style/FastScrollerPopup"
-                android:layout_marginEnd="@dimen/fastscroll_popup_margin" />
+        <TextView
+            android:id="@+id/title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="24dp"
+            android:gravity="center_horizontal"
+            android:paddingHorizontal="@dimen/widget_list_horizontal_margin_large_screen"
+            android:text="@string/widget_button_text"
+            android:textColor="?android:attr/textColorSecondary"
+            android:textSize="24sp" />
 
-            <!-- Fast scroller popup -->
-            <com.android.launcher3.views.RecyclerViewFastScroller
-                android:id="@+id/fast_scroller"
-                android:layout_width="@dimen/fastscroll_width"
+        <LinearLayout
+            android:id="@+id/linear_layout_container"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_below="@id/title">
+
+            <FrameLayout
+                android:id="@+id/recycler_view_container"
+                android:layout_width="0dp"
                 android:layout_height="match_parent"
-                android:layout_marginEnd="@dimen/fastscroll_end_margin" />
+                android:layout_gravity="start"
+                android:layout_weight="0.33">
+                <TextView
+                    android:id="@+id/fast_scroller_popup"
+                    style="@style/FastScrollerPopup"
+                    android:layout_marginEnd="@dimen/fastscroll_popup_margin" />
 
-            <com.android.launcher3.widget.picker.WidgetsRecyclerView
-                android:id="@+id/search_widgets_list_view"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:clipToPadding="false"
-                android:paddingHorizontal="@dimen/widget_list_horizontal_margin_large_screen"
-                android:visibility="gone" />
-        </FrameLayout>
+                <!-- Fast scroller popup -->
+                <com.android.launcher3.views.RecyclerViewFastScroller
+                    android:id="@+id/fast_scroller"
+                    android:layout_width="@dimen/fastscroll_width"
+                    android:layout_height="match_parent"
+                    android:layout_marginEnd="@dimen/fastscroll_end_margin" />
 
-        <FrameLayout
-            android:layout_width="0dp"
-            android:layout_height="0dp"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@id/recycler_view_container"
-            app:layout_constraintTop_toBottomOf="@id/title"
-            android:paddingEnd="16dp"
-            android:paddingStart="8dp"
-            android:layout_marginTop="26dp"
-            app:layout_constraintWidth_percent="0.67"
-            app:layout_constraintBottom_toBottomOf="parent"
-            android:orientation="horizontal">
-            <TextView
-                android:id="@+id/no_widgets_text"
-                style="@style/PrimaryHeadline"
-                android:layout_width="match_parent"
+                <com.android.launcher3.widget.picker.WidgetsRecyclerView
+                    android:id="@+id/search_widgets_list_view"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:clipToPadding="false"
+                    android:paddingHorizontal="@dimen/widget_list_horizontal_margin_large_screen"
+                    android:visibility="gone" />
+            </FrameLayout>
+
+            <FrameLayout
+                android:id="@+id/right_pane_container"
+                android:layout_width="0dp"
                 android:layout_height="match_parent"
-                android:gravity="center"
-                android:textSize="18sp"
-                android:visibility="gone"
-                tools:text="No widgets available" />
-            <ScrollView
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:id="@+id/right_pane">
+                android:layout_weight="0.67"
+                android:paddingEnd="16dp"
+                android:paddingTop="24dp"
+                android:gravity="end"
+                android:layout_gravity="end"
+                android:paddingStart="8dp"
+                android:orientation="horizontal">
+                <TextView
+                    android:id="@+id/no_widgets_text"
+                    style="@style/PrimaryHeadline"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:gravity="center"
+                    android:textSize="18sp"
+                    android:visibility="gone"
+                    tools:text="No widgets available" />
+                <ScrollView
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:id="@+id/right_pane">
                     <com.android.launcher3.widget.picker.WidgetsRecommendationTableLayout
                         android:id="@+id/recommended_widget_table"
                         android:background="@drawable/widgets_surface_background"
@@ -91,32 +112,8 @@
                             "@dimen/widget_list_horizontal_margin_large_screen"
                         android:paddingVertical="@dimen/recommended_widgets_table_vertical_padding"
                         android:visibility="gone" />
-            </ScrollView>
-        </FrameLayout>
-
-        <View
-            android:id="@+id/collapse_handle"
-            android:layout_width="@dimen/bottom_sheet_handle_width"
-            android:layout_height="@dimen/bottom_sheet_handle_height"
-            android:layout_marginTop="@dimen/bottom_sheet_handle_margin"
-            android:background="@drawable/bg_rounded_corner_bottom_sheet_handle"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-        <TextView
-            android:id="@+id/title"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/collapse_handle"
-            android:layout_marginTop="24dp"
-            android:gravity="center_horizontal"
-            android:paddingHorizontal="@dimen/widget_list_horizontal_margin_large_screen"
-            android:text="@string/widget_button_text"
-            android:textColor="?android:attr/textColorSecondary"
-            android:textSize="24sp" />
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
+                </ScrollView>
+            </FrameLayout>
+        </LinearLayout>
+    </com.android.launcher3.views.SpringRelativeLayout>
 </com.android.launcher3.widget.picker.WidgetsFullSheet>
diff --git a/res/layout/widgets_full_sheet_paged_view_large_screen.xml b/res/layout/widgets_full_sheet_paged_view_large_screen.xml
index edee352..f729981 100644
--- a/res/layout/widgets_full_sheet_paged_view_large_screen.xml
+++ b/res/layout/widgets_full_sheet_paged_view_large_screen.xml
@@ -18,13 +18,11 @@
 
     <FrameLayout
         android:id="@+id/widgets_full_sheet_paged_view_large_screen"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        app:layout_constraintEnd_toStartOf="@id/scrollView"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/title"
-        app:layout_constraintWidth_percent="0.33">
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="start"
+        android:layout_gravity="start"
+        android:layout_alignParentStart="true">
         <com.android.launcher3.widget.picker.WidgetPagedView
             android:id="@+id/widgets_view_pager"
             android:layout_width="match_parent"
diff --git a/res/layout/widgets_full_sheet_recyclerview_large_screen.xml b/res/layout/widgets_full_sheet_recyclerview_large_screen.xml
index c6a4f62..8fef303 100644
--- a/res/layout/widgets_full_sheet_recyclerview_large_screen.xml
+++ b/res/layout/widgets_full_sheet_recyclerview_large_screen.xml
@@ -18,13 +18,11 @@
 
     <FrameLayout
         android:id="@+id/widgets_full_sheet_recyclerview_large_screen"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        app:layout_constraintEnd_toStartOf="@id/scrollView"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/title"
-        app:layout_constraintWidth_percent="0.33">
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="start"
+        android:layout_gravity="start"
+        android:layout_alignParentStart="true">
 
         <com.android.launcher3.widget.picker.WidgetsRecyclerView
             android:id="@+id/primary_widgets_list_view"
@@ -65,4 +63,4 @@
             </LinearLayout>
         </com.android.launcher3.views.StickyHeaderLayout>
     </FrameLayout>
-</merge>
+</merge>
\ No newline at end of file
diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
index 0b2f5a5..d3be00c 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
@@ -204,6 +204,7 @@
                 && mDeviceProfile.isLandscape
                 && LARGE_SCREEN_WIDGET_PICKER.get();
         mHasWorkProfile = context.getSystemService(LauncherApps.class).getProfiles().size() > 1;
+        mOrientation = Launcher.getLauncher(context).getOrientation();
         mAdapters.put(AdapterHolder.PRIMARY, new AdapterHolder(AdapterHolder.PRIMARY));
         mAdapters.put(AdapterHolder.WORK, new AdapterHolder(AdapterHolder.WORK));
         mAdapters.put(AdapterHolder.SEARCH, new AdapterHolder(AdapterHolder.SEARCH));
@@ -232,13 +233,22 @@
         mContent.setClipToOutline(true);
 
         LayoutInflater layoutInflater = LayoutInflater.from(getContext());
-        int contentLayoutRes = mHasWorkProfile ? R.layout.widgets_full_sheet_paged_view
-                : R.layout.widgets_full_sheet_recyclerview;
+
         if (mIsTwoPane) {
-            contentLayoutRes = mHasWorkProfile ? R.layout.widgets_full_sheet_paged_view_large_screen
-                    : R.layout.widgets_full_sheet_recyclerview_large_screen;
+            layoutInflater.inflate(
+                    mHasWorkProfile
+                           ? R.layout.widgets_full_sheet_paged_view_large_screen
+                           : R.layout.widgets_full_sheet_recyclerview_large_screen,
+                    findViewById(R.id.recycler_view_container),
+                    true);
+        } else {
+            layoutInflater.inflate(
+                    mHasWorkProfile
+                            ? R.layout.widgets_full_sheet_paged_view
+                            : R.layout.widgets_full_sheet_recyclerview,
+                    mContent,
+                    true);
         }
-        layoutInflater.inflate(contentLayoutRes, mContent, true);
 
         mFastScroller = findViewById(R.id.fast_scroller);
         if (mIsTwoPane) {
@@ -349,7 +359,8 @@
 
         // if the current active page changes to personal or work we set suggestions
         // to be the selected widget
-        if (mIsTwoPane && (currentActivePage == PERSONAL_TAB || currentActivePage == WORK_TAB)) {
+        if (mIsTwoPane && mSuggestedWidgetsHeader != null
+                && (currentActivePage == PERSONAL_TAB || currentActivePage == WORK_TAB)) {
             mSuggestedWidgetsHeader.callOnClick();
         }
 
@@ -433,7 +444,9 @@
         super.onAttachedToWindow();
         mActivityContext.getAppWidgetHolder().addProviderChangeListener(this);
         notifyWidgetProvidersChanged();
-        onRecommendedWidgetsBound();
+        if (!mIsTwoPane) {
+            onRecommendedWidgetsBound();
+        }
     }
 
     @Override
@@ -696,6 +709,9 @@
                     recommendedWidgetsInTable, maxTableHeight);
         } else {
             mRecommendedWidgetsTable.setVisibility(GONE);
+            if (mSuggestedWidgetsContainer != null) {
+                mSuggestedWidgetsContainer.setVisibility(GONE);
+            }
         }
     }
 
diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
index 0fccf79..78a006e 100644
--- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
@@ -60,11 +60,11 @@
         final LauncherAppWidgetProviderInfo widgetInfo =
                 TestViewHelpers.findWidgetProvider(this, false /* hasConfigureScreen */);
 
-        WidgetResizeFrame resizeFrame = mLauncher.
-                getWorkspace().
-                openAllWidgets().
-                getWidget(widgetInfo.getLabel(mTargetContext.getPackageManager())).
-                dragWidgetToWorkspace();
+        WidgetResizeFrame resizeFrame = mLauncher
+                .getWorkspace()
+                .openAllWidgets()
+                .getWidget(widgetInfo.getLabel(mTargetContext.getPackageManager()))
+                .dragWidgetToWorkspace();
 
         assertTrue(mActivityMonitor.itemExists(
                 (info, view) -> info instanceof LauncherAppWidgetInfo &&
diff --git a/tests/tapl/com/android/launcher3/tapl/Widgets.java b/tests/tapl/com/android/launcher3/tapl/Widgets.java
index 96e2e3f..c1c26ec 100644
--- a/tests/tapl/com/android/launcher3/tapl/Widgets.java
+++ b/tests/tapl/com/android/launcher3/tapl/Widgets.java
@@ -77,8 +77,8 @@
             mLauncher.scroll(
                     widgetsContainer,
                     Direction.UP,
-                    new Rect(0, 0, mLauncher.getRightGestureMarginInContainer(widgetsContainer) + 1,
-                            0),
+                    new Rect(0, 0, 0,
+                            mLauncher.getBottomGestureMarginInContainer(widgetsContainer) + 1),
                     FLING_STEPS, false);
             try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer("flung back")) {
                 verifyActiveContainer();
@@ -168,6 +168,8 @@
     private UiObject2 findTestAppWidgetsTableContainer() {
         final BySelector headerSelector = By.res(mLauncher.getLauncherPackageName(),
                 "widgets_list_header");
+        final BySelector widgetPickerSelector = By.res(mLauncher.getLauncherPackageName(),
+                "container");
         final BySelector targetAppSelector = By.clazz("android.widget.TextView").text(
                 mLauncher.getContext().getPackageName());
         final BySelector widgetsContainerSelector = By.res(mLauncher.getLauncherPackageName(),
@@ -176,17 +178,23 @@
         boolean hasHeaderExpanded = false;
         int scrollDistance = 0;
         for (int i = 0; i < SCROLL_ATTEMPTS; i++) {
-            UiObject2 fullWidgetsPicker = verifyActiveContainer();
-
-            UiObject2 header = mLauncher.waitForObjectInContainer(fullWidgetsPicker,
+            UiObject2 widgetPicker = mLauncher.waitForLauncherObject(widgetPickerSelector);
+            UiObject2 widgetListView = verifyActiveContainer();
+            UiObject2 header = mLauncher.waitForObjectInContainer(widgetListView,
                     headerSelector);
+            // If we are in a tablet in landscape mode then we will have a two pane view and we use
+            // the right pane to display the widgets table.
+            UiObject2 rightPane = mLauncher.findObjectInContainer(
+                    widgetPicker,
+                    widgetsContainerSelector);
+
             // If a header is barely visible in the bottom edge of the screen, its height could be
             // too small for a scroll gesture. Since all header should have roughly the same height,
             // let's pick the max height we have seen so far.
             scrollDistance = Math.max(scrollDistance, header.getVisibleBounds().height());
 
             // Look for a header that has the test app name.
-            UiObject2 headerTitle = mLauncher.findObjectInContainer(fullWidgetsPicker,
+            UiObject2 headerTitle = mLauncher.findObjectInContainer(widgetListView,
                     targetAppSelector);
             if (headerTitle != null) {
                 // If we find the header and it has not been expanded, let's click it to see the
@@ -202,7 +210,8 @@
                 }
 
                 // Look for a widgets list.
-                UiObject2 widgetsContainer = mLauncher.findObjectInContainer(fullWidgetsPicker,
+                UiObject2 widgetsContainer = mLauncher.findObjectInContainer(
+                        rightPane != null ? rightPane : widgetListView,
                         widgetsContainerSelector);
                 if (widgetsContainer != null) {
                     log("Widgets container found.");
@@ -210,7 +219,9 @@
                 }
             }
             log("Finding test widget package - scroll with distance: " + scrollDistance);
-            mLauncher.scrollDownByDistance(fullWidgetsPicker, scrollDistance);
+            mLauncher.scrollDownByDistance(hasHeaderExpanded && rightPane != null
+                    ? rightPane
+                    : widgetListView, scrollDistance);
         }
 
         return null;