From 6a01167d7a9df94cdb58c1f7f22eaec1fbf98983 Mon Sep 17 00:00:00 2001 From: Gary Jian Date: Thu, 21 Sep 2023 22:55:18 +0800 Subject: Only set the vonr setting when sim state loaded Bug: 299569758 Bug: 301525730 Test: 1. e911 is established successfully in the pin lock state when device restarts in 5GSA only network 2. Ensure the VoNR setting only be updated to modem when sim loaded 3. Sanity test for 5G functions - Internet data in 5G regression = pass - 5G with VONR and voice call = pass - 5G without VONR and voice call = pass - Regular SMS and MMS regression = pass (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:fd9dac061bbb4df59197ee4d02c33cc069ef0f63) Merged-In: Id0bd0ac0916332a4f95a056de3c47acc888a9a20 Change-Id: Id0bd0ac0916332a4f95a056de3c47acc888a9a20 --- src/java/com/android/internal/telephony/GsmCdmaPhone.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java index c2d0a0bd8b..6e2601e635 100644 --- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java +++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java @@ -249,6 +249,7 @@ public class GsmCdmaPhone extends Phone { private String mImeiSv; private String mVmNumber; private int mImeiType = IMEI_TYPE_UNKNOWN; + private int mSimState = TelephonyManager.SIM_STATE_UNKNOWN; @VisibleForTesting public CellBroadcastConfigTracker mCellBroadcastConfigTracker = @@ -426,9 +427,9 @@ public class GsmCdmaPhone extends Phone { if (mPhoneId == intent.getIntExtra( SubscriptionManager.EXTRA_SLOT_INDEX, SubscriptionManager.INVALID_SIM_SLOT_INDEX)) { - int simState = intent.getIntExtra(TelephonyManager.EXTRA_SIM_STATE, + mSimState = intent.getIntExtra(TelephonyManager.EXTRA_SIM_STATE, TelephonyManager.SIM_STATE_UNKNOWN); - if (simState == TelephonyManager.SIM_STATE_LOADED + if (mSimState == TelephonyManager.SIM_STATE_LOADED && currentSlotSubIdChanged()) { setNetworkSelectionModeAutomatic(null); } @@ -5025,6 +5026,10 @@ public class GsmCdmaPhone extends Phone { return; } + if (mSimState != TelephonyManager.SIM_STATE_LOADED) { + return; + } + if (config == null) { loge("didn't get the vonr_enabled_bool from the carrier config."); return; -- cgit v1.2.3 From 4b33a3b9c43a4f762b7ae8af620fcfa221403f51 Mon Sep 17 00:00:00 2001 From: Tyler Gunn Date: Thu, 31 Aug 2023 23:18:53 +0000 Subject: DO NOT MERGE Add helper method in phone to get new carrier config key. Also, add method to return all emergency numbers that have the specified number. Test: See other cls for actual tests. Bug: 281934614 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e0aee3c0c0957612c7cded4c880c823ef17eb7e3) Merged-In: I25f627fdadcbc512e045302a5ba52e3ed8a89cbc Change-Id: I25f627fdadcbc512e045302a5ba52e3ed8a89cbc --- src/java/com/android/internal/telephony/Phone.java | 22 ++++++++++++++++++++++ .../emergency/EmergencyNumberTracker.java | 17 +++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java index cee3a5820a..0f4f528b72 100644 --- a/src/java/com/android/internal/telephony/Phone.java +++ b/src/java/com/android/internal/telephony/Phone.java @@ -714,6 +714,28 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { CarrierConfigManager.KEY_PREVENT_CLIR_ACTIVATION_AND_DEACTIVATION_CODE_BOOL); } + /** + * Determines if the carrier prefers to use an in service sim for a normal routed emergency + * call. + * @return true when carrier config + * {@link CarrierConfigManager#KEY_PREFER_IN_SERVICE_SIM_FOR_NORMAL_ROUTED_EMERGENCY_CALLS_BOOL} + * is true. + */ + public boolean shouldPreferInServiceSimForNormalRoutedEmergencyCall() { + CarrierConfigManager configManager = (CarrierConfigManager) + getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); + PersistableBundle b = configManager.getConfigForSubId(getSubId(), CarrierConfigManager + .KEY_PREFER_IN_SERVICE_SIM_FOR_NORMAL_ROUTED_EMERGENCY_CALLS_BOOL); + if (b != null) { + return b.getBoolean(CarrierConfigManager + .KEY_PREFER_IN_SERVICE_SIM_FOR_NORMAL_ROUTED_EMERGENCY_CALLS_BOOL, + false); + } else { + // Default value set in CarrierConfigManager + return false; + } + } + /** * When overridden the derived class needs to call * super.handleMessage(msg) so this method has a diff --git a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java index 9b44001785..e2418c5acd 100644 --- a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java +++ b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java @@ -934,6 +934,23 @@ public class EmergencyNumberTracker extends Handler { return null; } + /** + * Get a list of the {@link EmergencyNumber}s that have the corresponding emergency number. + * Note: {@link #getEmergencyNumber(String)} assumes there is ONLY one record for a phone number + * when in reality there CAN be multiple instances if the same number is reported by the radio + * for a specific mcc and the emergency number database specifies the number without an mcc + * specified. + * + * @param emergencyNumber the emergency number to find. + * @return the list of emergency numbers matching. + */ + public List getEmergencyNumbers(String emergencyNumber) { + final String toFind = PhoneNumberUtils.stripSeparators(emergencyNumber); + return getEmergencyNumberList().stream() + .filter(num -> num.getNumber().equals(toFind)) + .toList(); + } + /** * Get the emergency service categories for the corresponding emergency number. The only * trusted sources for the categories are the -- cgit v1.2.3