Add All Apps search delegate for inflating search box.

Test: Manual
Bug: 216683257
Flag: not needed
Change-Id: I2e1d9b0abf6d370d7ff6d6af2bab002b87330d86
This commit is contained in:
Brian Isganitis
2023-05-15 21:31:13 +00:00
parent 1a5ca93835
commit 1fb10991d0
2 changed files with 85 additions and 9 deletions
@@ -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<T extends Context & ActivityContext>
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<T extends Context & ActivityContext>
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<T extends Context & ActivityContext>
* 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<T extends Context & ActivityContext>
mSearchContainer = inflateSearchBox();
addView(mSearchContainer);
mSearchUiManager = (SearchUiManager) mSearchContainer;
mSearchUiDelegate.onInitializeSearchBox();
}
@Override
@@ -341,6 +349,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
*/
public void setSearchResults(ArrayList<AdapterItem> results, int searchResultCode) {
setSearchResults(results);
mSearchUiDelegate.onSearchResultsChanged(results, searchResultCode);
}
private void animateToSearchState(boolean goingToSearch) {
@@ -788,12 +797,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
* 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<T extends Context & ActivityContext>
}
public LayoutInflater getLayoutInflater() {
return LayoutInflater.from(getContext());
return mSearchUiDelegate.getLayoutInflater();
}
@Override
@@ -1306,6 +1310,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
protected void onInitializeRecyclerView(RecyclerView rv) {
rv.addOnScrollListener(mScrollListener);
mSearchUiDelegate.onInitializeRecyclerView(rv);
}
/** Returns the instance of @{code SearchTransitionController}. */
@@ -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<AdapterItem> 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);
}
}