Advertisement
Mefi100feLL

Untitled

Jan 20th, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.82 KB | None | 0 0
  1. import android.content.Intent;
  2. import android.content.pm.PackageManager;
  3. import android.net.Uri;
  4. import android.os.Build;
  5. import android.provider.Settings;
  6. import android.support.v4.app.ActivityCompat;
  7. import android.support.v4.content.ContextCompat;
  8.  
  9. import com.afollestad.materialdialogs.MaterialDialog;
  10.  
  11. import java.util.HashMap;
  12. import java.util.Map;
  13.  
  14. public class PermissionsManager {
  15.  
  16.     public static final int REQUEST_FOR_PERMISSON_READ_EXTRNAL_STORAGE = 101;
  17.     public static final int REQUEST_FOR_PERMISSON_RECORD_AUDIO = 102;
  18.  
  19.     private final PermissionsRequester requester;
  20.     private Map<Permission, PermissionCallback> callbacks = new HashMap<>();
  21.  
  22.     public PermissionsManager(PermissionsRequester requester) {
  23.         this.requester = requester;
  24.     }
  25.  
  26.     public void checkPermission(Permission permission, PermissionCallback listener) {
  27.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  28.             callbacks.put(permission, listener);
  29.             if (ContextCompat.checkSelfPermission(requester.getActivity(), permission.getPermission()) != PackageManager.PERMISSION_GRANTED) {
  30.                 if (requester.shouldForShowRequestPermissionRationale(permission.getPermission())) {
  31.                     showDefaultRationale(permission);
  32.                 } else {
  33.                     requester.requestForPermissions(new String[]{permission.getPermission()}, permission.getRequestCode());
  34.                 }
  35.             } else {
  36.                 listener.onPermissionGranted();
  37.             }
  38.         } else {
  39.             listener.onPermissionGranted();
  40.         }
  41.     }
  42.  
  43.     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  44.         Permission permission;
  45.         PermissionCallback listener;
  46.         switch (requestCode) {
  47.             case REQUEST_FOR_PERMISSON_READ_EXTRNAL_STORAGE: {
  48.                 permission = new ReadExternalStoragePermission();
  49.                 listener = callbacks.get(permission);
  50.             }
  51.             break;
  52.             case REQUEST_FOR_PERMISSON_RECORD_AUDIO: {
  53.                 permission = new RecordAudioPermission();
  54.                 listener = callbacks.get(permission);
  55.             }
  56.             break;
  57.             default:
  58.                 return;
  59.         }
  60.         if (isPermissionGranted(grantResults)) {
  61.             listener.onPermissionGranted();
  62.         } else {
  63.             if (!ActivityCompat.shouldShowRequestPermissionRationale(requester.getActivity(), permission.getPermission())) {
  64.                 listener.onNeverShowClicked();
  65.             }
  66.         }
  67.     }
  68.  
  69.     public void openApplicationSettings() {
  70.         Intent appSettingsIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + requester.getActivity().getPackageName()));
  71.         requester.getActivity().startActivityForResult(appSettingsIntent, REQUEST_FOR_PERMISSON_READ_EXTRNAL_STORAGE);
  72.     }
  73.  
  74.     private boolean isPermissionGranted(int[] grantResults) {
  75.         boolean isPermissionGranted = true;
  76.         if (grantResults.length <= 0)
  77.             return false;
  78.         for (int result : grantResults)
  79.             if (result == PackageManager.PERMISSION_DENIED)
  80.                 isPermissionGranted = false;
  81.         return isPermissionGranted;
  82.     }
  83.  
  84.     private void showDefaultRationale(Permission permission) {
  85.         MaterialDialog.Builder builder = new MaterialDialog.Builder(requester.getActivity());
  86.         builder.title(R.string.dialog_title_permission_record_audio);
  87.         builder.content(permission.getRationaleRes());
  88.         builder.positiveText(R.string.dialog_button_ok);
  89.         builder.onPositive((dialog, which) ->
  90.                 requester.requestForPermissions(new String[]{permission.getPermission()}, permission.getRequestCode()));
  91.         builder.build().show();
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement