PermissionUtils.java

 1package eu.siacs.conversations.utils;
 2
 3import android.Manifest;
 4import android.app.Activity;
 5import android.content.pm.PackageManager;
 6import android.os.Build;
 7
 8import androidx.core.app.ActivityCompat;
 9
10import com.google.common.collect.ImmutableList;
11import com.google.common.primitives.Ints;
12
13import java.util.ArrayList;
14import java.util.List;
15
16public class PermissionUtils {
17
18    public static boolean allGranted(int[] grantResults) {
19        for (int grantResult : grantResults) {
20            if (grantResult != PackageManager.PERMISSION_GRANTED) {
21                return false;
22            }
23        }
24        return true;
25    }
26
27    public static boolean writeGranted(int[] grantResults, String[] permission) {
28        for (int i = 0; i < grantResults.length; ++i) {
29            if (Manifest.permission.WRITE_EXTERNAL_STORAGE.equals(permission[i])) {
30                return grantResults[i] == PackageManager.PERMISSION_GRANTED;
31            }
32        }
33        return false;
34    }
35
36    public static String getFirstDenied(int[] grantResults, String[] permissions) {
37        for (int i = 0; i < grantResults.length; ++i) {
38            if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
39                return permissions[i];
40            }
41        }
42        return null;
43    }
44
45    public static class PermissionResult {
46        public final String[] permissions;
47        public final int[] grantResults;
48
49        public PermissionResult(String[] permissions, int[] grantResults) {
50            this.permissions = permissions;
51            this.grantResults = grantResults;
52        }
53    }
54
55    public static PermissionResult removeBluetoothConnect(
56            final String[] inPermissions, final int[] inGrantResults) {
57        final List<String> outPermissions = new ArrayList<>();
58        final List<Integer> outGrantResults = new ArrayList<>();
59        for (int i = 0; i < Math.min(inPermissions.length, inGrantResults.length); ++i) {
60            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
61                if (inPermissions[i].equals(Manifest.permission.BLUETOOTH_CONNECT)) {
62                    continue;
63                }
64            }
65            outPermissions.add(inPermissions[i]);
66            outGrantResults.add(inGrantResults[i]);
67        }
68
69        return new PermissionResult(
70                outPermissions.toArray(new String[0]), Ints.toArray(outGrantResults));
71    }
72
73    public static boolean hasPermission(
74            final Activity activity, final List<String> permissions, final int requestCode) {
75        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
76            final ImmutableList.Builder<String> missingPermissions = new ImmutableList.Builder<>();
77            for (final String permission : permissions) {
78                if (ActivityCompat.checkSelfPermission(activity, permission)
79                        != PackageManager.PERMISSION_GRANTED) {
80                    missingPermissions.add(permission);
81                }
82            }
83            final ImmutableList<String> missing = missingPermissions.build();
84            if (missing.size() == 0) {
85                return true;
86            }
87            ActivityCompat.requestPermissions(
88                    activity, missing.toArray(new String[0]), requestCode);
89            return false;
90        } else {
91            return true;
92        }
93    }
94}