diff options
author | Sewook Seo <sewookseo@google.com> | 2023-04-13 12:09:58 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-04-13 12:09:58 +0000 |
commit | ef9bff5b0a4233096c908f12a7349489069fa8d1 (patch) | |
tree | 88e1638a5bbce8a9079c6e5b98d35a4b6d89dd9a /services/QualifiedNetworksService/src/com/android/telephony/qns | |
parent | 67bc037be572dc064cb9f49fe1d215f9d802d734 (diff) | |
parent | dc9da112083c33f28c7bcb1a10e99bd3d48ea24b (diff) | |
download | Telephony-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')
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 |