Show suggested widgets header only when there are suggested widgets

Bug: 275435999
Test: Verified suggested widgets header doesn't show up unless there are suggested widgets to show
Change-Id: I2ec2ba100d7a6ddc338a36ece75633abba990b2b
This commit is contained in:
fbaron
2023-03-27 17:06:52 -07:00
committed by Federico Baron
parent cdfdd444bc
commit ba3f77be7d
3 changed files with 52 additions and 35 deletions
@@ -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<AdapterHolder> mAdapters = new SparseArray();
@Nullable private ArrowTipView mLatestEducationalTip;
private final OnLayoutChangeListener mLayoutChangeListenerToShowTips =
@@ -537,7 +538,6 @@ public class WidgetsFullSheet extends BaseWidgetSheet
public void onSearchResults(List<WidgetsListBaseEntry> 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<WidgetItem> 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;
@@ -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<WidgetsListBaseEntry> 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
@@ -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);