1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 
17 package com.android.inputmethod.latin.permissions;
18 
19 import android.app.Activity;
20 import android.content.Context;
21 import android.content.pm.PackageManager;
22 import android.os.Build;
23 import androidx.annotation.NonNull;
24 import androidx.core.app.ActivityCompat;
25 import androidx.core.content.ContextCompat;
26 
27 import java.util.ArrayList;
28 import java.util.List;
29 
30 /**
31  * Utility class for permissions.
32  */
33 public class PermissionsUtil {
34 
35     /**
36      * Returns the list of permissions not granted from the given list of permissions.
37      * @param context Context
38      * @param permissions list of permissions to check.
39      * @return the list of permissions that do not have permission to use.
40      */
getDeniedPermissions(Context context, String... permissions)41     public static List<String> getDeniedPermissions(Context context,
42                                                           String... permissions) {
43         final List<String> deniedPermissions = new ArrayList<>();
44         for (String permission : permissions) {
45             if (ContextCompat.checkSelfPermission(context, permission)
46                     != PackageManager.PERMISSION_GRANTED) {
47                 deniedPermissions.add(permission);
48             }
49         }
50         return deniedPermissions;
51     }
52 
53     /**
54      * Uses the given activity and requests the user for permissions.
55      * @param activity activity to use.
56      * @param requestCode request code/id to use.
57      * @param permissions String array of permissions that needs to be requested.
58      */
requestPermissions(Activity activity, int requestCode, String[] permissions)59     public static void requestPermissions(Activity activity, int requestCode,
60                                           String[] permissions) {
61         ActivityCompat.requestPermissions(activity, permissions, requestCode);
62     }
63 
64     /**
65      * Checks if all the permissions are granted.
66      */
allGranted(@onNull int[] grantResults)67     public static boolean allGranted(@NonNull int[] grantResults) {
68         for (int result : grantResults) {
69             if (result != PackageManager.PERMISSION_GRANTED) {
70                 return false;
71             }
72         }
73         return true;
74     }
75 
76     /**
77      * Queries if al the permissions are granted for the given permission strings.
78      */
checkAllPermissionsGranted(Context context, String... permissions)79     public static boolean checkAllPermissionsGranted(Context context, String... permissions) {
80         if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
81             // For all pre-M devices, we should have all the premissions granted on install.
82             return true;
83         }
84 
85         for (String permission : permissions) {
86             if (ContextCompat.checkSelfPermission(context, permission)
87                     != PackageManager.PERMISSION_GRANTED) {
88                 return false;
89             }
90         }
91         return true;
92     }
93 }
94