From c3ab820144f696d528a4df0fd205c5de1b342fa7 Mon Sep 17 00:00:00 2001 From: Federico Baron Date: Wed, 1 Mar 2023 16:55:40 -0800 Subject: [PATCH] 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 --- .../widgets_full_sheet_large_screen.xml | 153 +++++++++--------- ...ets_full_sheet_paged_view_large_screen.xml | 12 +- ...s_full_sheet_recyclerview_large_screen.xml | 14 +- .../widget/picker/WidgetsFullSheet.java | 30 +++- .../launcher3/ui/widget/AddWidgetTest.java | 10 +- .../com/android/launcher3/tapl/Widgets.java | 27 +++- 6 files changed, 133 insertions(+), 113 deletions(-) diff --git a/res/layout/widgets_full_sheet_large_screen.xml b/res/layout/widgets_full_sheet_large_screen.xml index b99ac5ca6d..808d3eb9b6 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"> - - + - + - - + + + android:layout_gravity="start" + android:layout_weight="0.33"> + - - + + - - + + + - + android:layout_weight="0.67" + android:paddingEnd="16dp" + android:paddingTop="24dp" + android:gravity="end" + android:layout_gravity="end" + android:paddingStart="8dp" + android:orientation="horizontal"> + + - - - - - - - - + + + + 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 edee35251e..f729981d3d 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 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="start" + android:layout_gravity="start" + android:layout_alignParentStart="true"> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="start" + android:layout_gravity="start" + android:layout_alignParentStart="true"> - + \ 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 0b2f5a547b..d3be00ce3a 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java @@ -204,6 +204,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet && 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 @@ public class WidgetsFullSheet extends BaseWidgetSheet 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 @@ public class WidgetsFullSheet extends BaseWidgetSheet // 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 @@ public class WidgetsFullSheet extends BaseWidgetSheet super.onAttachedToWindow(); mActivityContext.getAppWidgetHolder().addProviderChangeListener(this); notifyWidgetProvidersChanged(); - onRecommendedWidgetsBound(); + if (!mIsTwoPane) { + onRecommendedWidgetsBound(); + } } @Override @@ -696,6 +709,9 @@ public class WidgetsFullSheet extends BaseWidgetSheet 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 0fccf7960b..78a006e11e 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 @@ public class AddWidgetTest extends AbstractLauncherUiTest { 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 96e2e3fbec..c1c26ec901 100644 --- a/tests/tapl/com/android/launcher3/tapl/Widgets.java +++ b/tests/tapl/com/android/launcher3/tapl/Widgets.java @@ -77,8 +77,8 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer { 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 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer { 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 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer { 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 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer { } // 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 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer { } } log("Finding test widget package - scroll with distance: " + scrollDistance); - mLauncher.scrollDownByDistance(fullWidgetsPicker, scrollDistance); + mLauncher.scrollDownByDistance(hasHeaderExpanded && rightPane != null + ? rightPane + : widgetListView, scrollDistance); } return null;