From c3ab820144f696d528a4df0fd205c5de1b342fa7 Mon Sep 17 00:00:00 2001 From: Federico Baron Date: Wed, 1 Mar 2023 16:55:40 -0800 Subject: [PATCH 1/2] 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; From ac978187a7cf48fc95737cb10c6ac9a201334200 Mon Sep 17 00:00:00 2001 From: Federico Baron Date: Thu, 9 Feb 2023 11:22:35 -0800 Subject: [PATCH 2/2] Turn on the flag for large screen widget picker Bug: 256684299 Test: N/A Change-Id: I8ccf962faab42c3ea012ddcf4650ded01cfaf7f2 --- src/com/android/launcher3/config/FeatureFlags.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 185f89b927..4ef7870088 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -351,7 +351,7 @@ public final class FeatureFlags { "SHOW_DOT_PAGINATION", true, "Enable showing dot pagination in workspace"); public static final BooleanFlag LARGE_SCREEN_WIDGET_PICKER = getDebugFlag(270395809, - "LARGE_SCREEN_WIDGET_PICKER", false, "Enable new widget picker that takes " + "LARGE_SCREEN_WIDGET_PICKER", true, "Enable new widget picker that takes " + "advantage of large screen format"); public static final BooleanFlag ENABLE_NEW_GESTURE_NAV_TUTORIAL = getDebugFlag(270396257,