Adjust the RAT preference when SIM is PIN locked

There can be countries where emergency calls on 2G networks
are more stable than other networks when SIM is absent.

Per configuration, adjust the RAT preference for network scan
when SIM state is PIN/PUK locked.

Bug: 342288364
Test: atest EmergencyCallDomainSelectorTest
Change-Id: I6dbde238f809ea58581d833588d08b3c7b55aecc
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 5c651da..daa4b4e 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -1057,8 +1057,8 @@
                 + ", lastNetworkType=" + accessNetworkTypeToString(mLastNetworkType));
 
         if (mLastRegResult != null
-                && !SubscriptionManager.isValidSubscriptionId(getSubId())
-                && sPreferGeranWhenSimAbsent.contains(mLastRegResult.getCountryIso())) {
+                && sPreferGeranWhenSimAbsent.contains(mLastRegResult.getCountryIso())
+                && !isSimReady()) {
             logi("getNextPreferredNetworks preferGeran");
             preferredNetworks.add(GERAN);
             preferredNetworks.add(UTRAN);
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 5062b32..f783a12 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -3971,7 +3971,7 @@
     }
 
     @Test
-    public void testAdjustCsRatPreference() throws Exception {
+    public void testInvalidSubscriptionAdjustCsRatPreference() throws Exception {
         doReturn(new String[] {"us"}).when(mResources).getStringArray(
                 eq(R.array.config_countries_prefer_geran_when_sim_absent));
 
@@ -3998,6 +3998,34 @@
     }
 
     @Test
+    public void testSimNotReadyAdjustCsRatPreference() throws Exception {
+        doReturn(new String[] {"us"}).when(mResources).getStringArray(
+                eq(R.array.config_countries_prefer_geran_when_sim_absent));
+
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(false);
+        // SIM state is not ready.
+        doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
+                .when(mTelephonyManager).getSimState(anyInt());
+
+        EmergencyRegistrationResult regResult = getEmergencyRegResult(EUTRAN,
+                REGISTRATION_STATE_UNKNOWN, 0, false, true, 0, 0, "", "", "us");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsServiceUnregistered();
+
+        verifyPsDialed();
+
+        mDomainSelector.reselectDomain(attr);
+        processAllMessages();
+
+        // Verify adjusted RAT preference
+        verifyScanPreferred(DomainSelectionService.SCAN_TYPE_NO_PREFERENCE, GERAN);
+    }
+
+    @Test
     public void testNotAdjustCsRatPreferenceCountryNotIdentified() throws Exception {
         doReturn(new String[] {"us"}).when(mResources).getStringArray(
                 eq(R.array.config_countries_prefer_geran_when_sim_absent));