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

Commit 35c9fdd2 authored by Nathan Harold's avatar Nathan Harold
Browse files

Don't send setN1Mode for partial CC

Enabling and disabling N1Mode is a heavyweight
operation at the modem, which can result in OTA
signalling. In order to reduce the churn caused by
the SIM card loading and unloading, particularly
during a SIM reset procedure (even though this isn't
a common occurrence, but also to address a carrier
test), we can avoid making any transient changes
that occur when the CarrierConfig changes due to
no SIM being present.

Bug: 319522224
Test: atest GsmCdmaPhoneTest#\
          testNrCapabilityChanged_firstRequest_incom\
          pleteCarrierConfig_changeNeeded
Test: telephony sanity (voice, data, sms)
Change-Id: Ief07f27c7ccaa2234e2c309fcc11be36169fafa8
parent b06e5783
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2456,6 +2456,8 @@ public class GsmCdmaPhone extends Phone {
    private void updateCarrierN1ModeSupported(@NonNull PersistableBundle b) {
        if (!mFeatureFlags.enableCarrierConfigN1Control()) return;

        if (!CarrierConfigManager.isConfigForIdentifiedCarrier(b)) return;

        final int[] supportedNrModes = b.getIntArray(
                CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY);

+42 −9
Original line number Diff line number Diff line
@@ -1510,6 +1510,44 @@ public class GsmCdmaPhoneTest extends TelephonyTest {
        assertEquals(captor.getValue().what, Phone.EVENT_GET_RADIO_CAPABILITY);
    }

    private void setIsCarrierConfigForIdentifiedCarrier(
            PersistableBundle carrierConfig, boolean isIdentified) {
        carrierConfig.putBoolean(
                CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL,
                isIdentified);
    }

    @Test
    public void testNrCapabilityChanged_firstRequest_incompleteCarrierConfig_changeNeeded() {
        when(mFeatureFlags.enableCarrierConfigN1Control()).thenReturn(true);

        mPhoneUT.mCi = mMockCi;
        PersistableBundle bundle = mContextFixture.getCarrierConfigBundle();
        bundle.putIntArray(CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY,
                new int[]{
                    CarrierConfigManager.CARRIER_NR_AVAILABILITY_NSA});

        mPhoneUT.sendMessage(mPhoneUT.obtainMessage(Phone.EVENT_CARRIER_CONFIG_CHANGED));
        processAllMessages();


        verify(mMockCi, never()).isN1ModeEnabled(any());
        verify(mMockCi, never()).setN1ModeEnabled(anyBoolean(), any());

        setIsCarrierConfigForIdentifiedCarrier(bundle, true);

        mPhoneUT.sendMessage(mPhoneUT.obtainMessage(Phone.EVENT_CARRIER_CONFIG_CHANGED));
        processAllMessages();

        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mMockCi, times(1)).isN1ModeEnabled(messageCaptor.capture());
        AsyncResult.forMessage(messageCaptor.getValue(), Boolean.TRUE, null);
        messageCaptor.getValue().sendToTarget();
        processAllMessages();

        verify(mMockCi, times(1)).setN1ModeEnabled(eq(false), messageCaptor.capture());
    }

    @Test
    public void testNrCapabilityChanged_firstRequest_noChangeNeeded() {
        when(mFeatureFlags.enableCarrierConfigN1Control()).thenReturn(true);
@@ -1520,6 +1558,7 @@ public class GsmCdmaPhoneTest extends TelephonyTest {
                new int[]{
                    CarrierConfigManager.CARRIER_NR_AVAILABILITY_NSA,
                    CarrierConfigManager.CARRIER_NR_AVAILABILITY_SA});
        setIsCarrierConfigForIdentifiedCarrier(bundle, true);

        mPhoneUT.sendMessage(mPhoneUT.obtainMessage(Phone.EVENT_CARRIER_CONFIG_CHANGED));
        processAllMessages();
@@ -1543,6 +1582,7 @@ public class GsmCdmaPhoneTest extends TelephonyTest {
                new int[]{
                    CarrierConfigManager.CARRIER_NR_AVAILABILITY_NSA,
                    CarrierConfigManager.CARRIER_NR_AVAILABILITY_SA});
        setIsCarrierConfigForIdentifiedCarrier(bundle, true);

        mPhoneUT.sendMessage(mPhoneUT.obtainMessage(Phone.EVENT_CARRIER_CONFIG_CHANGED));
        processAllMessages();
@@ -1554,9 +1594,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest {
        processAllMessages();

        verify(mMockCi, times(1)).setN1ModeEnabled(eq(true), messageCaptor.capture());
        AsyncResult.forMessage(messageCaptor.getValue(), Boolean.TRUE, null);
        messageCaptor.getValue().sendToTarget();
        processAllMessages();
    }

    @Test
@@ -1571,6 +1608,7 @@ public class GsmCdmaPhoneTest extends TelephonyTest {
        bundle.putIntArray(
                CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY,
                new int[]{CarrierConfigManager.CARRIER_NR_AVAILABILITY_NSA});
        setIsCarrierConfigForIdentifiedCarrier(bundle, true);

        mPhoneUT.sendMessage(mPhoneUT.obtainMessage(Phone.EVENT_CARRIER_CONFIG_CHANGED));
        processAllMessages();
@@ -1578,9 +1616,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest {
        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mMockCi, times(1)).isN1ModeEnabled(any()); // not called again
        verify(mMockCi, times(1)).setN1ModeEnabled(eq(false), messageCaptor.capture());
        AsyncResult.forMessage(messageCaptor.getValue(), null, null);
        messageCaptor.getValue().sendToTarget();
        processAllMessages();
    }

    @Test
@@ -1594,6 +1629,7 @@ public class GsmCdmaPhoneTest extends TelephonyTest {
                    new int[]{
                        CarrierConfigManager.CARRIER_NR_AVAILABILITY_NSA,
                        CarrierConfigManager.CARRIER_NR_AVAILABILITY_SA});
            setIsCarrierConfigForIdentifiedCarrier(bundle, true);

            mPhoneUT.sendMessage(mPhoneUT.obtainMessage(Phone.EVENT_CARRIER_CONFIG_CHANGED));
            processAllMessages();
@@ -1642,9 +1678,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest {

        verify(mMockCi, times(1)).isN1ModeEnabled(any()); // not called again
        verify(mMockCi, times(1)).setN1ModeEnabled(eq(true), messageCaptor.capture());
        AsyncResult.forMessage(messageCaptor.getValue(), null, null);
        messageCaptor.getValue().sendToTarget();
        processAllMessages();
    }

    private void setupForWpsCallTest() throws Exception {