1ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastrypackage com.android.internal.telephony; 2ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry 3ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastryimport android.content.Context; 4ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastryimport android.provider.BlockedNumberContract; 5ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastryimport android.telephony.Rlog; 6ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry 7ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry/** 8ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry * {@hide} Checks for blocked phone numbers against {@link BlockedNumberContract} 9ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry */ 10ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastrypublic class BlockChecker { 11ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry private static final String TAG = "BlockChecker"; 12ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry private static final boolean VDBG = false; // STOPSHIP if true. 13ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry 14ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry /** 15ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry * Returns {@code true} if {@code phoneNumber} is blocked. 16ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry * <p> 17ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry * This method catches all underlying exceptions to ensure that this method never throws any 18ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry * exception. 19ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry */ 20ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry public static boolean isBlocked(Context context, String phoneNumber) { 21ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry boolean isBlocked = false; 22ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry long startTimeNano = System.nanoTime(); 23ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry 24ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry try { 258d01f92026c98b4fb235e70555c57261ea01e02fAbhijith Shastry if (BlockedNumberContract.SystemContract.shouldSystemBlockNumber( 268d01f92026c98b4fb235e70555c57261ea01e02fAbhijith Shastry context, phoneNumber)) { 27ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry Rlog.d(TAG, phoneNumber + " is blocked."); 28ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry isBlocked = true; 29ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry } 30ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry } catch (Exception e) { 31ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry Rlog.e(TAG, "Exception checking for blocked number: " + e); 32ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry } 33ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry 34ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry int durationMillis = (int) ((System.nanoTime() - startTimeNano) / 1000000); 35ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry if (durationMillis > 500 || VDBG) { 36ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry Rlog.d(TAG, "Blocked number lookup took: " + durationMillis + " ms."); 37ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry } 38ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry return isBlocked; 39ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry } 40ba51280f53e677ac527b11bd9a5dfa819740f70aAbhijith Shastry} 41