Loading core/java/android/provider/BlockedNumberContract.java +91 −4 Original line number Diff line number Diff line Loading @@ -15,12 +15,16 @@ */ package android.provider; import android.annotation.IntDef; import android.annotation.WorkerThread; import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.telecom.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * <p> * The contract between the blockednumber provider and applications. Contains definitions for Loading Loading @@ -219,6 +223,63 @@ public class BlockedNumberContract { /** @hide */ public static final String RES_NUMBER_IS_BLOCKED = "blocked"; /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef( prefix = { "STATUS_" }, value = {STATUS_NOT_BLOCKED, STATUS_BLOCKED_IN_LIST, STATUS_BLOCKED_RESTRICTED, STATUS_BLOCKED_UNKNOWN_NUMBER, STATUS_BLOCKED_PAYPHONE, STATUS_BLOCKED_NOT_IN_CONTACTS}) public @interface BlockStatus {} /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was not * blocked. * @hide */ public static final int STATUS_NOT_BLOCKED = 0; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is in the list of blocked numbers maintained by the provider. * @hide */ public static final int STATUS_BLOCKED_IN_LIST = 1; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is from a restricted number. * @hide */ public static final int STATUS_BLOCKED_RESTRICTED = 2; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is from an unknown number. * @hide */ public static final int STATUS_BLOCKED_UNKNOWN_NUMBER = 3; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is from a pay phone. * @hide */ public static final int STATUS_BLOCKED_PAYPHONE = 4; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is from a number not in the users contacts. * @hide */ public static final int STATUS_BLOCKED_NOT_IN_CONTACTS = 5; /** * Integer reason indicating whether a call was blocked, and if so why. * @hide */ public static final String RES_BLOCK_STATUS = "block_status"; /** @hide */ public static final String RES_NUM_ROWS_DELETED = "num_deleted"; Loading Loading @@ -411,19 +472,23 @@ public class BlockedNumberContract { * @param context the context of the caller. * @param phoneNumber the number to check. * @param extras the extra attribute of the number. * @return {@code true} if should block the number. {@code false} otherwise. * @return result code indicating if the number should be blocked, and if so why. * Valid values are: {@link #STATUS_NOT_BLOCKED}, {@link #STATUS_BLOCKED_IN_LIST}, * {@link #STATUS_BLOCKED_NOT_IN_CONTACTS}, {@link #STATUS_BLOCKED_PAYPHONE}, * {@link #STATUS_BLOCKED_RESTRICTED}, {@link #STATUS_BLOCKED_UNKNOWN_NUMBER}. */ public static boolean shouldSystemBlockNumber(Context context, String phoneNumber, public static int shouldSystemBlockNumber(Context context, String phoneNumber, Bundle extras) { try { final Bundle res = context.getContentResolver().call( AUTHORITY_URI, METHOD_SHOULD_SYSTEM_BLOCK_NUMBER, phoneNumber, extras); return res != null && res.getBoolean(RES_NUMBER_IS_BLOCKED, false); return res != null ? res.getInt(RES_BLOCK_STATUS, STATUS_NOT_BLOCKED) : BlockedNumberContract.STATUS_NOT_BLOCKED; } catch (NullPointerException | IllegalArgumentException ex) { // The content resolver can throw an NPE or IAE; we don't want to crash Telecom if // either of these happen. Log.w(null, "shouldSystemBlockNumber: provider not ready."); return false; return BlockedNumberContract.STATUS_NOT_BLOCKED; } } Loading Loading @@ -503,6 +568,28 @@ public class BlockedNumberContract { null, extras); } /** * Converts a block status constant to a string equivalent for logging. * @hide */ public static String blockStatusToString(int blockStatus) { switch (blockStatus) { case STATUS_NOT_BLOCKED: return "not blocked"; case STATUS_BLOCKED_IN_LIST: return "blocked - in list"; case STATUS_BLOCKED_RESTRICTED: return "blocked - restricted"; case STATUS_BLOCKED_UNKNOWN_NUMBER: return "blocked - unknown"; case STATUS_BLOCKED_PAYPHONE: return "blocked - payphone"; case STATUS_BLOCKED_NOT_IN_CONTACTS: return "blocked - not in contacts"; } return "unknown"; } /** * Represents the current status of * {@link #shouldSystemBlockNumber(Context, String, Bundle)}. If emergency services Loading Loading
core/java/android/provider/BlockedNumberContract.java +91 −4 Original line number Diff line number Diff line Loading @@ -15,12 +15,16 @@ */ package android.provider; import android.annotation.IntDef; import android.annotation.WorkerThread; import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.telecom.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * <p> * The contract between the blockednumber provider and applications. Contains definitions for Loading Loading @@ -219,6 +223,63 @@ public class BlockedNumberContract { /** @hide */ public static final String RES_NUMBER_IS_BLOCKED = "blocked"; /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef( prefix = { "STATUS_" }, value = {STATUS_NOT_BLOCKED, STATUS_BLOCKED_IN_LIST, STATUS_BLOCKED_RESTRICTED, STATUS_BLOCKED_UNKNOWN_NUMBER, STATUS_BLOCKED_PAYPHONE, STATUS_BLOCKED_NOT_IN_CONTACTS}) public @interface BlockStatus {} /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was not * blocked. * @hide */ public static final int STATUS_NOT_BLOCKED = 0; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is in the list of blocked numbers maintained by the provider. * @hide */ public static final int STATUS_BLOCKED_IN_LIST = 1; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is from a restricted number. * @hide */ public static final int STATUS_BLOCKED_RESTRICTED = 2; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is from an unknown number. * @hide */ public static final int STATUS_BLOCKED_UNKNOWN_NUMBER = 3; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is from a pay phone. * @hide */ public static final int STATUS_BLOCKED_PAYPHONE = 4; /** * Integer reason code used with {@link #RES_BLOCK_STATUS} to indicate that a call was blocked * because it is from a number not in the users contacts. * @hide */ public static final int STATUS_BLOCKED_NOT_IN_CONTACTS = 5; /** * Integer reason indicating whether a call was blocked, and if so why. * @hide */ public static final String RES_BLOCK_STATUS = "block_status"; /** @hide */ public static final String RES_NUM_ROWS_DELETED = "num_deleted"; Loading Loading @@ -411,19 +472,23 @@ public class BlockedNumberContract { * @param context the context of the caller. * @param phoneNumber the number to check. * @param extras the extra attribute of the number. * @return {@code true} if should block the number. {@code false} otherwise. * @return result code indicating if the number should be blocked, and if so why. * Valid values are: {@link #STATUS_NOT_BLOCKED}, {@link #STATUS_BLOCKED_IN_LIST}, * {@link #STATUS_BLOCKED_NOT_IN_CONTACTS}, {@link #STATUS_BLOCKED_PAYPHONE}, * {@link #STATUS_BLOCKED_RESTRICTED}, {@link #STATUS_BLOCKED_UNKNOWN_NUMBER}. */ public static boolean shouldSystemBlockNumber(Context context, String phoneNumber, public static int shouldSystemBlockNumber(Context context, String phoneNumber, Bundle extras) { try { final Bundle res = context.getContentResolver().call( AUTHORITY_URI, METHOD_SHOULD_SYSTEM_BLOCK_NUMBER, phoneNumber, extras); return res != null && res.getBoolean(RES_NUMBER_IS_BLOCKED, false); return res != null ? res.getInt(RES_BLOCK_STATUS, STATUS_NOT_BLOCKED) : BlockedNumberContract.STATUS_NOT_BLOCKED; } catch (NullPointerException | IllegalArgumentException ex) { // The content resolver can throw an NPE or IAE; we don't want to crash Telecom if // either of these happen. Log.w(null, "shouldSystemBlockNumber: provider not ready."); return false; return BlockedNumberContract.STATUS_NOT_BLOCKED; } } Loading Loading @@ -503,6 +568,28 @@ public class BlockedNumberContract { null, extras); } /** * Converts a block status constant to a string equivalent for logging. * @hide */ public static String blockStatusToString(int blockStatus) { switch (blockStatus) { case STATUS_NOT_BLOCKED: return "not blocked"; case STATUS_BLOCKED_IN_LIST: return "blocked - in list"; case STATUS_BLOCKED_RESTRICTED: return "blocked - restricted"; case STATUS_BLOCKED_UNKNOWN_NUMBER: return "blocked - unknown"; case STATUS_BLOCKED_PAYPHONE: return "blocked - payphone"; case STATUS_BLOCKED_NOT_IN_CONTACTS: return "blocked - not in contacts"; } return "unknown"; } /** * Represents the current status of * {@link #shouldSystemBlockNumber(Context, String, Bundle)}. If emergency services Loading