Loading src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java +22 −1 Original line number Diff line number Diff line Loading @@ -1261,7 +1261,7 @@ public class EmergencyStateTracker { // Wait for normal service state or timeout if required. if (phone == phoneForEmergency && waitForInServiceTimeout > 0 && serviceState != ServiceState.STATE_IN_SERVICE) { && !isNetworkRegistered(phone)) { return false; } return phone.getServiceStateTracker().isRadioOn() Loading Loading @@ -1427,6 +1427,27 @@ public class EmergencyStateTracker { || phone.getServiceState().isEmergencyOnly(); } private static boolean isNetworkRegistered(Phone phone) { ServiceState ss = phone.getServiceStateTracker().getServiceState(); if (ss != null) { NetworkRegistrationInfo nri = ss.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (nri != null && nri.isNetworkRegistered()) { // PS is IN_SERVICE state. return true; } nri = ss.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (nri != null && nri.isNetworkRegistered()) { // CS is IN_SERVICE state. return true; } } return false; } /** * Checks whether both {@code Phone}s are same or not. */ Loading tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java +25 −0 Original line number Diff line number Diff line Loading @@ -53,9 +53,11 @@ import android.os.Looper; import android.os.Message; import android.os.UserHandle; import android.provider.Settings; import android.telephony.AccessNetworkConstants; import android.telephony.CarrierConfigManager; import android.telephony.DisconnectCause; import android.telephony.EmergencyRegResult; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyCallback; Loading Loading @@ -152,6 +154,13 @@ public class EmergencyStateTrackerTest extends TelephonyTest { false /* isRadioOn */); setConfigForDdsSwitch(testPhone, null, CarrierConfigManager.Gps.SUPL_EMERGENCY_MODE_TYPE_DP_ONLY, "150"); ServiceState ss = mock(ServiceState.class); doReturn(ss).when(mSST).getServiceState(); NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder() .setDomain(NetworkRegistrationInfo.DOMAIN_PS) .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .build(); doReturn(nri).when(ss).getNetworkRegistrationInfo(anyInt(), anyInt()); // Spy is used to capture consumer in delayDialForDdsSwitch EmergencyStateTracker spyEst = spy(emergencyStateTracker); CompletableFuture<Integer> unused = spyEst.startEmergencyCall(testPhone, TEST_CALL_ID, Loading @@ -168,6 +177,14 @@ public class EmergencyStateTrackerTest extends TelephonyTest { when(mSST.isRadioOn()).thenReturn(true); assertFalse(callback.getValue() .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false)); nri = new NetworkRegistrationInfo.Builder() .setDomain(NetworkRegistrationInfo.DOMAIN_PS) .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .setRegistrationState(REGISTRATION_STATE_HOME) .build(); doReturn(nri).when(ss).getNetworkRegistrationInfo(anyInt(), anyInt()); assertTrue(callback.getValue() .isOkToCall(testPhone, ServiceState.STATE_IN_SERVICE, false)); // Once radio on is complete, trigger delay dial Loading Loading @@ -196,6 +213,13 @@ public class EmergencyStateTrackerTest extends TelephonyTest { false /* isRadioOn */); setConfigForDdsSwitch(testPhone, null, CarrierConfigManager.Gps.SUPL_EMERGENCY_MODE_TYPE_DP_ONLY, "150"); ServiceState ss = mock(ServiceState.class); doReturn(ss).when(mSST).getServiceState(); NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder() .setDomain(NetworkRegistrationInfo.DOMAIN_PS) .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .build(); doReturn(nri).when(ss).getNetworkRegistrationInfo(anyInt(), anyInt()); // Spy is used to capture consumer in delayDialForDdsSwitch EmergencyStateTracker spyEst = spy(emergencyStateTracker); CompletableFuture<Integer> unused = spyEst.startEmergencyCall(testPhone, TEST_CALL_ID, Loading @@ -212,6 +236,7 @@ public class EmergencyStateTrackerTest extends TelephonyTest { assertFalse(callback.getValue() .onTimeout(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false)); when(mSST.isRadioOn()).thenReturn(true); assertFalse(callback.getValue() .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false)); assertTrue(callback.getValue() Loading Loading
src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java +22 −1 Original line number Diff line number Diff line Loading @@ -1261,7 +1261,7 @@ public class EmergencyStateTracker { // Wait for normal service state or timeout if required. if (phone == phoneForEmergency && waitForInServiceTimeout > 0 && serviceState != ServiceState.STATE_IN_SERVICE) { && !isNetworkRegistered(phone)) { return false; } return phone.getServiceStateTracker().isRadioOn() Loading Loading @@ -1427,6 +1427,27 @@ public class EmergencyStateTracker { || phone.getServiceState().isEmergencyOnly(); } private static boolean isNetworkRegistered(Phone phone) { ServiceState ss = phone.getServiceStateTracker().getServiceState(); if (ss != null) { NetworkRegistrationInfo nri = ss.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (nri != null && nri.isNetworkRegistered()) { // PS is IN_SERVICE state. return true; } nri = ss.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (nri != null && nri.isNetworkRegistered()) { // CS is IN_SERVICE state. return true; } } return false; } /** * Checks whether both {@code Phone}s are same or not. */ Loading
tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java +25 −0 Original line number Diff line number Diff line Loading @@ -53,9 +53,11 @@ import android.os.Looper; import android.os.Message; import android.os.UserHandle; import android.provider.Settings; import android.telephony.AccessNetworkConstants; import android.telephony.CarrierConfigManager; import android.telephony.DisconnectCause; import android.telephony.EmergencyRegResult; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyCallback; Loading Loading @@ -152,6 +154,13 @@ public class EmergencyStateTrackerTest extends TelephonyTest { false /* isRadioOn */); setConfigForDdsSwitch(testPhone, null, CarrierConfigManager.Gps.SUPL_EMERGENCY_MODE_TYPE_DP_ONLY, "150"); ServiceState ss = mock(ServiceState.class); doReturn(ss).when(mSST).getServiceState(); NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder() .setDomain(NetworkRegistrationInfo.DOMAIN_PS) .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .build(); doReturn(nri).when(ss).getNetworkRegistrationInfo(anyInt(), anyInt()); // Spy is used to capture consumer in delayDialForDdsSwitch EmergencyStateTracker spyEst = spy(emergencyStateTracker); CompletableFuture<Integer> unused = spyEst.startEmergencyCall(testPhone, TEST_CALL_ID, Loading @@ -168,6 +177,14 @@ public class EmergencyStateTrackerTest extends TelephonyTest { when(mSST.isRadioOn()).thenReturn(true); assertFalse(callback.getValue() .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false)); nri = new NetworkRegistrationInfo.Builder() .setDomain(NetworkRegistrationInfo.DOMAIN_PS) .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .setRegistrationState(REGISTRATION_STATE_HOME) .build(); doReturn(nri).when(ss).getNetworkRegistrationInfo(anyInt(), anyInt()); assertTrue(callback.getValue() .isOkToCall(testPhone, ServiceState.STATE_IN_SERVICE, false)); // Once radio on is complete, trigger delay dial Loading Loading @@ -196,6 +213,13 @@ public class EmergencyStateTrackerTest extends TelephonyTest { false /* isRadioOn */); setConfigForDdsSwitch(testPhone, null, CarrierConfigManager.Gps.SUPL_EMERGENCY_MODE_TYPE_DP_ONLY, "150"); ServiceState ss = mock(ServiceState.class); doReturn(ss).when(mSST).getServiceState(); NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder() .setDomain(NetworkRegistrationInfo.DOMAIN_PS) .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .build(); doReturn(nri).when(ss).getNetworkRegistrationInfo(anyInt(), anyInt()); // Spy is used to capture consumer in delayDialForDdsSwitch EmergencyStateTracker spyEst = spy(emergencyStateTracker); CompletableFuture<Integer> unused = spyEst.startEmergencyCall(testPhone, TEST_CALL_ID, Loading @@ -212,6 +236,7 @@ public class EmergencyStateTrackerTest extends TelephonyTest { assertFalse(callback.getValue() .onTimeout(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false)); when(mSST.isRadioOn()).thenReturn(true); assertFalse(callback.getValue() .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false)); assertTrue(callback.getValue() Loading