/** * Quickly provides an array of refused permissions from a list of permissions provided during initialization. * * @param context The context to be used. * @return An array of refused permissions. */ public String[] getRefusedPermissions(Context context) { if (context == null) { throw new IllegalArgumentException("context is null"); } return filterPermissions(context, permissions, PackageManager.PERMISSION_DENIED); }
/** * Checks whether you have been granted a particular permission. * This method is similar to {@link Context#checkSelfPermission(String)}, * but returns a boolean value instead of integer value. * * @param context Provide a context. Can't be {@code null}. * @param permission A permission that should be checked. Can't be {@code null}. * @return {@code true} when permission is granted, otherwise {@code false}. */ public static boolean checkPermission(Context context, String permission) { return checkPermissionInt(context, permission) == PackageManager.PERMISSION_GRANTED; }
@Test public void testCheckPermission() { assertThat(Permissive.checkPermission(mockContext, TEST_GRANTED_PERMISSION), is(true)); assertThat(Permissive.checkPermission(mockContext, TEST_DENIED_PERMISSION), is(false)); }
private boolean showRationaleForRequest(Permissive.Request request) { Activity activity = request.getContext(); if (null == activity) { return false; } final String[] rationalePermissions = Permissive.getPermissionsRequiringRationale(activity, request.getPermissions()); if (request.shouldDisplayRationale()) { final PermissiveMessenger messenger = new PermissiveMessenger(handler, request.getPermissions()); return request.showRationale(rationalePermissions, messenger) && !request.rebuild; } return false; }
@Test public void testPermissionsFiltering() { String[] result = Permissive.filterPermissions(mockContext, new String[]{TEST_DENIED_PERMISSION, TEST_GRANTED_PERMISSION}, PackageManager.PERMISSION_GRANTED); assertArrayEquals(result, new String[]{TEST_GRANTED_PERMISSION}); result = Permissive.filterPermissions(mockContext, new String[]{TEST_DENIED_PERMISSION, TEST_GRANTED_PERMISSION}, PackageManager.PERMISSION_DENIED); assertArrayEquals(result, new String[]{TEST_DENIED_PERMISSION}); }
private static int[] getPermissionGrants(Context context, String[] permissions) { final int[] grantResults = new int[permissions.length]; final int permissionCount = permissions.length; for (int i = 0; i < permissionCount; i++) { grantResults[i] = Permissive.checkPermissionInt(context, permissions[i]); } return grantResults; }
@Override public void onResume() { super.onResume(); if (Permissive.filterPermissions(getContext(), getPermissiveMessenger().getRequestedPermissions(), PackageManager.PERMISSION_GRANTED).length > 0) { // if user granted permission via Settings, then finish this fragment finishFragment(); } }
/** * Filters all provided permissions and returns only granted or denied. * * @param context Provide a context. Can't be {@code null}. * @param permissions Permissions that should be checked. Can't be {@code null}. * @param filter One of: {@link PackageManager#PERMISSION_GRANTED} or {@link PackageManager#PERMISSION_DENIED} * @return Permissions that match the given filter flag. */ public static String[] filterPermissions(Context context, String[] permissions, int filter) { final ArrayList<String> filtered = new ArrayList<>(); for (String permission : permissions) { if (checkPermissionInt(context, permission) == filter) { filtered.add(permission); } } return filtered.toArray(new String[filtered.size()]); }
/** * @param activity An Activity is required here. * @param permissions An array of permissions to be checked. * @return An array of permissions that may require a rationale to be shown. */ static String[] getPermissionsRequiringRationale(Activity activity, String[] permissions) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { final List<String> rationalePermissions = new ArrayList<>(); for (String permission : permissions) { if (checkPermissionInt(activity, permission) == PackageManager.PERMISSION_DENIED && activity.shouldShowRequestPermissionRationale(permission)) { rationalePermissions.add(permission); } } return rationalePermissions.toArray(new String[rationalePermissions.size()]); } return new String[0]; }