Add networkAgent Id to precise data connection
Add network agent Id to precise data connection.
Bug: 324280016
Test: voice call + data browsing
Test: 324280016
Test: atest
Change-Id: Id544bbff449c02b51aa654115a53505fc8be8ad8
diff --git a/flags/messaging.aconfig b/flags/messaging.aconfig
index 4cc6816..364d6aa 100644
--- a/flags/messaging.aconfig
+++ b/flags/messaging.aconfig
@@ -16,4 +16,15 @@
namespace: "telephony"
description: "This flag controls the support of the new MMS error code MMS_ERROR_MMS_DISABLED."
bug: "305062594"
+}
+
+# OWNER=linggm TARGET=24Q4
+flag {
+ name: "mms_get_apn_from_pdsc"
+ namespace: "telephony"
+ description: "This flag controls get APN details from PDSC instead of telephony provider."
+ bug: "324280016"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
}
\ No newline at end of file
diff --git a/src/java/com/android/internal/telephony/data/DataNetwork.java b/src/java/com/android/internal/telephony/data/DataNetwork.java
index d0cf2f8..53b359c 100644
--- a/src/java/com/android/internal/telephony/data/DataNetwork.java
+++ b/src/java/com/android/internal/telephony/data/DataNetwork.java
@@ -2227,6 +2227,7 @@
// will always be registered with NOT_SUSPENDED capability.
mNetworkAgent = createNetworkAgent();
mNetworkAgent.markConnected();
+ notifyPreciseDataConnectionState();
// Because network agent is always created with NOT_SUSPENDED, we need to update
// the suspended if it's was in suspended state.
if (mSuspended) {
@@ -3417,6 +3418,7 @@
return new PreciseDataConnectionState.Builder()
.setTransportType(mTransport)
.setId(mCid.get(mTransport))
+ .setNetworkAgentId(mNetworkAgent.getId())
.setState(getState())
.setApnSetting(mDataProfile.getApnSetting())
.setLinkProperties(mLinkProperties)
@@ -3432,14 +3434,16 @@
* {@link android.telephony.TelephonyCallback.PreciseDataConnectionStateListener}.
*
* Note that notify only when {@link DataState} or {@link
- * PreciseDataConnectionState.NetworkValidationStatus} changes.
+ * PreciseDataConnectionState.NetworkValidationStatus} or {@link TelephonyNetworkAgent#getId}
+ * changes.
*/
private void notifyPreciseDataConnectionState() {
PreciseDataConnectionState pdcs = getPreciseDataConnectionState();
if (mPreciseDataConnectionState == null
|| mPreciseDataConnectionState.getState() != pdcs.getState()
|| mPreciseDataConnectionState.getNetworkValidationStatus()
- != pdcs.getNetworkValidationStatus()) {
+ != pdcs.getNetworkValidationStatus()
+ || mPreciseDataConnectionState.getNetId() != pdcs.getNetId()) {
mPreciseDataConnectionState = pdcs;
logv("notifyPreciseDataConnectionState=" + pdcs);
mPhone.notifyDataConnection(pdcs);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java
index f691f84..d5a52ea 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java
@@ -660,6 +660,19 @@
// The final network should not have NOT_SUSPENDED because the device is OOS.
assertThat(mDataNetworkUT.getNetworkCapabilities().hasCapability(
NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED)).isFalse();
+
+ // Verify recreation triggers notifyDataConnection with new network agent Id.
+ ArgumentCaptor<PreciseDataConnectionState> pdcsCaptor =
+ ArgumentCaptor.forClass(PreciseDataConnectionState.class);
+
+ // 4 times connecting, connected, data state changed, re-create network agent
+ verify(mPhone, times(4)).notifyDataConnection(pdcsCaptor.capture());
+ List<PreciseDataConnectionState> pdcsList = pdcsCaptor.getAllValues();
+ assertThat(pdcsList.get(0).getState()).isEqualTo(TelephonyManager.DATA_CONNECTING);
+ assertThat(pdcsList.get(1).getState()).isEqualTo(TelephonyManager.DATA_CONNECTED);
+ assertThat(pdcsList.get(2).getState()).isEqualTo(TelephonyManager.DATA_SUSPENDED);
+ assertThat(pdcsList.get(3).getNetId())
+ .isNotEqualTo(pdcsList.get(2).getNetId());
}
@Test