Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static final String TAG = "PlaceArrayAdapter";
- private GoogleApiClient mGoogleApiClient;
- private AutocompleteFilter mPlaceFilter;
- private LatLngBounds mBounds;
- private ArrayList<PlaceAutocomplete> mResultList;
- /**
- * Constructor
- *
- * @param context Context
- * @param resource Layout resource
- * @param bounds Used to specify the search bounds
- * @param filter Used to specify place types
- */
- public PlaceArrayAdapter(Context context, int resource, LatLngBounds bounds,
- AutocompleteFilter filter) {
- super(context, resource);
- mBounds = bounds;
- mPlaceFilter = filter;
- }
- public void setGoogleApiClient(GoogleApiClient googleApiClient) {
- if (googleApiClient == null || !googleApiClient.isConnected()) {
- mGoogleApiClient = null;
- } else {
- mGoogleApiClient = googleApiClient;
- }
- }
- @Override
- public int getCount() {
- return mResultList.size();
- }
- @Override
- public PlaceAutocomplete getItem(int position) {
- return mResultList.get(position);
- }
- private ArrayList<PlaceAutocomplete> getPredictions(CharSequence constraint) {
- if (mGoogleApiClient != null) {
- Log.i(TAG, "Executing autocomplete query for: " + constraint);
- PendingResult<AutocompletePredictionBuffer> results =
- Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, constraint.toString(), mBounds, null);
- // Wait for predictions, set the timeout.
- AutocompletePredictionBuffer autocompletePredictions = results
- .await(60, TimeUnit.SECONDS);
- final Status status = autocompletePredictions.getStatus();
- if (!status.isSuccess()) {
- Toast.makeText(getContext(), "Error: " + status.toString(),
- Toast.LENGTH_SHORT).show();
- Log.e(TAG, "Error getting place predictions: " + status
- .toString());
- autocompletePredictions.release();
- return null;
- }
- Log.i(TAG, "Query completed. Received " + autocompletePredictions.getCount()
- + " predictions.");
- Iterator<AutocompletePrediction> iterator = autocompletePredictions.iterator();
- ArrayList resultList = new ArrayList<>(autocompletePredictions.getCount());
- while (iterator.hasNext()) {
- AutocompletePrediction prediction = iterator.next();
- resultList.add(new PlaceAutocomplete(prediction.getPlaceId(),
- prediction.getFullText(null)));
- }
- // Buffer release
- autocompletePredictions.release();
- return resultList;
- }
- Log.e(TAG, "Google API client is not connected.");
- return null;
- }
- @Override
- public Filter getFilter() {
- Filter filter = new Filter() {
- @Override
- protected FilterResults performFiltering(CharSequence constraint) {
- FilterResults results = new FilterResults();
- if (constraint != null) {
- // Query the autocomplete API for the entered constraint
- mResultList = getPredictions(constraint);
- if (mResultList != null) {
- // Results
- results.values = mResultList;
- results.count = mResultList.size();
- }
- }
- return results;
- }
- @Override
- protected void publishResults(CharSequence constraint, FilterResults results) {
- if (results != null && results.count > 0) {
- // The API returned at least one result, update the data.
- notifyDataSetChanged();
- } else {
- // The API did not return any results, invalidate the data set.
- notifyDataSetInvalidated();
- }
- }
- };
- return filter;
- }
- class PlaceAutocomplete {
- public CharSequence placeId;
- public CharSequence description;
- PlaceAutocomplete(CharSequence placeId, CharSequence description) {
- this.placeId = placeId;
- this.description = description;
- }
- @Override
- public String toString() {
- return description.toString();
- }
- }
- public class ConfirmActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks {
- private static final String LOG_TAG = "ConfirmActivity";
- private static final int GOOGLE_API_CLIENT_ID = 0;
- private AutoCompleteTextView mAutocompleteTextView;
- private TextView mNameTextView;
- private TextView mAddressTextView;
- private TextView mIdTextView;
- private TextView mPhoneTextView;
- private TextView mWebTextView;
- private TextView mAttTextView;
- private GoogleApiClient mGoogleApiClient;
- private PlaceArrayAdapter mPlaceArrayAdapter;
- private static final LatLngBounds BOUNDS_MOUNTAIN_VIEW = new LatLngBounds(
- new LatLng(37.398160, -122.180831), new LatLng(37.430610, -121.972090));
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_confirm);
- mGoogleApiClient = new GoogleApiClient.Builder(ConfirmActivity.this)
- .addApi(Places.GEO_DATA_API)
- .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
- .addConnectionCallbacks(this)
- .build();
- mAutocompleteTextView = (AutoCompleteTextView) findViewById(R.id
- .autoCompleteTextView);
- mAutocompleteTextView.setThreshold(3);
- mNameTextView = (TextView) findViewById(R.id.name);
- mAddressTextView = (TextView) findViewById(R.id.address);
- mIdTextView = (TextView) findViewById(R.id.place_id);
- mPhoneTextView = (TextView) findViewById(R.id.phone);
- mWebTextView = (TextView) findViewById(R.id.web);
- mAttTextView = (TextView) findViewById(R.id.att);
- mAutocompleteTextView.setOnItemClickListener(mAutocompleteClickListener);
- mPlaceArrayAdapter = new PlaceArrayAdapter(this, android.R.layout.simple_list_item_1,
- BOUNDS_MOUNTAIN_VIEW, null);
- mAutocompleteTextView.setAdapter(mPlaceArrayAdapter);
- }
- private AdapterView.OnItemClickListener mAutocompleteClickListener
- = new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- final PlaceArrayAdapter.PlaceAutocomplete item = mPlaceArrayAdapter.getItem(position);
- final String placeId = String.valueOf(item.placeId);
- Log.i(LOG_TAG, "Selected: " + item.description);
- PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi
- .getPlaceById(mGoogleApiClient, placeId);
- placeResult.setResultCallback(mUpdatePlaceDetailsCallback);
- Log.i(LOG_TAG, "Fetching details for ID: " + item.placeId);
- }
- };
- private ResultCallback<PlaceBuffer> mUpdatePlaceDetailsCallback
- = new ResultCallback<PlaceBuffer>() {
- @Override
- public void onResult(PlaceBuffer places) {
- if (!places.getStatus().isSuccess()) {
- Log.e(LOG_TAG, "Place query did not complete. Error: " +
- places.getStatus().toString());
- return;
- }
- // Selecting the first object buffer.
- final Place place = places.get(0);
- CharSequence attributions = places.getAttributions();
- mNameTextView.setText(Html.fromHtml(place.getName() + ""));
- mAddressTextView.setText(Html.fromHtml(place.getAddress() + ""));
- mIdTextView.setText(Html.fromHtml(place.getId() + ""));
- mPhoneTextView.setText(Html.fromHtml(place.getPhoneNumber() + ""));
- mWebTextView.setText(place.getWebsiteUri() + "");
- if (attributions != null) {
- mAttTextView.setText(Html.fromHtml(attributions.toString()));
- }
- }
- };
- @Override
- public void onConnected(Bundle bundle) {
- mPlaceArrayAdapter.setGoogleApiClient(mGoogleApiClient);
- Log.i(LOG_TAG, "Google Places API connected.");
- }
- @Override
- public void onConnectionFailed(ConnectionResult connectionResult) {
- Log.e(LOG_TAG, "Google Places API connection failed with error code: "
- + connectionResult.getErrorCode());
- Toast.makeText(this,
- "Google Places API connection failed with error code:" +
- connectionResult.getErrorCode(),
- Toast.LENGTH_LONG).show();
- }
- @Override
- public void onConnectionSuspended(int i) {
- mPlaceArrayAdapter.setGoogleApiClient(null);
- Log.e(LOG_TAG, "Google Places API connection suspended.");
- }
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".ConfirmActivity">
- <AutoCompleteTextView
- android:id="@+id/autoCompleteTextView"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:layout_marginTop="50dp"
- android:hint="Enter Place Here"/>
- <TextView
- android:id="@+id/header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_below="@+id/autoCompleteTextView"
- android:layout_marginTop="20dp"
- android:text="Selected Place:"
- android:textStyle="bold"/>
- <TextView
- android:id="@+id/name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_below="@+id/header"
- android:layout_marginTop="20dp"/>
- <TextView
- android:id="@+id/address"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_below="@+id/name"/>
- <TextView
- android:id="@+id/place_id"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_below="@+id/address"/>
- <TextView
- android:id="@+id/phone"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_below="@+id/place_id"
- android:autoLink="phone"/>
- <TextView
- android:id="@+id/web"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_below="@+id/phone"
- android:autoLink="web"/>
- <TextView
- android:id="@+id/att"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_alignParentEnd="true"
- android:layout_alignParentRight="true"
- android:autoLink="web"/>
- <ImageView
- android:id="@+id/poweredBy"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_above="@+id/att"
- android:layout_alignParentEnd="true"
- android:layout_alignParentRight="true"
- android:src="@drawable/powered_by_google_light"/>
- <ImageView
- android:id="@+id/truiton_image"
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:layout_above="@+id/poweredBy"
- android:layout_alignParentEnd="true"
- android:layout_alignParentRight="true"
- android:layout_marginBottom="-20dp"
- />
Add Comment
Please, Sign In to add comment