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

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