diff options
author | Tyler Gunn <tgunn@google.com> | 2018-09-17 15:08:43 -0700 |
---|---|---|
committer | Tyler Gunn <tgunn@google.com> | 2018-09-24 22:49:52 +0000 |
commit | eb338034f76f6e0589d8f6a5d3e1b6c03becf792 (patch) | |
tree | f7029aa50e8b4ebf2823252d5f74862035956e94 | |
parent | 0b38a4b98d6f76aad57fba90bd2efcd5189f6dd6 (diff) | |
download | ims-eb338034f76f6e0589d8f6a5d3e1b6c03becf792.tar.gz |
Speculative fix for ImsManager crashes.
It turns out the speculative fix in b/113291931 wasn't capturing the
cases which are causing crashes.
Dug into the code and realized that the checks performed in
SubscriptionController go further than what was done here previously.
Replicating the same checks her and logging actual sub Id so we can
perhaps get more information as to why this is failing in the field.
Test: Build
Bug: 115894442
Change-Id: Ifd4fe110ae797c435ce737845af99218fdab5401
-rw-r--r-- | src/java/com/android/ims/ImsManager.java | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java index 3fb9f0c5..6d1187d1 100644 --- a/src/java/com/android/ims/ImsManager.java +++ b/src/java/com/android/ims/ImsManager.java @@ -498,13 +498,13 @@ public class ImsManager { if (prevSetting != (enabled ? ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF)) { - if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + if (isSubIdValid(subId)) { SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.ENHANCED_4G_MODE_ENABLED, booleanToPropertyString(enabled)); } else { loge("setEnhanced4gLteModeSetting: invalid sub id, can not set property in " + - " siminfo db."); + " siminfo db; subId=" + subId); } if (isNonTtyOrTtyOnVolteEnabled()) { try { @@ -772,11 +772,12 @@ public class ImsManager { */ public void setVtSetting(boolean enabled) { int subId = getSubId(); - if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + if (isSubIdValid(subId)) { SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.VT_IMS_ENABLED, booleanToPropertyString(enabled)); } else { - loge("setVtSetting: sub id invalid, skip modifying vt state in subinfo db."); + loge("setVtSetting: sub id invalid, skip modifying vt state in subinfo db; subId=" + + subId); } try { @@ -888,11 +889,12 @@ public class ImsManager { */ public void setWfcSetting(boolean enabled) { int subId = getSubId(); - if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + if (isSubIdValid(subId)) { SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.WFC_IMS_ENABLED, booleanToPropertyString(enabled)); } else { - loge("setWfcSetting: invalid sub id, can not set WFC setting in siminfo db"); + loge("setWfcSetting: invalid sub id, can not set WFC setting in siminfo db; subId=" + + subId); } TelephonyManager tm = (TelephonyManager) @@ -974,11 +976,11 @@ public class ImsManager { if (DBG) log("setWfcMode(i) - setting=" + wfcMode); int subId = getSubId(); - if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + if (isSubIdValid(subId)) { SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.WFC_IMS_MODE, Integer.toString(wfcMode)); } else { - loge("setWfcMode: invalid sub id, skip setting value in siminfo db"); + loge("setWfcMode: invalid sub id, skip setting value in siminfo db; subId=" + subId); } setWfcModeInternal(wfcMode); @@ -1074,7 +1076,7 @@ public class ImsManager { */ public void setWfcMode(int wfcMode, boolean roaming) { int subId = getSubId(); - if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + if (isSubIdValid(subId)) { if (!roaming) { if (DBG) log("setWfcMode(i,b) - setting=" + wfcMode); SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.WFC_IMS_MODE, @@ -1085,7 +1087,8 @@ public class ImsManager { SubscriptionManager.WFC_IMS_ROAMING_MODE, Integer.toString(wfcMode)); } } else { - loge("setWfcMode(i,b): invalid sub id, skip setting setting in siminfo db"); + loge("setWfcMode(i,b): invalid sub id, skip setting setting in siminfo db; subId=" + + subId); } TelephonyManager tm = (TelephonyManager) @@ -2328,7 +2331,7 @@ public class ImsManager { */ public void factoryReset() { int subId = getSubId(); - if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + if (isSubIdValid(subId)) { // Set VoLTE to default SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.ENHANCED_4G_MODE_ENABLED, @@ -2358,7 +2361,7 @@ public class ImsManager { SubscriptionManager.setSubscriptionProperty(subId, SubscriptionManager.VT_IMS_ENABLED, booleanToPropertyString(true)); } else { - loge("factoryReset: invalid sub id, can not reset siminfo db settings"); + loge("factoryReset: invalid sub id, can not reset siminfo db settings; subId=" + subId); } // Push settings to ImsConfig @@ -2418,4 +2421,15 @@ public class ImsManager { pw.println(" isWfcProvisionedOnDevice = " + isWfcProvisionedOnDevice()); pw.flush(); } + + /** + * Determines if a sub id is valid. + * Mimics the logic in SubscriptionController.validateSubId. + * @param subId The sub id to check. + * @return {@code true} if valid, {@code false} otherwise. + */ + private boolean isSubIdValid(int subId) { + return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID && + subId != SubscriptionManager.DEFAULT_SUBSCRIPTION_ID; + } } |