Merge changes I8ccf962f,I383c7540 into udc-dev
* changes: Turn on the flag for large screen widget picker Add test for widget picker on landscape mode for tablets
This commit is contained in:
committed by
Android (Google) Code Review
commit
28a8d5a14c
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 &&
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user