Merge "Adding a Teamfood flag option" into udc-dev
diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
index 5293c3d..2325376 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
@@ -110,6 +110,7 @@
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 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 @@
}
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 @@
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 @@
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 2199473..46aae9d 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsTwoPaneSheet.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsTwoPaneSheet.java
@@ -54,6 +54,7 @@
private ScrollView mRightPaneScrollView;
private WidgetsListTableViewHolderBinder mWidgetsListTableViewHolderBinder;
+ private int mActivePage = -1;
private final ViewOutlineProvider mViewOutlineProviderRightPane = new ViewOutlineProvider() {
@Override
@@ -107,7 +108,6 @@
mRightPaneScrollView = mContent.findViewById(R.id.right_pane_scroll_view);
mRightPaneScrollView.setOverScrollMode(View.OVER_SCROLL_NEVER);
- setupSuggestedWidgets(layoutInflater);
onRecommendedWidgetsBound();
onWidgetsBound();
setUpEducationViewsIfNeeded();
@@ -117,9 +117,13 @@
}
@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 @@
@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
@@ -188,15 +200,10 @@
}
@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 @@
@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 c1c26ec..79b54ba 100644
--- a/tests/tapl/com/android/launcher3/tapl/Widgets.java
+++ b/tests/tapl/com/android/launcher3/tapl/Widgets.java
@@ -182,12 +182,6 @@
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 @@
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 @@
}
}
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);