summaryrefslogtreecommitdiff
path: root/services/QualifiedNetworksService/src/com/android/telephony/qns
diff options
context:
space:
mode:
authorSewook Seo <sewookseo@google.com>2023-04-13 12:09:58 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-04-13 12:09:58 +0000
commitef9bff5b0a4233096c908f12a7349489069fa8d1 (patch)
tree88e1638a5bbce8a9079c6e5b98d35a4b6d89dd9a /services/QualifiedNetworksService/src/com/android/telephony/qns
parent67bc037be572dc064cb9f49fe1d215f9d802d734 (diff)
parentdc9da112083c33f28c7bcb1a10e99bd3d48ea24b (diff)
downloadTelephony-ef9bff5b0a4233096c908f12a7349489069fa8d1.tar.gz
[QNS] Fixes on QnsCallStatusTracker am: b220c166a7 am: dc9da11208
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/Telephony/+/22561882 Change-Id: I0bfd598db1bec72dc58375b78fa7b49af2ea3ae1 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'services/QualifiedNetworksService/src/com/android/telephony/qns')
-rw-r--r--services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java2
-rw-r--r--services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java35
2 files changed, 28 insertions, 9 deletions
diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java
index 098820a..f77da91 100644
--- a/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java
+++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java
@@ -1426,7 +1426,7 @@ class AccessNetworkEvaluator {
return true;
} else {
if (mNetCapability == NetworkCapabilities.NET_CAPABILITY_IMS
- && mCallType == QnsConstants.CALL_TYPE_IDLE) {
+ && mCallStatusTracker.isCallIdle(NetworkCapabilities.NET_CAPABILITY_IMS)) {
// Telephony will make new connection with preferred AccessNetwork
log("handover is not allowed. but need to move to target Transport.");
return true;
diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java
index 3b2b63f..b45ba78 100644
--- a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java
+++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java
@@ -817,14 +817,18 @@ public class QnsCallStatusTracker {
}
}
//2. Notify a new ongoing call type
- if (hasEmergencyCall() && mLastEmergencyCallType != QnsConstants.CALL_TYPE_EMERGENCY) {
- mLastEmergencyCallType = QnsConstants.CALL_TYPE_EMERGENCY;
- if (!isDataNetworkConnected(NetworkCapabilities.NET_CAPABILITY_EIMS)
- && isDataNetworkConnected(NetworkCapabilities.NET_CAPABILITY_IMS)) {
- notifyCallType(NetworkCapabilities.NET_CAPABILITY_IMS, mLastEmergencyCallType);
- mEmergencyOverIms = true;
- } else {
- notifyCallType(NetworkCapabilities.NET_CAPABILITY_EIMS, mLastEmergencyCallType);
+ if (hasEmergencyCall()) {
+ if (mLastEmergencyCallType != QnsConstants.CALL_TYPE_EMERGENCY) {
+ mLastEmergencyCallType = QnsConstants.CALL_TYPE_EMERGENCY;
+ if (!isDataNetworkConnected(NetworkCapabilities.NET_CAPABILITY_EIMS)
+ && isDataNetworkConnected(NetworkCapabilities.NET_CAPABILITY_IMS)) {
+ notifyCallType(NetworkCapabilities.NET_CAPABILITY_IMS,
+ mLastEmergencyCallType);
+ mEmergencyOverIms = true;
+ } else {
+ notifyCallType(NetworkCapabilities.NET_CAPABILITY_EIMS,
+ mLastEmergencyCallType);
+ }
}
} else if (hasVideoCall()) {
if (mLastNormalCallType != QnsConstants.CALL_TYPE_VIDEO) {
@@ -865,6 +869,21 @@ public class QnsCallStatusTracker {
return mCallStates.size() == 0;
}
+ boolean isCallIdle(int netCapability) {
+ int callNum = mCallStates.size();
+ if (callNum == 0) {
+ return true;
+ }
+ if (netCapability == NetworkCapabilities.NET_CAPABILITY_IMS) {
+ return (mLastNormalCallType == QnsConstants.CALL_TYPE_IDLE)
+ && (mLastEmergencyCallType != QnsConstants.CALL_TYPE_IDLE
+ && !mEmergencyOverIms);
+ } else if (netCapability == NetworkCapabilities.NET_CAPABILITY_EIMS) {
+ return mLastEmergencyCallType == QnsConstants.CALL_TYPE_IDLE || mEmergencyOverIms;
+ }
+ return false;
+ }
+
boolean hasEmergencyCall() {
for (CallState cs : mCallStates) {
if (cs.getImsCallServiceType() == ImsCallProfile.SERVICE_TYPE_EMERGENCY