diff --git a/app/build.gradle b/app/build.gradle
index a9fba0796..f59878ab5 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:6.2.3'
+ implementation 'com.karumi:dexter:5.0.0'
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 b2145d59a..83a2d14dd 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,7 +31,6 @@ 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;
@@ -111,7 +110,6 @@ 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;
@@ -402,27 +400,9 @@ 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,
- this::locationPermissionGranted,
+ () -> 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 b30e0f349..6fd89a989 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,7 +241,6 @@ 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
@@ -439,7 +438,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
private void performMapReadyActions() {
if (((MainActivity)getActivity()).activeFragment == ActiveFragment.NEARBY && isMapBoxReady) {
- if(!applicationKvStore.getBoolean("doNotAskForLocationPermission", false)){
+ if(!applicationKvStore.getBoolean("doNotAskForLocationPermission", false) ||
+ PermissionUtils.hasPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)){
checkPermissionsAndPerformAction();
}else{
isPermissionDenied = true;
@@ -1212,30 +1212,12 @@ 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,
- this::locationPermissionGranted,
- () -> isPermissionDenied = true,
- R.string.location_permission_title,
- R.string.location_permission_rationale_nearby);
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ () -> 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 8e186cbe0..1b22fcfc0 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,7 +130,18 @@ public class PermissionUtils {
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permission,
PermissionToken token) {
- token.continuePermissionRequest();
+ 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);
}
})
.check();
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 394d31f23..8b165000d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -254,8 +254,7 @@
Copy the wikitext to the clipboard
The wikitext was copied to the clipboard
Nearby might not work properly, Location not available.
- The Commons app collects location data to
- display nearby places that need photos, even when the app is in the background.
+ Permission required to display a list of nearby places
Directions
Wikidata