Loading src/com/android/settings/search2/IntentSearchViewHolder.java +1 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class IntentSearchViewHolder extends SearchViewHolder { mMetricsFeatureProvider.action(v.getContext(), MetricsEvent.ACTION_CLICK_SETTINGS_SEARCH_RESULT, resultName, rank); mSearchFeatureProvider.searchResultClicked(fragment.mQuery, result); fragment.startActivity(intent); }); } Loading src/com/android/settings/search2/SearchFeatureProvider.java +26 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import android.view.Menu; import android.view.View; import com.android.settings.dashboard.SiteMapManager; import java.util.List; /** * FeatureProvider for Settings Search */ Loading Loading @@ -89,5 +91,29 @@ public interface SearchFeatureProvider { default void hideFeedbackButton() { } /** * Ranks search results based on the input query. * * @param query input user query * @param searchResults list of search results to be ranked */ default void rankSearchResults(String query, List<SearchResult> searchResults) { } /** * Notify that a search result is clicked. * * @param query input user query * @param searchResult clicked result */ default void searchResultClicked(String query, SearchResult searchResult) { } /** * @return true to enable search ranking. */ default boolean isSmartSearchRankingEnabled(Context context) { return false; } } src/com/android/settings/search2/SearchFragment.java +2 −2 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O super.onCreate(savedInstanceState); setHasOptionsMenu(true); final LoaderManager loaderManager = getLoaderManager(); mSearchAdapter = new SearchResultsAdapter(this); mSearchAdapter = new SearchResultsAdapter(this, mSearchFeatureProvider); mSavedQueryController = new SavedQueryController( getContext(), loaderManager, mSearchAdapter); mSearchFeatureProvider.initFeedbackButton(); Loading Loading @@ -251,7 +251,7 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O if (mUnfinishedLoadersCount.decrementAndGet() != 0) { return; } final int resultCount = mSearchAdapter.displaySearchResults(); final int resultCount = mSearchAdapter.displaySearchResults(mQuery); mNoResultsView.setVisibility(resultCount == 0 ? View.VISIBLE : View.GONE); mSearchFeatureProvider.showFeedbackButton(this, getView()); } Loading src/com/android/settings/search2/SearchResultsAdapter.java +12 −2 Original line number Diff line number Diff line Loading @@ -40,11 +40,14 @@ public class SearchResultsAdapter extends RecyclerView.Adapter<SearchViewHolder> private final List<SearchResult> mSearchResults; private final SearchFragment mFragment; private Map<String, List<? extends SearchResult>> mResultsMap; private final SearchFeatureProvider mSearchFeatureProvider; public SearchResultsAdapter(SearchFragment fragment) { public SearchResultsAdapter(SearchFragment fragment, SearchFeatureProvider searchFeatureProvider) { mFragment = fragment; mSearchResults = new ArrayList<>(); mResultsMap = new ArrayMap<>(); mSearchFeatureProvider = searchFeatureProvider; setHasStableIds(true); } Loading Loading @@ -119,9 +122,10 @@ public class SearchResultsAdapter extends RecyclerView.Adapter<SearchViewHolder> * Merge the results from each of the loaders into one list for the adapter. * Prioritizes results from the local database over installed apps. * * @param query user query corresponding to these results * @return Number of matched results */ public int displaySearchResults() { public int displaySearchResults(String query) { final List<? extends SearchResult> databaseResults = mResultsMap .get(DatabaseResultLoader.class.getName()); final List<? extends SearchResult> installedAppResults = mResultsMap Loading Loading @@ -151,6 +155,12 @@ public class SearchResultsAdapter extends RecyclerView.Adapter<SearchViewHolder> results.add(installedAppResults.get(appIndex++)); } if (mSearchFeatureProvider .isSmartSearchRankingEnabled(mFragment.getContext().getApplicationContext())) { // TODO: run this in parallel to loading the results if takes too long mSearchFeatureProvider.rankSearchResults(query, results); } mSearchResults.addAll(results); notifyDataSetChanged(); Loading src/com/android/settings/search2/SearchViewHolder.java +5 −2 Original line number Diff line number Diff line Loading @@ -40,11 +40,14 @@ public abstract class SearchViewHolder extends RecyclerView.ViewHolder { public final ImageView iconView; protected final MetricsFeatureProvider mMetricsFeatureProvider; protected final SearchFeatureProvider mSearchFeatureProvider; public SearchViewHolder(View view) { super(view); mMetricsFeatureProvider = FeatureFactory.getFactory(view.getContext()) .getMetricsFeatureProvider(); final FeatureFactory featureFactory = FeatureFactory .getFactory(view.getContext().getApplicationContext()); mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider(); mSearchFeatureProvider = featureFactory.getSearchFeatureProvider(); titleView = view.findViewById(android.R.id.title); summaryView = view.findViewById(android.R.id.summary); iconView = view.findViewById(android.R.id.icon); Loading Loading
src/com/android/settings/search2/IntentSearchViewHolder.java +1 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class IntentSearchViewHolder extends SearchViewHolder { mMetricsFeatureProvider.action(v.getContext(), MetricsEvent.ACTION_CLICK_SETTINGS_SEARCH_RESULT, resultName, rank); mSearchFeatureProvider.searchResultClicked(fragment.mQuery, result); fragment.startActivity(intent); }); } Loading
src/com/android/settings/search2/SearchFeatureProvider.java +26 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import android.view.Menu; import android.view.View; import com.android.settings.dashboard.SiteMapManager; import java.util.List; /** * FeatureProvider for Settings Search */ Loading Loading @@ -89,5 +91,29 @@ public interface SearchFeatureProvider { default void hideFeedbackButton() { } /** * Ranks search results based on the input query. * * @param query input user query * @param searchResults list of search results to be ranked */ default void rankSearchResults(String query, List<SearchResult> searchResults) { } /** * Notify that a search result is clicked. * * @param query input user query * @param searchResult clicked result */ default void searchResultClicked(String query, SearchResult searchResult) { } /** * @return true to enable search ranking. */ default boolean isSmartSearchRankingEnabled(Context context) { return false; } }
src/com/android/settings/search2/SearchFragment.java +2 −2 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O super.onCreate(savedInstanceState); setHasOptionsMenu(true); final LoaderManager loaderManager = getLoaderManager(); mSearchAdapter = new SearchResultsAdapter(this); mSearchAdapter = new SearchResultsAdapter(this, mSearchFeatureProvider); mSavedQueryController = new SavedQueryController( getContext(), loaderManager, mSearchAdapter); mSearchFeatureProvider.initFeedbackButton(); Loading Loading @@ -251,7 +251,7 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O if (mUnfinishedLoadersCount.decrementAndGet() != 0) { return; } final int resultCount = mSearchAdapter.displaySearchResults(); final int resultCount = mSearchAdapter.displaySearchResults(mQuery); mNoResultsView.setVisibility(resultCount == 0 ? View.VISIBLE : View.GONE); mSearchFeatureProvider.showFeedbackButton(this, getView()); } Loading
src/com/android/settings/search2/SearchResultsAdapter.java +12 −2 Original line number Diff line number Diff line Loading @@ -40,11 +40,14 @@ public class SearchResultsAdapter extends RecyclerView.Adapter<SearchViewHolder> private final List<SearchResult> mSearchResults; private final SearchFragment mFragment; private Map<String, List<? extends SearchResult>> mResultsMap; private final SearchFeatureProvider mSearchFeatureProvider; public SearchResultsAdapter(SearchFragment fragment) { public SearchResultsAdapter(SearchFragment fragment, SearchFeatureProvider searchFeatureProvider) { mFragment = fragment; mSearchResults = new ArrayList<>(); mResultsMap = new ArrayMap<>(); mSearchFeatureProvider = searchFeatureProvider; setHasStableIds(true); } Loading Loading @@ -119,9 +122,10 @@ public class SearchResultsAdapter extends RecyclerView.Adapter<SearchViewHolder> * Merge the results from each of the loaders into one list for the adapter. * Prioritizes results from the local database over installed apps. * * @param query user query corresponding to these results * @return Number of matched results */ public int displaySearchResults() { public int displaySearchResults(String query) { final List<? extends SearchResult> databaseResults = mResultsMap .get(DatabaseResultLoader.class.getName()); final List<? extends SearchResult> installedAppResults = mResultsMap Loading Loading @@ -151,6 +155,12 @@ public class SearchResultsAdapter extends RecyclerView.Adapter<SearchViewHolder> results.add(installedAppResults.get(appIndex++)); } if (mSearchFeatureProvider .isSmartSearchRankingEnabled(mFragment.getContext().getApplicationContext())) { // TODO: run this in parallel to loading the results if takes too long mSearchFeatureProvider.rankSearchResults(query, results); } mSearchResults.addAll(results); notifyDataSetChanged(); Loading
src/com/android/settings/search2/SearchViewHolder.java +5 −2 Original line number Diff line number Diff line Loading @@ -40,11 +40,14 @@ public abstract class SearchViewHolder extends RecyclerView.ViewHolder { public final ImageView iconView; protected final MetricsFeatureProvider mMetricsFeatureProvider; protected final SearchFeatureProvider mSearchFeatureProvider; public SearchViewHolder(View view) { super(view); mMetricsFeatureProvider = FeatureFactory.getFactory(view.getContext()) .getMetricsFeatureProvider(); final FeatureFactory featureFactory = FeatureFactory .getFactory(view.getContext().getApplicationContext()); mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider(); mSearchFeatureProvider = featureFactory.getSearchFeatureProvider(); titleView = view.findViewById(android.R.id.title); summaryView = view.findViewById(android.R.id.summary); iconView = view.findViewById(android.R.id.icon); Loading