diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 43966f7a4..e0a65e1a5 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -1,10 +1,14 @@ package fr.free.nrw.commons.nearby; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.LocationManager; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; +import android.support.v7.app.AlertDialog; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -23,6 +27,7 @@ import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.utils.UriSerializer; import fr.free.nrw.commons.R; +import timber.log.Timber; import java.util.List; @@ -47,6 +52,7 @@ public class NearbyActivity extends BaseActivity { if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } + checkGps(); bundle = new Bundle(); locationManager = new LocationServiceManager(this); locationManager.registerLocationManager(); @@ -83,6 +89,44 @@ public class NearbyActivity extends BaseActivity { } } + protected void checkGps() { + LocationManager manager = (LocationManager) getSystemService(LOCATION_SERVICE); + if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { + Timber.d("GPS is not enabled"); + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); + alertDialogBuilder.setMessage(R.string.gps_disabled) + .setCancelable(false) + .setPositiveButton(R.string.enable_gps, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + Intent callGPSSettingIntent = new Intent( + android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); + Timber.d("Loaded settings page"); + startActivityForResult(callGPSSettingIntent, 1); + } + }); + alertDialogBuilder.setNegativeButton("Cancel", + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); + AlertDialog alert = alertDialogBuilder.create(); + alert.show(); + } else { + Timber.d("GPS is enabled"); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 1) { + Timber.d("User is back from Settings page"); + refreshView(); + } + } + private void showMapView() { if (!isMapViewActive) { isMapViewActive = true; diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java index ba2aec1d9..e5fc3182c 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java @@ -2,9 +2,11 @@ package fr.free.nrw.commons.nearby; import android.content.Context; import android.content.SharedPreferences; -import android.graphics.drawable.Icon; import android.preference.PreferenceManager; +import com.mapbox.mapboxsdk.annotations.Icon; +import com.mapbox.mapboxsdk.annotations.IconFactory; + import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -13,6 +15,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import fr.free.nrw.commons.R; import fr.free.nrw.commons.location.LatLng; import timber.log.Timber; @@ -86,13 +89,17 @@ public class NearbyController { */ public static List loadAttractionsFromLocationToBaseMarkerOptions( LatLng curLatLng, - List placeList) { + List placeList, + Context context) { List baseMarkerOptionses = new ArrayList<>(); placeList = placeList.subList(0, Math.min(placeList.size(), MAX_RESULTS)); for (Place place: placeList) { String distance = formatDistanceBetween(curLatLng, place.location); place.setDistance(distance); + Icon icon = IconFactory.getInstance(context) + .fromResource(R.drawable.custom_map_marker); + NearbyBaseMarker nearbyBaseMarker = new NearbyBaseMarker(); nearbyBaseMarker.title(place.name); nearbyBaseMarker.position( @@ -100,6 +107,7 @@ public class NearbyController { place.location.latitude, place.location.longitude)); nearbyBaseMarker.place(place); + nearbyBaseMarker.icon(icon); baseMarkerOptionses.add(nearbyBaseMarker); } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index 77512139e..b58fa8d5b 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -55,8 +55,9 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { Type curLatLngType = new TypeToken() {}.getType(); curLatLng = gson.fromJson(gsonLatLng, curLatLngType); baseMarkerOptionses = NearbyController - .loadAttractionsFromLocationToBaseMarkerOptions(curLatLng, placeList); - + .loadAttractionsFromLocationToBaseMarkerOptions(curLatLng, + placeList, + getActivity()); } Mapbox.getInstance(getActivity(), getString(R.string.mapbox_commons_app_token)); diff --git a/app/src/main/res/drawable-mdpi/custom_map_marker.png b/app/src/main/res/drawable-mdpi/custom_map_marker.png new file mode 100644 index 000000000..0634167c5 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/custom_map_marker.png differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 10616fed5..679797a6e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,6 +51,8 @@ Search categories Save Refresh + GPS is disabled in your device. Would you like to enable it? + Enable GPS No uploads yet