Add flag in isInternetDataAllowed() function
- Skip existed networks check when data out of service.
Doc: go/dsrm-improve
Bug: 284420611
Test: Test passed by reporter. (b/284420611#comment28)
Change-Id: Ic9880a9b24b869b82b9b6fbfd476d74cc5788d39
diff --git a/flags/data.aconfig b/flags/data.aconfig
index 267048e..a74d279 100644
--- a/flags/data.aconfig
+++ b/flags/data.aconfig
@@ -90,3 +90,10 @@
description: "Collect vonr status in voice call metric"
bug:"288449751"
}
+
+flag {
+ name: "ignore_existing_networks_for_internet_allowed_checking"
+ namespace: "telephony"
+ description: "Ignore existing networks when checking if internet is allowed"
+ bug: "284420611"
+}
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index d944738..f062908 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -3749,7 +3749,7 @@
* @return {@code true} if internet data is allowed to be established.
*/
public boolean isDataAllowed() {
- return getDataNetworkController().isInternetDataAllowed();
+ return getDataNetworkController().isInternetDataAllowed(false/* ignoreExistingNetworks */);
}
/**
diff --git a/src/java/com/android/internal/telephony/data/DataNetworkController.java b/src/java/com/android/internal/telephony/data/DataNetworkController.java
index 63fe7e5..7f70e32 100644
--- a/src/java/com/android/internal/telephony/data/DataNetworkController.java
+++ b/src/java/com/android/internal/telephony/data/DataNetworkController.java
@@ -1408,22 +1408,26 @@
/**
* Evaluate if telephony frameworks would allow data setup for internet in current environment.
*
+ * @param ignoreExistingNetworks {@code true} to skip the existing network check.
* @return {@code true} if the environment is allowed for internet data. {@code false} if not
* allowed. For example, if SIM is absent, or airplane mode is on, then data is NOT allowed.
* This API does not reflect the currently internet data network status. It's possible there is
* no internet data due to weak cellular signal or network side issue, but internet data is
* still allowed in this case.
*/
- public boolean isInternetDataAllowed() {
+ public boolean isInternetDataAllowed(boolean ignoreExistingNetworks) {
TelephonyNetworkRequest internetRequest = new TelephonyNetworkRequest(
new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build(), mPhone);
- // If one of the existing networks can satisfy the internet request, then internet is
- // allowed.
- if (mDataNetworkList.stream().anyMatch(dataNetwork -> internetRequest.canBeSatisfiedBy(
- dataNetwork.getNetworkCapabilities()))) {
+ // If we don't skip checking existing network, then we should check If one of the
+ // existing networks can satisfy the internet request, then internet is allowed.
+ if ((!mFeatureFlags.ignoreExistingNetworksForInternetAllowedChecking()
+ || !ignoreExistingNetworks)
+ && mDataNetworkList.stream().anyMatch(
+ dataNetwork -> internetRequest.canBeSatisfiedBy(
+ dataNetwork.getNetworkCapabilities()))) {
return true;
}
diff --git a/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java b/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java
index f2b6776..fb9d32f 100644
--- a/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java
+++ b/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java
@@ -781,7 +781,7 @@
return false;
}
- if (!mDataNetworkController.isInternetDataAllowed()) {
+ if (!mDataNetworkController.isInternetDataAllowed(true/* ignoreExistingNetworks */)) {
logl("skip data stall recovery as data not allowed.");
return false;
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
index e1e238e..28c6cd6 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
@@ -107,7 +107,7 @@
doReturn(dataStallRecoveryStepsArray)
.when(mDataConfigManager)
.getDataStallRecoveryShouldSkipArray();
- doReturn(true).when(mDataNetworkController).isInternetDataAllowed();
+ doReturn(true).when(mDataNetworkController).isInternetDataAllowed(true);
doAnswer(invocation -> {
((Runnable) invocation.getArguments()[0]).run();
@@ -347,7 +347,7 @@
mDataStallRecoveryManager.setRecoveryAction(1);
doReturn(mSignalStrength).when(mPhone).getSignalStrength();
doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
- doReturn(false).when(mDataNetworkController).isInternetDataAllowed();
+ doReturn(false).when(mDataNetworkController).isInternetDataAllowed(true);
logd("Sending validation failed callback");
sendValidationStatusCallback(NetworkAgent.VALIDATION_STATUS_NOT_VALID);