Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.content.Intent;
- import android.content.pm.PackageManager;
- import android.net.Uri;
- import android.os.Build;
- import android.provider.Settings;
- import android.support.v4.app.ActivityCompat;
- import android.support.v4.content.ContextCompat;
- import com.afollestad.materialdialogs.MaterialDialog;
- import java.util.HashMap;
- import java.util.Map;
- public class PermissionsManager {
- public static final int REQUEST_FOR_PERMISSON_READ_EXTRNAL_STORAGE = 101;
- public static final int REQUEST_FOR_PERMISSON_RECORD_AUDIO = 102;
- private final PermissionsRequester requester;
- private Map<Permission, PermissionCallback> callbacks = new HashMap<>();
- public PermissionsManager(PermissionsRequester requester) {
- this.requester = requester;
- }
- public void checkPermission(Permission permission, PermissionCallback listener) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- callbacks.put(permission, listener);
- if (ContextCompat.checkSelfPermission(requester.getActivity(), permission.getPermission()) != PackageManager.PERMISSION_GRANTED) {
- if (requester.shouldForShowRequestPermissionRationale(permission.getPermission())) {
- showDefaultRationale(permission);
- } else {
- requester.requestForPermissions(new String[]{permission.getPermission()}, permission.getRequestCode());
- }
- } else {
- listener.onPermissionGranted();
- }
- } else {
- listener.onPermissionGranted();
- }
- }
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
- Permission permission;
- PermissionCallback listener;
- switch (requestCode) {
- case REQUEST_FOR_PERMISSON_READ_EXTRNAL_STORAGE: {
- permission = new ReadExternalStoragePermission();
- listener = callbacks.get(permission);
- }
- break;
- case REQUEST_FOR_PERMISSON_RECORD_AUDIO: {
- permission = new RecordAudioPermission();
- listener = callbacks.get(permission);
- }
- break;
- default:
- return;
- }
- if (isPermissionGranted(grantResults)) {
- listener.onPermissionGranted();
- } else {
- if (!ActivityCompat.shouldShowRequestPermissionRationale(requester.getActivity(), permission.getPermission())) {
- listener.onNeverShowClicked();
- }
- }
- }
- public void openApplicationSettings() {
- Intent appSettingsIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + requester.getActivity().getPackageName()));
- requester.getActivity().startActivityForResult(appSettingsIntent, REQUEST_FOR_PERMISSON_READ_EXTRNAL_STORAGE);
- }
- private boolean isPermissionGranted(int[] grantResults) {
- boolean isPermissionGranted = true;
- if (grantResults.length <= 0)
- return false;
- for (int result : grantResults)
- if (result == PackageManager.PERMISSION_DENIED)
- isPermissionGranted = false;
- return isPermissionGranted;
- }
- private void showDefaultRationale(Permission permission) {
- MaterialDialog.Builder builder = new MaterialDialog.Builder(requester.getActivity());
- builder.title(R.string.dialog_title_permission_record_audio);
- builder.content(permission.getRationaleRes());
- builder.positiveText(R.string.dialog_button_ok);
- builder.onPositive((dialog, which) ->
- requester.requestForPermissions(new String[]{permission.getPermission()}, permission.getRequestCode()));
- builder.build().show();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement