mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
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:
parent
308cce46a1
commit
9efafc8e1f
5 changed files with 50 additions and 22 deletions
|
|
@ -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'
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue