mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-29 13:53:54 +01:00
fixes issues related to location permission denial even when allowed inside in-app camera flow (#5313)
* fixes issues related to location permission denial even when allowed inside in-app camera flow * fixes related to in app camera location permissions
This commit is contained in:
parent
8d604a25fa
commit
9525409b9b
18 changed files with 442 additions and 251 deletions
|
|
@ -5,8 +5,10 @@ import android.app.Activity;
|
|||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.provider.Settings;
|
||||
import android.widget.Toast;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.filepicker.Constants;
|
||||
import fr.free.nrw.commons.filepicker.Constants.RequestCodes;
|
||||
import fr.free.nrw.commons.utils.DialogUtil;
|
||||
import fr.free.nrw.commons.utils.PermissionUtils;
|
||||
|
||||
|
|
@ -55,27 +57,62 @@ public class LocationPermissionsHelper {
|
|||
Dialog locationAccessDialog,
|
||||
Dialog locationOffDialog
|
||||
) {
|
||||
PermissionUtils.checkPermissionsAndPerformAction(activity,
|
||||
new String[]{permission.ACCESS_FINE_LOCATION},
|
||||
() -> {
|
||||
if(!isLocationAccessToAppsTurnedOn()) {
|
||||
showLocationOffDialog(locationOffDialog);
|
||||
} else {
|
||||
if (callback != null) {
|
||||
callback.onLocationPermissionGranted();
|
||||
}
|
||||
if (PermissionUtils.hasPermission(activity, new String[]{permission.ACCESS_FINE_LOCATION})) {
|
||||
callback.onLocationPermissionGranted();
|
||||
} else {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission.ACCESS_FINE_LOCATION)) {
|
||||
if (locationAccessDialog != null && locationOffDialog != null) {
|
||||
DialogUtil.showAlertDialog(activity, activity.getString(locationAccessDialog.dialogTitleResource),
|
||||
activity.getString(locationAccessDialog.dialogTextResource),
|
||||
activity.getString(android.R.string.ok),
|
||||
activity.getString(android.R.string.cancel),
|
||||
() -> {
|
||||
if (!isLocationAccessToAppsTurnedOn()) {
|
||||
showLocationOffDialog(activity);
|
||||
} else {
|
||||
ActivityCompat.requestPermissions(activity,
|
||||
new String[]{permission.ACCESS_FINE_LOCATION}, 1);
|
||||
}
|
||||
},
|
||||
() -> callback.onLocationPermissionDenied(activity.getString(R.string.in_app_camera_location_permission_denied)),
|
||||
null,
|
||||
false);
|
||||
}
|
||||
},
|
||||
() -> {
|
||||
if (callback != null) {
|
||||
callback.onLocationPermissionDenied(activity.getString(
|
||||
R.string.in_app_camera_location_permission_denied));
|
||||
}
|
||||
},
|
||||
locationAccessDialog.dialogTitleResource,
|
||||
locationAccessDialog.dialogTextResource);
|
||||
} else {
|
||||
ActivityCompat.requestPermissions(activity, new String[]{permission.ACCESS_FINE_LOCATION},
|
||||
RequestCodes.LOCATION);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void showLocationOffDialog(Activity activity) {
|
||||
DialogUtil
|
||||
.showAlertDialog(activity,
|
||||
activity.getString(R.string.ask_to_turn_location_on),
|
||||
activity.getString(R.string.in_app_camera_needs_location),
|
||||
activity.getString(R.string.title_app_shortcut_setting),
|
||||
activity.getString(R.string.cancel),
|
||||
() -> openLocationSettings(activity),
|
||||
() -> callback.onLocationPermissionDenied(activity.getString(
|
||||
R.string.in_app_camera_location_unavailable)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Open location source settings so that apps with location access can access it
|
||||
*
|
||||
* TODO: modify it to fix https://github.com/commons-app/apps-android-commons/issues/5255
|
||||
*/
|
||||
|
||||
public void openLocationSettings(Activity activity) {
|
||||
final Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
|
||||
final PackageManager packageManager = activity.getPackageManager();
|
||||
|
||||
if (intent.resolveActivity(packageManager)!= null) {
|
||||
activity.startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if apps have access to location even after having individual access
|
||||
*
|
||||
|
|
@ -85,38 +122,6 @@ public class LocationPermissionsHelper {
|
|||
return (locationManager.isNetworkProviderEnabled() || locationManager.isGPSProviderEnabled());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ask user to grant location access to apps
|
||||
*
|
||||
*/
|
||||
|
||||
private void showLocationOffDialog(Dialog locationOffDialog) {
|
||||
DialogUtil
|
||||
.showAlertDialog(activity,
|
||||
activity.getString(locationOffDialog.dialogTitleResource),
|
||||
activity.getString(locationOffDialog.dialogTextResource),
|
||||
activity.getString(R.string.title_app_shortcut_setting),
|
||||
activity.getString(R.string.cancel),
|
||||
() -> openLocationSettings(),
|
||||
() -> callback.onLocationPermissionDenied(activity.getString(
|
||||
R.string.in_app_camera_location_unavailable)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Open location source settings so that apps with location access can access it
|
||||
*
|
||||
* TODO: modify it to fix https://github.com/commons-app/apps-android-commons/issues/5255
|
||||
*/
|
||||
|
||||
private void openLocationSettings() {
|
||||
final Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
|
||||
final PackageManager packageManager = activity.getPackageManager();
|
||||
|
||||
if (intent.resolveActivity(packageManager)!= null) {
|
||||
activity.startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle onPermissionDenied within individual classes based on the requirements
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue