aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLing Ma <linggm@google.com>2023-01-12 14:52:01 -0800
committerLing Ma <linggm@google.com>2023-01-13 03:25:00 +0000
commit6c85b1e868dd98e6781aed647da8e4d1f6f52bf9 (patch)
tree320d7a85b23363c94091bed899c358d859d30af3
parent707acc550b84f14800b5387be02b29265bc80b5b (diff)
downloadtelephony-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.java18
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java22
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