summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2021-03-02 15:49:45 -0800
committerXin Li <delphij@google.com>2021-03-03 09:12:21 -0800
commite4205181609ddd13b36e4b75d249d4590040bfc1 (patch)
tree40ed1231f5ef73b73ea2015807683e4e76004b11
parent6fdb5be2c27195ea57751baef85b20ba8a75ea2a (diff)
parent0cdf233f701bcd061181906f27b17a3a1641831e (diff)
downloadSettingsIntelligence-e4205181609ddd13b36e4b75d249d4590040bfc1.tar.gz
Bug: 180401296 Merged-In: I01a2369e2d88a8ac1b6879653f57c7c27e84cfbc Change-Id: Ic82b77269ab5308e6b654b083c4a936058c682d0
-rw-r--r--src/com/android/settings/intelligence/search/car/CarIntentSearchViewHolder.java25
-rw-r--r--src/com/android/settings/intelligence/search/car/CarSearchFragment.java91
-rw-r--r--src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryController.java32
-rw-r--r--src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryViewHolder.java2
4 files changed, 112 insertions, 38 deletions
diff --git a/src/com/android/settings/intelligence/search/car/CarIntentSearchViewHolder.java b/src/com/android/settings/intelligence/search/car/CarIntentSearchViewHolder.java
index bc3ef60..a8353cd 100644
--- a/src/com/android/settings/intelligence/search/car/CarIntentSearchViewHolder.java
+++ b/src/com/android/settings/intelligence/search/car/CarIntentSearchViewHolder.java
@@ -16,25 +16,18 @@
package com.android.settings.intelligence.search.car;
-import android.content.Intent;
import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
import android.text.TextUtils;
-import android.util.Log;
import android.view.View;
import com.android.settings.intelligence.R;
import com.android.settings.intelligence.search.AppSearchResult;
import com.android.settings.intelligence.search.SearchResult;
-import java.util.List;
-
/**
* ViewHolder for intent based search results.
*/
public class CarIntentSearchViewHolder extends CarSearchViewHolder {
- private static final String TAG = "CarIntentSearchViewHolder";
- private static final int REQUEST_CODE_NO_OP = 0;
public CarIntentSearchViewHolder(View view) {
super(view);
@@ -52,23 +45,7 @@ public class CarIntentSearchViewHolder extends CarSearchViewHolder {
}
bindBreadcrumbView(result);
- itemView.setOnClickListener(v -> {
- fragment.onSearchResultClicked(/* resultViewHolder= */ this, result);
- Intent intent = result.payload.getIntent();
- if (result instanceof AppSearchResult) {
- AppSearchResult appResult = (AppSearchResult) result;
- fragment.getActivity().startActivity(intent);
- } else {
- PackageManager pm = fragment.getActivity().getPackageManager();
- List<ResolveInfo> info = pm.queryIntentActivities(intent, /* flags= */ 0);
- if (info != null && !info.isEmpty()) {
- fragment.startActivityForResult(intent, REQUEST_CODE_NO_OP);
- } else {
- Log.e(TAG, "Cannot launch search result, title: "
- + result.title + ", " + intent);
- }
- }
- });
+ itemView.setOnClickListener(v -> fragment.onSearchResultClicked(result));
}
private void bindBreadcrumbView(SearchResult result) {
diff --git a/src/com/android/settings/intelligence/search/car/CarSearchFragment.java b/src/com/android/settings/intelligence/search/car/CarSearchFragment.java
index 0c49b11..702be42 100644
--- a/src/com/android/settings/intelligence/search/car/CarSearchFragment.java
+++ b/src/com/android/settings/intelligence/search/car/CarSearchFragment.java
@@ -18,11 +18,19 @@ package com.android.settings.intelligence.search.car;
import static com.android.car.ui.core.CarUi.requireInsets;
import static com.android.car.ui.core.CarUi.requireToolbar;
+import static com.android.car.ui.utils.CarUiUtils.drawableToBitmap;
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
+import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
@@ -31,12 +39,15 @@ import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.RecyclerView;
+import com.android.car.ui.imewidescreen.CarUiImeSearchListItem;
import com.android.car.ui.preference.PreferenceFragment;
+import com.android.car.ui.recyclerview.CarUiContentListItem;
import com.android.car.ui.toolbar.MenuItem;
import com.android.car.ui.toolbar.Toolbar;
import com.android.car.ui.toolbar.ToolbarController;
import com.android.settings.intelligence.R;
import com.android.settings.intelligence.overlay.FeatureFactory;
+import com.android.settings.intelligence.search.AppSearchResult;
import com.android.settings.intelligence.search.SearchCommon;
import com.android.settings.intelligence.search.SearchFeatureProvider;
import com.android.settings.intelligence.search.SearchResult;
@@ -44,6 +55,7 @@ import com.android.settings.intelligence.search.indexing.IndexingCallback;
import com.android.settings.intelligence.search.savedqueries.car.CarSavedQueryController;
import com.android.settings.intelligence.search.savedqueries.car.CarSavedQueryViewHolder;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -51,6 +63,8 @@ import java.util.List;
*/
public class CarSearchFragment extends PreferenceFragment implements
LoaderManager.LoaderCallbacks<List<? extends SearchResult>>, IndexingCallback {
+ private static final String TAG = "CarSearchFragment";
+ private static final int REQUEST_CODE_NO_OP = 0;
private SearchFeatureProvider mSearchFeatureProvider;
@@ -106,15 +120,15 @@ public class CarSearchFragment extends PreferenceFragment implements
LoaderManager loaderManager = getLoaderManager();
mSearchAdapter = new CarSearchResultsAdapter(/* fragment= */ this);
+ mToolbar = getToolbar();
mSavedQueryController = new CarSavedQueryController(
- getContext(), loaderManager, mSearchAdapter);
+ getContext(), loaderManager, mSearchAdapter, mToolbar, this);
mSearchFeatureProvider.updateIndexAsync(getContext(), /* indexingCallback= */ this);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- mToolbar = getToolbar();
if (mToolbar != null) {
List<MenuItem> items = getToolbarMenuItems();
mToolbar.setTitle(getPreferenceScreen().getTitle());
@@ -181,20 +195,12 @@ public class CarSearchFragment extends PreferenceFragment implements
/**
* Gets called when a saved query is clicked.
*/
- public void onSavedQueryClicked(CarSavedQueryViewHolder vh, CharSequence query) {
+ public void onSavedQueryClicked(CharSequence query) {
String queryString = query.toString();
mToolbar.setSearchQuery(queryString);
onQueryTextChange(queryString);
}
- /**
- * Gets called when a search result is clicked.
- */
- public void onSearchResultClicked(CarSearchViewHolder resultViewHolder, SearchResult result) {
- mSearchFeatureProvider.searchResultClicked(getContext(), mQuery, result);
- mSavedQueryController.saveQuery(mQuery);
- }
-
@Override
public Loader<List<? extends SearchResult>> onCreateLoader(int id, Bundle args) {
Activity activity = getActivity();
@@ -208,10 +214,73 @@ public class CarSearchFragment extends PreferenceFragment implements
@Override
public void onLoadFinished(Loader<List<? extends SearchResult>> loader,
List<? extends SearchResult> data) {
+
+ if (mToolbar.canShowSearchResultItems()) {
+ List<CarUiImeSearchListItem> searchItems = new ArrayList<>();
+ for (SearchResult result : data) {
+ CarUiImeSearchListItem item = new CarUiImeSearchListItem(
+ CarUiContentListItem.Action.ICON);
+ item.setTitle(result.title);
+ if (result.breadcrumbs != null && !result.breadcrumbs.isEmpty()) {
+ item.setBody(getBreadcrumb(result));
+ }
+
+ if (result instanceof AppSearchResult) {
+ AppSearchResult appResult = (AppSearchResult) result;
+ PackageManager pm = getActivity().getPackageManager();
+ Drawable drawable = appResult.info.loadIcon(pm);
+ Bitmap bm = drawableToBitmap(drawable);
+ BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bm);
+ item.setIcon(bitmapDrawable);
+ } else if (result.icon != null) {
+ Bitmap bm = drawableToBitmap(result.icon);
+ BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bm);
+ item.setIcon(bitmapDrawable);
+ }
+ item.setOnItemClickedListener(v -> onSearchResultClicked(result));
+
+ searchItems.add(item);
+ }
+ mToolbar.setSearchResultItems(searchItems);
+ }
+
mSearchAdapter.postSearchResults(data);
mRecyclerView.scrollToPosition(0);
}
+ private String getBreadcrumb(SearchResult result) {
+ String breadcrumb = result.breadcrumbs.get(0);
+ int count = result.breadcrumbs.size();
+ for (int i = 1; i < count; i++) {
+ breadcrumb = getContext().getString(R.string.search_breadcrumb_connector,
+ breadcrumb, result.breadcrumbs.get(i));
+ }
+
+ return breadcrumb;
+ }
+
+ /**
+ * Gets called when a search result is clicked.
+ */
+ protected void onSearchResultClicked(SearchResult result) {
+ mSearchFeatureProvider.searchResultClicked(getContext(), mQuery, result);
+ mSavedQueryController.saveQuery(mQuery);
+
+ Intent intent = result.payload.getIntent();
+ if (result instanceof AppSearchResult) {
+ getActivity().startActivity(intent);
+ } else {
+ PackageManager pm = getActivity().getPackageManager();
+ List<ResolveInfo> info = pm.queryIntentActivities(intent, /* flags= */ 0);
+ if (info != null && !info.isEmpty()) {
+ startActivityForResult(intent, REQUEST_CODE_NO_OP);
+ } else {
+ Log.e(TAG, "Cannot launch search result, title: "
+ + result.title + ", " + intent);
+ }
+ }
+ }
+
@Override
public void onLoaderReset(Loader<List<? extends SearchResult>> loader) {
}
diff --git a/src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryController.java b/src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryController.java
index fa222a0..4c9a458 100644
--- a/src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryController.java
+++ b/src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryController.java
@@ -21,17 +21,24 @@ import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
+import androidx.annotation.NonNull;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
+import com.android.car.ui.imewidescreen.CarUiImeSearchListItem;
+import com.android.car.ui.recyclerview.CarUiContentListItem;
+import com.android.car.ui.toolbar.ToolbarController;
+import com.android.settings.intelligence.R;
import com.android.settings.intelligence.overlay.FeatureFactory;
import com.android.settings.intelligence.search.SearchCommon;
import com.android.settings.intelligence.search.SearchFeatureProvider;
import com.android.settings.intelligence.search.SearchResult;
+import com.android.settings.intelligence.search.car.CarSearchFragment;
import com.android.settings.intelligence.search.car.CarSearchResultsAdapter;
import com.android.settings.intelligence.search.savedqueries.SavedQueryRecorder;
import com.android.settings.intelligence.search.savedqueries.SavedQueryRemover;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -49,14 +56,19 @@ public class CarSavedQueryController implements LoaderManager.LoaderCallbacks,
private final LoaderManager mLoaderManager;
private final SearchFeatureProvider mSearchFeatureProvider;
private final CarSearchResultsAdapter mResultAdapter;
+ private ToolbarController mToolbar;
+ private CarSearchFragment mFragment;
public CarSavedQueryController(Context context, LoaderManager loaderManager,
- CarSearchResultsAdapter resultsAdapter) {
+ CarSearchResultsAdapter resultsAdapter, @NonNull ToolbarController toolbar,
+ CarSearchFragment fragment) {
mContext = context;
mLoaderManager = loaderManager;
mResultAdapter = resultsAdapter;
mSearchFeatureProvider = FeatureFactory.get(context)
.searchFeatureProvider();
+ mToolbar = toolbar;
+ mFragment = fragment;
}
@Override
@@ -83,7 +95,23 @@ public class CarSavedQueryController implements LoaderManager.LoaderCallbacks,
if (SearchFeatureProvider.DEBUG) {
Log.d(TAG, "Saved queries loaded");
}
- mResultAdapter.displaySavedQuery((List<SearchResult>) data);
+ List<SearchResult> results = (List<SearchResult>) data;
+ if (mToolbar.canShowSearchResultItems()) {
+ List<CarUiImeSearchListItem> searchItems = new ArrayList<>();
+ for (SearchResult result : results) {
+ CarUiImeSearchListItem item = new CarUiImeSearchListItem(
+ CarUiContentListItem.Action.ICON);
+ item.setTitle(result.title);
+ item.setIconResId(R.drawable.ic_restore);
+ item.setOnItemClickedListener(
+ v -> mFragment.onSavedQueryClicked(result.title));
+
+ searchItems.add(item);
+ }
+ mToolbar.setSearchResultItems(searchItems);
+ }
+
+ mResultAdapter.displaySavedQuery(results);
break;
}
}
diff --git a/src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryViewHolder.java b/src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryViewHolder.java
index 0f03c23..12051a8 100644
--- a/src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryViewHolder.java
+++ b/src/com/android/settings/intelligence/search/savedqueries/car/CarSavedQueryViewHolder.java
@@ -38,7 +38,7 @@ public class CarSavedQueryViewHolder extends CarSearchViewHolder {
mIcon.setImageResource(R.drawable.ic_restore);
mSummary.setVisibility(View.GONE);
itemView.setOnClickListener(v -> {
- fragment.onSavedQueryClicked(CarSavedQueryViewHolder.this, result.title);
+ fragment.onSavedQueryClicked(result.title);
});
}
}