aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Ebinger <breadley@google.com>2018-08-30 16:20:40 -0700
committerBrad Ebinger <breadley@google.com>2018-08-30 16:27:15 -0700
commit439561ad21ada21c32977f8189af4b01aaacaff8 (patch)
treea058e98e224bd0bf19b83c7a2f22842dbbb809cc
parentca8166fba2d042a475b042d61c079deb4fac736b (diff)
downloadims-439561ad21ada21c32977f8189af4b01aaacaff8.tar.gz
Fix SubscriptionController crash during subid verificationandroid-o-mr1-iot-release-1.0.4
Receiving reports of ImsManager causing crashes when trying to update settings in the siminfo db related to WFC. This should only be triggered when there is a valid sub id, which causes a crash. There is not enough info in the bugreports to find the root cause, but I can at least fix the phone crash and log an error when this happens. Test: atest FrameworksTelephonyTests Bug: 113291931 Change-Id: I825392c6a8ac1602ac7e5c915b80b41aa6734d27
-rw-r--r--src/java/com/android/ims/ImsManager.java139
1 files changed, 81 insertions, 58 deletions
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 31dd86f4..dc58813f 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -480,21 +480,28 @@ public class ImsManager {
*
*/
public void setEnhanced4gLteModeSetting(boolean enabled) {
+ int subId = getSubId();
// If editable=false, we must keep default advanced 4G mode.
if (!getBooleanCarrierConfig(CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL)) {
enabled = getBooleanCarrierConfig(
CarrierConfigManager.KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL);
}
- int prevSetting = SubscriptionManager.getIntegerSubscriptionProperty(
- getSubId(), SubscriptionManager.ENHANCED_4G_MODE_ENABLED,
- SUB_PROPERTY_NOT_INITIALIZED, mContext);
+ int prevSetting = SubscriptionManager.getIntegerSubscriptionProperty(subId,
+ SubscriptionManager.ENHANCED_4G_MODE_ENABLED, SUB_PROPERTY_NOT_INITIALIZED,
+ mContext);
if (prevSetting != (enabled ?
ImsConfig.FeatureValueConstants.ON :
ImsConfig.FeatureValueConstants.OFF)) {
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.ENHANCED_4G_MODE_ENABLED, booleanToPropertyString(enabled));
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ SubscriptionManager.setSubscriptionProperty(subId,
+ SubscriptionManager.ENHANCED_4G_MODE_ENABLED,
+ booleanToPropertyString(enabled));
+ } else {
+ loge("setEnhanced4gLteModeSetting: invalid sub id, can not set property in " +
+ " siminfo db.");
+ }
if (isNonTtyOrTtyOnVolteEnabled()) {
try {
setAdvanced4GMode(enabled);
@@ -760,8 +767,13 @@ public class ImsManager {
* Change persistent VT enabled setting for slot.
*/
public void setVtSetting(boolean enabled) {
- SubscriptionManager.setSubscriptionProperty(getSubId(), SubscriptionManager.VT_IMS_ENABLED,
- booleanToPropertyString(enabled));
+ int subId = getSubId();
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.VT_IMS_ENABLED,
+ booleanToPropertyString(enabled));
+ } else {
+ loge("setVtSetting: sub id invalid, skip modifying vt state in subinfo db.");
+ }
try {
changeMmTelCapability(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
@@ -871,12 +883,17 @@ public class ImsManager {
* Change persistent WFC enabled setting for slot.
*/
public void setWfcSetting(boolean enabled) {
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.WFC_IMS_ENABLED, booleanToPropertyString(enabled));
+ int subId = getSubId();
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.WFC_IMS_ENABLED,
+ booleanToPropertyString(enabled));
+ } else {
+ loge("setWfcSetting: invalid sub id, can not set WFC setting in siminfo db");
+ }
TelephonyManager tm = (TelephonyManager)
mContext.getSystemService(Context.TELEPHONY_SERVICE);
- setWfcNonPersistent(enabled, getWfcMode(tm.isNetworkRoaming(getSubId())));
+ setWfcNonPersistent(enabled, getWfcMode(tm.isNetworkRoaming(subId)));
}
/**
@@ -952,8 +969,13 @@ public class ImsManager {
public void setWfcMode(int wfcMode) {
if (DBG) log("setWfcMode(i) - setting=" + wfcMode);
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.WFC_IMS_MODE, Integer.toString(wfcMode));
+ int subId = getSubId();
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.WFC_IMS_MODE,
+ Integer.toString(wfcMode));
+ } else {
+ loge("setWfcMode: invalid sub id, skip setting value in siminfo db");
+ }
setWfcModeInternal(wfcMode);
}
@@ -1047,14 +1069,19 @@ public class ImsManager {
* @param roaming {@code false} for home network setting, {@code true} for roaming setting
*/
public void setWfcMode(int wfcMode, boolean roaming) {
- if (!roaming) {
- if (DBG) log("setWfcMode(i,b) - setting=" + wfcMode);
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.WFC_IMS_MODE, Integer.toString(wfcMode));
+ int subId = getSubId();
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ if (!roaming) {
+ if (DBG) log("setWfcMode(i,b) - setting=" + wfcMode);
+ SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.WFC_IMS_MODE,
+ Integer.toString(wfcMode));
+ } else {
+ if (DBG) log("setWfcMode(i,b) (roaming) - setting=" + wfcMode);
+ SubscriptionManager.setSubscriptionProperty(subId,
+ SubscriptionManager.WFC_IMS_ROAMING_MODE, Integer.toString(wfcMode));
+ }
} else {
- if (DBG) log("setWfcMode(i,b) (roaming) - setting=" + wfcMode);
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.WFC_IMS_ROAMING_MODE, Integer.toString(wfcMode));
+ loge("setWfcMode(i,b): invalid sub id, skip setting setting in siminfo db");
}
TelephonyManager tm = (TelephonyManager)
@@ -1938,15 +1965,10 @@ public class ImsManager {
* @return boolean value of corresponding key.
*/
private boolean getBooleanCarrierConfig(String key) {
- int[] subIds = SubscriptionManager.getSubId(mPhoneId);
- int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- if (subIds != null && subIds.length >= 1) {
- subId = subIds[0];
- }
PersistableBundle b = null;
if (mConfigManager != null) {
// If an invalid subId is used, this bundle will contain default values.
- b = mConfigManager.getConfigForSubId(subId);
+ b = mConfigManager.getConfigForSubId(getSubId());
}
if (b != null) {
return b.getBoolean(key);
@@ -1963,15 +1985,10 @@ public class ImsManager {
* @return integer value of corresponding key.
*/
private int getIntCarrierConfig(String key) {
- int[] subIds = SubscriptionManager.getSubId(mPhoneId);
- int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- if (subIds != null && subIds.length >= 1) {
- subId = subIds[0];
- }
PersistableBundle b = null;
if (mConfigManager != null) {
// If an invalid subId is used, this bundle will contain default values.
- b = mConfigManager.getConfigForSubId(subId);
+ b = mConfigManager.getConfigForSubId(getSubId());
}
if (b != null) {
return b.getInt(key);
@@ -2306,33 +2323,39 @@ public class ImsManager {
* @hide
*/
public void factoryReset() {
- // Set VoLTE to default
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.ENHANCED_4G_MODE_ENABLED,
- booleanToPropertyString(getBooleanCarrierConfig(
- CarrierConfigManager.KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL)));
-
- // Set VoWiFi to default
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.WFC_IMS_ENABLED,
- booleanToPropertyString(getBooleanCarrierConfig(
- CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL)));
-
- // Set VoWiFi mode to default
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.WFC_IMS_MODE,
- Integer.toString(getIntCarrierConfig(
- CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT)));
-
- // Set VoWiFi roaming to default
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.WFC_IMS_ROAMING_ENABLED,
- booleanToPropertyString(getBooleanCarrierConfig(
- CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL)));
-
- // Set VT to default
- SubscriptionManager.setSubscriptionProperty(getSubId(),
- SubscriptionManager.VT_IMS_ENABLED, booleanToPropertyString(true));
+ int subId = getSubId();
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ // Set VoLTE to default
+ SubscriptionManager.setSubscriptionProperty(subId,
+ SubscriptionManager.ENHANCED_4G_MODE_ENABLED,
+ booleanToPropertyString(getBooleanCarrierConfig(
+ CarrierConfigManager.KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL)));
+
+ // Set VoWiFi to default
+ SubscriptionManager.setSubscriptionProperty(subId,
+ SubscriptionManager.WFC_IMS_ENABLED,
+ booleanToPropertyString(getBooleanCarrierConfig(
+ CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL)));
+
+ // Set VoWiFi mode to default
+ SubscriptionManager.setSubscriptionProperty(subId,
+ SubscriptionManager.WFC_IMS_MODE,
+ Integer.toString(getIntCarrierConfig(
+ CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT)));
+
+ // Set VoWiFi roaming to default
+ SubscriptionManager.setSubscriptionProperty(subId,
+ SubscriptionManager.WFC_IMS_ROAMING_ENABLED,
+ booleanToPropertyString(getBooleanCarrierConfig(
+ CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL)));
+
+
+ // Set VT to default
+ SubscriptionManager.setSubscriptionProperty(subId,
+ SubscriptionManager.VT_IMS_ENABLED, booleanToPropertyString(true));
+ } else {
+ loge("factoryReset: invalid sub id, can not reset siminfo db settings");
+ }
// Push settings to ImsConfig
updateImsServiceConfig(true);