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