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

Commit 50a19fc2 authored by Qiongcheng Luo's avatar Qiongcheng Luo Committed by takeshi tanigawa
Browse files

Unable to make MO call after swapping SIM with CLIR enabled

Since CLIR setting gets and sets done using phoneId, CLIR setting will
be inherited even after changing to another SIM. And if the another SIM
does not support CLIR, the MO call will fail.

To resolve this issue, use subId for CLIR setting instead phoneId.

Test: manual - Checked that MO call succeeded and Call ID was notified
after swapping SIM with enabling CLIR
Test: auto - passed ImsPhoneCallTrackerTest#testDialClirMode
Bug: 132365856

Change-Id: Ib4c21eb104e3608eb86df83051cd30288be4f4d6
parent cee67608
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -2365,13 +2365,33 @@ public class GsmCdmaPhone extends Phone {
    @UnsupportedAppUsage
    private void syncClirSetting() {
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
        int clirSetting = sp.getInt(CLIR_KEY + getPhoneId(), -1);
        Rlog.i(LOG_TAG, "syncClirSetting: " + CLIR_KEY + getPhoneId() + "=" + clirSetting);
        migrateClirSettingIfNeeded(sp);

        int clirSetting = sp.getInt(CLIR_KEY + getSubId(), -1);
        Rlog.i(LOG_TAG, "syncClirSetting: " + CLIR_KEY + getSubId() + "=" + clirSetting);
        if (clirSetting >= 0) {
            mCi.setCLIR(clirSetting, null);
        }
    }

    /**
     * Migrate CLIR setting with sudId mapping once if there's CLIR setting mapped with phoneId.
     */
    private void migrateClirSettingIfNeeded(SharedPreferences sp) {
        // Get old CLIR setting mapped with phoneId
        int clirSetting = sp.getInt("clir_key" + getPhoneId(), -1);
        if (clirSetting >= 0) {
            // Migrate CLIR setting to new shared preference key with subId
            Rlog.i(LOG_TAG, "Migrate CLIR setting: value=" + clirSetting + ", clir_key"
                    + getPhoneId() + " -> " + CLIR_KEY + getSubId());
            SharedPreferences.Editor editor = sp.edit();
            editor.putInt(CLIR_KEY + getSubId(), clirSetting);

            // Remove old CLIR setting key
            editor.remove("clir_key" + getPhoneId()).commit();
        }
    }

    private void handleRadioAvailable() {
        mCi.getBasebandVersion(obtainMessage(EVENT_GET_BASEBAND_VERSION_DONE));

+4 −4
Original line number Diff line number Diff line
@@ -235,7 +235,7 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
    private static final String CDMA_NON_ROAMING_LIST_OVERRIDE_PREFIX = "cdma_non_roaming_list_";

    // Key used to read/write current CLIR setting
    public static final String CLIR_KEY = "clir_key";
    public static final String CLIR_KEY = "clir_sub_key";

    // Key used for storing voice mail count
    private static final String VM_COUNT = "vm_count_key";
@@ -1506,9 +1506,9 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        // Open the shared preferences editor, and write the value.
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
        SharedPreferences.Editor editor = sp.edit();
        editor.putInt(CLIR_KEY + getPhoneId(), commandInterfaceCLIRMode);
        Rlog.i(LOG_TAG, "saveClirSetting: " + CLIR_KEY + getPhoneId() + "=" +
                commandInterfaceCLIRMode);
        editor.putInt(CLIR_KEY + getSubId(), commandInterfaceCLIRMode);
        Rlog.i(LOG_TAG, "saveClirSetting: " + CLIR_KEY + getSubId() + "="
                + commandInterfaceCLIRMode);

        // Commit and log the result.
        if (!editor.commit()) {
+1 −1
Original line number Diff line number Diff line
@@ -765,7 +765,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
        if (mSharedPreferenceProxy != null && mPhone.getDefaultPhone() != null) {
            SharedPreferences sp = mSharedPreferenceProxy.getDefaultSharedPreferences(
                    mPhone.getContext());
            return sp.getInt(Phone.CLIR_KEY + mPhone.getDefaultPhone().getPhoneId(),
            return sp.getInt(Phone.CLIR_KEY + mPhone.getSubId(),
                    CommandsInterface.CLIR_DEFAULT);
        } else {
            loge("dial; could not get default CLIR mode.");
+1 −1
Original line number Diff line number Diff line
@@ -501,7 +501,7 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
        }

        // Ensure that the correct key was queried from the shared prefs.
        assertEquals("clir_key0", mStringCaptor.getValue());
        assertEquals("clir_sub_key0", mStringCaptor.getValue());
    }

    /**