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