Fix the IME crash on search results clicked
Save the itemId of the item in the cursor.
Bug: 178592271
Test: Manual
Change-Id: I5f42e063123cea1d620368735f50544102acccbb
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/imewidescreen/CarUiImeWideScreenController.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/imewidescreen/CarUiImeWideScreenController.java
index 05dcdb9..1071e76 100644
--- a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/imewidescreen/CarUiImeWideScreenController.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/imewidescreen/CarUiImeWideScreenController.java
@@ -398,46 +398,52 @@
String url = CONTENT + getPackageName(mInputEditorInfo) + SEARCH_RESULTS_PROVIDER;
Uri contentUrl = Uri.parse(url);
ContentResolver cr = mContext.getContentResolver();
- Cursor c = cr.query(contentUrl, null, null, null, null);
- mAutomotiveSearchItems = new ArrayList<>();
- if (c != null && c.moveToFirst()) {
- do {
- CarUiContentListItem searchItem = new CarUiContentListItem(
- CarUiContentListItem.Action.ICON);
- searchItem.setOnItemClickedListener(v -> {
- Bundle bundle = new Bundle();
- bundle.putString(SEARCH_RESULT_ITEM_ID_LIST,
- c.getString(c.getColumnIndex(SearchResultsProvider.ITEM_ID)));
- mInputConnection.performPrivateCommand(WIDE_SCREEN_ACTION, bundle);
- });
- searchItem.setTitle(c.getString(c.getColumnIndex(SearchResultsProvider.TITLE)));
- searchItem.setBody(c.getString(c.getColumnIndex(SearchResultsProvider.SUBTITLE)));
- searchItem.setPrimaryIconType(CarUiContentListItem.IconType.CONTENT);
- byte[] primaryBlob = c.getBlob(
- c.getColumnIndex(SearchResultsProvider.PRIMARY_IMAGE_BLOB));
- if (primaryBlob != null) {
- Bitmap primaryBitmap = Bitmap.CREATOR.createFromParcel(
- byteArrayToParcel(primaryBlob));
- searchItem.setIcon(
- new BitmapDrawable(mContext.getResources(), primaryBitmap));
- }
- byte[] secondaryBlob = c.getBlob(
- c.getColumnIndex(SearchResultsProvider.SECONDARY_IMAGE_BLOB));
+ try (Cursor c = cr.query(contentUrl, null, null, null, null)) {
+ mAutomotiveSearchItems = new ArrayList<>();
+ if (c != null && c.moveToFirst()) {
+ do {
+ CarUiContentListItem searchItem = new CarUiContentListItem(
+ CarUiContentListItem.Action.ICON);
+ String itemId = c.getString(c.getColumnIndex(SearchResultsProvider.ITEM_ID));
+ searchItem.setOnItemClickedListener(v -> {
+ Bundle bundle = new Bundle();
+ bundle.putString(SEARCH_RESULT_ITEM_ID_LIST, itemId);
+ mInputConnection.performPrivateCommand(WIDE_SCREEN_ACTION, bundle);
+ });
+ searchItem.setTitle(c.getString(
+ c.getColumnIndex(SearchResultsProvider.TITLE)));
+ searchItem.setBody(c.getString(
+ c.getColumnIndex(SearchResultsProvider.SUBTITLE)));
+ searchItem.setPrimaryIconType(CarUiContentListItem.IconType.CONTENT);
+ byte[] primaryBlob = c.getBlob(
+ c.getColumnIndex(
+ SearchResultsProvider.PRIMARY_IMAGE_BLOB));
+ if (primaryBlob != null) {
+ Bitmap primaryBitmap = Bitmap.CREATOR.createFromParcel(
+ byteArrayToParcel(primaryBlob));
+ searchItem.setIcon(
+ new BitmapDrawable(mContext.getResources(), primaryBitmap));
+ }
+ byte[] secondaryBlob = c.getBlob(
+ c.getColumnIndex(
+ SearchResultsProvider.SECONDARY_IMAGE_BLOB));
- if (secondaryBlob != null) {
- Bitmap secondaryBitmap = Bitmap.CREATOR.createFromParcel(
- byteArrayToParcel(secondaryBlob));
- searchItem.setSupplementalIcon(
- new BitmapDrawable(mContext.getResources(), secondaryBitmap), v -> {
- Bundle bundle = new Bundle();
- bundle.putString(SEARCH_RESULT_SUPPLEMENTAL_ICON_ID_LIST,
- c.getString(c.getColumnIndex(
- SearchResultsProvider.SECONDARY_IMAGE_ID)));
- mInputConnection.performPrivateCommand(WIDE_SCREEN_ACTION, bundle);
- });
- }
- mAutomotiveSearchItems.add(searchItem);
- } while (c.moveToNext());
+ if (secondaryBlob != null) {
+ Bitmap secondaryBitmap = Bitmap.CREATOR.createFromParcel(
+ byteArrayToParcel(secondaryBlob));
+ searchItem.setSupplementalIcon(
+ new BitmapDrawable(mContext.getResources(), secondaryBitmap), v -> {
+ Bundle bundle = new Bundle();
+ bundle.putString(SEARCH_RESULT_SUPPLEMENTAL_ICON_ID_LIST,
+ c.getString(c.getColumnIndex(
+ SearchResultsProvider.SECONDARY_IMAGE_ID)));
+ mInputConnection.performPrivateCommand(WIDE_SCREEN_ACTION,
+ bundle);
+ });
+ }
+ mAutomotiveSearchItems.add(searchItem);
+ } while (c.moveToNext());
+ }
}
// delete the results.
cr.delete(contentUrl, null, null);
diff --git a/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/widescreenime/WideScreenImeActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/widescreenime/WideScreenImeActivity.java
index 71eb954..2eb3063 100644
--- a/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/widescreenime/WideScreenImeActivity.java
+++ b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/widescreenime/WideScreenImeActivity.java
@@ -101,7 +101,7 @@
});
CarUiContentListItem.OnClickListener mainClickListener = i ->
- Toast.makeText(this, "Item clicked!", Toast.LENGTH_SHORT).show();
+ Toast.makeText(this, "Item clicked! " + i.getTitle(), Toast.LENGTH_SHORT).show();
CarUiContentListItem.OnClickListener secondaryClickListener = i ->
Toast.makeText(this, "Item's secondary action clicked!", Toast.LENGTH_SHORT).show();