aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2018-09-17 15:08:43 -0700
committerTyler Gunn <tgunn@google.com>2018-09-24 22:49:52 +0000
commiteb338034f76f6e0589d8f6a5d3e1b6c03becf792 (patch)
treef7029aa50e8b4ebf2823252d5f74862035956e94
parent0b38a4b98d6f76aad57fba90bd2efcd5189f6dd6 (diff)
downloadims-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.java38
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;
+ }
}