Merge "Validate cached allowed state when MCC change." into main
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b6171fc..d7ad451 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -181,6 +181,8 @@
<!-- Needed because the DISPLAY_EMERGENCY_MESSAGE ConnectionEvent contains a PendingIntent to activate the satellite feature. -->
<uses-permission android:name="com.google.android.apps.stargate.permission.SEND_EMERGENCY_INTENTS"/>
+ <!-- Needed to start demo session -->
+ <uses-permission android:name="com.google.android.apps.stargate.permission.SEND_NON_EMERGENCY_INTENTS"/>
<application android:name="PhoneApp"
android:persistent="true"
diff --git a/res/layout/radio_info.xml b/res/layout/radio_info.xml
index 24590bc..9ab8157 100644
--- a/res/layout/radio_info.xml
+++ b/res/layout/radio_info.xml
@@ -283,6 +283,16 @@
android:textAllCaps="false"
android:text="@string/satellite_enable_non_emergency_mode_string" />
+ <!-- Demo ESOS -->
+ <Button android:id="@+id/demo_esos_questionnaire"
+ android:textSize="14sp"
+ android:layout_marginTop="8dip"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAllCaps="false"
+ android:text="@string/demo_esos_satellite_string"
+ />
+
<!-- VoLTE provisioned -->
<Switch android:id="@+id/volte_provisioned_switch"
android:textSize="14sp"
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 2fe2838..7012e67 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -848,7 +848,7 @@
<string name="enforce_satellite_channel_string" msgid="295306734591329892">"LTE satelīta kanāla piespiedu izmantošana (tikai atkļūdošanas būvējums)"</string>
<string name="mock_carrier_roaming_satellite_string" msgid="4796300252858292593">"Mobilo sakaru operatora satelīta režīma imitēšana (tikai atkļūdošanas būvējums)"</string>
<string name="esos_satellite_string" msgid="7274794226125968657">"Izmēģināt īsta satelīta eSOS režīmu (tikai atkļūdošanas būvējumā)"</string>
- <string name="satellite_enable_non_emergency_mode_string" msgid="9005332650950637932">"Izmēģināt īsta satelīta eSOS režīmu (tikai atkļūdošanas būvējumā)"</string>
+ <string name="satellite_enable_non_emergency_mode_string" msgid="9005332650950637932">"Izmēģināt īsta satelīta režīmu, kas nav eSOS režīms (tikai atkļūdošanas būvējumā)"</string>
<string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"Skatīt SIM adrešu grāmatu"</string>
<string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"Skatīt ierobežotā zvanu saraksta numurus"</string>
<string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"Pakalpojuma iezvanes numuru skatīšana"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 305f7cb..f3bff1b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2037,6 +2037,8 @@
<string name="esos_satellite_string">Test real satellite eSOS mode (Debug Build only)</string>
<!-- Title for enable real satellite non-emergency mode. -->
<string name="satellite_enable_non_emergency_mode_string">Test real satellite non-eSOS mode (Debug Build only)</string>
+ <!-- Title for trigger demo satellite eSOS. -->
+ <string name="demo_esos_satellite_string">Test demo satellite eSOS mode (Debug Build only)</string>
<!-- Phone Info screen. Menu item label. Used for diagnostic info screens, precise translation isn't needed -->
<string name="radioInfo_menu_viewADN">View SIM Address Book</string>
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 7ba69cd..2cd0336 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -9322,11 +9322,17 @@
*/
@Override
public void getCarrierRestrictionStatus(IIntegerConsumer callback, String packageName) {
- enforceReadPermission("getCarrierRestrictionStatus");
-
+ String functionName = "getCarrierRestrictionStatus";
enforceTelephonyFeatureWithException(packageName,
- PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION, "getCarrierRestrictionStatus");
-
+ PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION, functionName);
+ try {
+ mApp.enforceCallingOrSelfPermission(
+ android.Manifest.permission.READ_BASIC_PHONE_STATE,
+ functionName);
+ } catch (SecurityException e) {
+ mApp.enforceCallingOrSelfPermission(permission.READ_PHONE_STATE,
+ functionName);
+ }
Set<Integer> carrierIds = validateCallerAndGetCarrierIds(packageName);
if (carrierIds.contains(CarrierAllowListInfo.INVALID_CARRIER_ID)) {
Rlog.e(LOG_TAG, "getCarrierRestrictionStatus: caller is not registered");
@@ -14312,8 +14318,13 @@
@SatelliteManager.SatelliteResult public int registerForCommunicationAllowedStateChanged(
int subId, @NonNull ISatelliteCommunicationAllowedStateCallback callback) {
enforceSatelliteCommunicationPermission("registerForCommunicationAllowedStateChanged");
- return mSatelliteAccessController.registerForCommunicationAllowedStateChanged(
- subId, callback);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return mSatelliteAccessController.registerForCommunicationAllowedStateChanged(
+ subId, callback);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
/**
@@ -14331,7 +14342,13 @@
public void unregisterForCommunicationAllowedStateChanged(
int subId, @NonNull ISatelliteCommunicationAllowedStateCallback callback) {
enforceSatelliteCommunicationPermission("unregisterForCommunicationAllowedStateChanged");
- mSatelliteAccessController.unregisterForCommunicationAllowedStateChanged(subId, callback);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mSatelliteAccessController.unregisterForCommunicationAllowedStateChanged(subId,
+ callback);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
/**
@@ -14347,7 +14364,12 @@
public void requestSatelliteSessionStats(int subId, @NonNull ResultReceiver result) {
enforceModifyPermission();
enforcePackageUsageStatsPermission("requestSatelliteSessionStats");
- mSatelliteController.requestSatelliteSessionStats(subId, result);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mSatelliteController.requestSatelliteSessionStats(subId, result);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
/**
@@ -14361,7 +14383,12 @@
@Override
public void requestSatelliteSubscriberProvisionStatus(@NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("requestSatelliteSubscriberProvisionStatus");
- mSatelliteController.requestSatelliteSubscriberProvisionStatus(result);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mSatelliteController.requestSatelliteSubscriberProvisionStatus(result);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
/**
@@ -14376,6 +14403,11 @@
public void provisionSatellite(@NonNull List<SatelliteSubscriberInfo> list,
@NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("provisionSatellite");
- mSatelliteController.provisionSatellite(list, result);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mSatelliteController.provisionSatellite(list, result);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
}
diff --git a/src/com/android/phone/settings/RadioInfo.java b/src/com/android/phone/settings/RadioInfo.java
index 6be15f3..005c0fa 100644
--- a/src/com/android/phone/settings/RadioInfo.java
+++ b/src/com/android/phone/settings/RadioInfo.java
@@ -135,9 +135,6 @@
private static final boolean IS_USER_BUILD = "user".equals(Build.TYPE);
- private static final String ACTION_ESOS_TEST =
- "com.google.android.apps.stargate.ACTION_ESOS_QUESTIONNAIRE";
-
private static final String[] PREFERRED_NETWORK_LABELS = {
"GSM/WCDMA preferred",
"GSM only",
@@ -317,6 +314,7 @@
private Button mTriggerCarrierProvisioningButton;
private Button mEsosButton;
private Button mSatelliteEnableNonEmergencyModeButton;
+ private Button mEsosDemoButton;
private Switch mImsVolteProvisionedSwitch;
private Switch mImsVtProvisionedSwitch;
private Switch mImsWfcProvisionedSwitch;
@@ -361,6 +359,9 @@
private int mCellInfoRefreshRateIndex;
private int mSelectedPhoneIndex;
+ private String mActionEsos;
+ private String mActionEsosDemo;
+
private final NetworkRequest mDefaultNetworkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
@@ -568,6 +569,16 @@
log("Started onCreate");
+ Resources r = getResources();
+ mActionEsos =
+ r.getString(
+ com.android.internal.R.string
+ .config_satellite_emergency_handover_intent_action);
+
+ mActionEsosDemo =
+ r.getString(
+ com.android.internal.R.string.config_satellite_demo_mode_sos_intent_action);
+
mQueuedWork = new ThreadPoolExecutor(1, 1, RUNNABLE_TIMEOUT_MS, TimeUnit.MICROSECONDS,
new LinkedBlockingDeque<Runnable>());
mConnectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
@@ -754,6 +765,7 @@
}
mEsosButton = (Button) findViewById(R.id.esos_questionnaire);
+ mEsosDemoButton = (Button) findViewById(R.id.demo_esos_questionnaire);
mSatelliteEnableNonEmergencyModeButton = (Button) findViewById(
R.id.satellite_enable_non_emergency_mode);
CarrierConfigManager cm = mPhone.getContext().getSystemService(CarrierConfigManager.class);
@@ -763,14 +775,25 @@
mSatelliteEnableNonEmergencyModeButton.setVisibility(View.GONE);
}
if (!TelephonyUtils.IS_DEBUGGABLE) {
- mEsosButton.setVisibility(View.GONE);
+ if (!TextUtils.isEmpty(mActionEsos)) {
+ mEsosButton.setVisibility(View.GONE);
+ }
+ if (!TextUtils.isEmpty(mActionEsosDemo)) {
+ mEsosDemoButton.setVisibility(View.GONE);
+ }
mSatelliteEnableNonEmergencyModeButton.setVisibility(View.GONE);
} else {
mEsosButton.setOnClickListener(v ->
mPhone.getContext().startActivity(
- new Intent(ACTION_ESOS_TEST)
+ new Intent(mActionEsos)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK))
);
+ mEsosDemoButton.setOnClickListener(v ->
+ mPhone.getContext().startActivity(
+ new Intent(mActionEsosDemo)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_CLEAR_TASK))
+ );
mSatelliteEnableNonEmergencyModeButton.setOnClickListener(v ->
enableSatelliteNonEmergencyMode());
}
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 163fc26..412e44a 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -1201,17 +1201,20 @@
}
}
+ boolean forNormalRoutingEmergencyCall = false;
if (mDomainSelectionResolver.isDomainSelectionSupported()) {
- // Normal routing emergency number shall be handled by normal call domain selector.
- int routing = (isEmergencyNumber)
- ? getEmergencyCallRouting(phone, number, needToTurnOnRadio)
- : EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN;
- if (isEmergencyNumber && routing != EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL) {
- final Connection resultConnection =
- placeEmergencyConnection(phone,
- request, numberToDial, isTestEmergencyNumber,
- handle, needToTurnOnRadio, routing);
- if (resultConnection != null) return resultConnection;
+ if (isEmergencyNumber) {
+ // Normal routing emergency number shall be handled by normal call domain selector.
+ int routing = getEmergencyCallRouting(phone, number, needToTurnOnRadio);
+ if (routing != EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL) {
+ final Connection resultConnection =
+ placeEmergencyConnection(phone,
+ request, numberToDial, isTestEmergencyNumber,
+ handle, needToTurnOnRadio, routing);
+ if (resultConnection != null) return resultConnection;
+ }
+ forNormalRoutingEmergencyCall = true;
+ Log.d(this, "onCreateOutgoingConnection, forNormalRoutingEmergencyCall");
}
}
@@ -1300,7 +1303,7 @@
}
}
}, isEmergencyNumber && !isTestEmergencyNumber, phone, isTestEmergencyNumber,
- timeoutToOnTimeoutCallback);
+ timeoutToOnTimeoutCallback, forNormalRoutingEmergencyCall);
// Return the still unconnected GsmConnection and wait for the Radios to boot before
// connecting it to the underlying Phone.
return resultConnection;
diff --git a/src/com/android/services/telephony/domainselection/CrossSimRedialingController.java b/src/com/android/services/telephony/domainselection/CrossSimRedialingController.java
index d368d46..3a69459 100644
--- a/src/com/android/services/telephony/domainselection/CrossSimRedialingController.java
+++ b/src/com/android/services/telephony/domainselection/CrossSimRedialingController.java
@@ -227,6 +227,8 @@
if (isThereOtherSlot()) {
mSelector.notifyCrossStackTimerExpired();
+ } else if (!mPermanentRejectedSlots.isEmpty()) {
+ mSelector.maybeHangupOngoingDialing();
}
}
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 3946d1a..0d373de 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -925,8 +925,7 @@
requestScan(true);
return;
}
- // If NGRAN, request scan to trigger emergency registration.
- if (mPsNetworkType == EUTRAN) {
+ if (mPsNetworkType != UNKNOWN) {
onWwanNetworkTypeSelected(mPsNetworkType);
} else if (mCsNetworkType != UNKNOWN) {
checkAndSetTerminateAfterCsFailure(mLastRegResult);
@@ -1344,13 +1343,19 @@
int accessNetwork = regResult.getAccessNetwork();
List<Integer> ratList = getImsNetworkTypeConfiguration();
+ if (!inService && !ratList.contains(NGRAN) && !isSimReady()
+ && !TextUtils.isEmpty(regResult.getCountryIso())) {
+ ratList.add(NGRAN);
+ logi("getSelectablePsNetworkType ratList=" + ratList);
+ }
if (ratList.contains(accessNetwork)) {
if (mIsEmergencyBarred) {
logi("getSelectablePsNetworkType barred");
return UNKNOWN;
}
if (accessNetwork == NGRAN) {
- return (regResult.getNwProvidedEmc() > 0 && regResult.isVopsSupported())
+ return (regResult.getNwProvidedEmc() > 0
+ && (regResult.isVopsSupported() || !inService))
? NGRAN : UNKNOWN;
} else if (accessNetwork == EUTRAN) {
return (regResult.isEmcBearerSupported()
@@ -1845,6 +1850,18 @@
terminateSelectionForCrossSimRedialing(isHangupOngoingDialing);
}
+ /**
+ * If another slot has already permanently failed,
+ * and IMS REG is not completed in the current slot, hang up the ongoing call.
+ */
+ public void maybeHangupOngoingDialing() {
+ logi("maybeHangupOngoingDialing");
+
+ if (mDomainSelected && hangupOngoingDialing()) {
+ notifyCrossStackTimerExpired();
+ }
+ }
+
private boolean hangupOngoingDialing() {
return Flags.hangupEmergencyCallForCrossSimRedialing()
&& (mCallSetupTimerOnCurrentRat > 0)
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java
index 54bb16d..9c75a84 100644
--- a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java
@@ -33,6 +33,7 @@
import android.telephony.satellite.stub.SatelliteCapabilities;
import android.telephony.satellite.stub.SatelliteDatagram;
import android.telephony.satellite.stub.SatelliteImplBase;
+import android.telephony.satellite.stub.SatelliteModemEnableRequestAttributes;
import android.telephony.satellite.stub.SatelliteModemState;
import android.telephony.satellite.stub.SatelliteResult;
import android.telephony.satellite.stub.SatelliteService;
@@ -184,21 +185,25 @@
}
@Override
- public void requestSatelliteEnabled(boolean enableSatellite, boolean enableDemoMode,
- boolean isEmergency, @NonNull IIntegerConsumer errorCallback) {
- logd("requestSatelliteEnabled: mErrorCode=" + mErrorCode + " enable = " + enableSatellite
- + " isEmergency=" + isEmergency);
+ public void requestSatelliteEnabled(SatelliteModemEnableRequestAttributes enableAttributes,
+ @NonNull IIntegerConsumer errorCallback) {
+ logd("requestSatelliteEnabled: mErrorCode=" + mErrorCode
+ + ", isEnabled=" + enableAttributes.isEnabled
+ + ", isDemoMode=" + enableAttributes.isDemoMode
+ + ", isEmergency= " + enableAttributes.isEmergencyMode
+ + ", iccId=" + enableAttributes.satelliteSubscriptionInfo.iccId
+ + ", niddApn=" + enableAttributes.satelliteSubscriptionInfo.niddApn);
if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
runWithExecutor(() -> errorCallback.accept(mErrorCode));
return;
}
- if (enableSatellite) {
+ if (enableAttributes.isEnabled) {
enableSatellite(errorCallback);
} else {
disableSatellite(errorCallback);
}
- mIsEmergnecy = isEmergency;
+ mIsEmergnecy = enableAttributes.isEmergencyMode;
}
private void enableSatellite(@NonNull IIntegerConsumer errorCallback) {
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index 97c3d44..6242710 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -1306,7 +1306,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(0));
+ eq(testPhone), eq(false), eq(0), eq(false));
assertFalse(callback.getValue()
.isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
@@ -1334,7 +1334,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(0));
+ eq(testPhone), eq(false), eq(0), eq(false));
assertFalse(callback.getValue()
.isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
@@ -1446,7 +1446,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(0));
+ eq(testPhone), eq(false), eq(0), eq(false));
assertFalse(callback.getValue()
.isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
@@ -1546,7 +1546,7 @@
PHONE_ACCOUNT_HANDLE_1, connectionRequest);
verify(mRadioOnHelper).triggerRadioOnAndListen(any(), eq(false),
- eq(testPhone0), eq(false), eq(0));
+ eq(testPhone0), eq(false), eq(0), eq(false));
}
/**
@@ -1580,7 +1580,7 @@
PHONE_ACCOUNT_HANDLE_1, connectionRequest);
verify(mRadioOnHelper).triggerRadioOnAndListen(any(), eq(false),
- eq(testPhone0), eq(false), eq(0));
+ eq(testPhone0), eq(false), eq(0), eq(false));
}
/**
@@ -1613,7 +1613,7 @@
PHONE_ACCOUNT_HANDLE_1, connectionRequest);
verify(mRadioOnHelper, times(0)).triggerRadioOnAndListen(any(),
- eq(true), eq(testPhone0), eq(false), eq(0));
+ eq(true), eq(testPhone0), eq(false), eq(0), eq(false));
}
/**
@@ -2761,7 +2761,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_OUT_OF_SERVICE);
@@ -2800,7 +2800,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_OUT_OF_SERVICE);
@@ -2825,7 +2825,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_IN_SERVICE);
@@ -2861,7 +2861,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_IN_SERVICE);
@@ -2898,7 +2898,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_IN_SERVICE);
@@ -2935,7 +2935,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
mConnection.setDisconnected(null);
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 90446af..8a83ab0 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -3612,7 +3612,108 @@
EmergencyRegistrationResult regResult = getEmergencyRegResult(NGRAN,
REGISTRATION_STATE_UNKNOWN,
- 0, false, true, 0, 0, "", "");
+ 0, false, true, 1, 0, "", "", "us");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyScanPsPreferred();
+ }
+
+ @Test
+ public void testNrSaOnlyLimitedServiceNgranEmc() throws Exception {
+ PersistableBundle bundle = getDefaultPersistableBundle();
+ bundle.putIntArray(KEY_EMERGENCY_OVER_IMS_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY,
+ new int[] { NGRAN, EUTRAN });
+ when(mCarrierConfigManager.getConfigForSubId(anyInt(), anyVararg())).thenReturn(bundle);
+
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(NGRAN,
+ REGISTRATION_STATE_UNKNOWN,
+ 0, false, false, 1, 0, "", "", "us");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyPsDialed();
+ }
+
+ @Test
+ public void testNrSaOnlyLimitedServiceNgranNoEmc() throws Exception {
+ PersistableBundle bundle = getDefaultPersistableBundle();
+ bundle.putIntArray(KEY_EMERGENCY_OVER_IMS_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY,
+ new int[] { NGRAN, EUTRAN });
+ when(mCarrierConfigManager.getConfigForSubId(anyInt(), anyVararg())).thenReturn(bundle);
+
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(NGRAN,
+ REGISTRATION_STATE_UNKNOWN,
+ 0, false, false, 0, 0, "", "", "us");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyScanPreferred(DomainSelectionService.SCAN_TYPE_NO_PREFERENCE, NGRAN);
+ }
+
+ @Test
+ public void testDefaultLimitedServiceNgranEmcWhenSimNotReady() throws Exception {
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+ doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
+ .when(mTelephonyManager).getSimState(anyInt());
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(NGRAN,
+ REGISTRATION_STATE_UNKNOWN,
+ 0, false, false, 1, 0, "", "", "us");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyPsDialed();
+ }
+
+ @Test
+ public void testDefaultLimitedServiceNgranNoEmcWhenSimNotReady() throws Exception {
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+ doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
+ .when(mTelephonyManager).getSimState(anyInt());
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(NGRAN,
+ REGISTRATION_STATE_UNKNOWN,
+ 0, false, false, 0, 0, "", "", "us");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyScanPsPreferred();
+ }
+
+ @Test
+ public void testNrSaOnlyLimitedServiceNgranEmcNoCountryIsoWhenSimNotReady() throws Exception {
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+ doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
+ .when(mTelephonyManager).getSimState(anyInt());
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(NGRAN,
+ REGISTRATION_STATE_UNKNOWN,
+ 0, false, false, 1, 0, "", "", "");
SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
processAllMessages();