diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java index d4140d851c..898009dead 100644 --- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java @@ -70,7 +70,7 @@ import com.android.launcher3.InsettableFrameLayout; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.allapps.BaseAllAppsAdapter.AdapterItem; -import com.android.launcher3.allapps.search.DefaultSearchAdapterProvider; +import com.android.launcher3.allapps.search.AllAppsSearchUiDelegate; import com.android.launcher3.allapps.search.SearchAdapterProvider; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.keyboard.FocusedItemDecorator; @@ -132,6 +132,7 @@ public class ActivityAllAppsContainerView protected final Point mFastScrollerOffset = new Point(); protected final int mScrimColor; protected final float mHeaderThreshold; + protected final AllAppsSearchUiDelegate mSearchUiDelegate; // Used to animate Search results out and A-Z apps in, or vice-versa. private final SearchTransitionController mSearchTransitionController; @@ -217,11 +218,17 @@ public class ActivityAllAppsContainerView getActiveRecyclerView().requestFocus(); } }); + mSearchUiDelegate = createSearchUiDelegate(); initContent(); mSearchTransitionController = new SearchTransitionController(this); } + /** Creates the delegate for initializing search. */ + protected AllAppsSearchUiDelegate createSearchUiDelegate() { + return new AllAppsSearchUiDelegate(this); + } + /** * Initializes the view hierarchy and internal variables. Any initialization which actually uses * these members should be done in {@link #onFinishInflate()}. @@ -231,7 +238,7 @@ public class ActivityAllAppsContainerView * onFinishInflate -> onPostCreate */ protected void initContent() { - mMainAdapterProvider = createMainAdapterProvider(); + mMainAdapterProvider = mSearchUiDelegate.createMainAdapterProvider(); mAH.set(AdapterHolder.MAIN, new AdapterHolder(AdapterHolder.MAIN, new AlphabeticalAppsList<>(mActivityContext, mAllAppsStore, null))); @@ -252,6 +259,7 @@ public class ActivityAllAppsContainerView mSearchContainer = inflateSearchBox(); addView(mSearchContainer); mSearchUiManager = (SearchUiManager) mSearchContainer; + mSearchUiDelegate.onInitializeSearchBox(); } @Override @@ -341,6 +349,7 @@ public class ActivityAllAppsContainerView */ public void setSearchResults(ArrayList results, int searchResultCode) { setSearchResults(results); + mSearchUiDelegate.onSearchResultsChanged(results, searchResultCode); } private void animateToSearchState(boolean goingToSearch) { @@ -788,12 +797,7 @@ public class ActivityAllAppsContainerView * Inflates the search box */ protected View inflateSearchBox() { - return getLayoutInflater().inflate(R.layout.search_container_all_apps, this, false); - } - - /** Creates the adapter provider for the main section. */ - protected SearchAdapterProvider createMainAdapterProvider() { - return new DefaultSearchAdapterProvider(mActivityContext); + return mSearchUiDelegate.inflateSearchBox(); } /** The adapter provider for the main section. */ @@ -998,7 +1002,7 @@ public class ActivityAllAppsContainerView } public LayoutInflater getLayoutInflater() { - return LayoutInflater.from(getContext()); + return mSearchUiDelegate.getLayoutInflater(); } @Override @@ -1306,6 +1310,7 @@ public class ActivityAllAppsContainerView protected void onInitializeRecyclerView(RecyclerView rv) { rv.addOnScrollListener(mScrollListener); + mSearchUiDelegate.onInitializeRecyclerView(rv); } /** Returns the instance of @{code SearchTransitionController}. */ diff --git a/src/com/android/launcher3/allapps/search/AllAppsSearchUiDelegate.java b/src/com/android/launcher3/allapps/search/AllAppsSearchUiDelegate.java new file mode 100644 index 0000000000..abec16e45c --- /dev/null +++ b/src/com/android/launcher3/allapps/search/AllAppsSearchUiDelegate.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2023 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.search; + +import android.view.LayoutInflater; +import android.view.View; + +import androidx.recyclerview.widget.RecyclerView; + +import com.android.launcher3.R; +import com.android.launcher3.allapps.ActivityAllAppsContainerView; +import com.android.launcher3.allapps.BaseAllAppsAdapter.AdapterItem; +import com.android.launcher3.views.ActivityContext; + +import java.util.List; + +/** Initializes the search box and its interactions with All Apps. */ +public class AllAppsSearchUiDelegate { + + protected final ActivityAllAppsContainerView mAppsView; + protected final ActivityContext mActivityContext; + + public AllAppsSearchUiDelegate(ActivityAllAppsContainerView appsView) { + mAppsView = appsView; + mActivityContext = ActivityContext.lookupContext(mAppsView.getContext()); + } + + /** Invoked when an All Apps {@link RecyclerView} is initialized. */ + public void onInitializeRecyclerView(RecyclerView rv) { + // Do nothing. + } + + /** Invoked when search results are updated in All Apps. */ + public void onSearchResultsChanged(List results, int searchResultCode) { + // Do nothing. + } + + /** Invoked when the search box has been added to All Apps. */ + public void onInitializeSearchBox() { + // Do nothing. + } + + /** The layout inflater for All Apps and search UI. */ + public LayoutInflater getLayoutInflater() { + return LayoutInflater.from(mAppsView.getContext()); + } + + /** Inflate the search box for All Apps. */ + public View inflateSearchBox() { + return getLayoutInflater().inflate(R.layout.search_container_all_apps, mAppsView, false); + } + + /** Creates the adapter provider for the main section. */ + public SearchAdapterProvider createMainAdapterProvider() { + return new DefaultSearchAdapterProvider(mActivityContext); + } +}