From 161f96bc77805ed87f831b68e51fad61a23153bc Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Sun, 7 May 2017 11:56:00 -0700 Subject: [PATCH] Moving apps search related logic into a custom layout file This will allow derivative projects to easily change the search behavior by simply overriding the xml file Bug: 37616877 Change-Id: Ib8d6a2dab06819a52611e9a3d97c70c5a49bbf97 --- res/layout/all_apps.xml | 30 +-- res/layout/all_apps_search_container.xml | 42 ++++ res/layout/widgets_view.xml | 1 - res/values/config.xml | 4 + .../android/launcher3/BaseRecyclerView.java | 4 - src/com/android/launcher3/Launcher.java | 61 +----- .../android/launcher3/LauncherCallbacks.java | 10 - .../allapps/AllAppsContainerView.java | 149 ++----------- .../launcher3/allapps/AllAppsGridAdapter.java | 8 +- .../allapps/AllAppsRecyclerView.java | 13 +- .../allapps/DefaultAppSearchController.java | 26 --- .../launcher3/allapps/SearchUiManager.java | 58 ++++++ .../AllAppsSearchBarController.java | 39 +--- .../search/AppsSearchContainerLayout.java | 195 ++++++++++++++++++ .../DefaultAppSearchAlgorithm.java | 2 +- .../HeaderElevationController.java | 2 +- .../launcher3/testing/LauncherExtension.java | 11 - .../launcher3/util/PackageManagerHelper.java | 18 ++ .../DefaultAppSearchAlgorithmTest.java | 2 +- 19 files changed, 355 insertions(+), 320 deletions(-) create mode 100644 res/layout/all_apps_search_container.xml delete mode 100644 src/com/android/launcher3/allapps/DefaultAppSearchController.java create mode 100644 src/com/android/launcher3/allapps/SearchUiManager.java rename src/com/android/launcher3/allapps/{ => search}/AllAppsSearchBarController.java (85%) create mode 100644 src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java rename src/com/android/launcher3/allapps/{ => search}/DefaultAppSearchAlgorithm.java (99%) rename src/com/android/launcher3/allapps/{ => search}/HeaderElevationController.java (98%) rename tests/src/com/android/launcher3/allapps/{ => search}/DefaultAppSearchAlgorithmTest.java (98%) diff --git a/res/layout/all_apps.xml b/res/layout/all_apps.xml index d6bdac2f00..7d97f2564d 100644 --- a/res/layout/all_apps.xml +++ b/res/layout/all_apps.xml @@ -64,33 +64,9 @@ android:layout_alignParentEnd="true" android:layout_marginEnd="@dimen/container_fastscroll_popup_margin" /> - - - - + + + + + + \ No newline at end of file diff --git a/res/layout/widgets_view.xml b/res/layout/widgets_view.xml index 2f11c285d6..476901d1e6 100644 --- a/res/layout/widgets_view.xml +++ b/res/layout/widgets_view.xml @@ -51,7 +51,6 @@ diff --git a/res/values/config.xml b/res/values/config.xml index 751954fde6..71984d667d 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -13,6 +13,10 @@ easily override the app name without providing all translations --> @string/app_name + + market://search?c=apps + diff --git a/src/com/android/launcher3/BaseRecyclerView.java b/src/com/android/launcher3/BaseRecyclerView.java index 6fdf454505..c056336158 100644 --- a/src/com/android/launcher3/BaseRecyclerView.java +++ b/src/com/android/launcher3/BaseRecyclerView.java @@ -82,10 +82,6 @@ public abstract class BaseRecyclerView extends RecyclerView } } - public void reset() { - mScrollbar.reattachThumbToScroll(); - } - @Override protected void onFinishInflate() { super.onFinishInflate(); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index d0c01f4742..c96c2a7b9a 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -85,7 +85,6 @@ import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.accessibility.LauncherAccessibilityDelegate; import com.android.launcher3.allapps.AllAppsContainerView; import com.android.launcher3.allapps.AllAppsTransitionController; -import com.android.launcher3.allapps.DefaultAppSearchController; import com.android.launcher3.anim.AnimationLayerSet; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.LauncherAppsCompat; @@ -560,47 +559,6 @@ public class Launcher extends BaseActivity public boolean setLauncherCallbacks(LauncherCallbacks callbacks) { mLauncherCallbacks = callbacks; - mLauncherCallbacks.setLauncherSearchCallback(new Launcher.LauncherSearchCallbacks() { - private boolean mWorkspaceImportanceStored = false; - private boolean mHotseatImportanceStored = false; - private int mWorkspaceImportanceForAccessibility = - View.IMPORTANT_FOR_ACCESSIBILITY_AUTO; - private int mHotseatImportanceForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_AUTO; - - @Override - public void onSearchOverlayOpened() { - if (mWorkspaceImportanceStored || mHotseatImportanceStored) { - return; - } - // The underlying workspace and hotseat are temporarily suppressed by the search - // overlay. So they shouldn't be accessible. - if (mWorkspace != null) { - mWorkspaceImportanceForAccessibility = - mWorkspace.getImportantForAccessibility(); - mWorkspace.setImportantForAccessibility( - View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS); - mWorkspaceImportanceStored = true; - } - if (mHotseat != null) { - mHotseatImportanceForAccessibility = mHotseat.getImportantForAccessibility(); - mHotseat.setImportantForAccessibility( - View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS); - mHotseatImportanceStored = true; - } - } - - @Override - public void onSearchOverlayClosed() { - if (mWorkspaceImportanceStored && mWorkspace != null) { - mWorkspace.setImportantForAccessibility(mWorkspaceImportanceForAccessibility); - } - if (mHotseatImportanceStored && mHotseat != null) { - mHotseat.setImportantForAccessibility(mHotseatImportanceForAccessibility); - } - mWorkspaceImportanceStored = false; - mHotseatImportanceStored = false; - } - }); return true; } @@ -1140,18 +1098,6 @@ public class Launcher extends BaseActivity public void setOverlayCallbacks(LauncherOverlayCallbacks callbacks); } - public interface LauncherSearchCallbacks { - /** - * Called when the search overlay is shown. - */ - public void onSearchOverlayOpened(); - - /** - * Called when the search overlay is dismissed. - */ - public void onSearchOverlayClosed(); - } - public interface LauncherOverlayCallbacks { public void onScrollChanged(float progress); } @@ -1344,11 +1290,6 @@ public class Launcher extends BaseActivity // Setup Apps and Widgets mAppsView = (AllAppsContainerView) findViewById(R.id.apps_view); mWidgetsView = (WidgetsContainerView) findViewById(R.id.widgets_view); - if (mLauncherCallbacks != null && mLauncherCallbacks.getAllAppsSearchBarController() != null) { - mAppsView.setSearchBarController(mLauncherCallbacks.getAllAppsSearchBarController()); - } else { - mAppsView.setSearchBarController(new DefaultAppSearchController()); - } // Setup the drag controller (drop targets have to be added in reverse order in priority) mDragController.setMoveTarget(mWorkspace); @@ -1777,7 +1718,7 @@ public class Launcher extends BaseActivity // Reset the apps view if (!alreadyOnHome && mAppsView != null) { - mAppsView.scrollToTop(); + mAppsView.reset(); } // Reset the widgets view diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java index 32f179f467..ea4aeb9297 100644 --- a/src/com/android/launcher3/LauncherCallbacks.java +++ b/src/com/android/launcher3/LauncherCallbacks.java @@ -21,7 +21,6 @@ import android.os.Bundle; import android.view.Menu; import android.view.View; -import com.android.launcher3.allapps.AllAppsSearchBarController; import com.android.launcher3.util.ComponentKey; import java.io.FileDescriptor; @@ -92,20 +91,11 @@ public interface LauncherCallbacks { */ boolean shouldMoveToDefaultScreenOnHomeIntent(); boolean hasSettings(); - AllAppsSearchBarController getAllAppsSearchBarController(); List getPredictedApps(); int SEARCH_BAR_HEIGHT_NORMAL = 0, SEARCH_BAR_HEIGHT_TALL = 1; /** Must return one of {@link #SEARCH_BAR_HEIGHT_NORMAL} or {@link #SEARCH_BAR_HEIGHT_TALL} */ int getSearchBarHeight(); - /** - * Sets the callbacks to allow reacting the actions of search overlays of the launcher. - * - * @param callbacks A set of callbacks to the Launcher, is actually a LauncherSearchCallback, - * but for implementation purposes is passed around as an object. - */ - void setLauncherSearchCallback(Object callbacks); - boolean shouldShowDiscoveryBounce(); void onExtractedColorsChanged(); diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 7be8e8f0ea..0ea61f4308 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -20,15 +20,9 @@ import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.InsetDrawable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.text.Selection; -import android.text.Spannable; -import android.text.SpannableString; import android.text.SpannableStringBuilder; -import android.text.TextUtils; -import android.text.method.TextKeyListener; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; @@ -42,7 +36,6 @@ import com.android.launcher3.DeleteDropTarget; import com.android.launcher3.DeviceProfile; import com.android.launcher3.DragSource; import com.android.launcher3.DropTarget; -import com.android.launcher3.ExtendedEditText; import com.android.launcher3.Insettable; import com.android.launcher3.ItemInfo; import com.android.launcher3.Launcher; @@ -50,18 +43,14 @@ import com.android.launcher3.PromiseAppInfo; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.config.FeatureFlags; -import com.android.launcher3.discovery.AppDiscoveryItem; -import com.android.launcher3.discovery.AppDiscoveryUpdateState; import com.android.launcher3.dragndrop.DragController; import com.android.launcher3.dragndrop.DragOptions; import com.android.launcher3.folder.Folder; -import com.android.launcher3.graphics.TintedDrawableSpan; import com.android.launcher3.keyboard.FocusedItemDecorator; import com.android.launcher3.userevent.nano.LauncherLogProto.Target; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.PackageUserKey; -import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -69,7 +58,7 @@ import java.util.Set; * The all apps view container. */ public class AllAppsContainerView extends BaseContainerView implements DragSource, - View.OnLongClickListener, AllAppsSearchBarController.Callbacks, Insettable { + View.OnLongClickListener, Insettable { private final Launcher mLauncher; private final AlphabeticalAppsList mApps; @@ -77,12 +66,8 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc private final RecyclerView.LayoutManager mLayoutManager; private AllAppsRecyclerView mAppsRecyclerView; - private AllAppsSearchBarController mSearchBarController; - + private SearchUiManager mSearchUiManager; private View mSearchContainer; - private int mSearchContainerMinHeight; - private ExtendedEditText mSearchInput; - private HeaderElevationController mElevationController; private SpannableStringBuilder mSearchQueryBuilder = null; @@ -106,8 +91,6 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc mApps.setAdapter(mAdapter); mLayoutManager = mAdapter.getLayoutManager(); mSearchQueryBuilder = new SpannableStringBuilder(); - mSearchContainerMinHeight - = getResources().getDimensionPixelSize(R.dimen.all_apps_search_bar_height); Selection.setSelection(mSearchQueryBuilder, 0); } @@ -149,7 +132,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc */ public void addApps(List apps) { mApps.addApps(apps); - mSearchBarController.refreshSearchResult(); + mSearchUiManager.refreshSearchResult(); } /** @@ -157,7 +140,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc */ public void updateApps(List apps) { mApps.updateApps(apps); - mSearchBarController.refreshSearchResult(); + mSearchUiManager.refreshSearchResult(); } public void updatePromiseAppProgress(PromiseAppInfo app) { @@ -176,34 +159,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc */ public void removeApps(List apps) { mApps.removeApps(apps); - mSearchBarController.refreshSearchResult(); - } - - public void setSearchBarVisible(boolean visible) { - if (visible) { - mSearchBarController.setVisibility(View.VISIBLE); - } else { - mSearchBarController.setVisibility(View.INVISIBLE); - } - } - - /** - * Sets the search bar that shows above the a-z list. - */ - public void setSearchBarController(AllAppsSearchBarController searchController) { - if (mSearchBarController != null) { - throw new RuntimeException("Expected search bar controller to only be set once"); - } - mSearchBarController = searchController; - mSearchBarController.initialize(mApps, mSearchInput, mLauncher, this); - mAdapter.setSearchController(mSearchBarController); - } - - /** - * Scrolls this list view to the top. - */ - public void scrollToTop() { - mAppsRecyclerView.scrollToTop(); + mSearchUiManager.refreshSearchResult(); } /** @@ -238,9 +194,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc * Focuses the search field and begins an app search. */ public void startAppsSearch() { - if (mSearchBarController != null) { - mSearchBarController.focusSearchField(); - } + mSearchUiManager.startAppsSearch(); } /** @@ -248,9 +202,8 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc */ public void reset() { // Reset the search bar and base recycler view after transitioning home - scrollToTop(); - mSearchBarController.reset(); - mAppsRecyclerView.reset(); + mAppsRecyclerView.scrollToTop(); + mSearchUiManager.reset(); } @Override @@ -268,28 +221,17 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc } }); - mSearchContainer = findViewById(R.id.search_container); - mSearchInput = (ExtendedEditText) findViewById(R.id.search_box_input); - - // Update the hint to contain the icon. - // Prefix the original hint with two spaces. The first space gets replaced by the icon - // using span. The second space is used for a singe space character between the hint - // and the icon. - SpannableString spanned = new SpannableString(" " + mSearchInput.getHint()); - spanned.setSpan(new TintedDrawableSpan(getContext(), R.drawable.ic_allapps_search), - 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); - mSearchInput.setHint(spanned); - - mElevationController = new HeaderElevationController(mSearchContainer); - // Load the all apps recycler view mAppsRecyclerView = (AllAppsRecyclerView) findViewById(R.id.apps_list_view); mAppsRecyclerView.setApps(mApps); mAppsRecyclerView.setLayoutManager(mLayoutManager); mAppsRecyclerView.setAdapter(mAdapter); mAppsRecyclerView.setHasFixedSize(true); - mAppsRecyclerView.addOnScrollListener(mElevationController); - mAppsRecyclerView.setElevationController(mElevationController); + + mSearchContainer = findViewById(R.id.search_container); + mSearchUiManager = (SearchUiManager) mSearchContainer; + mSearchUiManager.initialize(mApps, mAppsRecyclerView); + FocusedItemDecorator focusedItemDecorator = new FocusedItemDecorator(mAppsRecyclerView); mAppsRecyclerView.addItemDecoration(focusedItemDecorator); @@ -308,13 +250,12 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc return mAppsRecyclerView; } - @Override - public void onBoundsChanged(Rect newBounds) { } - @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { DeviceProfile grid = mLauncher.getDeviceProfile(); + // Update the number of items in the grid before we measure the view grid.updateAppsViewNumCols(); + if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP) { if (mNumAppsPerRow != grid.inv.numColumns || mNumPredictedAppsPerRow != grid.inv.numColumns) { @@ -325,22 +266,11 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc mAdapter.setNumAppsPerRow(mNumAppsPerRow); mApps.setNumAppsPerRow(mNumAppsPerRow, mNumPredictedAppsPerRow); } - if (!grid.isVerticalBarLayout()) { - MarginLayoutParams searchContainerLp = - (MarginLayoutParams) mSearchContainer.getLayoutParams(); - - searchContainerLp.height = mLauncher.getDragLayer().getInsets().top - + mSearchContainerMinHeight; - mSearchContainer.setLayoutParams(searchContainerLp); - } super.onMeasure(widthMeasureSpec, heightMeasureSpec); return; } // --- remove START when {@code FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP} is enabled. --- - - // Update the number of items in the grid before we measure the view - grid.updateAppsViewNumCols(); if (mNumAppsPerRow != grid.allAppsNumCols || mNumPredictedAppsPerRow != grid.allAppsNumPredictiveCols) { mNumAppsPerRow = grid.allAppsNumCols; @@ -357,22 +287,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc @Override public boolean dispatchKeyEvent(KeyEvent event) { - // Determine if the key event was actual text, if so, focus the search bar and then dispatch - // the key normally so that it can process this key event - if (!mSearchBarController.isSearchFieldFocused() && - event.getAction() == KeyEvent.ACTION_DOWN) { - final int unicodeChar = event.getUnicodeChar(); - final boolean isKeyNotWhitespace = unicodeChar > 0 && - !Character.isWhitespace(unicodeChar) && !Character.isSpaceChar(unicodeChar); - if (isKeyNotWhitespace) { - boolean gotKey = TextKeyListener.getInstance().onKeyDown(this, mSearchQueryBuilder, - event.getKeyCode(), event); - if (gotKey && mSearchQueryBuilder.length() > 0) { - mSearchBarController.focusSearchField(); - } - } - } - + mSearchUiManager.preDispatchKeyEvent(event); return super.dispatchKeyEvent(event); } @@ -439,43 +354,13 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc } } - @Override - public void onSearchResult(String query, ArrayList apps) { - if (apps != null) { - mApps.setOrderedFilter(apps); - mAppsRecyclerView.onSearchResultsChanged(); - mAdapter.setLastSearchQuery(query); - } - } - - @Override - public void onAppDiscoverySearchUpdate(@Nullable AppDiscoveryItem app, - @NonNull AppDiscoveryUpdateState state) { - if (!mLauncher.isDestroyed()) { - mApps.onAppDiscoverySearchUpdate(app, state); - mAppsRecyclerView.onSearchResultsChanged(); - } - } - - @Override - public void clearSearchResult() { - if (mApps.setOrderedFilter(null)) { - mAppsRecyclerView.onSearchResultsChanged(); - } - - // Clear the search query - mSearchQueryBuilder.clear(); - mSearchQueryBuilder.clearSpans(); - Selection.setSelection(mSearchQueryBuilder, 0); - } - @Override public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { targetParent.containerType = mAppsRecyclerView.getContainerType(v); } public boolean shouldRestoreImeState() { - return !TextUtils.isEmpty(mSearchInput.getText()); + return mSearchUiManager.shouldRestoreImeState(); } @Override diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index 938e84ed09..e126102579 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -40,6 +40,7 @@ import com.android.launcher3.R; import com.android.launcher3.allapps.AlphabeticalAppsList.AdapterItem; import com.android.launcher3.discovery.AppDiscoveryAppInfo; import com.android.launcher3.discovery.AppDiscoveryItemView; +import com.android.launcher3.util.PackageManagerHelper; import java.util.List; @@ -199,7 +200,6 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter 0 && + !Character.isWhitespace(unicodeChar) && !Character.isSpaceChar(unicodeChar); + if (isKeyNotWhitespace) { + boolean gotKey = TextKeyListener.getInstance().onKeyDown(this, mSearchQueryBuilder, + event.getKeyCode(), event); + if (gotKey && mSearchQueryBuilder.length() > 0) { + mSearchBarController.focusSearchField(); + } + } + } + } + + @Override + public boolean shouldRestoreImeState() { + return !TextUtils.isEmpty(mSearchInput.getText()); + } + + @Override + public void startAppsSearch() { + if (mApps != null) { + mSearchBarController.focusSearchField(); + } + } + + @Override + public void onSearchResult(String query, ArrayList apps) { + if (apps != null) { + mApps.setOrderedFilter(apps); + notifyResultChanged(); + mAdapter.setLastSearchQuery(query); + } + } + + @Override + public void clearSearchResult() { + if (mApps.setOrderedFilter(null)) { + notifyResultChanged(); + } + + // Clear the search query + mSearchQueryBuilder.clear(); + mSearchQueryBuilder.clearSpans(); + Selection.setSelection(mSearchQueryBuilder, 0); + } + + @Override + public void onAppDiscoverySearchUpdate( + @Nullable AppDiscoveryItem app, @NonNull AppDiscoveryUpdateState state) { + if (!mLauncher.isDestroyed()) { + mApps.onAppDiscoverySearchUpdate(app, state); + notifyResultChanged(); + } + } + + private void notifyResultChanged() { + mElevationController.reset(); + mAppsRecyclerView.onSearchResultsChanged(); + } +} diff --git a/src/com/android/launcher3/allapps/DefaultAppSearchAlgorithm.java b/src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithm.java similarity index 99% rename from src/com/android/launcher3/allapps/DefaultAppSearchAlgorithm.java rename to src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithm.java index 06cf9aa71d..457b454ef5 100644 --- a/src/com/android/launcher3/allapps/DefaultAppSearchAlgorithm.java +++ b/src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithm.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.launcher3.allapps; +package com.android.launcher3.allapps.search; import android.os.Handler; diff --git a/src/com/android/launcher3/allapps/HeaderElevationController.java b/src/com/android/launcher3/allapps/search/HeaderElevationController.java similarity index 98% rename from src/com/android/launcher3/allapps/HeaderElevationController.java rename to src/com/android/launcher3/allapps/search/HeaderElevationController.java index b167fed335..ab4e88fc8b 100644 --- a/src/com/android/launcher3/allapps/HeaderElevationController.java +++ b/src/com/android/launcher3/allapps/search/HeaderElevationController.java @@ -1,4 +1,4 @@ -package com.android.launcher3.allapps; +package com.android.launcher3.allapps.search; import android.content.res.Resources; import android.graphics.Outline; diff --git a/src/com/android/launcher3/testing/LauncherExtension.java b/src/com/android/launcher3/testing/LauncherExtension.java index 031da2061c..36df22cd58 100644 --- a/src/com/android/launcher3/testing/LauncherExtension.java +++ b/src/com/android/launcher3/testing/LauncherExtension.java @@ -10,7 +10,6 @@ import android.widget.FrameLayout; import com.android.launcher3.AppInfo; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherCallbacks; -import com.android.launcher3.allapps.AllAppsSearchBarController; import com.android.launcher3.util.ComponentKey; import java.io.FileDescriptor; @@ -197,11 +196,6 @@ public class LauncherExtension extends Launcher { return false; } - @Override - public AllAppsSearchBarController getAllAppsSearchBarController() { - return null; - } - @Override public List getPredictedApps() { // To debug app predictions, enable AlphabeticalAppsList#DEBUG_PREDICTIONS @@ -213,11 +207,6 @@ public class LauncherExtension extends Launcher { return SEARCH_BAR_HEIGHT_NORMAL; } - @Override - public void setLauncherSearchCallback(Object callbacks) { - // Do nothing - } - @Override public void onAttachedToWindow() { } diff --git a/src/com/android/launcher3/util/PackageManagerHelper.java b/src/com/android/launcher3/util/PackageManagerHelper.java index e12b2d4f18..13034dd9ec 100644 --- a/src/com/android/launcher3/util/PackageManagerHelper.java +++ b/src/com/android/launcher3/util/PackageManagerHelper.java @@ -30,9 +30,11 @@ import android.os.UserHandle; import android.text.TextUtils; import com.android.launcher3.AppInfo; +import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.compat.LauncherAppsCompat; +import java.net.URISyntaxException; import java.util.List; /** @@ -149,4 +151,20 @@ public class PackageManagerHelper { .appendQueryParameter("id", packageName) .build()); } + + /** + * Creates a new market search intent. + */ + public static Intent getMarketSearchIntent(Context context, String query) { + try { + Intent intent = Intent.parseUri(context.getString(R.string.market_search_intent), 0); + if (!TextUtils.isEmpty(query)) { + intent.setData( + intent.getData().buildUpon().appendQueryParameter("q", query).build()); + } + return intent; + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } } diff --git a/tests/src/com/android/launcher3/allapps/DefaultAppSearchAlgorithmTest.java b/tests/src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithmTest.java similarity index 98% rename from tests/src/com/android/launcher3/allapps/DefaultAppSearchAlgorithmTest.java rename to tests/src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithmTest.java index 18570de5b3..20b23b070f 100644 --- a/tests/src/com/android/launcher3/allapps/DefaultAppSearchAlgorithmTest.java +++ b/tests/src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithmTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.launcher3.allapps; +package com.android.launcher3.allapps.search; import android.content.ComponentName; import android.test.InstrumentationTestCase;