in car_app_library/places/common/src/main/java/androidx/car/app/sample/places/common/SearchScreen.java [92:144]
void doSearch(String searchText) {
ItemList.Builder builder = new ItemList.Builder();
if (searchText.isEmpty()) {
mItemList = withNoResults(builder).build();
}
Futures.transformAsync(
// Run the query in the background thread, and update with the results in
// the UI thread.
Futures.submitAsync(
() ->
Futures.immediateFuture(
mPlaceFinder.getPlacesByName(
mSearchLocation,
Constants.LOCATION_SEARCH_RADIUS_METERS,
Constants.LOCATION_SEARCH_MAX_RESULTS,
searchText)),
BACKGROUND_EXECUTOR),
places -> {
if (mIsSearchComplete) {
if (!places.isEmpty()) {
setResult(places.get(0).getLocation());
}
} else {
if (places.isEmpty()) {
mItemList = withNoResults(builder).build();
} else {
for (PlaceInfo place : places) {
Row.Builder rowBuilder = new Row.Builder();
String name = place.getName();
if (name != null) {
rowBuilder.setTitle(name);
}
String addressLine =
place.getAddress(mGeocoder).getAddressLine(0);
if (addressLine != null) {
rowBuilder.addText(addressLine);
}
rowBuilder.setOnClickListener(
() -> {
setResult(place.getLocation());
finish();
});
builder.addItem(rowBuilder.build());
}
}
mItemList = builder.build();
}
return null;
},
UI_EXECUTOR)
.addListener(this::searchCompleted, UI_EXECUTOR);
}