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

Commit 50d047a4 authored by Jack Yu's avatar Jack Yu Committed by Android (Google) Code Review
Browse files

Merge changes Ib40da35d,I74904a93 into main

* changes:
  Cleaned up the flag enable_carrier_config_n1_control_attempt2
  Update ImsNrSaModeHandler to Improve Unit Testing
parents 639695ad d7c657c1
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
package: "com.android.internal.telephony.flags"
container: "system"

# OWNER=nharold TARGET=24Q1
flag {
    name: "enable_carrier_config_n1_control_attempt2"
    namespace: "telephony"
    description: "enabling this flag allows KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY to control N1 mode enablement"
    bug:"328848947"

    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

# OWNER=sarahchin TARGET=24Q1
flag {
  name: "hide_roaming_icon"
+14 −20
Original line number Diff line number Diff line
@@ -2463,7 +2463,6 @@ public class GsmCdmaPhone extends Phone {
     */
    @Override
    public void setN1ModeEnabled(boolean enable, @Nullable Message result) {
        if (mFeatureFlags.enableCarrierConfigN1ControlAttempt2()) {
        // This might be called by IMS on another thread, so to avoid the requirement to
        // lock, post it through the handler.
        post(() -> {
@@ -2478,9 +2477,6 @@ public class GsmCdmaPhone extends Phone {
                maybeUpdateModemN1Mode(result);
            }
        });
        } else {
            super.setN1ModeEnabled(enable, result);
        }
    }

    /** Only called on the handler thread. */
@@ -2504,8 +2500,6 @@ public class GsmCdmaPhone extends Phone {

    /** Only called on the handler thread. */
    private void updateCarrierN1ModeSupported(@NonNull PersistableBundle b) {
        if (!mFeatureFlags.enableCarrierConfigN1ControlAttempt2()) return;

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

        final int[] supportedNrModes = b.getIntArray(
+18 −2
Original line number Diff line number Diff line
@@ -61,6 +61,14 @@ public class ImsNrSaModeHandler extends Handler{
    private final @NonNull ImsPhone mPhone;
    private @Nullable CarrierConfigManager mCarrierConfigManager;

    @FunctionalInterface
    public interface N1ModeSetter {
        /** Override-able for testing */
        void setN1ModeEnabled(boolean enabled, @Nullable Message message);
    }

    private N1ModeSetter mN1ModeSetter;

    private @NrSaDisablePolicy int mNrSaDisablePolicy;
    private boolean mIsNrSaDisabledForWfc;
    private boolean mIsWifiRegistered;
@@ -73,7 +81,10 @@ public class ImsNrSaModeHandler extends Handler{

    public ImsNrSaModeHandler(@NonNull ImsPhone phone, Looper looper) {
        super(looper);

        mPhone = phone;
        mN1ModeSetter = mPhone.getDefaultPhone()::setN1ModeEnabled;

        mCarrierConfigManager = (CarrierConfigManager) mPhone.getContext()
                .getSystemService(Context.CARRIER_CONFIG_SERVICE);

@@ -257,8 +268,13 @@ public class ImsNrSaModeHandler extends Handler{
        }
    }

    @VisibleForTesting
    public void setN1ModeSetter(N1ModeSetter setter) {
        mN1ModeSetter = setter;
    }

    private void setNrSaMode(boolean onOrOff) {
        mPhone.getDefaultPhone().setN1ModeEnabled(onOrOff, null);
        mN1ModeSetter.setN1ModeEnabled(onOrOff, null);
        Log.i(TAG, "setNrSaMode : " + onOrOff);

        setNrSaDisabledForWfc(!onOrOff);
+0 −12
Original line number Diff line number Diff line
@@ -1519,8 +1519,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest {

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

        mPhoneUT.mCi = mMockCi;
        PersistableBundle bundle = mContextFixture.getCarrierConfigBundle();
        bundle.putIntArray(CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY,
@@ -1550,8 +1548,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest {

    @Test
    public void testNrCapabilityChanged_firstRequest_noChangeNeeded() {
        when(mFeatureFlags.enableCarrierConfigN1ControlAttempt2()).thenReturn(true);

        mPhoneUT.mCi = mMockCi;
        PersistableBundle bundle = mContextFixture.getCarrierConfigBundle();
        bundle.putIntArray(CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY,
@@ -1574,8 +1570,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest {

    @Test
    public void testNrCapabilityChanged_firstRequest_needsChange() {
        when(mFeatureFlags.enableCarrierConfigN1ControlAttempt2()).thenReturn(true);

        mPhoneUT.mCi = mMockCi;
        PersistableBundle bundle = mContextFixture.getCarrierConfigBundle();
        bundle.putIntArray(CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY,
@@ -1598,8 +1592,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest {

    @Test
    public void testNrCapabilityChanged_CarrierConfigChanges() {
        when(mFeatureFlags.enableCarrierConfigN1ControlAttempt2()).thenReturn(true);

        // Initialize the inner cache and set the modem to N1 mode = enabled/true
        testNrCapabilityChanged_firstRequest_needsChange();

@@ -1620,8 +1612,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest {

    @Test
    public void testNrCapabilityChanged_CarrierConfigChanges_ErrorResponse() {
        when(mFeatureFlags.enableCarrierConfigN1ControlAttempt2()).thenReturn(true);

        mPhoneUT.mCi = mMockCi;
        for (int i = 0; i < 2; i++) {
            PersistableBundle bundle = mContextFixture.getCarrierConfigBundle();
@@ -1646,8 +1636,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest {

    @Test
    public void testNrCapabilityChanged_firstRequest_ImsChanges() {
        when(mFeatureFlags.enableCarrierConfigN1ControlAttempt2()).thenReturn(true);

        mPhoneUT.mCi = mMockCi;
        Message passthroughMessage = mTestHandler.obtainMessage(0xC0FFEE);

+49 −32
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import android.os.Handler;
import android.os.Message;
import android.telephony.CarrierConfigManager;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -79,12 +80,29 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{
    private int mAnyInt = 0;
    private final Set<String> mFeatureTags = new ArraySet<String>();

    private class N1ModeHandlerCaptor implements ImsNrSaModeHandler.N1ModeSetter {
        private boolean mIsN1ModeEnabled = false;

        public void setN1ModeEnabled(boolean enabled, Message message) {
            mIsN1ModeEnabled = enabled;
            mSimulatedCommands.setN1ModeEnabled(enabled, message);
        }

        public boolean isN1ModeEnabled() {
            return mIsN1ModeEnabled;
        };
    };

    private N1ModeHandlerCaptor mN1ModeCaptor;

    @Before
    public void setUp() throws Exception {
        super.setUp(getClass().getSimpleName());
        MockitoAnnotations.initMocks(this);

        mTestImsNrSaModeHandler = new ImsNrSaModeHandler(mImsPhone, mTestableLooper.getLooper());
        mN1ModeCaptor = new N1ModeHandlerCaptor();
        mTestImsNrSaModeHandler.setN1ModeSetter(mN1ModeCaptor);

        verify(mCarrierConfigManager).registerCarrierConfigChangeListener(
                any(), mCarrierConfigChangeListenerCaptor.capture());
@@ -128,14 +146,13 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{
                mPreciseCallStateHandlerCaptor.capture(), anyInt(), any());
        mPreciseCallStateHandler = mPreciseCallStateHandlerCaptor.getValue();

        mSimulatedCommands.setN1ModeEnabled(false, null);
        mTestImsNrSaModeHandler.setNrSaDisabledForWfc(true);

        mTestImsNrSaModeHandler.tearDown();

        verify(mCarrierConfigManager).unregisterCarrierConfigChangeListener(any());
        verify(mImsPhone).unregisterForPreciseCallStateChanged(mPreciseCallStateHandler);
        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
    }

    @Test
@@ -166,19 +183,19 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{

        verify(mImsPhone).registerForPreciseCallStateChanged(any(), anyInt(), any());

        mSimulatedCommands.setN1ModeEnabled(false, null);
        mN1ModeCaptor.setN1ModeEnabled(false, null);
        mTestImsNrSaModeHandler.setNrSaDisabledForWfc(true);
        mTestImsNrSaModeHandler.setWifiRegStatus(true);
        mTestImsNrSaModeHandler.setImsCallStatus(true);

        mTestImsNrSaModeHandler.onImsRegistered(REGISTRATION_TECH_NONE, mFeatureTags);

        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
        assertFalse(mTestImsNrSaModeHandler.isWifiRegistered());

        mTestImsNrSaModeHandler.onImsRegistered(REGISTRATION_TECH_IWLAN, mFeatureTags);

        assertFalse(mSimulatedCommands.isN1ModeEnabled());
        assertFalse(mN1ModeCaptor.isN1ModeEnabled());
        assertTrue(mTestImsNrSaModeHandler.isWifiRegistered());
    }

@@ -195,7 +212,7 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{

        verify(mImsPhone).registerForPreciseCallStateChanged(any(), anyInt(), any());

        mSimulatedCommands.setN1ModeEnabled(true, null);
        mN1ModeCaptor.setN1ModeEnabled(true, null);
        mTestImsNrSaModeHandler.setWifiRegStatus(false);
        mTestImsNrSaModeHandler.setImsCallStatus(true);
        mSimulatedCommands.setVonrEnabled(true);
@@ -203,10 +220,10 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{
        mTestImsNrSaModeHandler.onImsRegistered(REGISTRATION_TECH_IWLAN, mFeatureTags);
        processAllMessages();

        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
        assertTrue(mTestImsNrSaModeHandler.isWifiRegistered());

        mSimulatedCommands.setN1ModeEnabled(true, null);
        mN1ModeCaptor.setN1ModeEnabled(true, null);
        mTestImsNrSaModeHandler.setWifiRegStatus(false);
        mTestImsNrSaModeHandler.setImsCallStatus(true);
        mSimulatedCommands.setVonrEnabled(false);
@@ -214,10 +231,10 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{
        mTestImsNrSaModeHandler.onImsRegistered(REGISTRATION_TECH_IWLAN, mFeatureTags);
        processAllMessages();

        assertFalse(mSimulatedCommands.isN1ModeEnabled());
        assertFalse(mN1ModeCaptor.isN1ModeEnabled());
        assertTrue(mTestImsNrSaModeHandler.isWifiRegistered());

        mSimulatedCommands.setN1ModeEnabled(true, null);
        mN1ModeCaptor.setN1ModeEnabled(true, null);
        mTestImsNrSaModeHandler.setWifiRegStatus(false);
        mTestImsNrSaModeHandler.setImsCallStatus(true);
        mSimulatedCommands.setVonrEnabled(true);
@@ -225,7 +242,7 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{
        mTestImsNrSaModeHandler.onImsRegistered(REGISTRATION_TECH_NONE, mFeatureTags);
        processAllMessages();

        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
        assertFalse(mTestImsNrSaModeHandler.isWifiRegistered());
    }

@@ -241,20 +258,20 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{

        verify(mImsPhone).unregisterForPreciseCallStateChanged(mTestImsNrSaModeHandler);

        mSimulatedCommands.setN1ModeEnabled(true, null);
        mN1ModeCaptor.setN1ModeEnabled(true, null);
        mTestImsNrSaModeHandler.setWifiRegStatus(false);

        mTestImsNrSaModeHandler.onImsRegistered(REGISTRATION_TECH_IWLAN, mFeatureTags);

        assertFalse(mSimulatedCommands.isN1ModeEnabled());
        assertFalse(mN1ModeCaptor.isN1ModeEnabled());
        assertTrue(mTestImsNrSaModeHandler.isWifiRegistered());

        mSimulatedCommands.setN1ModeEnabled(false, null);
        mN1ModeCaptor.setN1ModeEnabled(false, null);
        mTestImsNrSaModeHandler.setWifiRegStatus(true);

        mTestImsNrSaModeHandler.onImsRegistered(REGISTRATION_TECH_NONE, mFeatureTags);

        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
        assertFalse(mTestImsNrSaModeHandler.isWifiRegistered());
    }

@@ -270,12 +287,12 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{

        verify(mImsPhone, times(0)).unregisterForPreciseCallStateChanged(mTestImsNrSaModeHandler);

        mSimulatedCommands.setN1ModeEnabled(true, null);
        mN1ModeCaptor.setN1ModeEnabled(true, null);
        mTestImsNrSaModeHandler.setWifiRegStatus(false);

        mTestImsNrSaModeHandler.onImsRegistered(REGISTRATION_TECH_IWLAN, mFeatureTags);

        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
        assertFalse(mTestImsNrSaModeHandler.isWifiRegistered());
    }

@@ -290,12 +307,12 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{

        verify(mImsPhone).unregisterForPreciseCallStateChanged(mTestImsNrSaModeHandler);

        mSimulatedCommands.setN1ModeEnabled(true, null);
        mN1ModeCaptor.setN1ModeEnabled(true, null);
        mTestImsNrSaModeHandler.setWifiRegStatus(false);

        mTestImsNrSaModeHandler.onImsRegistered(REGISTRATION_TECH_IWLAN, mFeatureTags);

        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
        assertTrue(mTestImsNrSaModeHandler.isWifiRegistered());
    }

@@ -374,13 +391,13 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{
        mCarrierConfigChangeListener.onCarrierConfigChanged(mAnyInt, mAnyInt, mAnyInt, mAnyInt);
        mTestImsNrSaModeHandler.updateImsCapability(CAPABILITY_TYPE_VOICE);

        mSimulatedCommands.setN1ModeEnabled(false, null);
        mN1ModeCaptor.setN1ModeEnabled(false, null);
        mTestImsNrSaModeHandler.setNrSaDisabledForWfc(true);
        mTestImsNrSaModeHandler.setWifiRegStatus(true);

        mTestImsNrSaModeHandler.onImsUnregistered(REGISTRATION_TECH_IWLAN);

        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
        assertFalse(mTestImsNrSaModeHandler.isWifiRegistered());
    }

@@ -399,19 +416,19 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{
        mPreciseCallStateHandler = mPreciseCallStateHandlerCaptor.getValue();

        mTestImsNrSaModeHandler.setWifiRegStatus(true);
        mSimulatedCommands.setN1ModeEnabled(true, null);
        mN1ModeCaptor.setN1ModeEnabled(true, null);

        mPreciseCallStateHandler.handleMessage(mPreciseCallStateHandler.obtainMessage(101));

        assertTrue(mTestImsNrSaModeHandler.isImsCallOngoing());
        assertFalse(mSimulatedCommands.isN1ModeEnabled());
        assertFalse(mN1ModeCaptor.isN1ModeEnabled());

        doReturn(mIdleState).when(mForegroundCall).getState();
        doReturn(mIdleState).when(mBackgroundCall).getState();
        mPreciseCallStateHandler.handleMessage(mPreciseCallStateHandler.obtainMessage(101));

        assertFalse(mTestImsNrSaModeHandler.isImsCallOngoing());
        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
    }

    @Test
@@ -430,19 +447,19 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{
        mPreciseCallStateHandler = mPreciseCallStateHandlerCaptor.getValue();

        mTestImsNrSaModeHandler.setWifiRegStatus(true);
        mSimulatedCommands.setN1ModeEnabled(true, null);
        mN1ModeCaptor.setN1ModeEnabled(true, null);
        mSimulatedCommands.setVonrEnabled(false);

        mPreciseCallStateHandler.handleMessage(mPreciseCallStateHandler.obtainMessage(101));
        processAllMessages();

        assertFalse(mSimulatedCommands.isN1ModeEnabled());
        assertFalse(mN1ModeCaptor.isN1ModeEnabled());

        doReturn(mIdleState).when(mForegroundCall).getState();
        doReturn(mIdleState).when(mBackgroundCall).getState();
        mPreciseCallStateHandler.handleMessage(mPreciseCallStateHandler.obtainMessage(101));

        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());

        doReturn(mActiveState).when(mForegroundCall).getState();
        doReturn(mActiveState).when(mBackgroundCall).getState();
@@ -450,7 +467,7 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{
        mTestImsNrSaModeHandler.setImsCallStatus(false);
        processAllMessages();

        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
    }

    @Test
@@ -483,21 +500,21 @@ public final class ImsNrSaModeHandlerTest extends TelephonyTest{

        mCarrierConfigChangeListener.onCarrierConfigChanged(mAnyInt, mAnyInt, mAnyInt, mAnyInt);

        mN1ModeCaptor.setN1ModeEnabled(true, null);
        verify(mImsPhone).registerForPreciseCallStateChanged(
                mPreciseCallStateHandlerCaptor.capture(), anyInt(), any());
        mPreciseCallStateHandler = mPreciseCallStateHandlerCaptor.getValue();

        mTestImsNrSaModeHandler.setWifiRegStatus(true);
        mSimulatedCommands.setN1ModeEnabled(true, null);
        mPreciseCallStateHandler.handleMessage(mPreciseCallStateHandler.obtainMessage(101));

        assertTrue(mTestImsNrSaModeHandler.isImsCallOngoing());
        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());

        mTestImsNrSaModeHandler.updateImsCapability(CAPABILITY_TYPE_VOICE);
        assertFalse(mSimulatedCommands.isN1ModeEnabled());
        assertFalse(mN1ModeCaptor.isN1ModeEnabled());

        mTestImsNrSaModeHandler.updateImsCapability(0);
        assertTrue(mSimulatedCommands.isN1ModeEnabled());
        assertTrue(mN1ModeCaptor.isN1ModeEnabled());
    }
}