diff --git a/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/places/PickerLauncherActivity.kt b/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/places/PickerLauncherActivity.kt index d1e639044..a9fd6343f 100644 --- a/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/places/PickerLauncherActivity.kt +++ b/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/places/PickerLauncherActivity.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity +import android.widget.Switch import android.widget.Toast import com.mapbox.mapboxsdk.Mapbox @@ -20,12 +21,20 @@ class PickerLauncherActivity : AppCompatActivity() { public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_picker_launcher) + reverseGeocodingSwitch.text = getString(R.string.reverse_geocoding_disabled) + reverseGeocodingSwitch.setOnCheckedChangeListener { compoundButton, checked -> + reverseGeocodingSwitch.text = if (checked) + getString(R.string.reverse_geocoding_enabled) + else getString(R.string.reverse_geocoding_disabled) + } + fabLocationPicker.setOnClickListener { _ -> Mapbox.getAccessToken()?.let { startActivityForResult( PlacePicker.IntentBuilder() .accessToken(it) .placeOptions(PlacePickerOptions.builder() + .includeReverseGeocode(reverseGeocodingSwitch.isChecked) .statingCameraPosition(CameraPosition.Builder() .target(LatLng(40.7544, -73.9862)) .zoom(16.0) @@ -39,8 +48,13 @@ class PickerLauncherActivity : AppCompatActivity() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) { - val carmenFeature = PlacePicker.getPlace(data) - Toast.makeText(this, carmenFeature?.placeName(), Toast.LENGTH_LONG).show() + if (reverseGeocodingSwitch.isChecked) { + val carmenFeature = PlacePicker.getPlace(data) + Toast.makeText(this, carmenFeature?.placeName(), Toast.LENGTH_LONG).show() + } else { + val cameraPosition = PlacePicker.getLastCameraPosition(data) + Toast.makeText(this, cameraPosition.target.toString(), Toast.LENGTH_LONG).show() + } } } diff --git a/app/src/main/res/layout/activity_picker_launcher.xml b/app/src/main/res/layout/activity_picker_launcher.xml index a6d80dfbc..4df51c4f7 100644 --- a/app/src/main/res/layout/activity_picker_launcher.xml +++ b/app/src/main/res/layout/activity_picker_launcher.xml @@ -1,39 +1,54 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + + android:id="@+id/textView" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="8dp" + android:text="@string/detailed_description_place_picker" + android:textAlignment="center" + app:layout_constraintBottom_toTopOf="@+id/reverseGeocodingSwitch" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/fabLocationPicker" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="16dp" + android:layout_marginRight="16dp" + android:layout_marginBottom="16dp" + android:tint="@android:color/white" + app:backgroundTint="@color/colorPrimary" + app:fabSize="normal" + app:layout_anchorGravity="bottom|right|end" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:srcCompat="@drawable/mapbox_ic_place"/> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 72f16c108..c5a8fef42 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -59,6 +59,8 @@ Example shows how to launch the Place Picker using the Floating action button and receiving a result in onActivityResult. + Reverse geocoding enabled + Reverse geocoding disabled Min zoom: %1$d diff --git a/plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/picker/model/PlacePickerOptions.java b/plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/picker/model/PlacePickerOptions.java index 1e8e7202e..ba5188a64 100644 --- a/plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/picker/model/PlacePickerOptions.java +++ b/plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/picker/model/PlacePickerOptions.java @@ -33,8 +33,11 @@ public abstract class PlacePickerOptions implements BasePlaceOptions, Parcelable @Nullable public abstract CameraPosition statingCameraPosition(); + public abstract boolean includeReverseGeocode(); + public static Builder builder() { - return new AutoValue_PlacePickerOptions.Builder(); + return new AutoValue_PlacePickerOptions.Builder() + .includeReverseGeocode(true); } @AutoValue.Builder @@ -55,6 +58,16 @@ public Builder geocodingTypes(@NonNull @GeocodingTypeCriteria String... geocodin public abstract Builder statingCameraPosition(@NonNull CameraPosition cameraPosition); + /** + * + * @param includeReverseGeocode whether or not to make a reverse geocoding call to + * retrieve and display information associated with + * the picked location's coordinates. Defaults to true. + * + * @return this builder instance for chaining options together + */ + public abstract Builder includeReverseGeocode(boolean includeReverseGeocode); + public abstract PlacePickerOptions build(); } } diff --git a/plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/picker/ui/PlacePickerActivity.java b/plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/picker/ui/PlacePickerActivity.java index 315ca90b9..5d5b40385 100644 --- a/plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/picker/ui/PlacePickerActivity.java +++ b/plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/picker/ui/PlacePickerActivity.java @@ -56,6 +56,7 @@ public class PlacePickerActivity extends AppCompatActivity implements OnMapReady private MapboxMap mapboxMap; private String accessToken; private MapView mapView; + private boolean includeReverseGeocode; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -74,6 +75,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { if (savedInstanceState == null) { accessToken = getIntent().getStringExtra(PlaceConstants.ACCESS_TOKEN); options = getIntent().getParcelableExtra(PlaceConstants.PLACE_OPTIONS); + includeReverseGeocode = options.includeReverseGeocode(); } // Initialize the view model. @@ -82,7 +84,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { bindViews(); addBackButtonListener(); - addChosenLocationButton(); + addPlaceSelectedButton(); customizeViews(); mapView.onCreate(savedInstanceState); @@ -129,8 +131,10 @@ public void onStyleLoaded(@NonNull Style style) { } } - // Initialize with the markers current location information. - makeReverseGeocodingSearch(); + if (includeReverseGeocode) { + // Initialize with the markers current location information. + makeReverseGeocodingSearch(); + } PlacePickerActivity.this.mapboxMap.addOnCameraMoveStartedListener(PlacePickerActivity.this); PlacePickerActivity.this.mapboxMap.addOnCameraIdleListener(PlacePickerActivity.this); @@ -144,8 +148,10 @@ public void onCameraMoveStarted(int reason) { if (markerImage.getTranslationY() == 0) { markerImage.animate().translationY(-75) .setInterpolator(new OvershootInterpolator()).setDuration(250).start(); - if (bottomSheet.isShowing()) { - bottomSheet.dismissPlaceDetails(); + if (includeReverseGeocode) { + if (bottomSheet.isShowing()) { + bottomSheet.dismissPlaceDetails(); + } } } } @@ -155,8 +161,11 @@ public void onCameraIdle() { Timber.v("Map camera is now idling."); markerImage.animate().translationY(0) .setInterpolator(new OvershootInterpolator()).setDuration(250).start(); - bottomSheet.setPlaceDetails(null); - makeReverseGeocodingSearch(); + if (includeReverseGeocode) { + bottomSheet.setPlaceDetails(null); + // Initialize with the markers current location information. + makeReverseGeocodingSearch(); + } } @Override @@ -182,12 +191,12 @@ private void makeReverseGeocodingSearch() { } } - private void addChosenLocationButton() { + private void addPlaceSelectedButton() { FloatingActionButton placeSelectedButton = findViewById(R.id.place_chosen_button); placeSelectedButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - if (carmenFeature == null) { + if (carmenFeature == null && includeReverseGeocode) { Snackbar.make(bottomSheet, getString(R.string.mapbox_plugins_place_picker_not_valid_selection), LENGTH_LONG).show(); @@ -199,9 +208,11 @@ public void onClick(View view) { } void placeSelected() { - String json = carmenFeature.toJson(); Intent returningIntent = new Intent(); - returningIntent.putExtra(PlaceConstants.RETURNING_CARMEN_FEATURE, json); + if (includeReverseGeocode) { + String json = carmenFeature.toJson(); + returningIntent.putExtra(PlaceConstants.RETURNING_CARMEN_FEATURE, json); + } returningIntent.putExtra(PlaceConstants.MAP_CAMERA_POSITION, mapboxMap.getCameraPosition()); setResult(AppCompatActivity.RESULT_OK, returningIntent); finish();