diff options
author | Sewook Seo <sewookseo@google.com> | 2023-02-20 21:39:34 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-02-20 21:39:34 +0000 |
commit | 075b6bbe1633decd331540f8574de5f2042d8619 (patch) | |
tree | 8ab6211e5561ac51618900b39d79e730697a34d7 /services/QualifiedNetworksService | |
parent | df2296861ce139bcaadb9d95c44688c58110231b (diff) | |
parent | 3f3b96ba1231e470ac7637f19d754979ac7b6808 (diff) | |
download | Telephony-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')
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) |