Revert "Refactors Search results into separate RV for Toast."
This reverts commit 6729f0b95001bbebe32721e471b5dd9173977410.
Reason for revert: This change caused b/230648542.
Please see https://b.corp.google.com/issues/230648542#comment5 for the video after reverting this change.
Bug: 206905515
Bug: 230648542
Change-Id: I85f063c56cad137c05b810204244bba7e8f94ee7
diff --git a/src/com/android/launcher3/FastScrollRecyclerView.java b/src/com/android/launcher3/BaseRecyclerView.java
similarity index 95%
rename from src/com/android/launcher3/FastScrollRecyclerView.java
rename to src/com/android/launcher3/BaseRecyclerView.java
index a60d143..9369bdc 100644
--- a/src/com/android/launcher3/FastScrollRecyclerView.java
+++ b/src/com/android/launcher3/BaseRecyclerView.java
@@ -37,19 +37,19 @@
* <li> Enable fast scroller.
* </ul>
*/
-public abstract class FastScrollRecyclerView extends RecyclerView {
+public abstract class BaseRecyclerView extends RecyclerView {
protected RecyclerViewFastScroller mScrollbar;
- public FastScrollRecyclerView(Context context) {
+ public BaseRecyclerView(Context context) {
this(context, null);
}
- public FastScrollRecyclerView(Context context, AttributeSet attrs) {
+ public BaseRecyclerView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
- public FastScrollRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
+ public BaseRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@@ -206,4 +206,4 @@
}
scrollToPosition(0);
}
-}
+}
\ No newline at end of file
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 463280b..4b42ecb 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -2750,7 +2750,7 @@
packageName);
if (supportsAllAppsState && isInState(LauncherState.ALL_APPS)) {
- return getFirstMatch(Collections.singletonList(mAppsView.getActiveAppsRecyclerView()),
+ return getFirstMatch(Collections.singletonList(mAppsView.getActiveRecyclerView()),
preferredItem, packageAndUserAndApp);
} else {
List<ViewGroup> containers = new ArrayList<>(mWorkspace.getPanelCount() + 1);
diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
index 16a2823..e279f59 100644
--- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
@@ -80,7 +80,7 @@
OnClickListener marketSearchClickListener = (v) -> mActivityContext.startActivitySafely(v,
marketSearchIntent, null);
for (int i = 0; i < mAH.size(); i++) {
- mAH.get(i).mAdapter.setLastSearchQuery(query, marketSearchClickListener);
+ mAH.get(i).adapter.setLastSearchQuery(query, marketSearchClickListener);
}
mIsSearching = true;
rebindAdapters();
@@ -142,7 +142,7 @@
@Override
public String getDescription() {
- if (!mUsingTabs && isSearching()) {
+ if (!mUsingTabs && mIsSearching) {
return getContext().getString(R.string.all_apps_search_results);
} else {
return super.getDescription();
@@ -150,13 +150,8 @@
}
@Override
- protected boolean shouldShowTabs() {
- return super.shouldShowTabs() && !isSearching();
- }
-
- @Override
- public boolean isSearching() {
- return mIsSearching;
+ protected boolean showTabs() {
+ return super.showTabs() && !mIsSearching;
}
@Override
@@ -178,19 +173,15 @@
}
@Override
- protected View replaceAppsRVContainer(boolean showTabs) {
- View rvContainer = super.replaceAppsRVContainer(showTabs);
+ protected View replaceRVContainer(boolean showTabs) {
+ View rvContainer = super.replaceRVContainer(showTabs);
removeCustomRules(rvContainer);
- removeCustomRules(getSearchRecyclerView());
if (FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get()) {
alignParentTop(rvContainer, showTabs);
- alignParentTop(getSearchRecyclerView(), showTabs);
layoutAboveSearchContainer(rvContainer);
- layoutAboveSearchContainer(getSearchRecyclerView());
} else {
layoutBelowSearchContainer(rvContainer, showTabs);
- layoutBelowSearchContainer(getSearchRecyclerView(), showTabs);
}
return rvContainer;
@@ -217,7 +208,7 @@
float prog = Utilities.boundToRange((float) scrolledOffset / mHeaderThreshold, 0f, 1f);
boolean bgVisible = mSearchUiManager.getBackgroundVisibility();
- if (scrolledOffset == 0 && !isSearching()) {
+ if (scrolledOffset == 0 && !mIsSearching) {
bgVisible = true;
} else if (scrolledOffset > mHeaderThreshold) {
bgVisible = false;
@@ -251,7 +242,7 @@
int topMargin = getContext().getResources().getDimensionPixelSize(
R.dimen.all_apps_header_top_margin);
if (includeTabsMargin) {
- topMargin += getContext().getResources().getDimensionPixelSize(
+ topMargin = topMargin + getContext().getResources().getDimensionPixelSize(
R.dimen.all_apps_header_pill_height);
}
layoutParams.topMargin = topMargin;
@@ -292,9 +283,9 @@
}
@Override
- protected BaseAllAppsAdapter<T> createAdapter(AlphabeticalAppsList<T> appsList,
+ protected BaseAllAppsAdapter getAdapter(AlphabeticalAppsList<T> mAppsList,
BaseAdapterProvider[] adapterProviders) {
- return new AllAppsGridAdapter<>(mActivityContext, getLayoutInflater(), appsList,
+ return new AllAppsGridAdapter<>(mActivityContext, getLayoutInflater(), mAppsList,
adapterProviders);
}
}
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index 18c6788..7dbe711 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -37,8 +37,8 @@
import androidx.recyclerview.widget.RecyclerView;
+import com.android.launcher3.BaseRecyclerView;
import com.android.launcher3.DeviceProfile;
-import com.android.launcher3.FastScrollRecyclerView;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
@@ -53,13 +53,13 @@
/**
* A RecyclerView with custom fast scroll support for the all apps view.
*/
-public class AllAppsRecyclerView extends FastScrollRecyclerView {
- protected static final String TAG = "AllAppsRecyclerView";
+public class AllAppsRecyclerView extends BaseRecyclerView {
+ private static final String TAG = "AllAppsContainerView";
private static final boolean DEBUG = false;
private static final boolean DEBUG_LATENCY = Utilities.isPropertyEnabled(SEARCH_LOGGING);
- protected AlphabeticalAppsList<?> mApps;
- protected final int mNumAppsPerRow;
+ private AlphabeticalAppsList<?> mApps;
+ private final int mNumAppsPerRow;
// The specific view heights that we use to calculate scroll
private final SparseIntArray mViewHeights = new SparseIntArray();
@@ -74,8 +74,8 @@
};
// The empty-search result background
- protected AllAppsBackgroundDrawable mEmptySearchBackground;
- protected int mEmptySearchBackgroundTopOffset;
+ private AllAppsBackgroundDrawable mEmptySearchBackground;
+ private int mEmptySearchBackgroundTopOffset;
private ArrayList<View> mAutoSizedOverlays = new ArrayList<>();
@@ -112,7 +112,7 @@
return mApps;
}
- protected void updatePoolSize() {
+ private void updatePoolSize() {
DeviceProfile grid = ActivityContext.lookupContext(getContext()).getDeviceProfile();
RecyclerView.RecycledViewPool pool = getRecycledViewPool();
int approxRows = (int) Math.ceil(grid.availableHeightPx / grid.allAppsIconSizePx);
@@ -137,8 +137,8 @@
Log.d(TAG, "onDraw at = " + System.currentTimeMillis());
}
if (DEBUG_LATENCY) {
- Log.d(SEARCH_LOGGING, getClass().getSimpleName() + " onDraw; time stamp = "
- + System.currentTimeMillis());
+ Log.d(SEARCH_LOGGING,
+ "-- Recycle view onDraw, time stamp = " + System.currentTimeMillis());
}
super.onDraw(c);
}
@@ -223,7 +223,8 @@
&& mEmptySearchBackground != null && mEmptySearchBackground.getAlpha() > 0) {
mEmptySearchBackground.setHotspot(e.getX(), e.getY());
}
- hideKeyboardAsync(ActivityContext.lookupContext(getContext()), getApplicationWindowToken());
+ hideKeyboardAsync(ActivityContext.lookupContext(getContext()),
+ getApplicationWindowToken());
return result;
}
@@ -359,6 +360,13 @@
}
@Override
+ public boolean supportsFastScrolling() {
+ // Only allow fast scrolling when the user is not searching, since the results are not
+ // grouped in a meaningful order
+ return !mApps.hasFilter();
+ }
+
+ @Override
public int getCurrentScrollY() {
// Return early if there are no items or we haven't been measured
List<AllAppsGridAdapter.AdapterItem> items = mApps.getAdapterItems();
@@ -368,7 +376,7 @@
// Calculate the y and offset for the item
View child = getChildAt(0);
- int position = getChildAdapterPosition(child);
+ int position = getChildPosition(child);
if (position == NO_POSITION) {
return -1;
}
diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
index 723bc65..637a418 100644
--- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
@@ -84,8 +84,7 @@
@Override
public Float get(AllAppsTransitionController controller) {
if (controller.mIsTablet) {
- return controller.mAppsView.getAppsRecyclerViewContainer()
- .getTranslationY();
+ return controller.mAppsView.getRecyclerViewContainer().getTranslationY();
} else {
return controller.getAppsViewPullbackTranslationY().get(
controller.mAppsView);
@@ -95,7 +94,7 @@
@Override
public void setValue(AllAppsTransitionController controller, float translation) {
if (controller.mIsTablet) {
- controller.mAppsView.getAppsRecyclerViewContainer().setTranslationY(
+ controller.mAppsView.getRecyclerViewContainer().setTranslationY(
translation);
} else {
controller.getAppsViewPullbackTranslationY().set(controller.mAppsView,
@@ -110,7 +109,7 @@
@Override
public Float get(AllAppsTransitionController controller) {
if (controller.mIsTablet) {
- return controller.mAppsView.getAppsRecyclerViewContainer().getAlpha();
+ return controller.mAppsView.getRecyclerViewContainer().getAlpha();
} else {
return controller.getAppsViewPullbackAlpha().getValue();
}
@@ -119,7 +118,7 @@
@Override
public void setValue(AllAppsTransitionController controller, float alpha) {
if (controller.mIsTablet) {
- controller.mAppsView.getAppsRecyclerViewContainer().setAlpha(alpha);
+ controller.mAppsView.getRecyclerViewContainer().setAlpha(alpha);
} else {
controller.getAppsViewPullbackAlpha().setValue(alpha);
}
diff --git a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
index 42374b8..7687fea 100644
--- a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
+++ b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
@@ -18,8 +18,6 @@
import android.content.Context;
-import androidx.annotation.Nullable;
-
import com.android.launcher3.allapps.BaseAllAppsAdapter.AdapterItem;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.model.data.AppInfo;
@@ -73,7 +71,6 @@
// The set of apps from the system
private final List<AppInfo> mApps = new ArrayList<>();
- @Nullable
private final AllAppsStore mAllAppsStore;
// The number of results in current adapter
@@ -91,16 +88,14 @@
private int mNumAppRowsInAdapter;
private ItemInfoMatcher mItemFilter;
- public AlphabeticalAppsList(Context context, @Nullable AllAppsStore appsStore,
+ public AlphabeticalAppsList(Context context, AllAppsStore appsStore,
WorkAdapterProvider adapterProvider) {
mAllAppsStore = appsStore;
mActivityContext = ActivityContext.lookupContext(context);
mAppNameComparator = new AppInfoComparator(context);
mWorkAdapterProvider = adapterProvider;
mNumAppsPerRowAllApps = mActivityContext.getDeviceProfile().inv.numAllAppsColumns;
- if (mAllAppsStore != null) {
- mAllAppsStore.addUpdateListener(this);
- }
+ mAllAppsStore.addUpdateListener(this);
}
public void updateItemFilter(ItemInfoMatcher itemFilter) {
@@ -173,9 +168,9 @@
}
/**
- * Returns whether there are search results which will hide the A-Z list.
+ * Returns whether there are is a filter set.
*/
- public boolean hasSearchResults() {
+ public boolean hasFilter() {
return !mSearchResults.isEmpty();
}
@@ -183,7 +178,7 @@
* Returns whether there are no filtered results.
*/
public boolean hasNoFilteredResults() {
- return hasSearchResults() && mAccessibilityResultsCount == 0;
+ return hasFilter() && mAccessibilityResultsCount == 0;
}
/**
@@ -201,13 +196,13 @@
return true;
}
- /** Appends results to search. */
- public void appendSearchResults(ArrayList<AdapterItem> results) {
- if (hasSearchResults() && results != null && results.size() > 0) {
+ public boolean appendSearchResults(ArrayList<AdapterItem> results) {
+ if (hasFilter() && results != null && results.size() > 0) {
updateSearchAdapterItems(results, mSearchResults.size());
- mSearchResults.addAll(results);
refreshRecyclerView();
+ return true;
}
+ return false;
}
void updateSearchAdapterItems(ArrayList<AdapterItem> list, int offset) {
@@ -227,14 +222,11 @@
*/
@Override
public void onAppsUpdated() {
- if (mAllAppsStore == null) {
- return;
- }
// Sort the list of apps
mApps.clear();
for (AppInfo app : mAllAppsStore.getApps()) {
- if (mItemFilter == null || mItemFilter.matches(app, null) || hasSearchResults()) {
+ if (mItemFilter == null || mItemFilter.matches(app, null) || hasFilter()) {
mApps.add(app);
}
}
@@ -304,18 +296,7 @@
// Recreate the filtered and sectioned apps (for convenience for the grid layout) from the
// ordered set of sections
- if (hasSearchResults()) {
- if (!FeatureFlags.ENABLE_DEVICE_SEARCH.get()) {
- // Append the search market item
- if (hasNoFilteredResults()) {
- mSearchResults.add(AdapterItem.asEmptySearch(position++));
- } else {
- mSearchResults.add(AdapterItem.asAllAppsDivider(position++));
- }
- mSearchResults.add(AdapterItem.asMarketSearch(position++));
- }
- updateSearchAdapterItems(mSearchResults, 0);
- } else {
+ if (!hasFilter()) {
mAccessibilityResultsCount = mApps.size();
if (mWorkAdapterProvider != null) {
position += mWorkAdapterProvider.addWorkItems(mAdapterItems);
@@ -342,6 +323,18 @@
mAdapterItems.add(appItem);
}
+ } else {
+ updateSearchAdapterItems(mSearchResults, 0);
+ if (!FeatureFlags.ENABLE_DEVICE_SEARCH.get()) {
+ // Append the search market item
+ if (hasNoFilteredResults()) {
+ mAdapterItems.add(AdapterItem.asEmptySearch(position++));
+ } else {
+ mAdapterItems.add(AdapterItem.asAllAppsDivider(position++));
+ }
+ mAdapterItems.add(AdapterItem.asMarketSearch(position++));
+
+ }
}
if (mNumAppsPerRowAllApps != 0) {
// Update the number of rows in the adapter after we do all the merging (otherwise, we
diff --git a/src/com/android/launcher3/allapps/BaseAllAppsContainerView.java b/src/com/android/launcher3/allapps/BaseAllAppsContainerView.java
index 6a44989..f913aa9 100644
--- a/src/com/android/launcher3/allapps/BaseAllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/BaseAllAppsContainerView.java
@@ -80,7 +80,7 @@
OnDeviceProfileChangeListener, OnActivePageChangedListener,
ScrimView.ScrimDrawingController {
- protected static final String BUNDLE_KEY_CURRENT_PAGE = "launcher.allapps.current_page";
+ private static final String BUNDLE_KEY_CURRENT_PAGE = "launcher.allapps.current_page";
public static final float PULL_MULTIPLIER = .02f;
public static final float FLING_VELOCITY_MULTIPLIER = 1200f;
@@ -109,7 +109,6 @@
private int mNavBarScrimHeight = 0;
private AllAppsPagedView mViewPager;
- private SearchRecyclerView mSearchRecyclerView;
protected FloatingHeaderView mHeader;
private View mBottomSheetBackground;
@@ -142,10 +141,9 @@
mActivityContext.getSystemService(UserManager.class),
this,
Utilities.getPrefs(mActivityContext));
- mAH = Arrays.asList(null, null, null);
- mAH.set(AdapterHolder.MAIN, new AdapterHolder(AdapterHolder.MAIN));
- mAH.set(AdapterHolder.WORK, new AdapterHolder(AdapterHolder.WORK));
- mAH.set(AdapterHolder.SEARCH, new AdapterHolder(AdapterHolder.SEARCH));
+ mAH = Arrays.asList(null, null);
+ mAH.set(AdapterHolder.MAIN, new AdapterHolder(false /* isWork */));
+ mAH.set(AdapterHolder.WORK, new AdapterHolder(true /* isWork */));
mNavBarScrimPaint = new Paint();
mNavBarScrimPaint.setColor(Themes.getAttrColor(context, R.attr.allAppsNavBarScrimColor));
@@ -177,7 +175,7 @@
Bundle state = (Bundle) sparseArray.get(R.id.work_tab_state_id, null);
if (state != null) {
int currentPage = state.getInt(BUNDLE_KEY_CURRENT_PAGE, 0);
- if (currentPage == AdapterHolder.WORK && mViewPager != null) {
+ if (currentPage != 0 && mViewPager != null) {
mViewPager.setCurrentPage(currentPage);
rebindAdapters();
} else {
@@ -200,7 +198,7 @@
*/
public void setOnIconLongClickListener(OnLongClickListener listener) {
for (AdapterHolder holder : mAH) {
- holder.mAdapter.setOnIconLongClickListener(listener);
+ holder.adapter.setOnIconLongClickListener(listener);
}
}
@@ -215,7 +213,7 @@
@Override
public void onDeviceProfileChanged(DeviceProfile dp) {
for (AdapterHolder holder : mAH) {
- holder.mAdapter.setAppsPerRow(dp.numShownAllAppsColumns);
+ holder.adapter.setAppsPerRow(dp.numShownAllAppsColumns);
if (holder.mRecyclerView != null) {
// Remove all views and clear the pool, while keeping the data same. After this
// call, all the viewHolders will be recreated.
@@ -239,7 +237,7 @@
}
}
mHasWorkApps = hasWorkApps;
- if (!mAH.get(AdapterHolder.MAIN).mAppsList.hasSearchResults()) {
+ if (!mAH.get(AdapterHolder.MAIN).mAppsList.hasFilter()) {
rebindAdapters();
if (hasWorkApps) {
mWorkManager.reset();
@@ -258,11 +256,7 @@
if (mActivityContext.getDragLayer().isEventOverView(mBottomSheetHandleArea, ev)) {
return true;
}
- if (isSearching()) {
- return mAH.get(AdapterHolder.SEARCH).mRecyclerView
- .shouldContainerScroll(ev, mActivityContext.getDragLayer());
- }
- AllAppsRecyclerView rv = getActiveAppsRecyclerView();
+ AllAppsRecyclerView rv = getActiveRecyclerView();
if (rv == null) {
return true;
}
@@ -276,7 +270,7 @@
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- AllAppsRecyclerView rv = getActiveAppsRecyclerView();
+ AllAppsRecyclerView rv = getActiveRecyclerView();
if (rv != null && rv.getScrollbar().isHitInParent(ev.getX(), ev.getY(),
mFastScrollerOffset)) {
mTouchHandler = rv.getScrollbar();
@@ -293,7 +287,7 @@
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- AllAppsRecyclerView rv = getActiveAppsRecyclerView();
+ AllAppsRecyclerView rv = getActiveRecyclerView();
if (rv != null && rv.getScrollbar().isHitInParent(ev.getX(), ev.getY(),
mFastScrollerOffset)) {
mTouchHandler = rv.getScrollbar();
@@ -326,8 +320,8 @@
return getContext().getString(R.string.all_apps_button_label);
}
- /** The current apps recycler view in the container (may be hidden for search results). */
- public AllAppsRecyclerView getActiveAppsRecyclerView() {
+ /** The current recycler view visible in the container. */
+ public AllAppsRecyclerView getActiveRecyclerView() {
if (!mUsingTabs || isPersonalTab()) {
return mAH.get(AdapterHolder.MAIN).mRecyclerView;
} else {
@@ -376,15 +370,12 @@
// This is a focus listener that proxies focus from a view into the list view. This is to
// work around the search box from getting first focus and showing the cursor.
setOnFocusChangeListener((v, hasFocus) -> {
- if (hasFocus && getActiveAppsRecyclerView() != null) {
- getActiveAppsRecyclerView().requestFocus();
+ if (hasFocus && getActiveRecyclerView() != null) {
+ getActiveRecyclerView().requestFocus();
}
});
mHeader = findViewById(R.id.all_apps_header);
- mSearchRecyclerView = findViewById(R.id.search_results_list_view);
- mAH.get(AdapterHolder.SEARCH).setup(mSearchRecyclerView,
- /* Filter out A-Z apps */ (itemInfo, componentName) -> false);
rebindAdapters(true /* force */);
mBottomSheetBackground = findViewById(R.id.bottom_sheet_background);
@@ -447,19 +438,13 @@
}
protected void rebindAdapters(boolean force) {
- updateSearchResultsVisibility();
-
- boolean showTabs = shouldShowTabs();
+ boolean showTabs = showTabs();
if (showTabs == mUsingTabs && !force) {
return;
}
mUsingTabs = showTabs;
+ replaceRVContainer(mUsingTabs);
- if (isSearching()) {
- return;
- }
-
- replaceAppsRVContainer(mUsingTabs);
mAllAppsStore.unregisterIconContainer(mAH.get(AdapterHolder.MAIN).mRecyclerView);
mAllAppsStore.unregisterIconContainer(mAH.get(AdapterHolder.WORK).mRecyclerView);
@@ -494,17 +479,6 @@
mAllAppsStore.registerIconContainer(mAH.get(AdapterHolder.WORK).mRecyclerView);
}
- private void updateSearchResultsVisibility() {
- if (isSearching()) {
- getSearchRecyclerView().setVisibility(VISIBLE);
- getAppsRecyclerViewContainer().setVisibility(GONE);
- } else {
- getSearchRecyclerView().setVisibility(GONE);
- getAppsRecyclerViewContainer().setVisibility(VISIBLE);
- }
- mHeader.setActiveRV(getCurrentPage());
- }
-
private void setDeviceManagementResources() {
if (mActivityContext.getStringCache() != null) {
Button personalTab = findViewById(R.id.tab_personal);
@@ -515,23 +489,18 @@
}
}
- protected boolean shouldShowTabs() {
+ protected boolean showTabs() {
return mHasWorkApps;
}
- protected boolean isSearching() {
- return false;
- }
-
- protected View replaceAppsRVContainer(boolean showTabs) {
- for (int i = AdapterHolder.MAIN; i <= AdapterHolder.WORK; i++) {
- AdapterHolder adapterHolder = mAH.get(i);
+ protected View replaceRVContainer(boolean showTabs) {
+ for (AdapterHolder adapterHolder : mAH) {
if (adapterHolder.mRecyclerView != null) {
adapterHolder.mRecyclerView.setLayoutManager(null);
adapterHolder.mRecyclerView.setAdapter(null);
}
}
- View oldView = getAppsRecyclerViewContainer();
+ View oldView = getRecyclerViewContainer();
int index = indexOfChild(oldView);
removeView(oldView);
int layout = showTabs ? R.layout.all_apps_tabs : R.layout.all_apps_rv_layout;
@@ -552,17 +521,13 @@
return newView;
}
- public View getAppsRecyclerViewContainer() {
+ public View getRecyclerViewContainer() {
return mViewPager != null ? mViewPager : findViewById(R.id.apps_list_view);
}
- public SearchRecyclerView getSearchRecyclerView() {
- return mSearchRecyclerView;
- }
-
@Override
public void onActivePageChanged(int currentActivePage) {
- mHeader.setActiveRV(currentActivePage);
+ mHeader.setMainActive(currentActivePage == AdapterHolder.MAIN);
if (mAH.get(currentActivePage).mRecyclerView != null) {
mAH.get(currentActivePage).mRecyclerView.bindFastScrollbar();
}
@@ -591,8 +556,8 @@
return isDescendantViewVisible(R.id.tab_work);
}
- public AlphabeticalAppsList<T> getSearchResultList() {
- return mAH.get(AdapterHolder.SEARCH).mAppsList;
+ public AlphabeticalAppsList<T> getApps() {
+ return mAH.get(AdapterHolder.MAIN).mAppsList;
}
public FloatingHeaderView getFloatingHeaderView() {
@@ -601,19 +566,17 @@
@VisibleForTesting
public View getContentView() {
- return mViewPager == null ? getActiveAppsRecyclerView() : mViewPager;
+ return mViewPager == null ? getActiveRecyclerView() : mViewPager;
}
/** The current page visible in all apps. */
public int getCurrentPage() {
- return isSearching()
- ? AdapterHolder.SEARCH
- : mViewPager == null ? AdapterHolder.MAIN : mViewPager.getCurrentPage();
+ return mViewPager != null ? mViewPager.getCurrentPage() : AdapterHolder.MAIN;
}
/** The scroll bar for the active recycler view. */
public RecyclerViewFastScroller getScrollBar() {
- AllAppsRecyclerView rv = getActiveAppsRecyclerView();
+ AllAppsRecyclerView rv = getActiveRecyclerView();
return rv == null ? null : rv.getScrollbar();
}
@@ -622,9 +585,7 @@
mHeader.setup(
mAH.get(AdapterHolder.MAIN).mRecyclerView,
mAH.get(AdapterHolder.WORK).mRecyclerView,
- (SearchRecyclerView) mAH.get(AdapterHolder.SEARCH).mRecyclerView,
- getCurrentPage(),
- /* tabsHidden= */ mAH.get(AdapterHolder.WORK).mRecyclerView == null);
+ mAH.get(AdapterHolder.WORK).mRecyclerView == null);
int padding = mHeader.getMaxTranslation();
for (int i = 0; i < mAH.size(); i++) {
@@ -735,48 +696,39 @@
return ColorUtils.blendARGB(mScrimColor, mHeaderProtectionColor, blendRatio);
}
- protected abstract BaseAllAppsAdapter<T> createAdapter(AlphabeticalAppsList<T> mAppsList,
+ protected abstract BaseAllAppsAdapter getAdapter(AlphabeticalAppsList<T> mAppsList,
BaseAdapterProvider[] adapterProviders);
protected int getHeaderBottom() {
return (int) getTranslationY();
}
- /**
- * Returns a view that denotes the visible part of all apps container view.
- */
- public View getVisibleContainerView() {
- return mActivityContext.getDeviceProfile().isTablet ? mBottomSheetBackground : this;
- }
-
/** Holds a {@link BaseAllAppsAdapter} and related fields. */
public class AdapterHolder {
public static final int MAIN = 0;
public static final int WORK = 1;
- public static final int SEARCH = 2;
- private final int mType;
- public final BaseAllAppsAdapter<T> mAdapter;
+ private final boolean mIsWork;
+ public final BaseAllAppsAdapter<T> adapter;
final RecyclerView.LayoutManager mLayoutManager;
final AlphabeticalAppsList<T> mAppsList;
final Rect mPadding = new Rect();
AllAppsRecyclerView mRecyclerView;
boolean mVerticalFadingEdge;
- AdapterHolder(int type) {
- mType = type;
- mAppsList = new AlphabeticalAppsList<>(mActivityContext,
- isSearch() ? null : mAllAppsStore,
- isWork() ? mWorkManager.getAdapterProvider() : null);
+ AdapterHolder(boolean isWork) {
+ mIsWork = isWork;
+ mAppsList = new AlphabeticalAppsList<>(mActivityContext, mAllAppsStore,
+ isWork ? mWorkManager.getAdapterProvider() : null);
BaseAdapterProvider[] adapterProviders =
- isWork() ? new BaseAdapterProvider[]{mMainAdapterProvider,
+ isWork ? new BaseAdapterProvider[]{mMainAdapterProvider,
mWorkManager.getAdapterProvider()}
: new BaseAdapterProvider[]{mMainAdapterProvider};
- mAdapter = createAdapter(mAppsList, adapterProviders);
- mAppsList.setAdapter(mAdapter);
- mLayoutManager = mAdapter.getLayoutManager();
+ adapter = getAdapter(mAppsList, adapterProviders);
+ mAppsList.setAdapter(adapter);
+ mLayoutManager = adapter.getLayoutManager();
}
void setup(@NonNull View rv, @Nullable ItemInfoMatcher matcher) {
@@ -785,14 +737,14 @@
mRecyclerView.setEdgeEffectFactory(createEdgeEffectFactory());
mRecyclerView.setApps(mAppsList);
mRecyclerView.setLayoutManager(mLayoutManager);
- mRecyclerView.setAdapter(mAdapter);
+ mRecyclerView.setAdapter(adapter);
mRecyclerView.setHasFixedSize(true);
// No animations will occur when changes occur to the items in this RecyclerView.
mRecyclerView.setItemAnimator(null);
mRecyclerView.addOnScrollListener(mScrollListener);
FocusedItemDecorator focusedItemDecorator = new FocusedItemDecorator(mRecyclerView);
mRecyclerView.addItemDecoration(focusedItemDecorator);
- mAdapter.setIconFocusListener(focusedItemDecorator.getFocusListener());
+ adapter.setIconFocusListener(focusedItemDecorator.getFocusListener());
applyVerticalFadingEdgeEnabled(mVerticalFadingEdge);
applyPadding();
}
@@ -800,7 +752,7 @@
void applyPadding() {
if (mRecyclerView != null) {
int bottomOffset = 0;
- if (isWork() && mWorkManager.getWorkModeSwitch() != null) {
+ if (mIsWork && mWorkManager.getWorkModeSwitch() != null) {
bottomOffset = mInsets.bottom + mWorkManager.getWorkModeSwitch().getHeight();
}
mRecyclerView.setPadding(mPadding.left, mPadding.top, mPadding.right,
@@ -810,15 +762,15 @@
private void applyVerticalFadingEdgeEnabled(boolean enabled) {
mVerticalFadingEdge = enabled;
- mRecyclerView.setVerticalFadingEdgeEnabled(!mUsingTabs && mVerticalFadingEdge);
+ mAH.get(AdapterHolder.MAIN).mRecyclerView.setVerticalFadingEdgeEnabled(!mUsingTabs
+ && mVerticalFadingEdge);
}
+ }
- private boolean isWork() {
- return mType == WORK;
- }
-
- private boolean isSearch() {
- return mType == SEARCH;
- }
+ /**
+ * Returns a view that denotes the visible part of all apps container view.
+ */
+ public View getVisibleContainerView() {
+ return mActivityContext.getDeviceProfile().isTablet ? mBottomSheetBackground : this;
}
}
diff --git a/src/com/android/launcher3/allapps/FloatingHeaderView.java b/src/com/android/launcher3/allapps/FloatingHeaderView.java
index 3e717bd..72f14a8 100644
--- a/src/com/android/launcher3/allapps/FloatingHeaderView.java
+++ b/src/com/android/launcher3/allapps/FloatingHeaderView.java
@@ -33,7 +33,6 @@
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Insettable;
import com.android.launcher3.R;
-import com.android.launcher3.allapps.BaseAllAppsContainerView.AdapterHolder;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
import com.android.launcher3.views.ActivityContext;
@@ -91,8 +90,8 @@
protected ViewGroup mTabLayout;
private AllAppsRecyclerView mMainRV;
private AllAppsRecyclerView mWorkRV;
- private SearchRecyclerView mSearchRV;
private AllAppsRecyclerView mCurrentRV;
+ private ViewGroup mParent;
public boolean mHeaderCollapsed;
protected int mSnappedScrolledY;
private int mTranslationY;
@@ -101,6 +100,7 @@
protected boolean mTabsHidden;
protected int mMaxTranslation;
+ private boolean mMainRVActive = true;
private boolean mCollapsed = false;
@@ -232,8 +232,7 @@
return super.getFocusedChild();
}
- void setup(AllAppsRecyclerView mainRV, AllAppsRecyclerView workRV, SearchRecyclerView searchRV,
- int activeRV, boolean tabsHidden) {
+ void setup(AllAppsRecyclerView mainRV, AllAppsRecyclerView workRV, boolean tabsHidden) {
for (FloatingHeaderRow row : mAllRows) {
row.setup(this, mAllRows, tabsHidden);
}
@@ -243,8 +242,8 @@
mTabLayout.setVisibility(tabsHidden ? View.GONE : View.VISIBLE);
mMainRV = setupRV(mMainRV, mainRV);
mWorkRV = setupRV(mWorkRV, workRV);
- mSearchRV = (SearchRecyclerView) setupRV(mSearchRV, searchRV);
- setActiveRV(activeRV);
+ mParent = (ViewGroup) mMainRV.getParent();
+ setMainActive(mMainRVActive || mWorkRV == null);
reset(false);
}
@@ -268,10 +267,9 @@
}
}
- public void setActiveRV(int rvType) {
- mCurrentRV =
- rvType == AdapterHolder.MAIN ? mMainRV
- : rvType == AdapterHolder.WORK ? mWorkRV : mSearchRV;
+ public void setMainActive(boolean active) {
+ mCurrentRV = active ? mMainRV : mWorkRV;
+ mMainRVActive = active;
}
public int getMaxTranslation() {
@@ -334,15 +332,10 @@
mHeaderClip.top = clipTop;
// clipping on a draw might cause additional redraw
setClipBounds(mHeaderClip);
- if (mMainRV != null) {
- mMainRV.setClipBounds(mRVClip);
- }
+ mMainRV.setClipBounds(mRVClip);
if (mWorkRV != null) {
mWorkRV.setClipBounds(mRVClip);
}
- if (mSearchRV != null) {
- mSearchRV.setClipBounds(mRVClip);
- }
}
/**
@@ -409,8 +402,8 @@
}
private void calcOffset(Point p) {
- p.x = getLeft() - mCurrentRV.getLeft() - ((ViewGroup) mCurrentRV.getParent()).getLeft();
- p.y = getTop() - mCurrentRV.getTop() - ((ViewGroup) mCurrentRV.getParent()).getTop();
+ p.x = getLeft() - mCurrentRV.getLeft() - mParent.getLeft();
+ p.y = getTop() - mCurrentRV.getTop() - mParent.getTop();
}
public boolean hasVisibleContent() {
diff --git a/src/com/android/launcher3/allapps/SearchRecyclerView.java b/src/com/android/launcher3/allapps/SearchRecyclerView.java
deleted file mode 100644
index 435668a..0000000
--- a/src/com/android/launcher3/allapps/SearchRecyclerView.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.launcher3.allapps;
-
-import android.content.Context;
-import android.util.AttributeSet;
-
-/** A RecyclerView for AllApps Search results. */
-public class SearchRecyclerView extends AllAppsRecyclerView {
- private static final String TAG = "SearchRecyclerView";
-
- public SearchRecyclerView(Context context) {
- this(context, null);
- }
-
- public SearchRecyclerView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public SearchRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public SearchRecyclerView(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- @Override
- protected void updatePoolSize() {
- RecycledViewPool pool = getRecycledViewPool();
- pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_ICON, mNumAppsPerRow);
- // TODO(b/206905515): Add maxes for other View types.
- }
-
- @Override
- public boolean supportsFastScrolling() {
- return false;
- }
-}
diff --git a/src/com/android/launcher3/allapps/WorkEduCard.java b/src/com/android/launcher3/allapps/WorkEduCard.java
index fa9a8f6..c336496 100644
--- a/src/com/android/launcher3/allapps/WorkEduCard.java
+++ b/src/com/android/launcher3/allapps/WorkEduCard.java
@@ -71,7 +71,7 @@
super.onFinishInflate();
findViewById(R.id.action_btn).setOnClickListener(this);
MarginLayoutParams lp = ((MarginLayoutParams) findViewById(R.id.wrapper).getLayoutParams());
- lp.width = mActivityContext.getAppsView().getActiveAppsRecyclerView().getTabWidth();
+ lp.width = mActivityContext.getAppsView().getActiveRecyclerView().getTabWidth();
}
@Override
diff --git a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java
index 4bd106f..893e547 100644
--- a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java
+++ b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java
@@ -57,7 +57,7 @@
private final AllAppsSearchBarController mSearchBarController;
private final SpannableStringBuilder mSearchQueryBuilder;
- private AlphabeticalAppsList<?> mSearchResultsList;
+ private AlphabeticalAppsList<?> mApps;
private ActivityAllAppsContainerView<?> mAppsView;
// The amount of pixels to shift down and overlap with the rest of the content.
@@ -102,8 +102,8 @@
// Update the width to match the grid padding
DeviceProfile dp = mLauncher.getDeviceProfile();
int myRequestedWidth = getSize(widthMeasureSpec);
- int rowWidth = myRequestedWidth - mAppsView.getActiveAppsRecyclerView().getPaddingLeft()
- - mAppsView.getActiveAppsRecyclerView().getPaddingRight();
+ int rowWidth = myRequestedWidth - mAppsView.getActiveRecyclerView().getPaddingLeft()
+ - mAppsView.getActiveRecyclerView().getPaddingRight();
int cellWidth = DeviceProfile.calculateCellWidth(rowWidth,
dp.cellLayoutBorderSpacePx.x, dp.numShownHotseatIcons);
@@ -131,7 +131,7 @@
@Override
public void initializeSearch(ActivityAllAppsContainerView<?> appsView) {
- mSearchResultsList = appsView.getSearchResultList();
+ mApps = appsView.getApps();
mAppsView = appsView;
mSearchBarController.initialize(
new DefaultAppSearchAlgorithm(getContext()),
@@ -170,7 +170,7 @@
@Override
public void onSearchResult(String query, ArrayList<AdapterItem> items) {
if (items != null) {
- mSearchResultsList.setSearchResults(items);
+ mApps.setSearchResults(items);
notifyResultChanged();
mAppsView.setLastSearchQuery(query);
}
@@ -179,14 +179,14 @@
@Override
public void onAppendSearchResult(String query, ArrayList<AdapterItem> items) {
if (items != null) {
- mSearchResultsList.appendSearchResults(items);
+ mApps.appendSearchResults(items);
notifyResultChanged();
}
}
@Override
public void clearSearchResult() {
- if (mSearchResultsList.setSearchResults(null)) {
+ if (mApps.setSearchResults(null)) {
notifyResultChanged();
}
diff --git a/src/com/android/launcher3/testing/TestInformationHandler.java b/src/com/android/launcher3/testing/TestInformationHandler.java
index ee8f85d..a6b481a 100644
--- a/src/com/android/launcher3/testing/TestInformationHandler.java
+++ b/src/com/android/launcher3/testing/TestInformationHandler.java
@@ -108,7 +108,7 @@
case TestProtocol.REQUEST_APPS_LIST_SCROLL_Y: {
return getLauncherUIProperty(Bundle::putInt,
- l -> l.getAppsView().getActiveAppsRecyclerView().getCurrentScrollY());
+ l -> l.getAppsView().getActiveRecyclerView().getCurrentScrollY());
}
case TestProtocol.REQUEST_WIDGETS_SCROLL_Y: {
diff --git a/src/com/android/launcher3/views/RecyclerViewFastScroller.java b/src/com/android/launcher3/views/RecyclerViewFastScroller.java
index 5f6e453..a982786 100644
--- a/src/com/android/launcher3/views/RecyclerViewFastScroller.java
+++ b/src/com/android/launcher3/views/RecyclerViewFastScroller.java
@@ -43,7 +43,7 @@
import androidx.annotation.RequiresApi;
import androidx.recyclerview.widget.RecyclerView;
-import com.android.launcher3.FastScrollRecyclerView;
+import com.android.launcher3.BaseRecyclerView;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.graphics.FastScrollThumbDrawable;
@@ -127,7 +127,7 @@
private String mPopupSectionName;
private Insets mSystemGestureInsets;
- protected FastScrollRecyclerView mRv;
+ protected BaseRecyclerView mRv;
private RecyclerView.OnScrollListener mOnScrollListener;
private int mDownX;
@@ -172,7 +172,7 @@
ta.recycle();
}
- public void setRecyclerView(FastScrollRecyclerView rv, TextView popupView) {
+ public void setRecyclerView(BaseRecyclerView rv, TextView popupView) {
if (mRv != null && mOnScrollListener != null) {
mRv.removeOnScrollListener(mOnScrollListener);
}
diff --git a/src/com/android/launcher3/widget/picker/WidgetsRecyclerView.java b/src/com/android/launcher3/widget/picker/WidgetsRecyclerView.java
index ea62c17..f780f03 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsRecyclerView.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsRecyclerView.java
@@ -27,8 +27,8 @@
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener;
+import com.android.launcher3.BaseRecyclerView;
import com.android.launcher3.DeviceProfile;
-import com.android.launcher3.FastScrollRecyclerView;
import com.android.launcher3.R;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.widget.model.WidgetListSpaceEntry;
@@ -41,7 +41,7 @@
/**
* The widgets recycler view.
*/
-public class WidgetsRecyclerView extends FastScrollRecyclerView implements OnItemTouchListener {
+public class WidgetsRecyclerView extends BaseRecyclerView implements OnItemTouchListener {
private WidgetsListAdapter mAdapter;