diff --git a/app/src/main/java/fr/free/nrw/commons/Utils.java b/app/src/main/java/fr/free/nrw/commons/Utils.java index cd9c6eed5..8d0f8b530 100644 --- a/app/src/main/java/fr/free/nrw/commons/Utils.java +++ b/app/src/main/java/fr/free/nrw/commons/Utils.java @@ -148,13 +148,27 @@ public class Utils { } /** - * Util function to handle geo coordinates - * It no longer depends on google maps and any app capable of handling the map intent can handle it - * @param context - * @param latLng + * Util function to handle geo coordinates. It no longer depends on google maps and any app + * capable of handling the map intent can handle it + * + * @param context The context for launching intent + * @param latLng The latitude and longitude of the location */ - public static void handleGeoCoordinates(Context context, LatLng latLng) { - Intent mapIntent = new Intent(Intent.ACTION_VIEW, latLng.getGmmIntentUri()); + public static void handleGeoCoordinates(final Context context, final LatLng latLng) { + handleGeoCoordinates(context, latLng, 16); + } + + /** + * Util function to handle geo coordinates with specified zoom level. It no longer depends on + * google maps and any app capable of handling the map intent can handle it + * + * @param context The context for launching intent + * @param latLng The latitude and longitude of the location + * @param zoomLevel The zoom level + */ + public static void handleGeoCoordinates(final Context context, final LatLng latLng, + final double zoomLevel) { + final Intent mapIntent = new Intent(Intent.ACTION_VIEW, latLng.getGmmIntentUri(zoomLevel)); if (mapIntent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(mapIntent); } else { diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java index fd1ea1f28..ad42d9518 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java @@ -545,8 +545,9 @@ public class ExploreMapFragment extends CommonsDaggerSupportFragment * @param place Place of clicked nearby marker */ private void passInfoToSheet(final Place place) { - binding.bottomSheetDetailsBinding.directionsButton.setOnClickListener(view -> Utils.handleGeoCoordinates(getActivity(), - place.getLocation())); + binding.bottomSheetDetailsBinding.directionsButton.setOnClickListener( + view -> Utils.handleGeoCoordinates(getActivity(), + place.getLocation(), binding.mapView.getZoomLevelDouble())); binding.bottomSheetDetailsBinding.commonsButton.setVisibility(place.hasCommonsLink() ? View.VISIBLE : View.GONE); binding.bottomSheetDetailsBinding.commonsButton.setOnClickListener( diff --git a/app/src/main/java/fr/free/nrw/commons/location/LatLng.kt b/app/src/main/java/fr/free/nrw/commons/location/LatLng.kt index 7dd9a49ce..5ca75b38c 100644 --- a/app/src/main/java/fr/free/nrw/commons/location/LatLng.kt +++ b/app/src/main/java/fr/free/nrw/commons/location/LatLng.kt @@ -123,10 +123,13 @@ data class LatLng( /** * Gets a URI for a Google Maps intent at the location. + * + * @paraam zoom The zoom level + * @return URI for the intent */ - fun getGmmIntentUri(): Uri { - return Uri.parse("geo:$latitude,$longitude?z=16") - } + fun getGmmIntentUri(zoom: Double): Uri = Uri.parse( + "geo:$latitude,$longitude?q=$latitude,$longitude&z=${zoom}" + ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeDouble(latitude) diff --git a/app/src/main/java/fr/free/nrw/commons/locationpicker/LocationPickerActivity.kt b/app/src/main/java/fr/free/nrw/commons/locationpicker/LocationPickerActivity.kt index 080bc058d..2a7b7713b 100644 --- a/app/src/main/java/fr/free/nrw/commons/locationpicker/LocationPickerActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/locationpicker/LocationPickerActivity.kt @@ -430,7 +430,11 @@ class LocationPickerActivity : BaseActivity(), LocationPermissionCallback { else -> null } - position?.let { Utils.handleGeoCoordinates(this, it) } + position?.let { + mapView?.zoomLevelDouble?.let { zoomLevel -> + Utils.handleGeoCoordinates(this, it, zoomLevel) + } ?: Utils.handleGeoCoordinates(this, it) + } } /** diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java index f3224de7f..ee15d13ac 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java @@ -2309,7 +2309,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment updateBookmarkButtonImage(selectedPlace); break; case R.drawable.ic_directions_black_24dp: - Utils.handleGeoCoordinates(this.getContext(), selectedPlace.getLocation()); + Utils.handleGeoCoordinates(this.getContext(), selectedPlace.getLocation(), + binding.map.getZoomLevelDouble()); break; case R.drawable.ic_wikidata_logo_24dp: Utils.handleWebUrl(this.getContext(), selectedPlace.siteLinks.getWikidataLink());