blob: ed0b18ad502eb36fb3f01da7851f338c2f4d75d9 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dialer.util;
import android.content.Context;
import android.provider.Settings;
import com.android.dialer.common.LogUtil;
import com.android.dialer.storage.StorageComponent;
import java.util.concurrent.TimeUnit;
/** Utility to help with tasks related to emergency calls. */
public class EmergencyCallUtil {
// Pref key for storing the time of end of the last emergency call in milliseconds after epoch.\
private static final String LAST_EMERGENCY_CALL_MS_PREF_KEY = "last_emergency_call_ms";
// Pref key for storing whether a notification has been dispatched to notify the user that call
// blocking has been disabled because of a recent emergency call.
protected static final String NOTIFIED_CALL_BLOCKING_DISABLED_BY_EMERGENCY_CALL_PREF_KEY =
"notified_call_blocking_disabled_by_emergency_call";
// Disable incoming call blocking if there was a call within the past 2 days.
static final long RECENT_EMERGENCY_CALL_THRESHOLD_MS = TimeUnit.DAYS.toMillis(2);
/**
* 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:
*
* <p>adb shell settings put system dialer_emergency_call_threshold_ms 60000
*/
private static final String RECENT_EMERGENCY_CALL_THRESHOLD_SETTINGS_KEY =
"dialer_emergency_call_threshold_ms";
public static long getLastEmergencyCallTimeMillis(Context context) {
return StorageComponent.get(context)
.unencryptedSharedPrefs()
.getLong(LAST_EMERGENCY_CALL_MS_PREF_KEY, 0);
}
public static boolean hasRecentEmergencyCall(Context context) {
if (context == null) {
return false;
}
long lastEmergencyCallTime = getLastEmergencyCallTimeMillis(context);
if (lastEmergencyCallTime == 0) {
return false;
}
return (System.currentTimeMillis() - lastEmergencyCallTime)
< getRecentEmergencyCallThresholdMs(context);
}
public static void recordLastEmergencyCallTime(Context context) {
if (context == null) {
return;
}
StorageComponent.get(context)
.unencryptedSharedPrefs()
.edit()
.putLong(LAST_EMERGENCY_CALL_MS_PREF_KEY, System.currentTimeMillis())
.putBoolean(NOTIFIED_CALL_BLOCKING_DISABLED_BY_EMERGENCY_CALL_PREF_KEY, false)
.apply();
}
private static long getRecentEmergencyCallThresholdMs(Context context) {
if (LogUtil.isVerboseEnabled()) {
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;
}
}
}