Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb338034 authored by Tyler Gunn's avatar Tyler Gunn
Browse files

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
parent 0b38a4b9
Loading
Loading
Loading
Loading
+26 −12
Original line number Diff line number Diff line
@@ -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;
    }
}