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}