I have upgraded to the new Google Places using:
'com.google.android.libraries.places:places:2.0.0'
I have implemented a AutoCompleteSupportFragment in my layout and in that fragment is where the user will type in their location or destination. Then the info will be put into the BottomSheetRiderFragment.
I want to be able to filter with Addresses and Establishments but I can't do both on separate lines for it to work.
From researching (not a whole lot on this topic) there was a mention of using
TYPE_FILTER_ADDRESS|TYPE_FILTER_ESTABLISHMENT
I tried putting:
places_location.setTypeFilter(TYPE_FILTER_ADDRESS|TYPE_FILTER_ESTABLISHMENT);
but this error occurred:
setType Filter(com.google.android.libraries.places.api.model.Type Filter) in AutocompleteSupportFragment cannot be applied to (int)
How can I fix this?
layout
<fragment
android:id="@+id/places_location"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment" />
<fragment
android:id="@+id/places_destination"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"/>
Activity
places_location.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(@NonNull Place place) {
// Get info about the selected place.
Log.e(TAG, "Place: " + place.getName() + ", " + place.getId());
mPlaceLocation = place.getAddress();
}
@Override
public void onError(@NonNull Status status) {
// Handle the error.
Log.e(TAG, "An error occurred: " + status);
}
});
places_destination.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(@NonNull Place place) {
// Get info about the selected place.
Log.e(TAG, "Place: " + place.getName() + ", " + place.getId());
mPlaceDestination = place.getAddress(); // search bar destination
Log.e(TAG, "mPlaceDestination = " + mPlaceDestination);
// search_bar_destination ....
search_bar_destination = mPlaceDestination;
// Show information at bottom
BottomSheetRiderFragment mBottomSheet = BottomSheetRiderFragment
.newInstance(mPlaceLocation, mPlaceDestination, false);
RiderHome.super.onPostResume();
mBottomSheet.show(getSupportFragmentManager(), mBottomSheet.getTag());
}
@Override
public void onError(@NonNull Status status) {
// Handle the error.
Log.e(TAG, "An error occurred: " + status);
}
});
Also
// Create a RectangularBounds object.
RectangularBounds bounds = RectangularBounds.newInstance(
new LatLng(45.282785, -66.235011),
new LatLng(45.333059, -65.842197));
places_location.setCountry("ca");
places_location.setLocationBias(bounds);
places_location.setTypeFilter(TypeFilter.REGIONS);
places_location.setTypeFilter(TypeFilter.CITIES);
places_location.setTypeFilter(TYPE_FILTER_ADDRESS|TYPE_FILTER_ESTABLISHMENT);
You are not allowed to write more than one filter, it will not work if you write the two filters, If you want both establishment and address then dont write any filter, as both at the same time will not work. If you want to get suggestions for nearby location only, then Location Bias is perfect for you, it will give you both address and establishment within suggestions
RectangularBounds bounds = RectangularBounds.newInstance
(new LatLng(45.282785, -66.235011),new LatLng(45.333059, -65.842197));
places_location.setCountry("ca");
places_location.setLocationBias(bounds);