diff options
author | Ling Ma <linggm@google.com> | 2023-01-12 14:52:01 -0800 |
---|---|---|
committer | Ling Ma <linggm@google.com> | 2023-01-13 03:25:00 +0000 |
commit | 6c85b1e868dd98e6781aed647da8e4d1f6f52bf9 (patch) | |
tree | 320d7a85b23363c94091bed899c358d859d30af3 | |
parent | 707acc550b84f14800b5387be02b29265bc80b5b (diff) | |
download | telephony-6c85b1e868dd98e6781aed647da8e4d1f6f52bf9.tar.gz |
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
-rw-r--r-- | src/java/com/android/internal/telephony/data/DataNetwork.java | 18 | ||||
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java | 22 |
2 files changed, 32 insertions, 8 deletions
diff --git a/src/java/com/android/internal/telephony/data/DataNetwork.java b/src/java/com/android/internal/telephony/data/DataNetwork.java index e6d0be7212..6950f26165 100644 --- a/src/java/com/android/internal/telephony/data/DataNetwork.java +++ b/src/java/com/android/internal/telephony/data/DataNetwork.java @@ -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(); + mDataNetworkControllerCallback = new DataNetworkController.DataNetworkControllerCallback( + getHandler()::post) { + @Override + public void onSubscriptionPlanOverride() { + sendMessage(EVENT_SUBSCRIPTION_PLAN_OVERRIDE); + }}; mDataNetworkController.registerDataNetworkControllerCallback( - new DataNetworkController.DataNetworkControllerCallback(getHandler()::post) { - @Override - public void onSubscriptionPlanOverride() { - sendMessage(EVENT_SUBSCRIPTION_PLAN_OVERRIDE); - }}); + 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 diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java index 399fd9f946..4a03f6924e 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java @@ -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 |