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

Commit c11a0747 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 12283639 from 4a1c7a89 to 24Q4-release

Change-Id: I78eedce80bfe1393f82e3d9575b2571d116b7b67
parents 92b8632c 4a1c7a89
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -121,3 +121,14 @@ flag {
  }
}

# OWNER=jackyu TARGET=25Q1
flag {
  name: "sim_disabled_graceful_tear_down"
  namespace: "telephony"
  description: "Gracefully tear down the networks when SIM is disabled."
  bug: ""
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}
+2 −0
Original line number Diff line number Diff line
@@ -225,6 +225,8 @@ public class DataEvaluation {
        SIM_LOADED(true),
        /** SIM is removed. */
        SIM_REMOVAL(true),
        /** SIM is disabled. */
        SIM_DISABLED(true),
        /** Data profiles changed. */
        DATA_PROFILES_CHANGED(true),
        /** When service state changes.(For now only considering data RAT and data registration). */
+11 −11
Original line number Diff line number Diff line
@@ -3542,15 +3542,6 @@ public class DataNetworkController extends Handler {
        mDataServiceBound.put(transport, bound);
    }

    /**
     * Called when SIM is absent.
     */
    private void onSimAbsent() {
        log("onSimAbsent");
        sendMessage(obtainMessage(EVENT_REEVALUATE_EXISTING_DATA_NETWORKS,
                DataEvaluationReason.SIM_REMOVAL));
    }

    /**
     * Called when SIM state changes.
     *
@@ -3559,13 +3550,22 @@ public class DataNetworkController extends Handler {
    private void onSimStateChanged(@SimState int simState) {
        log("onSimStateChanged: state=" + TelephonyManager.simStateToString(simState));
        if (mSimState != simState) {
            mSimState = simState;
            if (simState == TelephonyManager.SIM_STATE_ABSENT) {
                onSimAbsent();
                log("onSimStateChanged: SIM absent.");
                sendMessage(obtainMessage(EVENT_REEVALUATE_EXISTING_DATA_NETWORKS,
                        DataEvaluationReason.SIM_REMOVAL));
            } else if (simState == TelephonyManager.SIM_STATE_NOT_READY
                    && mSimState == TelephonyManager.SIM_STATE_LOADED) {
                if (mFeatureFlags.simDisabledGracefulTearDown()) {
                    log("onSimStateChanged: SIM disabled.");
                    sendMessage(obtainMessage(EVENT_REEVALUATE_EXISTING_DATA_NETWORKS,
                            DataEvaluationReason.SIM_DISABLED));
                }
            } else if (simState == TelephonyManager.SIM_STATE_LOADED) {
                sendMessage(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS,
                        DataEvaluationReason.SIM_LOADED));
            }
            mSimState = simState;
            mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor(
                    () -> callback.onSimStateChanged(mSimState)));
        }
+50 −1
Original line number Diff line number Diff line
@@ -888,8 +888,11 @@ public class DataNetworkControllerTest extends TelephonyTest {
        doReturn(PhoneConstants.State.IDLE).when(mCT).getState();
        doReturn(new SubscriptionInfoInternal.Builder().setId(1).build())
                .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());

        doReturn(true).when(mFeatureFlags).carrierEnabledSatelliteFlag();
        doReturn(true).when(mFeatureFlags).satelliteInternet();
        doReturn(true).when(mFeatureFlags).simDisabledGracefulTearDown();

        when(mContext.getPackageManager()).thenReturn(mMockPackageManager);
        doReturn(true).when(mMockPackageManager).hasSystemFeature(anyString());

@@ -4196,7 +4199,7 @@ public class DataNetworkControllerTest extends TelephonyTest {
    }

    @Test
    public void testImsGracefulTearDown() throws Exception {
    public void testImsGracefulTearDownSimRemoval() throws Exception {
        setImsRegistered(true);
        setRcsRegistered(true);

@@ -4241,6 +4244,52 @@ public class DataNetworkControllerTest extends TelephonyTest {
        assertThat(pdcs.getState()).isEqualTo(TelephonyManager.DATA_DISCONNECTED);
    }

    @Test
    public void testImsGracefulTearDownSimDisabled() throws Exception {
        setImsRegistered(true);
        setRcsRegistered(true);

        NetworkCapabilities netCaps = new NetworkCapabilities();
        netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
        netCaps.maybeMarkCapabilitiesRestricted();
        netCaps.setRequestorPackageName(FAKE_MMTEL_PACKAGE);

        NetworkRequest nativeNetworkRequest = new NetworkRequest(netCaps,
                ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST);
        TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest(
                nativeNetworkRequest, mPhone, mFeatureFlags);

        mDataNetworkControllerUT.addNetworkRequest(networkRequest);

        processAllMessages();
        Mockito.clearInvocations(mPhone);

        // SIM disabled
        mDataNetworkControllerUT.obtainMessage(9/*EVENT_SIM_STATE_CHANGED*/,
                TelephonyManager.SIM_STATE_NOT_READY, 0).sendToTarget();
        processAllMessages();

        // Make sure data network enters disconnecting state
        ArgumentCaptor<PreciseDataConnectionState> pdcsCaptor =
                ArgumentCaptor.forClass(PreciseDataConnectionState.class);
        verify(mPhone).notifyDataConnection(pdcsCaptor.capture());
        PreciseDataConnectionState pdcs = pdcsCaptor.getValue();
        assertThat(pdcs.getState()).isEqualTo(TelephonyManager.DATA_DISCONNECTING);

        // IMS de-registered. Now data network is safe to be torn down.
        Mockito.clearInvocations(mPhone);
        setImsRegistered(false);
        setRcsRegistered(false);
        processAllMessages();

        // All data should be disconnected.
        verifyAllDataDisconnected();
        verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
        verify(mPhone).notifyDataConnection(pdcsCaptor.capture());
        pdcs = pdcsCaptor.getValue();
        assertThat(pdcs.getState()).isEqualTo(TelephonyManager.DATA_DISCONNECTED);
    }

    @Test
    public void testNoGracefulTearDownForEmergencyDataNetwork() throws Exception {
        setImsRegistered(true);