86 lines
3.5 KiB
Java
86 lines
3.5 KiB
Java
package com.android.internal.telephony;
|
|
|
|
import android.content.Context;
|
|
import android.os.Bundle;
|
|
import android.provider.BlockedNumberContract;
|
|
|
|
import com.android.telephony.Rlog;
|
|
|
|
/**
|
|
* {@hide} Checks for blocked phone numbers against {@link BlockedNumberContract}
|
|
*/
|
|
public class BlockChecker {
|
|
private static final String TAG = "BlockChecker";
|
|
private static final boolean VDBG = false; // STOPSHIP if true.
|
|
|
|
/**
|
|
* Returns {@code true} if {@code phoneNumber} is blocked according to {@code extras}.
|
|
* <p>
|
|
* This method catches all underlying exceptions to ensure that this method never throws any
|
|
* exception.
|
|
* <p>
|
|
* @deprecated use {@link #isBlocked(Context, String, Bundle)} instead.
|
|
*
|
|
* @param context the context of the caller.
|
|
* @param phoneNumber the number to check.
|
|
* @return {@code true} if the number is blocked. {@code false} otherwise.
|
|
*/
|
|
@Deprecated
|
|
public static boolean isBlocked(Context context, String phoneNumber) {
|
|
return isBlocked(context, phoneNumber, null /* extras */);
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if {@code phoneNumber} is blocked according to {@code extras}.
|
|
* <p>
|
|
* This method catches all underlying exceptions to ensure that this method never throws any
|
|
* exception.
|
|
*
|
|
* @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 the number is blocked. {@code false} otherwise.
|
|
*/
|
|
public static boolean isBlocked(Context context, String phoneNumber, Bundle extras) {
|
|
return getBlockStatus(context, phoneNumber, extras)
|
|
!= BlockedNumberContract.STATUS_NOT_BLOCKED;
|
|
}
|
|
|
|
/**
|
|
* Returns the call blocking status for the {@code phoneNumber}.
|
|
* <p>
|
|
* This method catches all underlying exceptions to ensure that this method never throws any
|
|
* exception.
|
|
*
|
|
* @param context the context of the caller.
|
|
* @param phoneNumber the number to check.
|
|
* @param extras the extra attribute of the number.
|
|
* @return result code indicating if the number should be blocked, and if so why.
|
|
* Valid values are: {@link BlockedNumberContract#STATUS_NOT_BLOCKED},
|
|
* {@link BlockedNumberContract#STATUS_BLOCKED_IN_LIST},
|
|
* {@link BlockedNumberContract#STATUS_BLOCKED_NOT_IN_CONTACTS},
|
|
* {@link BlockedNumberContract#STATUS_BLOCKED_PAYPHONE},
|
|
* {@link BlockedNumberContract#STATUS_BLOCKED_RESTRICTED},
|
|
* {@link BlockedNumberContract#STATUS_BLOCKED_UNKNOWN_NUMBER}.
|
|
*/
|
|
public static int getBlockStatus(Context context, String phoneNumber, Bundle extras) {
|
|
int blockStatus = BlockedNumberContract.STATUS_NOT_BLOCKED;
|
|
long startTimeNano = System.nanoTime();
|
|
|
|
try {
|
|
blockStatus = BlockedNumberContract.SystemContract.shouldSystemBlockNumber(
|
|
context, phoneNumber, extras);
|
|
if (blockStatus != BlockedNumberContract.STATUS_NOT_BLOCKED) {
|
|
Rlog.d(TAG, phoneNumber + " is blocked.");
|
|
}
|
|
} catch (Exception e) {
|
|
Rlog.e(TAG, "Exception checking for blocked number: " + e);
|
|
}
|
|
int durationMillis = (int) ((System.nanoTime() - startTimeNano) / 1000000);
|
|
if (durationMillis > 500 || VDBG) {
|
|
Rlog.d(TAG, "Blocked number lookup took: " + durationMillis + " ms.");
|
|
}
|
|
return blockStatus;
|
|
}
|
|
}
|