Provide debug hook for call blocking / E911.

Add a systems settings config, which is checked for the delay
threshold if a particular debug VERBOSE logging mode is used.

Usage:
adb shell setprop log.tag.DebugEmergencyCall VERBOSE
adb shell settings put system dialer_emergency_call_threshold_ms 60000

Bug: 25216954
Change-Id: Ia9b179e16819d3d8232cbedd49d5744d7b69a825
diff --git a/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
index cceaca9..45fa6b7 100644
--- a/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
+++ b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
@@ -23,6 +23,7 @@
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
+import android.provider.Settings;
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import android.util.Log;
@@ -31,6 +32,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import com.android.contacts.common.testing.NeededForTesting;
 import com.android.dialer.R;
 import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
@@ -46,7 +48,29 @@
     private static final String LAST_EMERGENCY_CALL_PREF_KEY = "last_emergency_call";
 
     // Disable incoming call blocking if there was a call within the past 2 days.
-    private static final long EMERGENCY_CALL_RECENCY_THRESHOLD_MS = 1000 * 60 * 60 * 24 * 2;
+    private static final long RECENT_EMERGENCY_CALL_THRESHOLD_MS = 1000 * 60 * 60 * 24 * 2;
+
+    /**
+     * Used for testing to specify that a custom threshold should be used instead of the default.
+     * This custom threshold will only be used when setting this log tag to VERBOSE:
+     *
+     *     adb shell setprop log.tag.DebugEmergencyCall VERBOSE
+     *
+     */
+    @NeededForTesting
+    private static final String DEBUG_EMERGENCY_CALL_TAG = "DebugEmergencyCall";
+
+    /**
+     * Used for testing to specify the custom threshold value, in milliseconds for whether an
+     * emergency call is "recent". The default value will be used if this custom threshold is less
+     * than zero. For example, to set this threshold to 60 seconds:
+     *
+     *     adb shell settings put system dialer_emergency_call_threshold_ms 60000
+     *
+     */
+    @NeededForTesting
+    private static final String RECENT_EMERGENCY_CALL_THRESHOLD_SETTINGS_KEY =
+            "dialer_emergency_call_threshold_ms";
 
     public interface CheckForSendToVoicemailContactListener {
         public void onComplete(boolean hasSendToVoicemailContact);
@@ -257,7 +281,7 @@
         }
 
         return (System.currentTimeMillis() - lastEmergencyCallTime)
-                    < EMERGENCY_CALL_RECENCY_THRESHOLD_MS;
+                < getRecentEmergencyCallThresholdMs(context);
     }
 
     public static void recordLastEmergencyCallTime(Context context) {
@@ -273,4 +297,16 @@
     public static boolean canBlockNumber(Context context, String number) {
         return !PhoneNumberUtils.isEmergencyNumber(number) && !TextUtils.isEmpty(number);
     }
+
+    private static long getRecentEmergencyCallThresholdMs(Context context) {
+        if (android.util.Log.isLoggable(
+                DEBUG_EMERGENCY_CALL_TAG, android.util.Log.VERBOSE)) {
+            long thresholdMs = Settings.System.getLong(
+                    context.getContentResolver(),
+                    RECENT_EMERGENCY_CALL_THRESHOLD_SETTINGS_KEY, 0);
+            return thresholdMs > 0 ? thresholdMs : RECENT_EMERGENCY_CALL_THRESHOLD_MS;
+        } else {
+            return RECENT_EMERGENCY_CALL_THRESHOLD_MS;
+        }
+    }
 }