diff --git a/app/build.gradle b/app/build.gradle
index 684ad65df..6d8c90e80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -44,7 +44,7 @@ dependencies {
implementation 'com.mapbox.mapboxsdk:mapbox-android-telemetry:7.0.0'
implementation 'com.github.deano2390:MaterialShowcaseView:1.2.0'
implementation 'com.dinuscxj:circleprogressbar:1.1.1'
- implementation 'com.karumi:dexter:5.0.0'
+ implementation 'com.karumi:dexter:6.2.3'
implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
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 83a2d14dd..b2145d59a 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
@@ -31,6 +31,7 @@ import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.AppCompatTextView;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -110,6 +111,7 @@ public class ExploreMapFragment extends CommonsDaggerSupportFragment
private Marker currentLocationMarker;
private Polygon currentLocationPolygon;
IntentFilter intentFilter = new IntentFilter(MapUtils.NETWORK_INTENT_ACTION);
+ private AlertDialog locationDialog;
@Inject
LiveDataConverter liveDataConverter;
@@ -400,9 +402,27 @@ public class ExploreMapFragment extends CommonsDaggerSupportFragment
@Override
public void checkPermissionsAndPerformAction() {
Timber.d("Checking permission and perfoming action");
+ if (PermissionUtils.hasPermission(getActivity(),
+ Manifest.permission.ACCESS_FINE_LOCATION)) {
+ Timber.d("Permission granted");
+ getPermissions();
+ } else {
+ if (locationDialog == null) {
+ locationDialog = new AlertDialog.Builder(requireActivity())
+ .setTitle(R.string.location_permission_title)
+ .setMessage(R.string.location_permission_rationale_nearby)
+ .setPositiveButton(R.string.ok, (dialog, which) -> {
+ dialog.dismiss();
+ getPermissions();
+ }).show();
+ }
+ }
+ }
+
+ private void getPermissions() {
PermissionUtils.checkPermissionsAndPerformAction(getActivity(),
Manifest.permission.ACCESS_FINE_LOCATION,
- () -> locationPermissionGranted(),
+ this::locationPermissionGranted,
() -> isPermissionDenied = true,
R.string.location_permission_title,
R.string.location_permission_rationale_nearby);
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 6fd89a989..b30e0f349 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
@@ -241,6 +241,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
private PlaceAdapter adapter;
private NearbyParentFragmentInstanceReadyCallback nearbyParentFragmentInstanceReadyCallback;
private boolean isAdvancedQueryFragmentVisible = false;
+ private AlertDialog locationDialog;
/**
* Holds filtered markers that are to be shown
@@ -438,8 +439,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
private void performMapReadyActions() {
if (((MainActivity)getActivity()).activeFragment == ActiveFragment.NEARBY && isMapBoxReady) {
- if(!applicationKvStore.getBoolean("doNotAskForLocationPermission", false) ||
- PermissionUtils.hasPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)){
+ if(!applicationKvStore.getBoolean("doNotAskForLocationPermission", false)){
checkPermissionsAndPerformAction();
}else{
isPermissionDenied = true;
@@ -1212,12 +1212,30 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
@Override
public void checkPermissionsAndPerformAction() {
Timber.d("Checking permission and perfoming action");
+ if (PermissionUtils.hasPermission(getActivity(),
+ Manifest.permission.ACCESS_FINE_LOCATION)) {
+ Timber.d("Permission granted");
+ getPermissions();
+ } else {
+ if (locationDialog == null) {
+ locationDialog = new AlertDialog.Builder(requireActivity())
+ .setTitle(R.string.location_permission_title)
+ .setMessage(R.string.location_permission_rationale_nearby)
+ .setPositiveButton(R.string.ok, (dialog, which) -> {
+ dialog.dismiss();
+ getPermissions();
+ }).show();
+ }
+ }
+ }
+
+ private void getPermissions() {
PermissionUtils.checkPermissionsAndPerformAction(getActivity(),
- Manifest.permission.ACCESS_FINE_LOCATION,
- () -> locationPermissionGranted(),
- () -> isPermissionDenied = true,
- R.string.location_permission_title,
- R.string.location_permission_rationale_nearby);
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ this::locationPermissionGranted,
+ () -> isPermissionDenied = true,
+ R.string.location_permission_title,
+ R.string.location_permission_rationale_nearby);
}
/**
diff --git a/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java
index 1b22fcfc0..8e186cbe0 100644
--- a/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java
+++ b/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java
@@ -130,18 +130,7 @@ public class PermissionUtils {
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permission,
PermissionToken token) {
- if (rationaleTitle == -1 && rationaleMessage == -1) {
- token.continuePermissionRequest();
- return;
- }
- DialogUtil.showAlertDialog(activity, activity.getString(rationaleTitle),
- activity.getString(rationaleMessage),
- activity.getString(android.R.string.ok),
- activity.getString(android.R.string.cancel),
- token::continuePermissionRequest,
- token::cancelPermissionRequest,
- null,
- false);
+ token.continuePermissionRequest();
}
})
.check();
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8b165000d..394d31f23 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -254,7 +254,8 @@
Copy the wikitext to the clipboard
The wikitext was copied to the clipboard
Nearby might not work properly, Location not available.
- Permission required to display a list of nearby places
+ The Commons app collects location data to
+ display nearby places that need photos, even when the app is in the background.
Directions
Wikidata