diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java index 5293c3dda0..2325376ebb 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java @@ -110,6 +110,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet entry -> !mCurrentUser.equals(entry.mPkgItem.user) && !mUserManagerState.isUserQuiet(entry.mPkgItem.user); protected final boolean mHasWorkProfile; + protected boolean mHasRecommendedWidgets; protected final SparseArray mAdapters = new SparseArray(); @Nullable private ArrowTipView mLatestEducationalTip; private final OnLayoutChangeListener mLayoutChangeListenerToShowTips = @@ -537,7 +538,6 @@ public class WidgetsFullSheet extends BaseWidgetSheet public void onSearchResults(List entries) { mAdapters.get(AdapterHolder.SEARCH).mWidgetsListAdapter.setWidgetsOnSearch(entries); updateRecyclerViewVisibility(mAdapters.get(AdapterHolder.SEARCH)); - mAdapters.get(AdapterHolder.SEARCH).mWidgetsRecyclerView.scrollToTop(); } protected void setViewVisibilityBasedOnSearch(boolean isInSearchMode) { @@ -574,7 +574,8 @@ public class WidgetsFullSheet extends BaseWidgetSheet } List recommendedWidgets = mActivityContext.getPopupDataProvider().getRecommendedWidgets(); - if (recommendedWidgets.size() > 0) { + mHasRecommendedWidgets = recommendedWidgets.size() > 0; + if (mHasRecommendedWidgets) { float noWidgetsViewHeight = 0; if (mIsNoWidgetsViewNeeded) { // Make sure recommended section leaves enough space for noWidgetsView. @@ -603,14 +604,10 @@ public class WidgetsFullSheet extends BaseWidgetSheet mRecommendedWidgetsTable.setRecommendedWidgets( recommendedWidgetsInTable, maxTableHeight); } else { - hideRecommendations(); + mRecommendedWidgetsTable.setVisibility(GONE); } } - protected void hideRecommendations() { - mRecommendedWidgetsTable.setVisibility(GONE); - } - protected float getMaxTableHeight(float noWidgetsViewHeight) { return (mContent.getMeasuredHeight() - mTabsHeight - getHeaderViewHeight() @@ -896,7 +893,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet final WidgetsListAdapter mWidgetsListAdapter; private final DefaultItemAnimator mWidgetsListItemAnimator; - private WidgetsRecyclerView mWidgetsRecyclerView; + WidgetsRecyclerView mWidgetsRecyclerView; AdapterHolder(int adapterType) { mAdapterType = adapterType; diff --git a/src/com/android/launcher3/widget/picker/WidgetsTwoPaneSheet.java b/src/com/android/launcher3/widget/picker/WidgetsTwoPaneSheet.java index 2199473e82..46aae9d425 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsTwoPaneSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsTwoPaneSheet.java @@ -54,6 +54,7 @@ public class WidgetsTwoPaneSheet extends WidgetsFullSheet { private ScrollView mRightPaneScrollView; private WidgetsListTableViewHolderBinder mWidgetsListTableViewHolderBinder; + private int mActivePage = -1; private final ViewOutlineProvider mViewOutlineProviderRightPane = new ViewOutlineProvider() { @Override @@ -107,7 +108,6 @@ public class WidgetsTwoPaneSheet extends WidgetsFullSheet { mRightPaneScrollView = mContent.findViewById(R.id.right_pane_scroll_view); mRightPaneScrollView.setOverScrollMode(View.OVER_SCROLL_NEVER); - setupSuggestedWidgets(layoutInflater); onRecommendedWidgetsBound(); onWidgetsBound(); setUpEducationViewsIfNeeded(); @@ -117,9 +117,13 @@ public class WidgetsTwoPaneSheet extends WidgetsFullSheet { } @Override - protected void hideRecommendations() { - super.hideRecommendations(); - mSuggestedWidgetsContainer.setVisibility(GONE); + public void onRecommendedWidgetsBound() { + super.onRecommendedWidgetsBound(); + + if (mSuggestedWidgetsContainer == null && mHasRecommendedWidgets) { + setupSuggestedWidgets(LayoutInflater.from(getContext())); + mSuggestedWidgetsHeader.callOnClick(); + } } private void setupSuggestedWidgets(LayoutInflater layoutInflater) { @@ -168,13 +172,21 @@ public class WidgetsTwoPaneSheet extends WidgetsFullSheet { @Override public void onActivePageChanged(int currentActivePage) { - // if the current active page changes to personal or work we set suggestions - // to be the selected widget - if (currentActivePage == PERSONAL_TAB || currentActivePage == WORK_TAB) { - mSuggestedWidgetsHeader.callOnClick(); + super.onActivePageChanged(currentActivePage); + + // If active page didn't change then we don't want to update the header. + if (mActivePage == currentActivePage) { + return; } - super.onActivePageChanged(currentActivePage); + mActivePage = currentActivePage; + + if (mSuggestedWidgetsHeader == null) { + mAdapters.get(currentActivePage).mWidgetsListAdapter.selectFirstHeaderEntry(); + mAdapters.get(currentActivePage).mWidgetsRecyclerView.scrollToTop(); + } else if (currentActivePage == PERSONAL_TAB || currentActivePage == WORK_TAB) { + mSuggestedWidgetsHeader.callOnClick(); + } } @Override @@ -187,16 +199,11 @@ public class WidgetsTwoPaneSheet extends WidgetsFullSheet { super.updateRecyclerViewVisibility(adapterHolder); } - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - mSuggestedWidgetsContainer.setVisibility(VISIBLE); - } - @Override public void onSearchResults(List entries) { super.onSearchResults(entries); mAdapters.get(AdapterHolder.SEARCH).mWidgetsListAdapter.selectFirstHeaderEntry(); + mAdapters.get(AdapterHolder.SEARCH).mWidgetsRecyclerView.scrollToTop(); } @Override @@ -208,13 +215,19 @@ public class WidgetsTwoPaneSheet extends WidgetsFullSheet { @Override protected void setViewVisibilityBasedOnSearch(boolean isInSearchMode) { - if (isInSearchMode) { - mSuggestedWidgetsContainer.setVisibility(GONE); - } else { - mSuggestedWidgetsContainer.setVisibility(VISIBLE); - mSuggestedWidgetsHeader.callOnClick(); - } super.setViewVisibilityBasedOnSearch(isInSearchMode); + + if (mSuggestedWidgetsHeader != null && mSuggestedWidgetsContainer != null) { + if (!isInSearchMode) { + mSuggestedWidgetsContainer.setVisibility(VISIBLE); + mSuggestedWidgetsHeader.callOnClick(); + } else { + mSuggestedWidgetsContainer.setVisibility(GONE); + } + } else if (!isInSearchMode) { + mAdapters.get(mActivePage).mWidgetsListAdapter.selectFirstHeaderEntry(); + } + } @Override diff --git a/tests/tapl/com/android/launcher3/tapl/Widgets.java b/tests/tapl/com/android/launcher3/tapl/Widgets.java index c1c26ec901..79b54ba0a3 100644 --- a/tests/tapl/com/android/launcher3/tapl/Widgets.java +++ b/tests/tapl/com/android/launcher3/tapl/Widgets.java @@ -182,12 +182,6 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer { 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. @@ -209,6 +203,12 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer { mLauncher.clickLauncherObject(headerTitle); } + // 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); + // Look for a widgets list. UiObject2 widgetsContainer = mLauncher.findObjectInContainer( rightPane != null ? rightPane : widgetListView, @@ -219,6 +219,13 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer { } } log("Finding test widget package - scroll with distance: " + scrollDistance); + + // 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); + mLauncher.scrollDownByDistance(hasHeaderExpanded && rightPane != null ? rightPane : widgetListView, scrollDistance);