Add prompt before asking for location in Nearby and Explore Maps (#5034)

* Add prompt before asking for location in Nearby and Explore Maps

* Fix string

Co-authored-by: Josephine Lim <josephinelim86@gmail.com>
This commit is contained in:
Madhur Gupta 2022-08-16 14:51:01 +05:30 committed by GitHub
parent 308cce46a1
commit 9efafc8e1f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 22 deletions

View file

@ -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'

View file

@ -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);

View file

@ -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);
}
/**

View file

@ -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();

View file

@ -254,7 +254,8 @@
<string name="copy_wikicode">Copy the wikitext to the clipboard</string>
<string name="wikicode_copied">The wikitext was copied to the clipboard</string>
<string name="nearby_location_not_available">Nearby might not work properly, Location not available.</string>
<string name="location_permission_rationale_nearby">Permission required to display a list of nearby places</string>
<string name="location_permission_rationale_nearby">The Commons app collects location data to
display nearby places that need photos, even when the app is in the background.</string>
<string name="nearby_directions">Directions</string>
<string name="nearby_wikidata">Wikidata</string>