am 6ad0dba3: am 92462cfa: Prevent non-emergency calls in ECM mode.
* commit '6ad0dba3cab65c93b3b500569d847e0bdd76fcd5':
Prevent non-emergency calls in ECM mode.
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 360e9ef..da9cd33 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -941,6 +941,8 @@
<string name="incall_error_power_off">Turn off airplane mode to make a call.</string>
<!-- In-call screen: call failure message displayed in an error dialog when in airplane mode, WFC is enabled, not wifi-only, and not connected to wireless networks. [CHAR_LIMIT=NONE] -->
<string name="incall_error_power_off_wfc">Turn off airplane mode or connect to a wireless network to make a call.</string>
+ <!-- In-call screen: call failure message displayed when the user attempts to make a non-emergency call while the phone is in emergency callback mode. -->
+ <string name="incall_error_ecm_emergency_only">Exit emergency callback mode to make a non-emergency call.</string>
<!-- In-call screen: call failure message displayed in an error dialog.
This string is currently unused (see comments in InCallScreen.java.) -->
<string name="incall_error_emergency_only">Not registered on network.</string>
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index 81fc7aa..235c4b9 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -289,6 +289,11 @@
}
break;
+ case android.telephony.DisconnectCause.CDMA_NOT_EMERGENCY:
+ // Only emergency calls are allowed when in emergency callback mode.
+ resourceId = R.string.incall_error_ecm_emergency_only;
+ break;
+
case android.telephony.DisconnectCause.EMERGENCY_ONLY:
// Only emergency numbers are allowed, but we tried to dial
// a non-emergency number.
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index e3807b8..a14a884 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -27,6 +27,7 @@
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telephony.CarrierConfigManager;
+import android.telephony.DisconnectCause;
import android.telephony.PhoneNumberUtils;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
@@ -223,6 +224,26 @@
}
boolean useEmergencyCallHelper = false;
+ // If we're dialing a non-emergency number and the phone is in ECM mode, reject the call if
+ // carrier configuration specifies that we cannot make non-emergency calls in ECM mode.
+ if (!isEmergencyNumber && phone.isInEcm()) {
+ boolean allowNonEmergencyCalls = true;
+ CarrierConfigManager cfgManager = (CarrierConfigManager)
+ phone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ if (cfgManager != null) {
+ allowNonEmergencyCalls = cfgManager.getConfigForSubId(phone.getSubId())
+ .getBoolean(CarrierConfigManager.KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL);
+ }
+
+ if (!allowNonEmergencyCalls) {
+ return Connection.createFailedConnection(
+ DisconnectCauseUtil.toTelecomDisconnectCause(
+ DisconnectCause.CDMA_NOT_EMERGENCY,
+ "Cannot make non-emergency call in ECM mode."
+ ));
+ }
+ }
+
if (isEmergencyNumber) {
if (!phone.isRadioOn()) {
useEmergencyCallHelper = true;