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);