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

Commit 6c85b1e8 authored by Ling Ma's avatar Ling Ma
Browse files

Unregister callback on data network disconnect

Remove the data network reference from dataNetworkControllerCallbacks when the network disconnect.

Test: voice call + data browsing + review log
Bug: 241212926
Change-Id: Ie37c67f462c122e32eaff4563c5aed5cc4aa6f3b
Merged-In: Ie37c67f462c122e32eaff4563c5aed5cc4aa6f3b
parent 707acc55
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -545,6 +545,10 @@ public class DataNetwork extends StateMachine {
    /** Data network controller. */
    private final @NonNull DataNetworkController mDataNetworkController;

    /** Data network controller callback. */
    private final @NonNull DataNetworkController.DataNetworkControllerCallback
            mDataNetworkControllerCallback;

    /** Data config manager. */
    private final @NonNull DataConfigManager mDataConfigManager;

@@ -870,12 +874,14 @@ public class DataNetwork extends StateMachine {
        mAccessNetworksManager = phone.getAccessNetworksManager();
        mVcnManager = mPhone.getContext().getSystemService(VcnManager.class);
        mDataNetworkController = phone.getDataNetworkController();
        mDataNetworkController.registerDataNetworkControllerCallback(
                new DataNetworkController.DataNetworkControllerCallback(getHandler()::post) {
        mDataNetworkControllerCallback = new DataNetworkController.DataNetworkControllerCallback(
                getHandler()::post) {
            @Override
            public void onSubscriptionPlanOverride() {
                sendMessage(EVENT_SUBSCRIPTION_PLAN_OVERRIDE);
                    }});
            }};
        mDataNetworkController.registerDataNetworkControllerCallback(
                mDataNetworkControllerCallback);
        mDataConfigManager = mDataNetworkController.getDataConfigManager();
        mDataCallSessionStats = new DataCallSessionStats(mPhone);
        mDataNetworkCallback = callback;
@@ -1562,6 +1568,8 @@ public class DataNetwork extends StateMachine {
            }
            notifyPreciseDataConnectionState();
            mNetworkAgent.unregister();
            mDataNetworkController.unregisterDataNetworkControllerCallback(
                    mDataNetworkControllerCallback);
            mDataCallSessionStats.onDataCallDisconnected(mFailCause);

            if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WLAN
+19 −3
Original line number Diff line number Diff line
@@ -1185,16 +1185,32 @@ public class DataNetworkControllerTest extends TelephonyTest {

    @Test
    public void testDataNetworkControllerCallback() throws Exception {
        Field field = DataNetworkController.class.getDeclaredField(
                "mDataNetworkControllerCallbacks");
        field.setAccessible(true);
        Set<DataNetworkControllerCallback> dataNetworkControllerCallbacks =
                (Set<DataNetworkControllerCallback>) field.get(mDataNetworkControllerUT);

        // Verify register callback
        mDataNetworkControllerUT.registerDataNetworkControllerCallback(
                mMockedDataNetworkControllerCallback);
        TelephonyNetworkRequest request = createNetworkRequest(
                NetworkCapabilities.NET_CAPABILITY_INTERNET);
        mDataNetworkControllerUT.addNetworkRequest(request);
        processAllMessages();
        testSetupDataNetwork();
        verify(mMockedDataNetworkControllerCallback).onAnyDataNetworkExistingChanged(eq(true));
        verify(mMockedDataNetworkControllerCallback).onInternetDataNetworkConnected(any());

        mDataNetworkControllerUT.unregisterDataNetworkControllerCallback(
                mMockedDataNetworkControllerCallback);
        int countOfCallbacks = dataNetworkControllerCallbacks.size();

        // Verify unregister callback
        mDataNetworkControllerUT.removeNetworkRequest(request);
        processAllMessages();
        getDataNetworks().get(0).tearDown(DataNetwork
                .TEAR_DOWN_REASON_CONNECTIVITY_SERVICE_UNWANTED);
        processAllFutureMessages();

        assertEquals(countOfCallbacks - 1, dataNetworkControllerCallbacks.size());
    }

    @Test