diff options
Diffstat (limited to 'java/com/android/dialer/util')
-rw-r--r-- | java/com/android/dialer/util/CallUtil.java | 22 | ||||
-rw-r--r-- | java/com/android/dialer/util/PermissionsUtil.java | 60 |
2 files changed, 81 insertions, 1 deletions
diff --git a/java/com/android/dialer/util/CallUtil.java b/java/com/android/dialer/util/CallUtil.java index 81a4bb21e..0afe930c9 100644 --- a/java/com/android/dialer/util/CallUtil.java +++ b/java/com/android/dialer/util/CallUtil.java @@ -21,6 +21,7 @@ import android.net.Uri; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; +import com.android.dialer.common.LogUtil; import com.android.dialer.compat.CompatUtils; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import java.util.List; @@ -40,6 +41,9 @@ public class CallUtil { */ public static final int VIDEO_CALLING_PRESENCE = 2; + private static boolean hasInitializedIsVideoEnabledState; + private static boolean cachedIsVideoEnabledState; + /** Return Uri with an appropriate scheme, accepting both SIP and usual phone call numbers. */ public static Uri getCallUri(String number) { if (PhoneNumberHelper.isUriNumber(number)) { @@ -102,7 +106,23 @@ public class CallUtil { * false} otherwise. */ public static boolean isVideoEnabled(Context context) { - return (getVideoCallingAvailability(context) & VIDEO_CALLING_ENABLED) != 0; + boolean isVideoEnabled = (getVideoCallingAvailability(context) & VIDEO_CALLING_ENABLED) != 0; + + // Log everytime the video enabled state changes. + if (!hasInitializedIsVideoEnabledState) { + LogUtil.i("CallUtil.isVideoEnabled", "isVideoEnabled: " + isVideoEnabled); + hasInitializedIsVideoEnabledState = true; + cachedIsVideoEnabledState = isVideoEnabled; + } else if (cachedIsVideoEnabledState != isVideoEnabled) { + LogUtil.i( + "CallUtil.isVideoEnabled", + "isVideoEnabled changed from %b to %b", + cachedIsVideoEnabledState, + isVideoEnabled); + cachedIsVideoEnabledState = isVideoEnabled; + } + + return isVideoEnabled; } /** diff --git a/java/com/android/dialer/util/PermissionsUtil.java b/java/com/android/dialer/util/PermissionsUtil.java index 466e86204..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); } @@ -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()]); + } } |