summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/util/PermissionsUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/util/PermissionsUtil.java')
-rw-r--r--java/com/android/dialer/util/PermissionsUtil.java68
1 files changed, 64 insertions, 4 deletions
diff --git a/java/com/android/dialer/util/PermissionsUtil.java b/java/com/android/dialer/util/PermissionsUtil.java
index 72a59eaef..34828317d 100644
--- a/java/com/android/dialer/util/PermissionsUtil.java
+++ b/java/com/android/dialer/util/PermissionsUtil.java
@@ -16,15 +16,33 @@
package com.android.dialer.util;
+import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
+import static android.Manifest.permission.ACCESS_FINE_LOCATION;
+import static android.Manifest.permission.ADD_VOICEMAIL;
+import static android.Manifest.permission.CALL_PHONE;
+import static android.Manifest.permission.MODIFY_PHONE_STATE;
+import static android.Manifest.permission.READ_CALL_LOG;
+import static android.Manifest.permission.READ_CONTACTS;
+import static android.Manifest.permission.READ_PHONE_STATE;
+import static android.Manifest.permission.READ_VOICEMAIL;
+import static android.Manifest.permission.WRITE_CALL_LOG;
+import static android.Manifest.permission.WRITE_CONTACTS;
+import static android.Manifest.permission.WRITE_VOICEMAIL;
+
import android.Manifest.permission;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
+import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.LocalBroadcastManager;
import com.android.dialer.common.LogUtil;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
/** Utility class to help with runtime permissions. */
public class PermissionsUtil {
@@ -32,6 +50,27 @@ public class PermissionsUtil {
private static final String PERMISSION_PREFERENCE = "dialer_permissions";
private static final String CEQUINT_PERMISSION = "com.cequint.ecid.CALLER_ID_LOOKUP";
+ // Permissions list retrieved from application manifest.
+ // Starting in Android O Permissions must be explicitly enumerated:
+ // https://developer.android.com/preview/behavior-changes.html#rmp
+ public static final List<String> allPhoneGroupPermissionsUsedInDialer =
+ Collections.unmodifiableList(
+ Arrays.asList(
+ READ_CALL_LOG,
+ WRITE_CALL_LOG,
+ READ_PHONE_STATE,
+ MODIFY_PHONE_STATE,
+ CALL_PHONE,
+ ADD_VOICEMAIL,
+ WRITE_VOICEMAIL,
+ READ_VOICEMAIL));
+
+ public static final List<String> allContactsGroupPermissionsUsedInDialer =
+ Collections.unmodifiableList(Arrays.asList(READ_CONTACTS, WRITE_CONTACTS));
+
+ public static final List<String> allLocationGroupPermissionsUsedInDialer =
+ Collections.unmodifiableList(Arrays.asList(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION));
+
public static boolean hasPhonePermissions(Context context) {
return hasPermission(context, permission.CALL_PHONE);
}
@@ -72,15 +111,15 @@ public class PermissionsUtil {
return hasPermission(context, permission.WRITE_VOICEMAIL);
}
+ public static boolean hasAddVoicemailPermissions(Context context) {
+ return hasPermission(context, permission.ADD_VOICEMAIL);
+ }
+
public static boolean hasPermission(Context context, String permission) {
return ContextCompat.checkSelfPermission(context, permission)
== PackageManager.PERMISSION_GRANTED;
}
- public static boolean hasAddVoicemailPermissions(Context context) {
- return hasPermission(context, permission.ADD_VOICEMAIL);
- }
-
/**
* Checks {@link android.content.SharedPreferences} if a permission has been requested before.
*
@@ -147,4 +186,25 @@ public class PermissionsUtil {
final Intent intent = new Intent(permission);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
+
+ /**
+ * Returns a list of permissions currently not granted to the application from the supplied list.
+ *
+ * @param context - The Application context.
+ * @param permissionsList - A list of permissions to check if the current application has been
+ * granted.
+ * @return An array of permissions that are currently DENIED to the application; a subset of
+ * permissionsList.
+ */
+ @NonNull
+ public static String[] getPermissionsCurrentlyDenied(
+ @NonNull Context context, @NonNull List<String> permissionsList) {
+ List<String> permissionsCurrentlyDenied = new ArrayList<>();
+ for (String permission : permissionsList) {
+ if (!hasPermission(context, permission)) {
+ permissionsCurrentlyDenied.add(permission);
+ }
+ }
+ return permissionsCurrentlyDenied.toArray(new String[permissionsCurrentlyDenied.size()]);
+ }
}