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();