summaryrefslogtreecommitdiff
path: root/services/QualifiedNetworksService
diff options
context:
space:
mode:
authorSewook Seo <sewookseo@google.com>2023-02-20 21:39:34 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-02-20 21:39:34 +0000
commit075b6bbe1633decd331540f8574de5f2042d8619 (patch)
tree8ab6211e5561ac51618900b39d79e730697a34d7 /services/QualifiedNetworksService
parentdf2296861ce139bcaadb9d95c44688c58110231b (diff)
parent3f3b96ba1231e470ac7637f19d754979ac7b6808 (diff)
downloadTelephony-075b6bbe1633decd331540f8574de5f2042d8619.tar.gz
Merge changes from topic "improve emergency RAT update"
* changes: [QNS]notify callsate for emergency at active [QNS]keep last transport type of emergency ANE
Diffstat (limited to 'services/QualifiedNetworksService')
-rw-r--r--services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java8
-rw-r--r--services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java16
-rw-r--r--services/QualifiedNetworksService/tests/src/com/android/telephony/qns/AccessNetworkEvaluatorTest.java21
-rw-r--r--services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCallStatusTrackerTest.java28
4 files changed, 48 insertions, 25 deletions
diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java
index 6ef124d..d708f2d 100644
--- a/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java
+++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java
@@ -706,12 +706,13 @@ class AccessNetworkEvaluator {
boolean needEvaluate = false;
switch (info.getEvent()) {
case DataConnectionStatusTracker.EVENT_DATA_CONNECTION_DISCONNECTED:
- needEvaluate = true;
- initLastNotifiedQualifiedNetwork();
if (mNetCapability == NetworkCapabilities.NET_CAPABILITY_EIMS) {
// If FWK guided emergency's transport type during data connected state, notify
// the transport type when the data connection is disconnected.
notifyCachedTransportTypeForEmergency();
+ } else {
+ needEvaluate = true;
+ initLastNotifiedQualifiedNetwork();
}
break;
case DataConnectionStatusTracker.EVENT_DATA_CONNECTION_CONNECTED:
@@ -722,8 +723,9 @@ class AccessNetworkEvaluator {
// If FWK guided emergency's transport type during data connecting state, notify
// the transport type when the data connection is failed.
notifyCachedTransportTypeForEmergency();
+ } else {
+ needEvaluate = true;
}
- needEvaluate = true;
break;
}
if (needEvaluate) {
diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java
index d4d3d16..7a2867c 100644
--- a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java
+++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCallStatusTracker.java
@@ -390,8 +390,11 @@ public class QnsCallStatusTracker {
void close() {
mTelephonyListener.removeMediaQualityStatusCallback(mMediaQualityStatusConsumer);
- mTelephonyListener.unregisterPreciseDataConnectionStateChanged(
- mNetCapability, mActiveCallHandler);
+ if (mNetCapability != QnsConstants.INVALID_VALUE) {
+ mTelephonyListener.unregisterPreciseDataConnectionStateChanged(
+ mNetCapability, mActiveCallHandler);
+ mNetCapability = QnsConstants.INVALID_VALUE;
+ }
if (mHandlerThread != null) {
mHandlerThread.quitSafely();
}
@@ -523,11 +526,11 @@ public class QnsCallStatusTracker {
Log.d(mLogTag, "callEnded callType: " + mCallType + " netCapa:"
+ QnsUtils.getNameOfNetCapability(mNetCapability) + " " + sb.toString());
mCallType = QnsConstants.CALL_TYPE_IDLE;
- mNetCapability = 0;
- mAccessNetwork = AccessNetworkConstants.AccessNetworkType.UNKNOWN;
- mTransportType = AccessNetworkConstants.TRANSPORT_TYPE_INVALID;
mTelephonyListener.unregisterPreciseDataConnectionStateChanged(
mNetCapability, mActiveCallHandler);
+ mNetCapability = QnsConstants.INVALID_VALUE;
+ mAccessNetwork = AccessNetworkConstants.AccessNetworkType.UNKNOWN;
+ mTransportType = AccessNetworkConstants.TRANSPORT_TYPE_INVALID;
}
void onMediaQualityStatusChanged(MediaQualityStatus status) {
@@ -846,7 +849,8 @@ public class QnsCallStatusTracker {
boolean hasEmergencyCall() {
for (CallState cs : mCallStates) {
- if (cs.getImsCallServiceType() == ImsCallProfile.SERVICE_TYPE_EMERGENCY) {
+ if (cs.getImsCallServiceType() == ImsCallProfile.SERVICE_TYPE_EMERGENCY
+ && cs.getCallState() == PreciseCallState.PRECISE_CALL_STATE_ACTIVE) {
return true;
}
}
diff --git a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/AccessNetworkEvaluatorTest.java b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/AccessNetworkEvaluatorTest.java
index 51f25c2..42a8bb2 100644
--- a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/AccessNetworkEvaluatorTest.java
+++ b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/AccessNetworkEvaluatorTest.java
@@ -1066,25 +1066,42 @@ public class AccessNetworkEvaluatorTest extends QnsTest {
new DataConnectionStatusTracker.DataConnectionChangedInfo(
EVENT_DATA_CONNECTION_DISCONNECTED, STATE_INACTIVE,
AccessNetworkConstants.TRANSPORT_TYPE_INVALID));
+ mLatch = new CountDownLatch(1);
+ waitForLastHandlerAction(mAne.mHandler);
+ assertTrue(mLatch.await(100, TimeUnit.MILLISECONDS));
assertTrue(
mQualifiedNetworksInfo
.getAccessNetworkTypes()
.contains(AccessNetworkConstants.AccessNetworkType.IWLAN));
+ QnsTelephonyListener.QnsTelephonyInfo info =
+ mMockQnsTelephonyListener.new QnsTelephonyInfo();
+ info.setCellularAvailable(true);
+ info.setCoverage(false);
+ info.setDataNetworkType(TelephonyManager.NETWORK_TYPE_LTE);
+ info.setVoiceNetworkType(TelephonyManager.NETWORK_TYPE_LTE);
+ info.setDataRegState(ServiceState.STATE_IN_SERVICE);
+ QnsTelephonyInfoIms infoIms =
+ mMockQnsTelephonyListener.new QnsTelephonyInfoIms(info, true, true, false, false);
+ mAne.onQnsTelephonyInfoChanged(infoIms);
+ waitForLastHandlerAction(mAne.mHandler);
when(mDataConnectionStatusTracker.isInactiveState()).thenReturn(false);
mQualifiedNetworksInfo = null;
mLatch = new CountDownLatch(1);
- mAne.onEmergencyPreferredTransportTypeChanged(AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
+ mAne.onEmergencyPreferredTransportTypeChanged(AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
assertFalse(mLatch.await(500, TimeUnit.MILLISECONDS));
assertNull(mQualifiedNetworksInfo);
mAne.onDataConnectionStateChanged(
new DataConnectionStatusTracker.DataConnectionChangedInfo(
EVENT_DATA_CONNECTION_FAILED, STATE_INACTIVE,
AccessNetworkConstants.TRANSPORT_TYPE_INVALID));
+ mLatch = new CountDownLatch(1);
+ waitForLastHandlerAction(mAne.mHandler);
+ assertTrue(mLatch.await(100, TimeUnit.MILLISECONDS));
assertTrue(
mQualifiedNetworksInfo
.getAccessNetworkTypes()
- .contains(AccessNetworkConstants.AccessNetworkType.IWLAN));
+ .contains(AccessNetworkConstants.AccessNetworkType.EUTRAN));
}
@Test
diff --git a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCallStatusTrackerTest.java b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCallStatusTrackerTest.java
index 0139106..c801e64 100644
--- a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCallStatusTrackerTest.java
+++ b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCallStatusTrackerTest.java
@@ -181,7 +181,7 @@ public class QnsCallStatusTrackerTest extends QnsTest {
new CallState.Builder(PreciseCallState.PRECISE_CALL_STATE_DISCONNECTING)
.setImsCallType(ImsCallProfile.CALL_TYPE_VOICE)
.setImsCallServiceType(ImsCallProfile.SERVICE_TYPE_NORMAL).build());
- mTestCallStateList.add(new CallState.Builder(PreciseCallState.PRECISE_CALL_STATE_DIALING)
+ mTestCallStateList.add(new CallState.Builder(PreciseCallState.PRECISE_CALL_STATE_ACTIVE)
.setImsCallType(ImsCallProfile.CALL_TYPE_VOICE)
.setImsCallServiceType(ImsCallProfile.SERVICE_TYPE_EMERGENCY).build());
mCallTracker.updateCallState(mTestCallStateList);
@@ -396,7 +396,7 @@ public class QnsCallStatusTrackerTest extends QnsTest {
NetworkCapabilities.NET_CAPABILITY_IMS))
.thenReturn(imsDataStatus);
// Test1:
- mTestCallStateList.add(new CallState.Builder(PreciseCallState.PRECISE_CALL_STATE_DIALING)
+ mTestCallStateList.add(new CallState.Builder(PreciseCallState.PRECISE_CALL_STATE_ACTIVE)
.setImsCallType(ImsCallProfile.CALL_TYPE_VOICE)
.setImsCallServiceType(ImsCallProfile.SERVICE_TYPE_EMERGENCY).build());
mCallTracker.updateCallState(mTestCallStateList);
@@ -526,15 +526,15 @@ public class QnsCallStatusTrackerTest extends QnsTest {
mTestCallStateList.clear();
mCallTracker.updateCallState(mTestCallStateList);
assertEquals(QnsConstants.CALL_TYPE_IDLE, activeCallTracker.getCallType());
- assertEquals(0, activeCallTracker.getNetCapability());
+ assertEquals(QnsConstants.INVALID_VALUE, activeCallTracker.getNetCapability());
// Test4:
mTestCallStateList.add(new CallState.Builder(PreciseCallState.PRECISE_CALL_STATE_DIALING)
.setImsCallType(ImsCallProfile.CALL_TYPE_VOICE)
.setImsCallServiceType(ImsCallProfile.SERVICE_TYPE_EMERGENCY).build());
mCallTracker.updateCallState(mTestCallStateList);
- assertEquals(QnsConstants.CALL_TYPE_EMERGENCY, activeCallTracker.getCallType());
- assertEquals(NetworkCapabilities.NET_CAPABILITY_EIMS, activeCallTracker.getNetCapability());
+ assertEquals(QnsConstants.CALL_TYPE_IDLE, activeCallTracker.getCallType());
+ assertEquals(QnsConstants.INVALID_VALUE, activeCallTracker.getNetCapability());
// Test5:
mTestCallStateList.clear();
@@ -549,7 +549,7 @@ public class QnsCallStatusTrackerTest extends QnsTest {
mTestCallStateList.clear();
mCallTracker.updateCallState(mTestCallStateList);
assertEquals(QnsConstants.CALL_TYPE_IDLE, activeCallTracker.getCallType());
- assertEquals(0, activeCallTracker.getNetCapability());
+ assertEquals(QnsConstants.INVALID_VALUE, activeCallTracker.getNetCapability());
}
@Test
@@ -587,7 +587,7 @@ public class QnsCallStatusTrackerTest extends QnsTest {
mTestCallStateList.clear();
mCallTracker.updateCallState(mTestCallStateList);
assertEquals(QnsConstants.CALL_TYPE_IDLE, activeCallTracker.getCallType());
- assertEquals(0, activeCallTracker.getNetCapability());
+ assertEquals(QnsConstants.INVALID_VALUE, activeCallTracker.getNetCapability());
}
@Test
@@ -771,7 +771,7 @@ public class QnsCallStatusTrackerTest extends QnsTest {
mTestCallStateList.clear();
mCallTracker.updateCallState(mTestCallStateList);
assertEquals(QnsConstants.CALL_TYPE_IDLE, activeCallTracker.getCallType());
- assertEquals(0, activeCallTracker.getNetCapability());
+ assertEquals(QnsConstants.INVALID_VALUE, activeCallTracker.getNetCapability());
oldTransportQuality = activeCallTracker.getLastTransportQuality(
AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
@@ -890,8 +890,8 @@ public class QnsCallStatusTrackerTest extends QnsTest {
QnsCallStatusTracker.ActiveCallTracker activeCallTracker =
mCallTracker.getActiveCallTracker();
assertNotNull(activeCallTracker);
- assertEquals(QnsConstants.CALL_TYPE_EMERGENCY, activeCallTracker.getCallType());
- assertEquals(NetworkCapabilities.NET_CAPABILITY_EIMS, activeCallTracker.getNetCapability());
+ assertEquals(QnsConstants.CALL_TYPE_IDLE, activeCallTracker.getCallType());
+ assertEquals(QnsConstants.INVALID_VALUE, activeCallTracker.getNetCapability());
mTestCallStateList.clear();
mTestCallStateList.add(new CallState.Builder(PreciseCallState.PRECISE_CALL_STATE_ACTIVE)
.setImsCallType(ImsCallProfile.CALL_TYPE_VOICE)
@@ -944,8 +944,8 @@ public class QnsCallStatusTrackerTest extends QnsTest {
QnsCallStatusTracker.ActiveCallTracker activeCallTracker =
mCallTracker.getActiveCallTracker();
assertNotNull(activeCallTracker);
- assertEquals(QnsConstants.CALL_TYPE_EMERGENCY, activeCallTracker.getCallType());
- assertEquals(NetworkCapabilities.NET_CAPABILITY_EIMS, activeCallTracker.getNetCapability());
+ assertEquals(QnsConstants.CALL_TYPE_IDLE, activeCallTracker.getCallType());
+ assertEquals(QnsConstants.INVALID_VALUE, activeCallTracker.getNetCapability());
mTestCallStateList.clear();
mTestCallStateList.add(new CallState.Builder(PreciseCallState.PRECISE_CALL_STATE_ACTIVE)
.setImsCallType(ImsCallProfile.CALL_TYPE_VOICE)
@@ -1007,8 +1007,8 @@ public class QnsCallStatusTrackerTest extends QnsTest {
QnsCallStatusTracker.ActiveCallTracker activeCallTracker =
mCallTracker.getActiveCallTracker();
assertNotNull(activeCallTracker);
- assertEquals(QnsConstants.CALL_TYPE_EMERGENCY, activeCallTracker.getCallType());
- assertEquals(NetworkCapabilities.NET_CAPABILITY_EIMS, activeCallTracker.getNetCapability());
+ assertEquals(QnsConstants.CALL_TYPE_IDLE, activeCallTracker.getCallType());
+ assertEquals(QnsConstants.INVALID_VALUE, activeCallTracker.getNetCapability());
mTestCallStateList.clear();
mTestCallStateList.add(new CallState.Builder(PreciseCallState.PRECISE_CALL_STATE_ACTIVE)
.setImsCallType(ImsCallProfile.CALL_TYPE_VOICE)