Merge "Avoid PDN Tear down at Out of service scenario" into main
diff --git a/flags/calling.aconfig b/flags/calling.aconfig
index c14ae29..3646f73 100644
--- a/flags/calling.aconfig
+++ b/flags/calling.aconfig
@@ -29,6 +29,18 @@
     }
 }
 
+# OWNER=tgunn TARGET=25Q2
+flag {
+    name: "robust_number_verification"
+    namespace: "telephony"
+    description: "Makes range matching more robust for TelephonyManager#requestNumberVerification"
+    bug:"400984263"
+    is_exported: true
+    metadata {
+        purpose: PURPOSE_BUGFIX
+    }
+}
+
 # OWNER=stevestatia TARGET=24Q4
 flag {
     name: "remove_country_code_from_local_singapore_calls"
diff --git a/flags/misc.aconfig b/flags/misc.aconfig
index 000bfd3..3641c60 100644
--- a/flags/misc.aconfig
+++ b/flags/misc.aconfig
@@ -68,14 +68,6 @@
     bug: "290833783"
 }
 
-# OWNER=jackyu TARGET=24Q3
-flag {
-    name: "minimal_telephony_managers_conditional_on_features"
-    namespace: "telephony"
-    description: "This flag enables checking for telephony features before initializing corresponding managers"
-    bug: "310710841"
-}
-
 # OWNER=joonhunshin TARGET=24Q3
 flag {
     name: "set_no_reply_timer_for_cfnry"
diff --git a/flags/subscription.aconfig b/flags/subscription.aconfig
index 8a1a2d3..ea12ce8 100644
--- a/flags/subscription.aconfig
+++ b/flags/subscription.aconfig
@@ -46,18 +46,6 @@
   bug: "325045841"
 }
 
-# OWNER=songferngwang TARGET=24Q3
-flag {
-  name: "reset_primary_sim_default_values"
-  namespace: "telephony"
-  description: "Reset the default values to the remaining sim"
-  bug: "339394518"
-
-  metadata {
-    purpose: PURPOSE_BUGFIX
-  }
-}
-
 # OWNER=jmattis TARGET=25Q2
 flag {
   name: "subscription_plan_allow_status_and_end_date"
diff --git a/proto/src/persist_atoms.proto b/proto/src/persist_atoms.proto
index 730e672..445664d 100644
--- a/proto/src/persist_atoms.proto
+++ b/proto/src/persist_atoms.proto
@@ -728,6 +728,12 @@
     optional int32 count_of_p2p_sms_available_notification_removed = 35;
     optional bool is_ntn_only_carrier = 36;
     optional int32 version_of_satellite_access_config = 37;
+    optional int32 count_of_incoming_datagram_type_sos_sms_success = 38;
+    optional int32 count_of_incoming_datagram_type_sos_sms_fail = 39;
+    optional int32 count_of_outgoing_datagram_type_sms_success = 40;
+    optional int32 count_of_outgoing_datagram_type_sms_fail = 41;
+    optional int32 count_of_incoming_datagram_type_sms_success = 42;
+    optional int32 count_of_incoming_datagram_type_sms_fail = 43;
 }
 
 message SatelliteSession {
@@ -839,6 +845,7 @@
     optional int32 carrier_id = 8;
     optional bool is_device_entitled = 9;
     optional bool is_multi_sim = 10;
+    optional int32 count_of_satellite_sessions = 11;
 }
 
 message SatelliteEntitlement {
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index c886307..f08e237 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -349,7 +349,6 @@
         super(precisePhoneType == PhoneConstants.PHONE_TYPE_GSM ? "GSM" : "CDMA",
                 notifier, context, ci, unitTestMode, phoneId, telephonyComponentFactory,
                 featureFlags);
-
         // phone type needs to be set before other initialization as other objects rely on it
         mPrecisePhoneType = precisePhoneType;
         mVoiceCallSessionStats = new VoiceCallSessionStats(mPhoneId, this, featureFlags);
@@ -370,7 +369,7 @@
                 SignalStrengthController.class.getName()).makeSignalStrengthController(this);
         mSST = mTelephonyComponentFactory.inject(ServiceStateTracker.class.getName())
                 .makeServiceStateTracker(this, this.mCi, featureFlags);
-        if (hasCalling()) {
+        if (hasCalling() || hasMessaging()) {
             mEmergencyNumberTracker = mTelephonyComponentFactory
                     .inject(EmergencyNumberTracker.class.getName()).makeEmergencyNumberTracker(
                             this, this.mCi, mFeatureFlags);
@@ -5133,6 +5132,7 @@
     }
 
     public int getLteOnCdmaMode() {
+        if (mFeatureFlags.phoneTypeCleanup()) return PhoneConstants.LTE_ON_CDMA_FALSE;
         int currentConfig = TelephonyProperties.lte_on_cdma_device()
                 .orElse(PhoneConstants.LTE_ON_CDMA_FALSE);
         int lteOnCdmaModeDynamicValue = currentConfig;
diff --git a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
index 9eebc60..4a3e7b0 100644
--- a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
+++ b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
@@ -950,14 +950,6 @@
         return (boolean) setRequest.mResult;
     }
 
-    public boolean enableCellBroadcast(int messageIdentifier, int ranType) {
-        return enableCellBroadcastRange(messageIdentifier, messageIdentifier, ranType);
-    }
-
-    public boolean disableCellBroadcast(int messageIdentifier, int ranType) {
-        return disableCellBroadcastRange(messageIdentifier, messageIdentifier, ranType);
-    }
-
     public boolean enableCellBroadcastRange(int startMessageId, int endMessageId, int ranType) {
         mContext.enforceCallingPermission(android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
                 "enabling cell broadcast range [" + startMessageId + "-" + endMessageId + "]. "
diff --git a/src/java/com/android/internal/telephony/MultiSimSettingController.java b/src/java/com/android/internal/telephony/MultiSimSettingController.java
index 881adde..bdde74d 100644
--- a/src/java/com/android/internal/telephony/MultiSimSettingController.java
+++ b/src/java/com/android/internal/telephony/MultiSimSettingController.java
@@ -648,10 +648,7 @@
         // Otherwise, if user just inserted their first SIM, or there's one primary and one
         // opportunistic subscription active (activeSubInfos.size() > 1), we automatically
         // set the primary to be default SIM and return.
-        boolean conditionForOnePrimarySim =
-                mFeatureFlags.resetPrimarySimDefaultValues() ? mPrimarySubList.size() == 1
-                        : mPrimarySubList.size() == 1
-                        && (change != PRIMARY_SUB_REMOVED || mActiveModemCount == 1);
+        boolean conditionForOnePrimarySim = mPrimarySubList.size() == 1;
         if (conditionForOnePrimarySim) {
             int subId = mPrimarySubList.get(0);
             if (DBG) log("updateDefaultValues: to only primary sub " + subId);
diff --git a/src/java/com/android/internal/telephony/NetworkScanRequestTracker.java b/src/java/com/android/internal/telephony/NetworkScanRequestTracker.java
index 9b2b847..039b77a 100644
--- a/src/java/com/android/internal/telephony/NetworkScanRequestTracker.java
+++ b/src/java/com/android/internal/telephony/NetworkScanRequestTracker.java
@@ -79,13 +79,16 @@
         @Override
         public void handleMessage(Message msg) {
             Log.d(TAG, "Received Event :" + msg.what);
+            AsyncResult ar;
             switch (msg.what) {
                 case CMD_START_NETWORK_SCAN:
                     mScheduler.doStartScan((NetworkScanRequestInfo) msg.obj);
                     break;
 
                 case EVENT_START_NETWORK_SCAN_DONE:
-                    mScheduler.startScanDone((AsyncResult) msg.obj);
+                    ar = (AsyncResult) msg.obj;
+                    mScheduler.startScanDone(ar);
+                    ((NetworkScanRequestInfo) ar.userObj).mPhone.setNetworkScanStarted(true);
                     break;
 
                 case EVENT_RECEIVE_NETWORK_SCAN_RESULT:
@@ -97,7 +100,9 @@
                     break;
 
                 case EVENT_STOP_NETWORK_SCAN_DONE:
-                    mScheduler.stopScanDone((AsyncResult) msg.obj);
+                    ar = (AsyncResult) msg.obj;
+                    mScheduler.stopScanDone(ar);
+                    ((NetworkScanRequestInfo) ar.userObj).mPhone.setNetworkScanStarted(false);
                     break;
 
                 case CMD_INTERRUPT_NETWORK_SCAN:
@@ -105,17 +110,20 @@
                     break;
 
                 case EVENT_INTERRUPT_NETWORK_SCAN_DONE:
-                    mScheduler.interruptScanDone((AsyncResult) msg.obj);
+                    ar = (AsyncResult) msg.obj;
+                    mScheduler.interruptScanDone(ar);
+                    ((NetworkScanRequestInfo) ar.userObj).mPhone.setNetworkScanStarted(false);
                     break;
 
                 case EVENT_RADIO_UNAVAILABLE:
                     // Fallthrough
                 case EVENT_MODEM_RESET:
-                    AsyncResult ar = (AsyncResult) msg.obj;
+                    ar = (AsyncResult) msg.obj;
                     mScheduler.deleteScanAndMayNotify(
                             (NetworkScanRequestInfo) ar.userObj,
                             NetworkScan.ERROR_MODEM_ERROR,
                             true);
+                    ((NetworkScanRequestInfo) ar.userObj).mPhone.setNetworkScanStarted(false);
                     break;
             }
         }
diff --git a/src/java/com/android/internal/telephony/NetworkTypeController.java b/src/java/com/android/internal/telephony/NetworkTypeController.java
index f89c207..f05e002 100644
--- a/src/java/com/android/internal/telephony/NetworkTypeController.java
+++ b/src/java/com/android/internal/telephony/NetworkTypeController.java
@@ -213,8 +213,8 @@
     @NonNull private final Set<Integer> mAdditionalNrAdvancedBands = new HashSet<>();
     @NonNull private String mPrimaryTimerState;
     @NonNull private String mSecondaryTimerState;
-    // TODO(b/316425811 remove the workaround)
     private int mNrAdvancedBandsSecondaryTimer;
+    private int mNrAdvancedPciChangeSecondaryTimer;
     @NonNull private String mPreviousState;
     @LinkStatus private int mPhysicalLinkStatus;
     private boolean mIsPhysicalChannelConfig16Supported;
@@ -224,6 +224,7 @@
     private boolean mEnableNrAdvancedWhileRoaming = true;
     private boolean mIsDeviceIdleMode = false;
     private boolean mPrimaryCellChangedWhileIdle = false;
+    private boolean mPciChangedDuringPrimaryTimer = false;
 
     // Cached copies below to prevent race conditions
     @NonNull private ServiceState mServiceState;
@@ -485,6 +486,8 @@
                 CarrierConfigManager.KEY_LTE_ENDC_USING_USER_DATA_FOR_RRC_DETECTION_BOOL);
         mNrAdvancedBandsSecondaryTimer = config.getInt(
                 CarrierConfigManager.KEY_NR_ADVANCED_BANDS_SECONDARY_TIMER_SECONDS_INT);
+        mNrAdvancedPciChangeSecondaryTimer = config.getInt(
+                CarrierConfigManager.KEY_NR_ADVANCED_PCI_CHANGE_SECONDARY_TIMER_SECONDS_INT);
         String nrIconConfiguration = config.getString(
                 CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING);
         String overrideTimerRule = config.getString(
@@ -1404,6 +1407,8 @@
             mRatchetedNrBandwidths = Math.max(mRatchetedNrBandwidths, nrBandwidths);
             mRatchetedNrBands.addAll(nrBands);
         } else {
+            mRatchetedNrBandwidths = nrBandwidths;
+            mRatchetedNrBands = nrBands;
             if (mDoesPccListIndicateIdle
                     && anchorNrCellId != mLastAnchorNrCellId
                     && isUsingPhysicalChannelConfigForRrcDetection()
@@ -1420,13 +1425,12 @@
                 log("Not ratcheting physical channel config fields since anchor NR cell changed: "
                         + mLastAnchorNrCellId + " -> " + anchorNrCellId);
             }
-            mRatchetedNrBandwidths = nrBandwidths;
-            mRatchetedNrBands = nrBands;
         }
 
         mLastAnchorNrCellId = anchorNrCellId;
         mPhysicalChannelConfigs = physicalChannelConfigs;
         mDoesPccListIndicateIdle = false;
+        mPciChangedDuringPrimaryTimer = mIsPrimaryTimerActive;
         if (DBG) {
             log("Physical channel configs updated: anchorNrCell=" + mLastAnchorNrCellId
                     + ", nrBandwidths=" + mRatchetedNrBandwidths + ", nrBands=" +  mRatchetedNrBands
@@ -1484,6 +1488,7 @@
     private void transitionWithSecondaryTimerTo(IState destState) {
         String currentName = getCurrentState().getName();
         OverrideTimerRule rule = mOverrideTimerRules.get(mPrimaryTimerState);
+        int duration = -1;
         if (DBG) {
             log("Transition with secondary timer from " + currentName + " to "
                     + destState.getName());
@@ -1492,12 +1497,19 @@
             log("Skip secondary timer from " + currentName + " to "
                     + destState.getName() + " due to in call");
         } else if (!mIsDeviceIdleMode && rule != null && rule.getSecondaryTimer(currentName) > 0) {
-            int duration = rule.getSecondaryTimer(currentName);
+            duration = rule.getSecondaryTimer(currentName);
             if (mLastShownNrDueToAdvancedBand && mNrAdvancedBandsSecondaryTimer > 0) {
                 duration = mNrAdvancedBandsSecondaryTimer;
                 if (DBG) log("timer adjusted by nr_advanced_bands_secondary_timer_seconds_int");
             }
             if (DBG) log(duration + "s secondary timer started for state: " + currentName);
+        } else if (mNrAdvancedPciChangeSecondaryTimer > 0
+                && mPciChangedDuringPrimaryTimer) {
+            duration = mNrAdvancedPciChangeSecondaryTimer;
+            if (DBG) log(duration + "s secondary timer started for PCI changed");
+        }
+
+        if (duration > 0) {
             mSecondaryTimerState = currentName;
             mPreviousState = currentName;
             mIsSecondaryTimerActive = true;
@@ -1505,7 +1517,9 @@
             mSecondaryTimerExpireTimestamp = SystemClock.uptimeMillis() + durationMillis;
             sendMessageDelayed(EVENT_SECONDARY_TIMER_EXPIRED, destState, durationMillis);
         }
+
         mIsPrimaryTimerActive = false;
+        mPciChangedDuringPrimaryTimer = false;
         transitionTo(getCurrentState());
     }
 
@@ -1555,6 +1569,7 @@
             }
             removeMessages(EVENT_PRIMARY_TIMER_EXPIRED);
             mIsPrimaryTimerActive = false;
+            mPciChangedDuringPrimaryTimer = false;
             mPrimaryTimerState = "";
             transitionToCurrentState();
             return;
@@ -1598,6 +1613,7 @@
         removeMessages(EVENT_PRIMARY_TIMER_EXPIRED);
         removeMessages(EVENT_SECONDARY_TIMER_EXPIRED);
         mIsPrimaryTimerActive = false;
+        mPciChangedDuringPrimaryTimer = false;
         mIsSecondaryTimerActive = false;
         mSecondaryTimerExpireTimestamp = 0;
         mPrimaryTimerState = "";
@@ -1821,10 +1837,11 @@
         pw.flush();
         pw.increaseIndent();
         pw.println("mSubId=" + mPhone.getSubId());
-        pw.println("mOverrideTimerRules=" + mOverrideTimerRules.toString());
+        pw.println("mOverrideTimerRules=" + mOverrideTimerRules);
         pw.println("mLteEnhancedPattern=" + mLteEnhancedPattern);
         pw.println("mIsPhysicalChannelConfigOn=" + mIsPhysicalChannelConfigOn);
         pw.println("mIsPrimaryTimerActive=" + mIsPrimaryTimerActive);
+        pw.println("mPciChangedDuringPrimaryTimer=" + mPciChangedDuringPrimaryTimer);
         pw.println("mIsSecondaryTimerActive=" + mIsSecondaryTimerActive);
         pw.println("mIsTimerResetEnabledForLegacyStateRrcIdle="
                 + mIsTimerResetEnabledForLegacyStateRrcIdle);
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index edcc51e..a90adda 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -391,6 +391,7 @@
     private int mPreferredUsageSetting = SubscriptionManager.USAGE_SETTING_UNKNOWN;
     private int mUsageSettingFromModem = SubscriptionManager.USAGE_SETTING_UNKNOWN;
     private boolean mIsUsageSettingSupported = true;
+    private boolean mIsNetworkScanStarted = false;
 
     //IMS
     /**
@@ -1059,16 +1060,17 @@
     }
 
     /**
-     * Notify the phone that an SMS has been sent. This will be used determine if the SMS was sent
-     * to an emergency address.
+     * Notify the phone that an SMS has been sent. This will be used to determine if the SMS was
+     * sent to an emergency address.
+     *
      * @param destinationAddress the address that the SMS was sent to.
      */
     public void notifySmsSent(String destinationAddress) {
-        TelephonyManager m = (TelephonyManager) getContext().getSystemService(
-                Context.TELEPHONY_SERVICE);
+        TelephonyManager m =
+                (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
         if (mContext.getPackageManager() != null
-                && mContext.getPackageManager().hasSystemFeature(
-                        PackageManager.FEATURE_TELEPHONY_CALLING)) {
+                && mContext.getPackageManager()
+                                .hasSystemFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING)) {
             if (m != null && m.isEmergencyNumber(destinationAddress)) {
                 mLocalLog.log("Emergency SMS detected, recording time.");
                 mTimeLastEmergencySmsSentMs = SystemClock.elapsedRealtime();
@@ -1966,6 +1968,13 @@
     }
 
     /**
+     * @return true if this device supports messaging, false otherwise.
+     */
+    public boolean hasMessaging() {
+        return TelephonyCapabilities.supportsTelephonyMessaging(mFeatureFlags, mContext);
+    }
+
+    /**
      * Retrieves the EmergencyNumberTracker of the phone instance.
      */
     public EmergencyNumberTracker getEmergencyNumberTracker() {
@@ -4158,6 +4167,24 @@
     }
 
     /**
+     * Sets the network scan started status.
+     *
+     * @param started {@code true} if the network scan has started, {@code false} otherwise.
+     */
+    public void setNetworkScanStarted(boolean started) {
+        mIsNetworkScanStarted = started;
+    }
+
+    /**
+     * Gets the network scan started status.
+     *
+     * @return {@code true} if the network scan has started, {@code false} otherwise.
+     */
+    public boolean getNetworkScanStarted() {
+        return mIsNetworkScanStarted;
+    }
+
+    /**
      * Override the roaming indicator for the current ICCID.
      */
     public boolean setRoamingOverride(List<String> gsmRoamingList,
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index ac0ee0d..f5d06db 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -1331,7 +1331,12 @@
     }
 
     private boolean canMakeRequest(String request, RadioServiceProxy proxy, Message result,
-            HalVersion version) {
+            HalVersion minVersion) {
+        return canMakeRequest(request, proxy, result, minVersion, null /* maxVersion */);
+    }
+
+    private boolean canMakeRequest(String request, RadioServiceProxy proxy, Message result,
+            HalVersion minVersion, @Nullable HalVersion maxVersion) {
         int service = HAL_SERVICE_RADIO;
         if (proxy instanceof RadioDataProxy) {
             service = HAL_SERVICE_DATA;
@@ -1358,9 +1363,20 @@
             }
             return false;
         }
-        if (mHalVersion.get(service).less(version)) {
+        if (mHalVersion.get(service).less(minVersion)) {
             riljLoge(String.format("%s not supported on service %s < %s.",
-                    request, serviceToString(service), version));
+                    request, serviceToString(service), minVersion));
+            if (result != null) {
+                AsyncResult.forMessage(result, null,
+                        CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
+                result.sendToTarget();
+            }
+            return false;
+        }
+
+        if (maxVersion != null && mHalVersion.get(service).greater(maxVersion)) {
+            riljLoge(String.format("%s not supported on service %s > %s.",
+                    request, serviceToString(service), maxVersion));
             if (result != null) {
                 AsyncResult.forMessage(result, null,
                         CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
@@ -3627,7 +3643,8 @@
     @Override
     public void getDeviceIdentity(Message result) {
         RadioModemProxy modemProxy = getRadioServiceProxy(RadioModemProxy.class);
-        if (!canMakeRequest("getDeviceIdentity", modemProxy, result, RADIO_HAL_VERSION_1_4)) {
+        if (!canMakeRequest("getDeviceIdentity", modemProxy, result, RADIO_HAL_VERSION_1_4,
+                RADIO_HAL_VERSION_2_2)) {
             return;
         }
 
@@ -3882,7 +3899,7 @@
     public void getImsRegistrationState(Message result) {
         RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class);
         if (!canMakeRequest("getImsRegistrationState", networkProxy, result,
-                RADIO_HAL_VERSION_1_4)) {
+                RADIO_HAL_VERSION_1_4, RADIO_HAL_VERSION_2_2)) {
             return;
         }
 
diff --git a/src/java/com/android/internal/telephony/RadioIndication.java b/src/java/com/android/internal/telephony/RadioIndication.java
index aadfe62..26d3abd 100644
--- a/src/java/com/android/internal/telephony/RadioIndication.java
+++ b/src/java/com/android/internal/telephony/RadioIndication.java
@@ -112,6 +112,7 @@
 import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
 import com.android.internal.telephony.cdma.CdmaInformationRecords;
 import com.android.internal.telephony.data.KeepaliveStatus;
+import com.android.internal.telephony.flags.Flags;
 import com.android.internal.telephony.gsm.SsData;
 import com.android.internal.telephony.gsm.SuppServiceNotification;
 import com.android.internal.telephony.uicc.IccRefreshResponse;
@@ -571,6 +572,7 @@
     }
 
     public void cdmaCallWaiting(int indicationType, CdmaCallWaiting callWaitingRecord) {
+        if (Flags.phoneTypeCleanup()) return;
         mRil.processIndication(HAL_SERVICE_RADIO, indicationType);
 
         // todo: create a CdmaCallWaitingNotification constructor that takes in these fields to make
@@ -609,6 +611,7 @@
 
     public void cdmaInfoRec(int indicationType,
                             android.hardware.radio.V1_0.CdmaInformationRecords records) {
+        if (Flags.phoneTypeCleanup()) return;
         mRil.processIndication(HAL_SERVICE_RADIO, indicationType);
 
         int numberOfInfoRecs = records.infoRec.size();
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index f994fe6..7ca291f 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -715,7 +715,8 @@
         mCdnr = new CarrierDisplayNameResolver(mPhone);
 
         // Create EriManager only if phone supports CDMA
-        if (UiccController.isCdmaSupported(mPhone.getContext())) {
+        if (!mFeatureFlags.phoneTypeCleanup()
+                && UiccController.isCdmaSupported(mPhone.getContext())) {
             mEriManager = TelephonyComponentFactory.getInstance().inject(EriManager.class.getName())
                     .makeEriManager(mPhone, EriManager.ERI_FROM_XML);
         } else {
@@ -895,19 +896,24 @@
                 mCdmaSSM.dispose(this);
             }
 
-            mCi.unregisterForCdmaPrlChanged(this);
-            mCi.unregisterForCdmaOtaProvision(this);
+            if (!mFeatureFlags.phoneTypeCleanup()) {
+                mCi.unregisterForCdmaPrlChanged(this);
+                mCi.unregisterForCdmaOtaProvision(this);
+            }
             mPhone.unregisterForSimRecordsLoaded(this);
 
         } else {
             mPhone.registerForSimRecordsLoaded(this, EVENT_SIM_RECORDS_LOADED, null);
-            mCdmaSSM = CdmaSubscriptionSourceManager.getInstance(mPhone.getContext(), mCi, this,
-                    EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED, null);
-            mIsSubscriptionFromRuim = (mCdmaSSM.getCdmaSubscriptionSource() ==
-                    CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM);
+            if (!mFeatureFlags.phoneTypeCleanup()) {
+                mCdmaSSM = CdmaSubscriptionSourceManager.getInstance(mPhone.getContext(), mCi, this,
+                        EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED, null);
 
-            mCi.registerForCdmaPrlChanged(this, EVENT_CDMA_PRL_VERSION_CHANGED, null);
-            mCi.registerForCdmaOtaProvision(this, EVENT_OTA_PROVISION_STATUS_CHANGE, null);
+                mIsSubscriptionFromRuim = mCdmaSSM.getCdmaSubscriptionSource()
+                        == CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM;
+
+                mCi.registerForCdmaPrlChanged(this, EVENT_CDMA_PRL_VERSION_CHANGED, null);
+                mCi.registerForCdmaOtaProvision(this, EVENT_OTA_PROVISION_STATUS_CHANGE, null);
+            }
 
             mHbpcdUtils = new HbpcdUtils(mPhone.getContext());
             // update OTASP state in case previously set by another service
@@ -1313,7 +1319,9 @@
                     mIsMinInfoReady = false;
 
                     // Remove the EF records that come from UICC.
-                    mCdnr.updateEfFromRuim(null /* ruim */);
+                    if (!mFeatureFlags.phoneTypeCleanup()) {
+                        mCdnr.updateEfFromRuim(null /* ruim */);
+                    }
                     mCdnr.updateEfFromUsim(null /* Usim */);
                 }
                 onUpdateIccAvailability();
@@ -1997,6 +2005,7 @@
 
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
     protected void updateOtaspState() {
+        if (mFeatureFlags.phoneTypeCleanup()) return;
         int otaspMode = getOtasp();
         int oldOtaspMode = mCurrentOtaspMode;
         mCurrentOtaspMode = otaspMode;
@@ -5363,6 +5372,7 @@
     }
 
     private void handleCdmaSubscriptionSource(int newSubscriptionSource) {
+        if (mFeatureFlags.phoneTypeCleanup()) return;
         log("Subscription Source : " + newSubscriptionSource);
         mIsSubscriptionFromRuim =
                 (newSubscriptionSource == CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM);
diff --git a/src/java/com/android/internal/telephony/TelephonyCapabilities.java b/src/java/com/android/internal/telephony/TelephonyCapabilities.java
index c5bfe79..35c862f 100644
--- a/src/java/com/android/internal/telephony/TelephonyCapabilities.java
+++ b/src/java/com/android/internal/telephony/TelephonyCapabilities.java
@@ -219,4 +219,14 @@
         return context.getPackageManager().hasSystemFeature(
                 PackageManager.FEATURE_TELEPHONY_CALLING);
     }
+
+    /**
+     * @return true if this device supports telephony messaging, false if it does not.
+     */
+    public static boolean supportsTelephonyMessaging(@NonNull FeatureFlags featureFlags,
+            Context context) {
+        if (!TelephonyCapabilities.minimalTelephonyCdmCheck(featureFlags)) return true;
+        return context.getPackageManager().hasSystemFeature(
+                PackageManager.FEATURE_TELEPHONY_MESSAGING);
+    }
 }
diff --git a/src/java/com/android/internal/telephony/VoiceIndication.java b/src/java/com/android/internal/telephony/VoiceIndication.java
index 9720bb7..6ae6470 100644
--- a/src/java/com/android/internal/telephony/VoiceIndication.java
+++ b/src/java/com/android/internal/telephony/VoiceIndication.java
@@ -40,6 +40,7 @@
 
 import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
 import com.android.internal.telephony.cdma.CdmaInformationRecords;
+import com.android.internal.telephony.flags.Flags;
 import com.android.internal.telephony.gsm.SsData;
 
 import java.util.ArrayList;
@@ -106,6 +107,7 @@
      */
     public void cdmaCallWaiting(int indicationType,
             android.hardware.radio.voice.CdmaCallWaiting callWaitingRecord) {
+        if (Flags.phoneTypeCleanup()) return;
         mRil.processIndication(HAL_SERVICE_VOICE, indicationType);
 
         // TODO: create a CdmaCallWaitingNotification constructor that takes in these fields to make
@@ -136,6 +138,7 @@
      */
     public void cdmaInfoRec(int indicationType,
             android.hardware.radio.voice.CdmaInformationRecord[] records) {
+        if (Flags.phoneTypeCleanup()) return;
         mRil.processIndication(HAL_SERVICE_VOICE, indicationType);
 
         for (int i = 0; i < records.length; i++) {
@@ -235,6 +238,7 @@
      * @param status CDMA OTA provision status
      */
     public void cdmaOtaProvisionStatus(int indicationType, int status) {
+        if (Flags.phoneTypeCleanup()) return;
         mRil.processIndication(HAL_SERVICE_VOICE, indicationType);
 
         int[] response = new int[] {status};
diff --git a/src/java/com/android/internal/telephony/data/AccessNetworksManager.java b/src/java/com/android/internal/telephony/data/AccessNetworksManager.java
index d364120..65c462a 100644
--- a/src/java/com/android/internal/telephony/data/AccessNetworksManager.java
+++ b/src/java/com/android/internal/telephony/data/AccessNetworksManager.java
@@ -56,7 +56,6 @@
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.SlidingWindowEventCounter;
 import com.android.internal.telephony.flags.FeatureFlags;
-import com.android.internal.util.FunctionalUtils;
 import com.android.telephony.Rlog;
 
 import java.io.FileDescriptor;
@@ -324,12 +323,6 @@
         public void onNetworkValidationRequested(@NetCapability int networkCapability,
                 @NonNull IIntegerConsumer resultCodeCallback) {
             DataNetworkController dnc = mPhone.getDataNetworkController();
-            if (!mFeatureFlags.networkValidation()) {
-                FunctionalUtils.ignoreRemoteException(resultCodeCallback::accept)
-                        .accept(DataServiceCallback.RESULT_ERROR_UNSUPPORTED);
-                return;
-            }
-
             log("onNetworkValidationRequested: networkCapability = ["
                     + DataUtils.networkCapabilityToString(networkCapability) + "]");
 
diff --git a/src/java/com/android/internal/telephony/data/CellularNetworkValidator.java b/src/java/com/android/internal/telephony/data/CellularNetworkValidator.java
index 3ab5283..d57059a 100644
--- a/src/java/com/android/internal/telephony/data/CellularNetworkValidator.java
+++ b/src/java/com/android/internal/telephony/data/CellularNetworkValidator.java
@@ -47,10 +47,9 @@
 import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
 import com.android.internal.telephony.subscription.SubscriptionManagerService;
 
-import java.util.Comparator;
+import java.util.ArrayDeque;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.PriorityQueue;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -94,9 +93,8 @@
     private class ValidatedNetworkCache {
         // A cache with fixed size. It remembers 10 most recently successfully validated networks.
         private static final int VALIDATED_NETWORK_CACHE_SIZE = 10;
-        private final PriorityQueue<ValidatedNetwork> mValidatedNetworkPQ =
-                new PriorityQueue<>((Comparator<ValidatedNetwork>) Comparator.comparingLong(
-                        (ValidatedNetwork n) -> n.mValidationTimeStamp));
+
+        private final ArrayDeque<ValidatedNetwork> mValidatedNetworkAQ = new ArrayDeque<>();
         private final Map<String, ValidatedNetwork> mValidatedNetworkMap = new HashMap<>();
 
         private static final class ValidatedNetwork {
@@ -131,7 +129,7 @@
 
             if (!validated) {
                 // If validation failed, clear it from the cache.
-                mValidatedNetworkPQ.remove(mValidatedNetworkMap.get(networkIdentity));
+                mValidatedNetworkAQ.remove(mValidatedNetworkMap.get(networkIdentity));
                 mValidatedNetworkMap.remove(networkIdentity);
                 return;
             }
@@ -141,16 +139,16 @@
                 // Already existed in cache, update.
                 network.update(time);
                 // Re-add to re-sort.
-                mValidatedNetworkPQ.remove(network);
-                mValidatedNetworkPQ.add(network);
+                mValidatedNetworkAQ.remove(network);
+                mValidatedNetworkAQ.add(network);
             } else {
                 network = new ValidatedNetwork(networkIdentity, time);
                 mValidatedNetworkMap.put(networkIdentity, network);
-                mValidatedNetworkPQ.add(network);
+                mValidatedNetworkAQ.add(network);
             }
             // If exceeded max size, remove the one with smallest validation timestamp.
-            if (mValidatedNetworkPQ.size() > VALIDATED_NETWORK_CACHE_SIZE) {
-                ValidatedNetwork networkToRemove = mValidatedNetworkPQ.poll();
+            if (mValidatedNetworkAQ.size() > VALIDATED_NETWORK_CACHE_SIZE) {
+                ValidatedNetwork networkToRemove = mValidatedNetworkAQ.poll();
                 mValidatedNetworkMap.remove(networkToRemove.mValidationIdentity);
             }
         }
diff --git a/src/java/com/android/internal/telephony/data/DataNetwork.java b/src/java/com/android/internal/telephony/data/DataNetwork.java
index ff93463..d8e6f6a 100644
--- a/src/java/com/android/internal/telephony/data/DataNetwork.java
+++ b/src/java/com/android/internal/telephony/data/DataNetwork.java
@@ -3919,11 +3919,6 @@
      */
     private void updateValidationStatus(
             @PreciseDataConnectionState.NetworkValidationStatus int networkValidationStatus) {
-        if (!mFlags.networkValidation()) {
-            // Do nothing, if network validation feature is disabled
-            return;
-        }
-
         // if network validation status is changed, notify preciseDataConnectionState.
         if (mNetworkValidationStatus != networkValidationStatus) {
             log("updateValidationStatus:"
diff --git a/src/java/com/android/internal/telephony/data/DataNetworkController.java b/src/java/com/android/internal/telephony/data/DataNetworkController.java
index b4de1fe..6b916f2 100644
--- a/src/java/com/android/internal/telephony/data/DataNetworkController.java
+++ b/src/java/com/android/internal/telephony/data/DataNetworkController.java
@@ -3387,6 +3387,7 @@
         mPendingImsDeregDataNetworks.remove(dataNetwork);
         mDataRetryManager.cancelPendingHandoverRetry(dataNetwork);
         if (dataNetwork.isInternetSupported()) updateOverallInternetDataState();
+        onPcoDataChanged(dataNetwork);
 
         if (dataNetwork.getNetworkCapabilities().hasCapability(
                 NetworkCapabilities.NET_CAPABILITY_IMS)) {
diff --git a/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java b/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java
index 6147d66..e3060e5 100644
--- a/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java
+++ b/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java
@@ -46,6 +46,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback;
 import com.android.internal.telephony.data.DataNetworkController.DataNetworkControllerCallback;
 import com.android.internal.telephony.data.DataSettingsManager.DataSettingsManagerCallback;
@@ -800,12 +801,17 @@
         }
 
         // Skip recovery if it can cause a call to drop
-        if (mPhone.getState() != PhoneConstants.State.IDLE
-                && getRecoveryAction() > RECOVERY_ACTION_CLEANUP) {
+        if (!isPhoneStateIdle() && getRecoveryAction() > RECOVERY_ACTION_CLEANUP) {
             logl("skip data stall recovery as there is an active call");
             return false;
         }
 
+        // Skip when network scan started
+        if (isAnyPhoneNetworkScanStarted()) {
+            logl("skip data stall recovery as network scan started");
+            return false;
+        }
+
         // Skip when poor signal strength
         if (mPhone.getSignalStrength().getLevel() <= CellSignalStrength.SIGNAL_STRENGTH_POOR) {
             logl("skip data stall recovery as in poor signal condition");
@@ -825,6 +831,38 @@
     }
 
     /**
+     * Checks if any network scan is currently started on any of the available phones.
+     *
+     * @return {@code true} if any network scan is started on any phone; {@code false} otherwise.
+     */
+    private boolean isAnyPhoneNetworkScanStarted() {
+        for (Phone phone : PhoneFactory.getPhones()) {
+            logl("NetworkScanStarted: " + phone.getNetworkScanStarted()
+                    + " on phone" + phone.getPhoneId());
+            if (phone.getNetworkScanStarted()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Check whether the phone state is {@link PhoneConstants.State#IDLE} for all phones.
+     * If any phone is not IDLE (voice call active on any phone), do not trigger recovery.
+     *
+     * @return {@code true} if all phones are IDLE and {@code false} if any phones are not IDLE.
+     */
+    private boolean isPhoneStateIdle() {
+        for (Phone phone : PhoneFactory.getPhones()) {
+            logl("Phone State: " + phone.getState() + " on phone" + phone.getPhoneId());
+            if (phone.getState() != PhoneConstants.State.IDLE) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
      * Set the validation status into metrics.
      *
      * @param isValid true for validation passed & false for validation failed
diff --git a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
index 06ebff2..e2b36f0 100644
--- a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
+++ b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
@@ -187,10 +187,14 @@
         mFeatureFlags = featureFlags;
         mResources = ctx.getResources();
 
-        if (TelephonyCapabilities.minimalTelephonyCdmCheck(mFeatureFlags)
-                && !ctx.getPackageManager().hasSystemFeature(
-                    PackageManager.FEATURE_TELEPHONY_CALLING)) {
-            throw new UnsupportedOperationException("EmergencyNumberTracker requires calling");
+        if (TelephonyCapabilities.minimalTelephonyCdmCheck(mFeatureFlags)) {
+            if (!ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY_CALLING)
+                    && !ctx.getPackageManager()
+                            .hasSystemFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING)) {
+                throw new UnsupportedOperationException(
+                        "EmergencyNumberTracker requires telephony calling or messaging feature to"
+                                + " be enabled");
+            }
         }
 
         if (mPhone != null) {
diff --git a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
index d8cbb91..7863b25 100644
--- a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
+++ b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
@@ -1485,7 +1485,13 @@
                 satelliteController.countOfP2PSmsAvailableNotificationShown,
                 satelliteController.countOfP2PSmsAvailableNotificationRemoved,
                 satelliteController.isNtnOnlyCarrier,
-                satelliteController.versionOfSatelliteAccessConfig);
+                satelliteController.versionOfSatelliteAccessConfig,
+                satelliteController.countOfIncomingDatagramTypeSosSmsSuccess,
+                satelliteController.countOfIncomingDatagramTypeSosSmsFail,
+                satelliteController.countOfOutgoingDatagramTypeSmsSuccess,
+                satelliteController.countOfOutgoingDatagramTypeSmsFail,
+                satelliteController.countOfIncomingDatagramTypeSmsSuccess,
+                satelliteController.countOfIncomingDatagramTypeSmsFail);
     }
 
     private static StatsEvent buildStatsEvent(SatelliteSession satelliteSession) {
@@ -1612,7 +1618,8 @@
                 stats.satelliteSessionGapMaxSec,
                 stats.carrierId,
                 stats.isDeviceEntitled,
-                stats.isMultiSim);
+                stats.isMultiSim,
+                stats.countOfSatelliteSessions);
     }
 
     private static StatsEvent buildStatsEvent(SatelliteEntitlement stats) {
diff --git a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
index 9ac62e0..4346da4 100644
--- a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
+++ b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
@@ -786,6 +786,18 @@
                     += stats.countOfP2PSmsAvailableNotificationRemoved;
             // Does not update isNtnOnlyCarrier due to it is a dimension field.
             existingStats.versionOfSatelliteAccessConfig = stats.versionOfSatelliteAccessConfig;
+            existingStats.countOfIncomingDatagramTypeSosSmsSuccess
+                    += stats.countOfIncomingDatagramTypeSosSmsSuccess;
+            existingStats.countOfIncomingDatagramTypeSosSmsFail
+                    += stats.countOfIncomingDatagramTypeSosSmsFail;
+            existingStats.countOfOutgoingDatagramTypeSmsSuccess
+                    += stats.countOfOutgoingDatagramTypeSmsSuccess;
+            existingStats.countOfOutgoingDatagramTypeSmsFail
+                    += stats.countOfOutgoingDatagramTypeSmsFail;
+            existingStats.countOfIncomingDatagramTypeSmsSuccess
+                    += stats.countOfIncomingDatagramTypeSmsSuccess;
+            existingStats.countOfIncomingDatagramTypeSmsFail
+                    += stats.countOfIncomingDatagramTypeSmsFail;
         } else {
             mAtoms.satelliteController = insertAtRandomPlace(mAtoms.satelliteController, stats,
                     mMaxNumSatelliteStats);
@@ -886,6 +898,7 @@
             // dimension fields.
             existingStats.isDeviceEntitled = stats.isDeviceEntitled;
             existingStats.isMultiSim = stats.isMultiSim;
+            existingStats.countOfSatelliteSessions += stats.countOfSatelliteSessions;
         } else {
             mAtoms.carrierRoamingSatelliteControllerStats = insertAtRandomPlace(
                     mAtoms.carrierRoamingSatelliteControllerStats, stats, mMaxNumSatelliteStats);
diff --git a/src/java/com/android/internal/telephony/metrics/SatelliteStats.java b/src/java/com/android/internal/telephony/metrics/SatelliteStats.java
index 9337164..59ceb6d 100644
--- a/src/java/com/android/internal/telephony/metrics/SatelliteStats.java
+++ b/src/java/com/android/internal/telephony/metrics/SatelliteStats.java
@@ -105,6 +105,12 @@
         private final int mCountOfP2PSmsAvailableNotificationRemoved;
         private static boolean sIsNtnOnlyCarrier;
         private static int sVersionOfSatelliteAccessConfig;
+        private final int mCountOfIncomingDatagramTypeSosSmsSuccess;
+        private final int mCountOfIncomingDatagramTypeSosSmsFail;
+        private final int mCountOfOutgoingDatagramTypeSmsSuccess;
+        private final int mCountOfOutgoingDatagramTypeSmsFail;
+        private final int mCountOfIncomingDatagramTypeSmsSuccess;
+        private final int mCountOfIncomingDatagramTypeSmsFail;
 
         private SatelliteControllerParams(Builder builder) {
             this.mCountOfSatelliteServiceEnablementsSuccess =
@@ -181,6 +187,17 @@
                 this.sVersionOfSatelliteAccessConfig =
                         builder.mVersionOfSatelliteAccessConfig.get();
             }
+
+            this.mCountOfIncomingDatagramTypeSosSmsSuccess =
+                    builder.mCountOfIncomingDatagramTypeSosSmsSuccess;
+            this.mCountOfIncomingDatagramTypeSosSmsFail =
+                    builder.mCountOfIncomingDatagramTypeSosSmsFail;
+            this.mCountOfOutgoingDatagramTypeSmsSuccess =
+                    builder.mCountOfOutgoingDatagramTypeSmsSuccess;
+            this.mCountOfOutgoingDatagramTypeSmsFail = builder.mCountOfOutgoingDatagramTypeSmsFail;
+            this.mCountOfIncomingDatagramTypeSmsSuccess =
+                    builder.mCountOfIncomingDatagramTypeSmsSuccess;
+            this.mCountOfIncomingDatagramTypeSmsFail = builder.mCountOfIncomingDatagramTypeSmsFail;
         }
 
         public int getCountOfSatelliteServiceEnablementsSuccess() {
@@ -331,6 +348,30 @@
             return sVersionOfSatelliteAccessConfig;
         }
 
+        public int getCountOfIncomingDatagramTypeSosSmsSuccess() {
+            return mCountOfIncomingDatagramTypeSosSmsSuccess;
+        }
+
+        public int getCountOfIncomingDatagramTypeSosSmsFail() {
+            return mCountOfIncomingDatagramTypeSosSmsFail;
+        }
+
+        public int getCountOfOutgoingDatagramTypeSmsSuccess() {
+            return mCountOfOutgoingDatagramTypeSmsSuccess;
+        }
+
+        public int getCountOfOutgoingDatagramTypeSmsFail() {
+            return mCountOfOutgoingDatagramTypeSmsFail;
+        }
+
+        public int getCountOfIncomingDatagramTypeSmsSuccess() {
+            return mCountOfIncomingDatagramTypeSmsSuccess;
+        }
+
+        public int getCountOfIncomingDatagramTypeSmsFail() {
+            return mCountOfIncomingDatagramTypeSmsFail;
+        }
+
         /**
          * A builder class to create {@link SatelliteControllerParams} data structure class
          */
@@ -372,6 +413,12 @@
             private int mCountOfP2PSmsAvailableNotificationRemoved = 0;
             private Optional<Boolean> mIsNtnOnlyCarrier = Optional.empty();
             private Optional<Integer> mVersionOfSatelliteAccessConfig = Optional.empty();
+            private int mCountOfIncomingDatagramTypeSosSmsSuccess;
+            private int mCountOfIncomingDatagramTypeSosSmsFail;
+            private int mCountOfOutgoingDatagramTypeSmsSuccess;
+            private int mCountOfOutgoingDatagramTypeSmsFail;
+            private int mCountOfIncomingDatagramTypeSmsSuccess;
+            private int mCountOfIncomingDatagramTypeSmsFail;
 
             /**
              * Sets countOfSatelliteServiceEnablementsSuccess value of {@link SatelliteController}
@@ -740,6 +787,67 @@
             }
 
             /**
+             * Sets countOfIncomingDatagramTypeSosSmsSuccess value of {@link SatelliteController}
+             * atom then returns Builder class
+             */
+            public Builder setCountOfIncomingDatagramTypeSosSmsSuccess(
+                    int countOfIncomingDatagramTypeSosSmsSuccess) {
+                this.mCountOfIncomingDatagramTypeSosSmsSuccess =
+                        countOfIncomingDatagramTypeSosSmsSuccess;
+                return this;
+            }
+
+            /**
+             * Sets countOfIncomingDatagramTypeSosSmsFail value of {@link SatelliteController} atom
+             * then returns Builder class
+             */
+            public Builder setCountOfIncomingDatagramTypeSosSmsFail(
+                    int countOfIncomingDatagramTypeSosSmsFail) {
+                this.mCountOfIncomingDatagramTypeSosSmsFail = countOfIncomingDatagramTypeSosSmsFail;
+                return this;
+            }
+
+            /**
+             * Sets countOfOutgoingDatagramTypeSmsSuccess value of {@link SatelliteController} atom
+             * then returns Builder class
+             */
+            public Builder setCountOfOutgoingDatagramTypeSmsSuccess(
+                    int countOfOutgoingDatagramTypeSmsSuccess) {
+                this.mCountOfOutgoingDatagramTypeSmsSuccess = countOfOutgoingDatagramTypeSmsSuccess;
+                return this;
+            }
+
+            /**
+             * Sets countOfOutgoingDatagramTypeSmsFail value of {@link SatelliteController} atom
+             * then returns Builder class
+             */
+            public Builder setCountOfOutgoingDatagramTypeSmsFail(
+                    int countOfOutgoingDatagramTypeSmsFail) {
+                this.mCountOfOutgoingDatagramTypeSmsFail = countOfOutgoingDatagramTypeSmsFail;
+                return this;
+            }
+
+            /**
+             * Sets countOfIncomingDatagramTypeSmsSuccess value of {@link SatelliteController} atom
+             * then returns Builder class
+             */
+            public Builder setCountOfIncomingDatagramTypeSmsSuccess(
+                    int countOfIncomingDatagramTypeSmsSuccess) {
+                this.mCountOfIncomingDatagramTypeSmsSuccess = countOfIncomingDatagramTypeSmsSuccess;
+                return this;
+            }
+
+            /**
+             * Sets countOfIncomingDatagramTypeSmsFail value of {@link SatelliteController} atom
+             * then returns Builder class
+             */
+            public Builder setCountOfIncomingDatagramTypeSmsFail(
+                    int countOfIncomingDatagramTypeSmsFail) {
+                this.mCountOfIncomingDatagramTypeSmsFail = countOfIncomingDatagramTypeSmsFail;
+                return this;
+            }
+
+            /**
              * Returns ControllerParams, which contains whole component of
              * {@link SatelliteController} atom
              */
@@ -799,6 +907,16 @@
                     + ", countOfP2PSmsAvailableNotificationRemoved="
                     + mCountOfP2PSmsAvailableNotificationRemoved
                     + ", versionOfSatelliteAccessConfig=" + sVersionOfSatelliteAccessConfig
+                    + ", countOfIncomingDatagramTypeSosSmsSuccess="
+                    + mCountOfIncomingDatagramTypeSosSmsSuccess
+                    + ", countOfIncomingDatagramTypeSosSmsFail="
+                    + mCountOfIncomingDatagramTypeSosSmsFail
+                    + ", countOfOutgoingDatagramTypeSmsSuccess="
+                    + mCountOfOutgoingDatagramTypeSmsSuccess
+                    + ", countOfOutgoingDatagramTypeSmsFail=" + mCountOfOutgoingDatagramTypeSmsFail
+                    + ", countOfIncomingDatagramTypeSmsSuccess="
+                    + mCountOfIncomingDatagramTypeSmsSuccess
+                    + ", countOfIncomingDatagramTypeSmsFail=" + mCountOfIncomingDatagramTypeSmsFail
                     + ")";
         }
     }
@@ -2053,6 +2171,7 @@
              */
             public Builder setSupportedSatelliteServices(int[] supportedSatelliteServices) {
                 this.mSupportedSatelliteServices = supportedSatelliteServices;
+                Arrays.sort(this.mSupportedSatelliteServices);
                 return this;
             }
 
@@ -2138,6 +2257,7 @@
         private static int sCarrierId;
         private static boolean sIsDeviceEntitled;
         private static boolean sIsMultiSim;
+        private final int mCountOfSatelliteSessions;
 
         private CarrierRoamingSatelliteControllerStatsParams(Builder builder) {
             this.mConfigDataSource = builder.mConfigDataSource;
@@ -2173,6 +2293,8 @@
             if (builder.mIsMultiSim.isPresent()) {
                 sIsMultiSim = builder.mIsMultiSim.get();
             }
+
+            this.mCountOfSatelliteSessions = builder.mCountOfSatelliteSessions;
         }
 
         public int getConfigDataSource() {
@@ -2216,6 +2338,10 @@
             return sIsMultiSim;
         }
 
+        public int getCountOfSatelliteSessions() {
+            return mCountOfSatelliteSessions;
+        }
+
         /**
          * A builder class to create {@link CarrierRoamingSatelliteControllerStatsParams}
          * data structure class
@@ -2231,6 +2357,7 @@
             private Optional<Integer> mCarrierId = Optional.empty();
             private Optional<Boolean> mIsDeviceEntitled = Optional.empty();
             private Optional<Boolean> mIsMultiSim = Optional.empty();
+            private int mCountOfSatelliteSessions = 0;
 
             /**
              * Sets configDataSource value of {@link CarrierRoamingSatelliteControllerStats} atom
@@ -2317,6 +2444,15 @@
             }
 
             /**
+             * Increase the countOfSatelliteSession value of
+             * {@link CarrierRoamingSatelliteControllerStats} atom by one then returns Builder class
+             */
+            public Builder increaseCountOfSatelliteSessions() {
+                this.mCountOfSatelliteSessions++;
+                return this;
+            }
+
+            /**
              * Returns CarrierRoamingSatelliteControllerStatsParams, which contains whole component
              * of {@link CarrierRoamingSatelliteControllerStats} atom
              */
@@ -2342,6 +2478,7 @@
                     + ", carrierId=" + sCarrierId
                     + ", isDeviceEntitled=" + sIsDeviceEntitled
                     + ", isMultiSim=" + sIsMultiSim
+                    + ", countOfSatelliteSession=" + mCountOfSatelliteSessions
                     + ")";
         }
     }
@@ -2477,6 +2614,7 @@
              */
             public Builder setEntitlementServiceType(int[] entitlementServiceType) {
                 this.mEntitlementServiceType = entitlementServiceType;
+                Arrays.sort(this.mEntitlementServiceType);
                 return this;
             }
 
@@ -2872,6 +3010,16 @@
                 param.getCountOfP2PSmsAvailableNotificationRemoved();
         proto.isNtnOnlyCarrier = param.isNtnOnlyCarrier();
         proto.versionOfSatelliteAccessConfig = param.getVersionSatelliteAccessConfig();
+        proto.countOfIncomingDatagramTypeSosSmsSuccess =
+                param.getCountOfIncomingDatagramTypeSosSmsSuccess();
+        proto.countOfIncomingDatagramTypeSosSmsFail =
+                param.getCountOfIncomingDatagramTypeSosSmsFail();
+        proto.countOfOutgoingDatagramTypeSmsSuccess =
+                param.getCountOfOutgoingDatagramTypeSmsSuccess();
+        proto.countOfOutgoingDatagramTypeSmsFail = param.getCountOfOutgoingDatagramTypeSmsFail();
+        proto.countOfIncomingDatagramTypeSmsSuccess =
+                param.getCountOfIncomingDatagramTypeSmsSuccess();
+        proto.countOfIncomingDatagramTypeSmsFail = param.getCountOfIncomingDatagramTypeSmsFail();
         if (DBG) logd("onSatelliteControllerMetrics" + param);
         mAtomsStorage.addSatelliteControllerStats(proto);
     }
@@ -3008,6 +3156,7 @@
         proto.carrierId = param.getCarrierId();
         proto.isDeviceEntitled = param.isDeviceEntitled();
         proto.isMultiSim = param.isMultiSim();
+        proto.countOfSatelliteSessions = param.getCountOfSatelliteSessions();
         if (DBG) logd("onCarrierRoamingSatelliteControllerStatsMetrics: " + param);
         mAtomsStorage.addCarrierRoamingSatelliteControllerStats(proto);
     }
diff --git a/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java b/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java
index bb509be..bc7d5d1 100644
--- a/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java
+++ b/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java
@@ -81,6 +81,8 @@
     private static final int CMD_SEND_SMS = 8;
     private static final int EVENT_SEND_SMS_DONE = 9;
     private static final int EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT = 10;
+    private static final int CMD_SEND_MT_SMS_POLLING_MESSAGE = 11;
+
     private static final Long TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE = TimeUnit.SECONDS.toMillis(10);
     @NonNull private static DatagramDispatcher sInstance;
     @NonNull private final Context mContext;
@@ -422,10 +424,16 @@
             case EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT: {
                 synchronized (mLock) {
                     mIsMtSmsPollingThrottled = false;
-                    if (allowMtSmsPolling()) {
-                        sendMtSmsPollingMessage();
-                    }
                 }
+                if (allowMtSmsPolling()) {
+                    sendMessage(obtainMessage(CMD_SEND_MT_SMS_POLLING_MESSAGE));
+                }
+                break;
+            }
+
+            case CMD_SEND_MT_SMS_POLLING_MESSAGE: {
+                plogd("CMD_SEND_MT_SMS_POLLING_MESSAGE");
+                handleCmdSendMtSmsPollingMessage();
                 break;
             }
 
@@ -517,9 +525,9 @@
             mIsAligned = isAligned;
             plogd("setDeviceAlignedWithSatellite: " + mIsAligned);
             if (isAligned && mIsDemoMode) handleEventSatelliteAligned();
-            if (allowMtSmsPolling()) {
-                sendMtSmsPollingMessage();
-            }
+        }
+        if (allowMtSmsPolling()) {
+            sendMessage(obtainMessage(CMD_SEND_MT_SMS_POLLING_MESSAGE));
         }
     }
 
@@ -759,9 +767,11 @@
         if (resultCode == SATELLITE_RESULT_SUCCESS) {
             long smsTransmissionTime = mSmsTransmissionStartTime > 0
                     ? (System.currentTimeMillis() - mSmsTransmissionStartTime) : 0;
+            mControllerMetricsStats.reportOutgoingDatagramSuccessCount(datagramType, false);
             mSessionMetricsStats.addCountOfSuccessfulOutgoingDatagram(
                     datagramType, smsTransmissionTime);
         } else {
+            mControllerMetricsStats.reportOutgoingDatagramFailCount(datagramType, false);
             mSessionMetricsStats.addCountOfFailedOutgoingDatagram(
                     datagramType, resultCode);
         }
@@ -841,10 +851,9 @@
                     mShouldPollMtSms = shouldPollMtSms();
                 }
             }
-
-            if (allowMtSmsPolling()) {
-                sendMtSmsPollingMessage();
-            }
+        }
+        if (allowMtSmsPolling()) {
+            sendMessage(obtainMessage(CMD_SEND_MT_SMS_POLLING_MESSAGE));
         }
     }
 
@@ -1321,23 +1330,26 @@
                 && satelliteController.shouldSendSmsToDatagramDispatcher(satellitePhone);
     }
 
-    @GuardedBy("mLock")
-    private void sendMtSmsPollingMessage() {
-        if (!mShouldPollMtSms) {
-            return;
-        }
-
-        plogd("sendMtSmsPollingMessage");
-        if (!allowCheckMessageInNotConnected()) {
-            mShouldPollMtSms = false;
-        }
-
-        for (Entry<Long, PendingRequest> entry : mPendingSmsMap.entrySet()) {
-            PendingRequest pendingRequest = entry.getValue();
-            if (pendingRequest.isMtSmsPolling) {
-                plogd("sendMtSmsPollingMessage: mPendingSmsMap already has the polling message.");
+    private void handleCmdSendMtSmsPollingMessage() {
+        synchronized (mLock) {
+            if (!mShouldPollMtSms) {
+                plogd("sendMtSmsPollingMessage: mShouldPollMtSms=" + mShouldPollMtSms);
                 return;
             }
+
+            plogd("sendMtSmsPollingMessage");
+            if (!allowCheckMessageInNotConnected()) {
+                mShouldPollMtSms = false;
+            }
+
+            for (Entry<Long, PendingRequest> entry : mPendingSmsMap.entrySet()) {
+                PendingRequest pendingRequest = entry.getValue();
+                if (pendingRequest.isMtSmsPolling) {
+                    plogd("sendMtSmsPollingMessage: mPendingSmsMap already "
+                            + "has the polling message.");
+                    return;
+                }
+            }
         }
 
         Phone satellitePhone = SatelliteController.getInstance().getSatellitePhone();
@@ -1370,7 +1382,6 @@
         removeMessages(EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT);
     }
 
-    @GuardedBy("mLock")
     private boolean allowMtSmsPolling() {
         if (!mFeatureFlags.carrierRoamingNbIotNtn()) return false;
 
@@ -1383,11 +1394,15 @@
             return false;
         }
 
-        if (!mIsAligned) return false;
+        boolean isModemStateConnectedOrTransferring;
+        synchronized (mLock) {
+            if (!mIsAligned) return false;
 
-        boolean isModemStateConnectedOrTransferring =
-                mModemState == SATELLITE_MODEM_STATE_CONNECTED
-                        || mModemState == SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING;
+            isModemStateConnectedOrTransferring =
+                    mModemState == SATELLITE_MODEM_STATE_CONNECTED
+                            || mModemState == SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING;
+        }
+
         if (!isModemStateConnectedOrTransferring && !allowCheckMessageInNotConnected()) {
             plogd("EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT:"
                     + " allow_check_message_in_not_connected is disabled");
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index 78276fd..11d2b76 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -626,7 +626,6 @@
     private List<SatelliteSubscriberProvisionStatus> mLastEvaluatedSubscriberProvisionStatus =
             new ArrayList<>();
     // The ID of the satellite subscription that has highest priority and is provisioned.
-    @GuardedBy("mSatelliteTokenProvisionedLock")
     @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
     protected int mSelectedSatelliteSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     // The last ICC ID that framework configured to modem.
@@ -3811,6 +3810,9 @@
         } else {
             logd("onSmsReceived: DatagramController is not initialized");
         }
+
+        mControllerMetricsStats.reportIncomingNtnSmsCount(
+                SatelliteManager.SATELLITE_RESULT_SUCCESS);
     }
 
     /**
@@ -6733,10 +6735,7 @@
                     SATELLITE_SYSTEM_NOTIFICATION_TIME, 0L);
             logv("determineAutoConnectSystemNotification lastSetTimestamp = " + lastSetTimestamp);
             long currentTime = System.currentTimeMillis();
-            int subId;
-            synchronized (mSatellitePhoneLock) {
-                subId = mSatellitePhone.getSubId();
-            }
+            int subId = getSelectedSatelliteSubId();
             long throttleTime = getNotificationDisplayThrottleTimeout(subId);
             if (lastSetTimestamp == 0L || currentTime - lastSetTimestamp >= throttleTime) {
                 // Reset the flag and update the timestamp
@@ -7532,6 +7531,7 @@
      */
     public void requestSatelliteSubscriberProvisionStatus(@NonNull ResultReceiver result) {
         if (!mFeatureFlags.carrierRoamingNbIotNtn()) {
+            logd("requestSatelliteSubscriberProvisionStatus: carrierRoamingNbIotNtn is disabled");
             result.send(SATELLITE_RESULT_REQUEST_NOT_SUPPORTED, null);
             return;
         }
@@ -7599,10 +7599,8 @@
     }
 
     public int getSelectedSatelliteSubId() {
-        synchronized (mSatelliteTokenProvisionedLock) {
-            plogd("getSelectedSatelliteSubId: subId=" + mSelectedSatelliteSubId);
-            return mSelectedSatelliteSubId;
-        }
+        plogd("getSelectedSatelliteSubId: subId=" + mSelectedSatelliteSubId);
+        return mSelectedSatelliteSubId;
     }
 
     /**
@@ -7970,15 +7968,13 @@
 
     /** Return the carrier ID of the binding satellite subscription. */
     public int getSatelliteCarrierId() {
-        synchronized (mSatelliteTokenProvisionedLock) {
-            SubscriptionInfo subInfo = mSubscriptionManagerService.getSubscriptionInfo(
-                    mSelectedSatelliteSubId);
-            if (subInfo == null) {
-                logd("getSatelliteCarrierId: returns UNKNOWN_CARRIER_ID");
-                return UNKNOWN_CARRIER_ID;
-            }
-            return subInfo.getCarrierId();
+        SubscriptionInfo subInfo = mSubscriptionManagerService.getSubscriptionInfo(
+            mSelectedSatelliteSubId);
+        if (subInfo == null) {
+            logd("getSatelliteCarrierId: returns UNKNOWN_CARRIER_ID");
+            return UNKNOWN_CARRIER_ID;
         }
+        return subInfo.getCarrierId();
     }
 
     /**
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
index 03c294b..d33f828 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
@@ -307,7 +307,7 @@
 
     private void handleSatelliteProvisionStateChangedEvent(boolean provisioned) {
         if (!provisioned
-                && !isSatelliteConnectedViaCarrierWithinHysteresisTime()) {
+                && !isSatelliteEmergencyMessagingViaCarrierAvailable()) {
             cleanUpResources(false);
         }
     }
@@ -347,7 +347,7 @@
             if (!isCellularAvailable
                     && isSatelliteAllowed()
                     && ((isDeviceProvisioned() && isSatelliteAllowedByReasons())
-                    || isSatelliteConnectedViaCarrierWithinHysteresisTime())
+                    || isSatelliteEmergencyMessagingViaCarrierAvailable())
                     && shouldTrackCall(mEmergencyConnection.getState())) {
                 plogd("handleTimeoutEvent: Sent EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer");
                 Bundle extras = createExtraBundleForEventDisplayEmergencyMessage(
@@ -367,7 +367,7 @@
 
     private boolean isSatelliteAllowed() {
         synchronized (mLock) {
-            if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) return true;
+            if (isSatelliteEmergencyMessagingViaCarrierAvailable()) return true;
             return mIsSatelliteAllowedForCurrentLocation;
         }
     }
@@ -388,7 +388,12 @@
         return satelliteProvisioned != null ? satelliteProvisioned : false;
     }
 
-    private boolean isSatelliteConnectedViaCarrierWithinHysteresisTime() {
+    private boolean isSatelliteEmergencyMessagingViaCarrierAvailable() {
+        if (!mSatelliteController.isSatelliteEmergencyMessagingSupportedViaCarrier()) {
+            plogd("isSatelliteEmergencyMessagingViaCarrierAvailable: false, "
+                    + "device does not support satellite emergency messaging via carrier");
+            return false;
+        }
         return mIsSatelliteConnectedViaCarrierWithinHysteresisTime.get();
     }
 
@@ -567,7 +572,7 @@
     }
 
     private void selectEmergencyCallWaitForConnectionTimeoutDuration() {
-        if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) {
+        if (isSatelliteEmergencyMessagingViaCarrierAvailable()) {
             int satelliteSubId = mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.get();
             mTimeoutMillis =
                     mSatelliteController.getCarrierEmergencyCallWaitForConnectionTimeoutMillis(
@@ -769,7 +774,7 @@
 
     @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
     public int getEmergencyCallToSatelliteHandoverType() {
-        if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) {
+        if (isSatelliteEmergencyMessagingViaCarrierAvailable()) {
             int satelliteSubId = mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.get();
             return mSatelliteController.getCarrierRoamingNtnEmergencyCallToSatelliteHandoverType(
                     satelliteSubId);
@@ -841,6 +846,8 @@
     private void updateSatelliteConnectedViaCarrierWithinHysteresisTimeState() {
         Pair<Boolean, Integer> satelliteConnectedState =
                 mSatelliteController.isSatelliteConnectedViaCarrierWithinHysteresisTime();
+        plogd("updateSatelliteConnectedViaCarrierWithinHysteresisTimeState: subId="
+                  + satelliteConnectedState.second + ", connected="+ satelliteConnectedState.first);
         mIsSatelliteConnectedViaCarrierWithinHysteresisTime.set(satelliteConnectedState.first);
         if (satelliteConnectedState.first) {
             mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.set(
diff --git a/src/java/com/android/internal/telephony/satellite/metrics/CarrierRoamingSatelliteControllerStats.java b/src/java/com/android/internal/telephony/satellite/metrics/CarrierRoamingSatelliteControllerStats.java
index 777fe7b..8d78045 100644
--- a/src/java/com/android/internal/telephony/satellite/metrics/CarrierRoamingSatelliteControllerStats.java
+++ b/src/java/com/android/internal/telephony/satellite/metrics/CarrierRoamingSatelliteControllerStats.java
@@ -113,6 +113,10 @@
     /** Log carrier roaming satellite session start */
     public void onSessionStart() {
         mSessionStartTimeList.add(getCurrentTime());
+        mSatelliteStats.onCarrierRoamingSatelliteControllerStatsMetrics(
+                new SatelliteStats.CarrierRoamingSatelliteControllerStatsParams.Builder()
+                        .increaseCountOfSatelliteSessions()
+                        .build());
     }
 
     /** Log carrier roaming satellite session end */
diff --git a/src/java/com/android/internal/telephony/satellite/metrics/ControllerMetricsStats.java b/src/java/com/android/internal/telephony/satellite/metrics/ControllerMetricsStats.java
index aef0808..5d0fa9d 100644
--- a/src/java/com/android/internal/telephony/satellite/metrics/ControllerMetricsStats.java
+++ b/src/java/com/android/internal/telephony/satellite/metrics/ControllerMetricsStats.java
@@ -145,6 +145,9 @@
                 builder.setCountOfDatagramTypeLocationSharingSuccess(ADD_COUNT);
             } else if (datagramType == SatelliteManager.DATAGRAM_TYPE_KEEP_ALIVE) {
                 builder.setCountOfDatagramTypeKeepAliveSuccess(ADD_COUNT).build();
+            } else if (datagramType == SatelliteManager.DATAGRAM_TYPE_SMS) {
+                builder.setCountOfDatagramTypeSosSmsSuccess(ADD_COUNT)
+                        .setCountOfOutgoingDatagramTypeSmsSuccess(ADD_COUNT);
             }
         }
 
@@ -169,6 +172,9 @@
                 builder.setCountOfDatagramTypeLocationSharingFail(ADD_COUNT);
             } else if (datagramType == SatelliteManager.DATAGRAM_TYPE_KEEP_ALIVE) {
                 builder.setCountOfDatagramTypeKeepAliveFail(ADD_COUNT);
+            } else if (datagramType == SatelliteManager.DATAGRAM_TYPE_SMS) {
+                builder.setCountOfDatagramTypeSosSmsFail(ADD_COUNT)
+                        .setCountOfOutgoingDatagramTypeSmsFail(ADD_COUNT);
             }
         }
 
@@ -177,7 +183,7 @@
         mSatelliteStats.onSatelliteControllerMetrics(controllerParam);
     }
 
-    /** Report a counter when an attempt for incoming datagram is failed */
+    /** Increase counters for successful and failed incoming datagram attempts */
     public void reportIncomingDatagramCount(
             @NonNull @SatelliteManager.SatelliteResult int result, boolean isDemoMode) {
         SatelliteStats.SatelliteControllerParams.Builder builder =
@@ -190,9 +196,12 @@
             }
         } else {
             if (result == SatelliteManager.SATELLITE_RESULT_SUCCESS) {
-                builder.setCountOfIncomingDatagramSuccess(ADD_COUNT);
+                builder.setCountOfIncomingDatagramSuccess(ADD_COUNT)
+                        .setCountOfIncomingDatagramTypeSosSmsSuccess(ADD_COUNT);
+
             } else {
-                builder.setCountOfIncomingDatagramFail(ADD_COUNT);
+                builder.setCountOfIncomingDatagramFail(ADD_COUNT)
+                        .setCountOfIncomingDatagramTypeSosSmsFail(ADD_COUNT);
             }
         }
         SatelliteStats.SatelliteControllerParams  controllerParam = builder.build();
@@ -200,6 +209,23 @@
         mSatelliteStats.onSatelliteControllerMetrics(controllerParam);
     }
 
+    /** Increase counters for successful and failed incoming ntn sms attempts */
+    public void reportIncomingNtnSmsCount(
+            @NonNull @SatelliteManager.SatelliteResult int result) {
+        SatelliteStats.SatelliteControllerParams.Builder builder =
+                new SatelliteStats.SatelliteControllerParams.Builder();
+        if (result == SatelliteManager.SATELLITE_RESULT_SUCCESS) {
+            builder.setCountOfIncomingDatagramTypeSosSmsSuccess(ADD_COUNT)
+                    .setCountOfIncomingDatagramTypeSmsSuccess(ADD_COUNT);
+        } else {
+            builder.setCountOfIncomingDatagramTypeSosSmsFail(ADD_COUNT)
+                    .setCountOfIncomingDatagramTypeSmsFail(ADD_COUNT);
+        }
+        SatelliteStats.SatelliteControllerParams  controllerParam = builder.build();
+        logd("reportIncomingNtnSmsCount(): " + controllerParam);
+        mSatelliteStats.onSatelliteControllerMetrics(controllerParam);
+    }
+
     /** Report a counter when an attempt for de-provision is success or not */
     public void reportProvisionCount(@NonNull @SatelliteManager.SatelliteResult int result) {
         SatelliteStats.SatelliteControllerParams controllerParam;
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
index c586d19..026bfff 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
@@ -4158,8 +4158,7 @@
         }
 
         UserHandle myUserHandle = UserHandle.of(UserHandle.getCallingUserId());
-        return mFeatureFlags.subscriptionUserAssociationQuery()
-            && isSubscriptionAssociatedWithUserNoCheck(subscriptionId, myUserHandle);
+        return isSubscriptionAssociatedWithUserNoCheck(subscriptionId, myUserHandle);
     }
 
     /**
diff --git a/tests/telephonytests/src/android/telephony/ims/ImsFeatureTest.java b/tests/telephonytests/src/android/telephony/ims/ImsFeatureTest.java
index 2dc0b31..175b875 100644
--- a/tests/telephonytests/src/android/telephony/ims/ImsFeatureTest.java
+++ b/tests/telephonytests/src/android/telephony/ims/ImsFeatureTest.java
@@ -19,7 +19,7 @@
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertTrue;
 
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 
diff --git a/tests/telephonytests/src/android/telephony/ims/ImsServiceTest.java b/tests/telephonytests/src/android/telephony/ims/ImsServiceTest.java
index d9d387c..725f84d 100644
--- a/tests/telephonytests/src/android/telephony/ims/ImsServiceTest.java
+++ b/tests/telephonytests/src/android/telephony/ims/ImsServiceTest.java
@@ -23,7 +23,7 @@
 import static junit.framework.Assert.fail;
 
 import static org.junit.Assert.assertNotNull;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
diff --git a/tests/telephonytests/src/android/telephony/ims/SipTransportImplBaseTest.java b/tests/telephonytests/src/android/telephony/ims/SipTransportImplBaseTest.java
index 11b1d22..1fd9b6c 100644
--- a/tests/telephonytests/src/android/telephony/ims/SipTransportImplBaseTest.java
+++ b/tests/telephonytests/src/android/telephony/ims/SipTransportImplBaseTest.java
@@ -22,7 +22,7 @@
 
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyList;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CallManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/CallManagerTest.java
index 82bbc18..7918115 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CallManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CallManagerTest.java
@@ -18,11 +18,11 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.isA;
-import static org.mockito.Matchers.isNull;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyChar;
 import static org.mockito.Mockito.anyString;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierActionAgentTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierActionAgentTest.java
index ed45cd5..aa4f0ca 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierActionAgentTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierActionAgentTest.java
@@ -16,7 +16,7 @@
 package com.android.internal.telephony;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java
index 1c58ef2..19e186f 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java
@@ -30,9 +30,9 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.never;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java
index 753f85c..d4c2914 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java
@@ -18,7 +18,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierServicesSmsFilterTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierServicesSmsFilterTest.java
index e68d065..7787be7 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierServicesSmsFilterTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierServicesSmsFilterTest.java
@@ -18,10 +18,10 @@
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.timeout;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierSignalAgentTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierSignalAgentTest.java
index 7710648..4cb637f 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierSignalAgentTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierSignalAgentTest.java
@@ -26,9 +26,9 @@
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.argThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CellIdentityCdmaTest.java b/tests/telephonytests/src/com/android/internal/telephony/CellIdentityCdmaTest.java
deleted file mode 100644
index 53719b1..0000000
--- a/tests/telephonytests/src/com/android/internal/telephony/CellIdentityCdmaTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.telephony;
-
-import static org.junit.Assert.assertEquals;
-
-import android.os.Parcel;
-import android.telephony.CellIdentityCdma;
-import android.test.AndroidTestCase;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.telephony.flags.Flags;
-
-/** Unit tests for {@link CellIdentityCdma}. */
-
-public class CellIdentityCdmaTest extends AndroidTestCase {
-    private static final String LOG_TAG = "CellIdentityCdmaTest";
-
-    // Network Id ranges from 0 to 65535.
-    private static final int NETWORK_ID  = 65535;
-    // CDMA System Id ranges from 0 to 32767
-    private static final int SYSTEM_ID = 32767;
-    // Base Station Id ranges from 0 to 65535
-    private static final int BASESTATION_ID = 65535;
-    // Longitude ranges from -2592000 to 2592000.
-    private static final int LONGITUDE = 2592000;
-    // Latitude ranges from -1296000 to 1296000.
-    private static final int LATITUDE = 1296000;
-    private static final String ALPHA_LONG = "long";
-    private static final String ALPHA_SHORT = "short";
-
-    @SmallTest
-    public void testConstructor() {
-        if (Flags.cleanupCdma()) return;
-        CellIdentityCdma  ci =
-                new CellIdentityCdma(NETWORK_ID, SYSTEM_ID, BASESTATION_ID, LONGITUDE, LATITUDE,
-                        ALPHA_LONG, ALPHA_SHORT);
-
-        assertEquals(NETWORK_ID, ci.getNetworkId());
-        assertEquals(LATITUDE, ci.getLatitude());
-        assertEquals(LONGITUDE, ci.getLongitude());
-        assertEquals(ALPHA_LONG, ci.getOperatorAlphaLong());
-        assertEquals(ALPHA_SHORT, ci.getOperatorAlphaShort());
-
-        String globalCi = Integer.toString(SYSTEM_ID, 16) + Integer.toString(NETWORK_ID, 16)
-                + Integer.toString(BASESTATION_ID, 16);
-        assertEquals(globalCi, ci.getGlobalCellId());
-    }
-
-    @SmallTest
-    public void testNullIsland() {
-        if (Flags.cleanupCdma()) return;
-        CellIdentityCdma  ci =
-                new CellIdentityCdma(NETWORK_ID, SYSTEM_ID, BASESTATION_ID, -1, 0,
-                        ALPHA_LONG, ALPHA_SHORT);
-
-        assertEquals(Integer.MAX_VALUE, ci.getLatitude());
-        assertEquals(Integer.MAX_VALUE, ci.getLongitude());
-    }
-
-    @SmallTest
-    public void testEquals() {
-        if (Flags.cleanupCdma()) return;
-        CellIdentityCdma  ciA =
-                new CellIdentityCdma(NETWORK_ID, SYSTEM_ID, BASESTATION_ID, LONGITUDE, LATITUDE,
-                        ALPHA_LONG, ALPHA_SHORT);
-        CellIdentityCdma  ciB =
-                new CellIdentityCdma(NETWORK_ID, SYSTEM_ID, BASESTATION_ID, LONGITUDE, LATITUDE,
-                        ALPHA_LONG, ALPHA_SHORT);
-
-        assertTrue(ciA.equals(ciB));
-
-        ciA = new CellIdentityCdma(NETWORK_ID, SYSTEM_ID, BASESTATION_ID, LONGITUDE, LATITUDE,
-                null, null);
-        ciB = new CellIdentityCdma(NETWORK_ID, SYSTEM_ID, BASESTATION_ID, LONGITUDE, LATITUDE,
-                null, null);
-
-        assertTrue(ciA.equals(ciB));
-
-        ciA = new CellIdentityCdma(NETWORK_ID, SYSTEM_ID, BASESTATION_ID, LONGITUDE, LATITUDE,
-                ALPHA_LONG, ALPHA_SHORT);
-        ciB = new CellIdentityCdma(NETWORK_ID, SYSTEM_ID, BASESTATION_ID, LONGITUDE, LATITUDE,
-                null, null);
-
-        assertFalse(ciA.equals(ciB));
-    }
-
-    @SmallTest
-    public void testParcel() {
-        if (Flags.cleanupCdma()) return;
-        CellIdentityCdma  ci =
-                new CellIdentityCdma(NETWORK_ID, SYSTEM_ID, BASESTATION_ID, LONGITUDE, LATITUDE,
-                        ALPHA_LONG, ALPHA_SHORT);
-
-        Parcel p = Parcel.obtain();
-        ci.writeToParcel(p, 0);
-        p.setDataPosition(0);
-
-        CellIdentityCdma newCi = CellIdentityCdma.CREATOR.createFromParcel(p);
-        assertEquals(ci, newCi);
-    }
-}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CellSignalStrengthCdmaTest.java b/tests/telephonytests/src/com/android/internal/telephony/CellSignalStrengthCdmaTest.java
deleted file mode 100644
index ab5e732..0000000
--- a/tests/telephonytests/src/com/android/internal/telephony/CellSignalStrengthCdmaTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.telephony;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import android.os.Parcel;
-import android.telephony.CellSignalStrengthCdma;
-import android.test.AndroidTestCase;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.telephony.flags.Flags;
-
-/** Unit tests for {@link CellSignalStrengthCdma}. */
-
-public class CellSignalStrengthCdmaTest extends AndroidTestCase {
-
-    private static final int CDMA_DBM = -74;
-    private static final int CDMA_ECIO = -124;
-    private static final int EVDO_DBM = -23;
-    private static final int EVDO_ECIO = -108;
-    private static final int EVDO_SNR = 7;
-
-    @SmallTest
-    public void testConstructor() {
-        if (Flags.cleanupCdma()) return;
-        CellSignalStrengthCdma css = new CellSignalStrengthCdma(
-                CDMA_DBM, CDMA_ECIO, EVDO_DBM, EVDO_ECIO, EVDO_SNR);
-        assertEquals(CDMA_DBM, css.getCdmaDbm());
-        assertEquals(CDMA_ECIO, css.getCdmaEcio());
-        assertEquals(EVDO_DBM, css.getEvdoDbm());
-        assertEquals(EVDO_ECIO, css.getEvdoEcio());
-        assertEquals(EVDO_SNR, css.getEvdoSnr());
-    }
-
-    @SmallTest
-    public void testInvalidConstructor() {
-        if (Flags.cleanupCdma()) return;
-        CellSignalStrengthCdma css = new CellSignalStrengthCdma(200, 2000, 20, 400, 200);
-        assertEquals(Integer.MAX_VALUE, css.getCdmaDbm());
-        assertEquals(Integer.MAX_VALUE, css.getCdmaEcio());
-        assertEquals(Integer.MAX_VALUE, css.getEvdoDbm());
-        assertEquals(Integer.MAX_VALUE, css.getEvdoEcio());
-        assertEquals(Integer.MAX_VALUE, css.getEvdoSnr());
-    }
-
-    @SmallTest
-    public void testDefaultConstructor() {
-        if (Flags.cleanupCdma()) return;
-        CellSignalStrengthCdma css = new CellSignalStrengthCdma();
-        assertEquals(Integer.MAX_VALUE, css.getCdmaDbm());
-        assertEquals(Integer.MAX_VALUE, css.getCdmaEcio());
-        assertEquals(Integer.MAX_VALUE, css.getEvdoDbm());
-        assertEquals(Integer.MAX_VALUE, css.getEvdoEcio());
-        assertEquals(Integer.MAX_VALUE, css.getEvdoSnr());
-    }
-
-    @SmallTest
-    public void testEquals() {
-        if (Flags.cleanupCdma()) return;
-        assertTrue(new CellSignalStrengthCdma(
-                CDMA_DBM, CDMA_ECIO, EVDO_DBM, EVDO_ECIO, EVDO_SNR).equals(
-                        new CellSignalStrengthCdma(
-                                CDMA_DBM, CDMA_ECIO, EVDO_DBM, EVDO_ECIO, EVDO_SNR)));
-        assertFalse(new CellSignalStrengthCdma(
-                CDMA_DBM, CDMA_ECIO, EVDO_DBM, EVDO_ECIO, EVDO_SNR).equals(
-                    new CellSignalStrengthCdma(CDMA_DBM, CDMA_ECIO, -24, EVDO_ECIO, EVDO_SNR)));
-    }
-
-    @SmallTest
-    public void testParcel() {
-        if (Flags.cleanupCdma()) return;
-        CellSignalStrengthCdma css = new CellSignalStrengthCdma(
-                CDMA_DBM, CDMA_ECIO, EVDO_DBM, EVDO_ECIO, EVDO_SNR);
-
-        Parcel p = Parcel.obtain();
-        css.writeToParcel(p, 0);
-        p.setDataPosition(0);
-
-        CellSignalStrengthCdma newCss = CellSignalStrengthCdma.CREATOR.createFromParcel(p);
-        assertEquals(css, newCss);
-    }
-}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java b/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java
index 39139bf..8f77c05 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java
@@ -20,9 +20,9 @@
 import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.lenient;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
@@ -791,14 +791,14 @@
     public ContextFixture() {
         MockitoAnnotations.initMocks(this);
 
-        doAnswer(new Answer<List<ResolveInfo>>() {
+        lenient().doAnswer(new Answer<List<ResolveInfo>>() {
             @Override
             public List<ResolveInfo> answer(InvocationOnMock invocation) throws Throwable {
                 return doQueryIntentServices((Intent) invocation.getArguments()[0]);
             }
         }).when(mPackageManager).queryIntentServices((Intent) any(), anyInt());
 
-        doAnswer(new Answer<List<ResolveInfo>>() {
+        lenient().doAnswer(new Answer<List<ResolveInfo>>() {
             @Override
             public List<ResolveInfo> answer(InvocationOnMock invocation) throws Throwable {
                 return doQueryIntentServices((Intent) invocation.getArguments()[0]);
@@ -812,30 +812,32 @@
             Log.d(TAG, "NameNotFoundException: e=" + e);
         }
 
-        doAnswer((Answer<Boolean>)
+        lenient().doAnswer((Answer<Boolean>)
                 invocation -> mSystemFeatures.contains((String) invocation.getArgument(0)))
                 .when(mPackageManager).hasSystemFeature(any());
 
         try {
-            doReturn(mResources).when(mPackageManager).getResourcesForApplication(anyString());
+            lenient().doReturn(mResources).when(mPackageManager)
+                    .getResourcesForApplication(anyString());
         } catch (NameNotFoundException ex) {
             Log.d(TAG, "NameNotFoundException: ex=" + ex);
         }
 
-        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
-        doReturn(mBundle).when(mCarrierConfigManager).getConfig();
-        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyString());
-        doAnswer(invocation -> mNetworkId++).when(mNetwork).getNetId();
-        doReturn(mNetwork).when(mConnectivityManager).registerNetworkAgent(
+        lenient().doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+        lenient().doReturn(mBundle).when(mCarrierConfigManager).getConfig();
+        lenient().doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt(),
+                anyString());
+        lenient().doAnswer(invocation -> mNetworkId++).when(mNetwork).getNetId();
+        lenient().doReturn(mNetwork).when(mConnectivityManager).registerNetworkAgent(
                 any(), any(), any(), any(), any(), any(), anyInt());
 
-        doReturn(true).when(mEuiccManager).isEnabled();
+        lenient().doReturn(true).when(mEuiccManager).isEnabled();
 
         mConfiguration.locale = Locale.US;
-        doReturn(mConfiguration).when(mResources).getConfiguration();
+        lenient().doReturn(mConfiguration).when(mResources).getConfiguration();
 
         mDisplayMetrics.density = 2.25f;
-        doReturn(mDisplayMetrics).when(mResources).getDisplayMetrics();
+        lenient().doReturn(mDisplayMetrics).when(mResources).getDisplayMetrics();
         mPermissionTable.add(PERMISSION_ENABLE_ALL);
     }
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java b/tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java
index 522cdac..7591161 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java
@@ -23,7 +23,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/DeviceStateMonitorTest.java b/tests/telephonytests/src/com/android/internal/telephony/DeviceStateMonitorTest.java
index 6baf10a..057b745 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/DeviceStateMonitorTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/DeviceStateMonitorTest.java
@@ -22,10 +22,10 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.nullable;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GbaManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/GbaManagerTest.java
index e97b1c0..97c4962 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GbaManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GbaManagerTest.java
@@ -22,9 +22,9 @@
 import static junit.framework.Assert.assertTrue;
 import static junit.framework.Assert.fail;
 
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java
index 967c41e..1093bb9 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java
@@ -89,7 +89,6 @@
 
     @Test @SmallTest
     public void testOriginalDialString(){
-        doReturn(PhoneConstants.PHONE_TYPE_GSM).when(mPhone).getPhoneType();
         connection = new GsmCdmaConnection(mPhone, "+8610000", mCT, null,
                 new DialArgs.Builder().build());
         assertEquals("+8610000", connection.getOrigDialString());
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
index 6035c8d..3f77744 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
@@ -37,8 +37,8 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.nullable;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.anyBoolean;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.anyString;
@@ -147,14 +147,6 @@
     private static final int EVENT_EMERGENCY_CALL_TOGGLE = 2;
     private static final int EVENT_SET_ICC_LOCK_ENABLED = 3;
 
-    private void switchToGsm() {
-        mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_GSM);
-        mPhoneUT.sendMessage(mPhoneUT.obtainMessage(GsmCdmaPhone.EVENT_VOICE_RADIO_TECH_CHANGED,
-                new AsyncResult(null, new int[]{ServiceState.RIL_RADIO_TECHNOLOGY_GSM}, null)));
-        processAllMessages();
-        assertEquals(PhoneConstants.PHONE_TYPE_GSM, mPhoneUT.getPhoneType());
-    }
-
     @Before
     public void setUp() throws Exception {
         super.setUp(getClass().getSimpleName());
@@ -386,39 +378,6 @@
 
     @Test
     @SmallTest
-    public void testGetSubscriberIdForCdmaLtePhone() {
-        final String subscriberId = "abcdefghijk";
-        IccRecords iccRecords = Mockito.mock(IccRecords.class);
-        doReturn(subscriberId).when(iccRecords).getIMSI();
-        doReturn(iccRecords).when(mUiccController)
-                .getIccRecords(anyInt() /* phoneId */, eq(UiccController.APP_FAM_3GPP));
-
-        // Ensure the phone type is CdmaLte
-        GsmCdmaPhone spyPhone = spy(mPhoneUT);
-        doReturn(false).when(spyPhone).isPhoneTypeCdma();
-        doReturn(true).when(spyPhone).isPhoneTypeCdmaLte();
-        doReturn(false).when(spyPhone).isPhoneTypeGsm();
-
-        assertEquals(subscriberId, spyPhone.getSubscriberId());
-    }
-
-    @Test
-    @SmallTest
-    public void testGetSubscriberIdForCdmaPhone() {
-        final String subscriberId = "987654321";
-        doReturn(subscriberId).when(mSST).getImsi();
-
-        // Ensure the phone type is GSM
-        GsmCdmaPhone spyPhone = spy(mPhoneUT);
-        doReturn(true).when(spyPhone).isPhoneTypeCdma();
-        doReturn(false).when(spyPhone).isPhoneTypeCdmaLte();
-        doReturn(false).when(spyPhone).isPhoneTypeGsm();
-
-        assertEquals(subscriberId, spyPhone.getSubscriberId());
-    }
-
-    @Test
-    @SmallTest
     public void testGetCellLocation() {
         // GSM
         CellIdentity cellLocation = new CellIdentityGsm();
@@ -681,16 +640,16 @@
         doReturn(true).when(mTelephonyManager).isEmergencyNumber(emergencyNumber);
 
         // Feature flag enabled
-        // Device does not have FEATURE_TELEPHONY_CALLING
+        // Device does not have FEATURE_TELEPHONY_MESSAGING
         doReturn(false).when(mPackageManager).hasSystemFeature(
-                eq(PackageManager.FEATURE_TELEPHONY_CALLING));
+                eq(PackageManager.FEATURE_TELEPHONY_MESSAGING));
         mPhoneUT.notifySmsSent(emergencyNumber);
         processAllMessages();
         assertFalse(mPhoneUT.isInEmergencySmsMode());
 
-        // Device has FEATURE_TELEPHONY_CALLING
+        // Device has FEATURE_TELEPHONY_MESSAGING
         doReturn(true).when(mPackageManager).hasSystemFeature(
-                eq(PackageManager.FEATURE_TELEPHONY_CALLING));
+                eq(PackageManager.FEATURE_TELEPHONY_MESSAGING));
         mPhoneUT.notifySmsSent(emergencyNumber);
         processAllMessages();
         assertTrue(mPhoneUT.isInEmergencySmsMode());
@@ -1068,8 +1027,6 @@
     public void testGetLine1NumberForGsmPhone() {
         final String msisdn = "+1234567890";
         doReturn(msisdn).when(mSimRecords).getMsisdnNumber();
-
-        switchToGsm();
         assertEquals(msisdn, mPhoneUT.getLine1Number());
     }
 
@@ -2436,14 +2393,6 @@
     }
 
     @Test
-    public void getImei() {
-        assertTrue(mPhoneUT.isPhoneTypeGsm());
-        Message message = mPhoneUT.obtainMessage(Phone.EVENT_RADIO_AVAILABLE);
-        mPhoneUT.handleMessage(message);
-        verify(mSimulatedCommandsVerifier, times(2)).getImei(nullable(Message.class));
-    }
-
-    @Test
     public void testSetAllowedNetworkTypes_admin2gRestrictionHonored() throws Exception {
         // circumvent loading/saving to sim db. it's not behavior under test.
         TelephonyManager.setupISubForTest(Mockito.mock(SubscriptionManagerService.class));
diff --git a/tests/telephonytests/src/com/android/internal/telephony/LocaleTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/LocaleTrackerTest.java
index 6674af0..7f9249b 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/LocaleTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/LocaleTrackerTest.java
@@ -19,7 +19,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.reset;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/MultiSimSettingControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/MultiSimSettingControllerTest.java
index 855a5dc..50455ea 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/MultiSimSettingControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/MultiSimSettingControllerTest.java
@@ -249,8 +249,6 @@
         bundle.putBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL, true);
         doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
 
-        doReturn(true).when(mFeatureFlags).resetPrimarySimDefaultValues();
-
         replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
         // Capture listener to emulate the carrier config change notification used later
         ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> listenerArgumentCaptor =
diff --git a/tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java
index ba9bc74..4db6f56 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java
@@ -1373,6 +1373,60 @@
     }
 
     @Test
+    public void testSecondaryPciTimerExpire() throws Exception {
+        testTransitionToCurrentStateNrConnectedMmwave();
+        assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED,
+                mNetworkTypeController.getOverrideNetworkType());
+
+        mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING,
+                "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10");
+        mBundle.putInt(CarrierConfigManager.KEY_NR_ADVANCED_PCI_CHANGE_SECONDARY_TIMER_SECONDS_INT,
+                30);
+        sendCarrierConfigChanged();
+
+        // should trigger 10 second primary timer
+        doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(mServiceState).getNrState();
+        mNetworkTypeController.sendMessage(3 /* EVENT_SERVICE_STATE_CHANGED */);
+        processAllMessages();
+
+        assertEquals("legacy", getCurrentState().getName());
+        assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED,
+                mNetworkTypeController.getOverrideNetworkType());
+        assertTrue(mNetworkTypeController.areAnyTimersActive());
+
+        // Before primary timer expires, PCI changed, indicating 5G UW might soon recover
+        moveTimeForward(5 * 1000);
+        mNetworkTypeController.sendMessage(11 /* EVENT_PHYSICAL_CHANNEL_CONFIGS_CHANGED */,
+                new AsyncResult(null,
+                        List.of(new PhysicalChannelConfig.Builder()
+                                .setPhysicalCellId(2)
+                                .setNetworkType(TelephonyManager.NETWORK_TYPE_NR)
+                                .setCellConnectionStatus(CellInfo.CONNECTION_PRIMARY_SERVING)
+                        .build()),
+                        null));
+        processAllMessages();
+
+        // primary timer expires
+        moveTimeForward(5 * 1000);
+        processAllMessages();
+
+        // should trigger 30 second secondary timer
+        assertEquals("legacy", getCurrentState().getName());
+        assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED,
+                mNetworkTypeController.getOverrideNetworkType());
+        assertTrue(mNetworkTypeController.areAnyTimersActive());
+
+        // secondary timer expires
+        moveTimeForward(30 * 1000);
+        processAllMessages();
+
+        assertEquals("legacy", getCurrentState().getName());
+        assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE,
+                mNetworkTypeController.getOverrideNetworkType());
+        assertFalse(mNetworkTypeController.areAnyTimersActive());
+    }
+
+    @Test
     public void testSecondaryTimerReset() throws Exception {
         doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState();
         mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING,
diff --git a/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java b/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java
index 7a30984..b08830c 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java
@@ -21,8 +21,6 @@
 import static junit.framework.Assert.assertNull;
 import static junit.framework.Assert.assertTrue;
 
-import com.android.internal.telephony.flags.Flags;
-
 import android.net.Uri;
 import android.platform.test.flag.junit.SetFlagsRule;
 import android.telephony.PhoneNumberUtils;
@@ -32,6 +30,8 @@
 import androidx.test.filters.FlakyTest;
 import androidx.test.filters.SmallTest;
 
+import com.android.internal.telephony.flags.Flags;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -560,6 +560,8 @@
         assertEquals("+16502910000", PhoneNumberUtils.formatNumberToE164("650 2910000", "US"));
         assertNull(PhoneNumberUtils.formatNumberToE164("1234567", "US"));
         assertEquals("+18004664114", PhoneNumberUtils.formatNumberToE164("800-GOOG-114", "US"));
+
+        assertEquals("+447445032046", PhoneNumberUtils.formatNumberToE164("0 7445 032046", "GB"));
     }
 
     @SmallTest
diff --git a/tests/telephonytests/src/com/android/internal/telephony/PhoneSubInfoControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/PhoneSubInfoControllerTest.java
index cbcd89d..24267db 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/PhoneSubInfoControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/PhoneSubInfoControllerTest.java
@@ -28,7 +28,7 @@
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Matchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/RILTest.java b/tests/telephonytests/src/com/android/internal/telephony/RILTest.java
index d537d77..8a7c1f0 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/RILTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/RILTest.java
@@ -32,7 +32,6 @@
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CONFERENCE;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DATA_REGISTRATION_STATE;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DELETE_SMS_ON_SIM;
-import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DEVICE_IDENTITY;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DEVICE_IMEI;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DTMF;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENABLE_UICC_APPLICATIONS;
@@ -57,7 +56,6 @@
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_HANGUP;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND;
-import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IMS_REGISTRATION_STATE;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IMS_SEND_SMS;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_LAST_CALL_FAIL_CAUSE;
 import static com.android.internal.telephony.RILConstants.RIL_REQUEST_NV_READ_ITEM;
@@ -98,8 +96,8 @@
 
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
@@ -1012,15 +1010,6 @@
 
     @FlakyTest
     @Test
-    public void testGetDeviceIdentity() throws Exception {
-        mRILUnderTest.getDeviceIdentity(obtainMessage());
-        verify(mRadioProxy).getDeviceIdentity(mSerialNumberCaptor.capture());
-        verifyRILResponse(
-                mRILUnderTest, mSerialNumberCaptor.getValue(), RIL_REQUEST_DEVICE_IDENTITY);
-    }
-
-    @FlakyTest
-    @Test
     public void testExitEmergencyCallbackMode() throws Exception {
         mRILUnderTest.exitEmergencyCallbackMode(obtainMessage());
         verify(mRadioProxy).exitEmergencyCallbackMode(mSerialNumberCaptor.capture());
@@ -1156,15 +1145,6 @@
 
     @FlakyTest
     @Test
-    public void testGetImsRegistrationState() throws Exception {
-        mRILUnderTest.getImsRegistrationState(obtainMessage());
-        verify(mRadioProxy).getImsRegistrationState(mSerialNumberCaptor.capture());
-        verifyRILResponse(
-                mRILUnderTest, mSerialNumberCaptor.getValue(), RIL_REQUEST_IMS_REGISTRATION_STATE);
-    }
-
-    @FlakyTest
-    @Test
     public void testSendRetryImsGsmSms() throws Exception {
         String smscPdu = "smscPdu";
         String pdu = "pdu";
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
index bd732ea..316ccd7 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
@@ -27,9 +27,8 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.nullable;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.anyString;
 import static org.mockito.Mockito.atLeast;
@@ -98,7 +97,6 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.R;
-import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
 import com.android.internal.telephony.data.AccessNetworksManager;
 import com.android.internal.telephony.data.DataNetworkController;
 import com.android.internal.telephony.emergency.EmergencyStateTracker;
@@ -121,7 +119,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.concurrent.Executor;
 import java.util.stream.Collectors;
@@ -1010,52 +1007,6 @@
 
     @Test
     @MediumTest
-    public void testUpdatePhoneType() {
-        String brandOverride = "spn from brand override";
-        doReturn(brandOverride).when(mUiccProfile).getOperatorBrandOverride();
-        doReturn(false).when(mPhone).isPhoneTypeGsm();
-        doReturn(true).when(mPhone).isPhoneTypeCdmaLte();
-        doReturn(CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM).when(mCdmaSSM).
-                getCdmaSubscriptionSource();
-
-        // switch to CDMA
-        logd("Calling updatePhoneType");
-        sst.updatePhoneType();
-
-        ArgumentCaptor<Integer> integerArgumentCaptor = ArgumentCaptor.forClass(Integer.class);
-        verify(mRuimRecords).registerForRecordsLoaded(eq(sst), integerArgumentCaptor.capture(),
-                nullable(Object.class));
-
-        // response for mRuimRecords.registerForRecordsLoaded()
-        Message msg = Message.obtain();
-        msg.what = integerArgumentCaptor.getValue();
-        msg.obj = new AsyncResult(null, null, null);
-        sst.sendMessage(msg);
-        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
-
-        // on RUIM_RECORDS_LOADED, sst is expected to call following apis
-        verify(mRuimRecords, times(1)).isProvisioned();
-
-        // switch back to GSM
-        doReturn(true).when(mPhone).isPhoneTypeGsm();
-        doReturn(false).when(mPhone).isPhoneTypeCdmaLte();
-
-        // response for mRuimRecords.registerForRecordsLoaded() can be sent after switching to GSM
-        msg = Message.obtain();
-        msg.what = integerArgumentCaptor.getValue();
-        msg.obj = new AsyncResult(null, null, null);
-        sst.sendMessage(msg);
-
-        // There's no easy way to check if the msg was handled or discarded. Wait to make sure sst
-        // did not crash, and then verify that the functions called records loaded are not called
-        // again
-        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
-
-        verify(mRuimRecords, times(1)).isProvisioned();
-    }
-
-    @Test
-    @MediumTest
     public void testRegAndUnregForVoiceRoamingOn() throws Exception {
         sst.registerForVoiceRoamingOn(mTestHandler, EVENT_DATA_ROAMING_ON, null);
 
@@ -1800,59 +1751,6 @@
     }
 
     @Test
-    @MediumTest
-    public void testRegisterForSubscriptionInfoReady() {
-        sst.registerForSubscriptionInfoReady(mTestHandler, EVENT_SUBSCRIPTION_INFO_READY, null);
-
-        // Call functions which would trigger posting of message on test handler
-        doReturn(false).when(mPhone).isPhoneTypeGsm();
-        sst.updatePhoneType();
-        mSimulatedCommands.notifyOtaProvisionStatusChanged();
-
-        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
-
-        // verify posted message
-        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
-        verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong());
-        assertEquals(EVENT_SUBSCRIPTION_INFO_READY, messageArgumentCaptor.getValue().what);
-    }
-
-    @Test
-    @MediumTest
-    public void testRoamingPhoneTypeSwitch() {
-        // Enable roaming
-        doReturn(true).when(mPhone).isPhoneTypeGsm();
-
-        mSimulatedCommands.setVoiceRegState(NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING);
-        mSimulatedCommands.setDataRegState(NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING);
-        mSimulatedCommands.notifyNetworkStateChanged();
-
-        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
-
-        sst.registerForDataRoamingOff(mTestHandler, EVENT_DATA_ROAMING_OFF, null, true);
-        sst.registerForVoiceRoamingOff(mTestHandler, EVENT_VOICE_ROAMING_OFF, null);
-        sst.registerForDataConnectionDetached(AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
-                mTestHandler, EVENT_DATA_CONNECTION_DETACHED, null);
-
-        // Call functions which would trigger posting of message on test handler
-        doReturn(false).when(mPhone).isPhoneTypeGsm();
-        sst.updatePhoneType();
-
-        // verify if registered handler has message posted to it
-        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
-        verify(mTestHandler, atLeast(3)).sendMessageAtTime(
-                messageArgumentCaptor.capture(), anyLong());
-        HashSet<Integer> messageSet = new HashSet<>();
-        for (Message m : messageArgumentCaptor.getAllValues()) {
-            messageSet.add(m.what);
-        }
-
-        assertTrue(messageSet.contains(EVENT_DATA_ROAMING_OFF));
-        assertTrue(messageSet.contains(EVENT_VOICE_ROAMING_OFF));
-        assertTrue(messageSet.contains(EVENT_DATA_CONNECTION_DETACHED));
-    }
-
-    @Test
     @SmallTest
     public void testGetDesiredPowerState() {
         sst.setRadioPower(true);
@@ -1867,34 +1765,6 @@
     }
 
     @Test
-    @SmallTest
-    public void testIsConcurrentVoiceAndDataAllowed() {
-        doReturn(false).when(mPhone).isPhoneTypeGsm();
-        sst.mSS.setCssIndicator(1);
-        assertEquals(true, sst.isConcurrentVoiceAndDataAllowed());
-        sst.mSS.setCssIndicator(0);
-        assertEquals(false, sst.isConcurrentVoiceAndDataAllowed());
-
-        doReturn(true).when(mPhone).isPhoneTypeGsm();
-        NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
-                .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
-                .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_HSPA)
-                .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
-                .build();
-        sst.mSS.addNetworkRegistrationInfo(nri);
-        assertEquals(true, sst.isConcurrentVoiceAndDataAllowed());
-        nri = new NetworkRegistrationInfo.Builder()
-                .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
-                .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_GPRS)
-                .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
-                .build();
-        sst.mSS.addNetworkRegistrationInfo(nri);
-        assertEquals(false, sst.isConcurrentVoiceAndDataAllowed());
-        sst.mSS.setCssIndicator(1);
-        assertEquals(true, sst.isConcurrentVoiceAndDataAllowed());
-    }
-
-    @Test
     @MediumTest
     public void testIsImsRegistered() throws Exception {
         mSimulatedCommands.setImsRegistrationState(new int[]{1, PhoneConstants.PHONE_TYPE_GSM});
@@ -2763,59 +2633,6 @@
 
     @Test
     @SmallTest
-    public void testGetMdn() {
-        doReturn(false).when(mPhone).isPhoneTypeGsm();
-        doReturn(false).when(mPhone).isPhoneTypeCdma();
-        doReturn(true).when(mPhone).isPhoneTypeCdmaLte();
-        doReturn(CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM).when(mCdmaSSM)
-                .getCdmaSubscriptionSource();
-        doReturn(PHONE_ID).when(mPhone).getPhoneId();
-
-        logd("Calling updatePhoneType");
-        // switch to CDMA
-        sst.updatePhoneType();
-
-        // trigger RUIM_RECORDS_LOADED
-        ArgumentCaptor<Integer> integerArgumentCaptor = ArgumentCaptor.forClass(Integer.class);
-        verify(mRuimRecords).registerForRecordsLoaded(eq(sst), integerArgumentCaptor.capture(),
-                nullable(Object.class));
-
-        // response for mRuimRecords.registerForRecordsLoaded()
-        Message msg = Message.obtain();
-        msg.what = integerArgumentCaptor.getValue();
-        msg.obj = new AsyncResult(null, null, null);
-        sst.sendMessage(msg);
-
-        // wait for RUIM_RECORDS_LOADED to be handled
-        waitForHandlerAction(sst, 5000);
-
-        // mdn should be null as nothing populated it
-        assertEquals(null, sst.getMdnNumber());
-
-        // if ruim is provisioned, mdn should still be null
-        doReturn(true).when(mRuimRecords).isProvisioned();
-        assertEquals(null, sst.getMdnNumber());
-
-        // if ruim is not provisioned, and mdn is non null, sst should still return the correct
-        // value
-        doReturn(false).when(mRuimRecords).isProvisioned();
-        String mockMdn = "mockMdn";
-        doReturn(mockMdn).when(mRuimRecords).getMdn();
-
-        // trigger RUIM_RECORDS_LOADED
-        Message msg1 = Message.obtain();
-        msg1.what = integerArgumentCaptor.getValue();
-        msg1.obj = new AsyncResult(null, null, null);
-        sst.sendMessage(msg1);
-
-        // wait for RUIM_RECORDS_LOADED to be handled
-        waitForHandlerAction(sst, 5000);
-
-        assertEquals(mockMdn, sst.getMdnNumber());
-    }
-
-    @Test
-    @SmallTest
     public void testOnLteVopsInfoChanged() {
         ServiceState ss = new ServiceState();
         ss.setVoiceRegState(ServiceState.STATE_IN_SERVICE);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/SimActivationTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/SimActivationTrackerTest.java
index 23d992a..eb312f1 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/SimActivationTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/SimActivationTrackerTest.java
@@ -22,7 +22,7 @@
 import static android.telephony.TelephonyManager.SIM_ACTIVATION_STATE_UNKNOWN;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/Sms7BitEncodingTranslatorTest.java b/tests/telephonytests/src/com/android/internal/telephony/Sms7BitEncodingTranslatorTest.java
index 3295640..263e784 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/Sms7BitEncodingTranslatorTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/Sms7BitEncodingTranslatorTest.java
@@ -18,7 +18,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java
index 6b982a3..37362d5 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java
@@ -26,9 +26,9 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.isNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doNothing;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
index fff3363..26ab6da 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
@@ -21,13 +21,14 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.nullable;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.lenient;
 import static org.mockito.Mockito.spy;
 
 import android.app.ActivityManager;
@@ -174,23 +175,6 @@
             new ArrayList<String>(), EmergencyNumber.EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING,
             EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL);
 
-    private static final Field MESSAGE_QUEUE_FIELD;
-    private static final Field MESSAGE_WHEN_FIELD;
-    private static final Field MESSAGE_NEXT_FIELD;
-
-    static {
-        try {
-            MESSAGE_QUEUE_FIELD = MessageQueue.class.getDeclaredField("mMessages");
-            MESSAGE_QUEUE_FIELD.setAccessible(true);
-            MESSAGE_WHEN_FIELD = Message.class.getDeclaredField("when");
-            MESSAGE_WHEN_FIELD.setAccessible(true);
-            MESSAGE_NEXT_FIELD = Message.class.getDeclaredField("next");
-            MESSAGE_NEXT_FIELD.setAccessible(true);
-        } catch (NoSuchFieldException e) {
-            throw new RuntimeException("Failed to initialize TelephonyTest", e);
-        }
-    }
-
     // Mocked classes
     protected FeatureFlags mFeatureFlags;
     protected GsmCdmaPhone mPhone;
@@ -580,11 +564,11 @@
         mDomainSelectionResolver = Mockito.mock(DomainSelectionResolver.class);
         mNullCipherNotifier = Mockito.mock(NullCipherNotifier.class);
 
-        doReturn(true).when(mFeatureFlags).hsumBroadcast();
-        doReturn(true).when(mFeatureFlags).hsumPackageManager();
-        doReturn(true).when(mFeatureFlags).dataServiceCheck();
-        doReturn(true).when(mFeatureFlags).phoneTypeCleanup();
-        doReturn(true).when(mFeatureFlags).cleanupCdma();
+        lenient().doReturn(true).when(mFeatureFlags).hsumBroadcast();
+        lenient().doReturn(true).when(mFeatureFlags).hsumPackageManager();
+        lenient().doReturn(true).when(mFeatureFlags).dataServiceCheck();
+        lenient().doReturn(true).when(mFeatureFlags).phoneTypeCleanup();
+        lenient().doReturn(true).when(mFeatureFlags).cleanupCdma();
 
         WorkerThread.reset();
         TelephonyManager.disableServiceHandleCaching();
@@ -612,16 +596,16 @@
         Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0);
 
         mServiceManagerMockedServices.put("isub", mSubscriptionManagerService);
-        doReturn(mSubscriptionManagerService).when(mSubscriptionManagerService)
+        lenient().doReturn(mSubscriptionManagerService).when(mSubscriptionManagerService)
                 .queryLocalInterface(anyString());
 
         mPhone.mCi = mSimulatedCommands;
         mCT.mCi = mSimulatedCommands;
-        doReturn(mUiccCard).when(mPhone).getUiccCard();
-        doReturn(mUiccCard).when(mUiccSlot).getUiccCard();
-        doReturn(mUiccCard).when(mUiccController).getUiccCardForPhone(anyInt());
-        doReturn(mUiccPort).when(mPhone).getUiccPort();
-        doReturn(mUiccProfile).when(mUiccPort).getUiccProfile();
+        lenient().doReturn(mUiccCard).when(mPhone).getUiccCard();
+        lenient().doReturn(mUiccCard).when(mUiccSlot).getUiccCard();
+        lenient().doReturn(mUiccCard).when(mUiccController).getUiccCardForPhone(anyInt());
+        lenient().doReturn(mUiccPort).when(mPhone).getUiccPort();
+        lenient().doReturn(mUiccProfile).when(mUiccPort).getUiccProfile();
 
         mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
         mTelecomManager = mContext.getSystemService(TelecomManager.class);
@@ -646,127 +630,130 @@
         mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
 
         //mTelephonyComponentFactory
-        doReturn(mTelephonyComponentFactory).when(mTelephonyComponentFactory).inject(anyString());
-        doReturn(mSST).when(mTelephonyComponentFactory)
+        lenient().doReturn(mTelephonyComponentFactory).when(mTelephonyComponentFactory)
+                .inject(anyString());
+        lenient().doReturn(mSST).when(mTelephonyComponentFactory)
                 .makeServiceStateTracker(nullable(GsmCdmaPhone.class),
                         nullable(CommandsInterface.class), nullable(FeatureFlags.class));
-        doReturn(mEmergencyNumberTracker).when(mTelephonyComponentFactory)
+        lenient().doReturn(mEmergencyNumberTracker).when(mTelephonyComponentFactory)
                 .makeEmergencyNumberTracker(nullable(Phone.class),
                         nullable(CommandsInterface.class), any(FeatureFlags.class));
-        doReturn(getTestEmergencyNumber()).when(mEmergencyNumberTracker)
+        lenient().doReturn(getTestEmergencyNumber()).when(mEmergencyNumberTracker)
                 .getEmergencyNumber(any());
-        doReturn(mUiccProfile).when(mTelephonyComponentFactory)
+        lenient().doReturn(mUiccProfile).when(mTelephonyComponentFactory)
                 .makeUiccProfile(nullable(Context.class), nullable(CommandsInterface.class),
                         nullable(IccCardStatus.class), anyInt(), nullable(UiccCard.class),
                         nullable(Object.class), any(FeatureFlags.class));
-        doReturn(mCT).when(mTelephonyComponentFactory)
+        lenient().doReturn(mCT).when(mTelephonyComponentFactory)
                 .makeGsmCdmaCallTracker(nullable(GsmCdmaPhone.class), any(FeatureFlags.class));
-        doReturn(mIccPhoneBookIntManager).when(mTelephonyComponentFactory)
+        lenient().doReturn(mIccPhoneBookIntManager).when(mTelephonyComponentFactory)
                 .makeIccPhoneBookInterfaceManager(nullable(Phone.class));
-        doReturn(mDisplayInfoController).when(mTelephonyComponentFactory)
+        lenient().doReturn(mDisplayInfoController).when(mTelephonyComponentFactory)
                 .makeDisplayInfoController(nullable(Phone.class), any(FeatureFlags.class));
-        doReturn(mWspTypeDecoder).when(mTelephonyComponentFactory)
+        lenient().doReturn(mWspTypeDecoder).when(mTelephonyComponentFactory)
                 .makeWspTypeDecoder(nullable(byte[].class));
-        doReturn(mImsCT).when(mTelephonyComponentFactory)
+        lenient().doReturn(mImsCT).when(mTelephonyComponentFactory)
                 .makeImsPhoneCallTracker(nullable(ImsPhone.class), any(FeatureFlags.class));
-        doReturn(mCdmaSSM).when(mTelephonyComponentFactory)
+        lenient().doReturn(mCdmaSSM).when(mTelephonyComponentFactory)
                 .getCdmaSubscriptionSourceManagerInstance(nullable(Context.class),
                         nullable(CommandsInterface.class), nullable(Handler.class),
                         anyInt(), nullable(Object.class));
-        doReturn(mImsExternalCallTracker).when(mTelephonyComponentFactory)
+        lenient().doReturn(mImsExternalCallTracker).when(mTelephonyComponentFactory)
                 .makeImsExternalCallTracker(nullable(ImsPhone.class));
-        doReturn(mImsNrSaModeHandler).when(mTelephonyComponentFactory)
+        lenient().doReturn(mImsNrSaModeHandler).when(mTelephonyComponentFactory)
                 .makeImsNrSaModeHandler(nullable(ImsPhone.class));
-        doReturn(mAppSmsManager).when(mTelephonyComponentFactory)
+        lenient().doReturn(mAppSmsManager).when(mTelephonyComponentFactory)
                 .makeAppSmsManager(nullable(Context.class));
-        doReturn(mCarrierSignalAgent).when(mTelephonyComponentFactory)
+        lenient().doReturn(mCarrierSignalAgent).when(mTelephonyComponentFactory)
                 .makeCarrierSignalAgent(nullable(Phone.class));
-        doReturn(mCarrierActionAgent).when(mTelephonyComponentFactory)
+        lenient().doReturn(mCarrierActionAgent).when(mTelephonyComponentFactory)
                 .makeCarrierActionAgent(nullable(Phone.class));
-        doReturn(mDeviceStateMonitor).when(mTelephonyComponentFactory)
+        lenient().doReturn(mDeviceStateMonitor).when(mTelephonyComponentFactory)
                 .makeDeviceStateMonitor(nullable(Phone.class), any(FeatureFlags.class));
-        doReturn(mAccessNetworksManager).when(mTelephonyComponentFactory)
+        lenient().doReturn(mAccessNetworksManager).when(mTelephonyComponentFactory)
                 .makeAccessNetworksManager(nullable(Phone.class), any(Looper.class));
-        doReturn(mNitzStateMachine).when(mTelephonyComponentFactory)
+        lenient().doReturn(mNitzStateMachine).when(mTelephonyComponentFactory)
                 .makeNitzStateMachine(nullable(GsmCdmaPhone.class));
-        doReturn(mLocaleTracker).when(mTelephonyComponentFactory)
+        lenient().doReturn(mLocaleTracker).when(mTelephonyComponentFactory)
                 .makeLocaleTracker(nullable(Phone.class), nullable(NitzStateMachine.class),
                         nullable(Looper.class), any(FeatureFlags.class));
-        doReturn(mEriManager).when(mTelephonyComponentFactory)
+        lenient().doReturn(mEriManager).when(mTelephonyComponentFactory)
                 .makeEriManager(nullable(Phone.class), anyInt());
-        doReturn(mLinkBandwidthEstimator).when(mTelephonyComponentFactory)
+        lenient().doReturn(mLinkBandwidthEstimator).when(mTelephonyComponentFactory)
                 .makeLinkBandwidthEstimator(nullable(Phone.class), any(Looper.class));
-        doReturn(mDataProfileManager).when(mTelephonyComponentFactory)
+        lenient().doReturn(mDataProfileManager).when(mTelephonyComponentFactory)
                 .makeDataProfileManager(any(Phone.class), any(DataNetworkController.class),
                         any(DataServiceManager.class), any(Looper.class),
                         any(FeatureFlags.class),
                         any(DataProfileManager.DataProfileManagerCallback.class));
-        doReturn(mSafetySource).when(mTelephonyComponentFactory)
+        lenient().doReturn(mSafetySource).when(mTelephonyComponentFactory)
                 .makeCellularNetworkSecuritySafetySource(any(Context.class));
-        doReturn(mIdentifierDisclosureNotifier)
+        lenient().doReturn(mIdentifierDisclosureNotifier)
                 .when(mTelephonyComponentFactory)
                 .makeIdentifierDisclosureNotifier(
                         nullable(CellularNetworkSecuritySafetySource.class));
-        doReturn(mNullCipherNotifier)
+        lenient().doReturn(mNullCipherNotifier)
                 .when(mTelephonyComponentFactory)
                 .makeNullCipherNotifier(nullable(CellularNetworkSecuritySafetySource.class));
 
         //mPhone
-        doReturn(mContext).when(mPhone).getContext();
-        doReturn(mContext).when(mPhone2).getContext();
-        doReturn(mContext).when(mImsPhone).getContext();
-        doReturn(true).when(mPhone).getUnitTestMode();
-        doReturn(mUiccProfile).when(mPhone).getIccCard();
-        doReturn(mServiceState).when(mPhone).getServiceState();
-        doReturn(mServiceState).when(mImsPhone).getServiceState();
-        doReturn(mPhone).when(mImsPhone).getDefaultPhone();
-        doReturn(true).when(mPhone).isPhoneTypeGsm();
-        doReturn(PhoneConstants.PHONE_TYPE_GSM).when(mPhone).getPhoneType();
-        doReturn(mCT).when(mPhone).getCallTracker();
-        doReturn(mSST).when(mPhone).getServiceStateTracker();
-        doReturn(mDeviceStateMonitor).when(mPhone).getDeviceStateMonitor();
-        doReturn(mDisplayInfoController).when(mPhone).getDisplayInfoController();
-        doReturn(mSignalStrengthController).when(mPhone).getSignalStrengthController();
-        doReturn(mEmergencyNumberTracker).when(mPhone).getEmergencyNumberTracker();
-        doReturn(mCarrierSignalAgent).when(mPhone).getCarrierSignalAgent();
-        doReturn(mCarrierActionAgent).when(mPhone).getCarrierActionAgent();
-        doReturn(mAppSmsManager).when(mPhone).getAppSmsManager();
-        doReturn(mIccSmsInterfaceManager).when(mPhone).getIccSmsInterfaceManager();
-        doReturn(mAccessNetworksManager).when(mPhone).getAccessNetworksManager();
-        doReturn(mDataSettingsManager).when(mDataNetworkController).getDataSettingsManager();
-        doReturn(mDataNetworkController).when(mPhone).getDataNetworkController();
-        doReturn(mDataSettingsManager).when(mPhone).getDataSettingsManager();
-        doReturn(mCarrierPrivilegesTracker).when(mPhone).getCarrierPrivilegesTracker();
-        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
-        doReturn(mVoiceCallSessionStats).when(mPhone).getVoiceCallSessionStats();
-        doReturn(mVoiceCallSessionStats).when(mImsPhone).getVoiceCallSessionStats();
-        doReturn(mSmsStats).when(mPhone).getSmsStats();
-        doReturn(mTelephonyAnalytics).when(mPhone).getTelephonyAnalytics();
-        doReturn(mImsStats).when(mImsPhone).getImsStats();
+        lenient().doReturn(mContext).when(mPhone).getContext();
+        lenient().doReturn(mContext).when(mPhone2).getContext();
+        lenient().doReturn(mContext).when(mImsPhone).getContext();
+        lenient().doReturn(true).when(mPhone).getUnitTestMode();
+        lenient().doReturn(mUiccProfile).when(mPhone).getIccCard();
+        lenient().doReturn(mServiceState).when(mPhone).getServiceState();
+        lenient().doReturn(mServiceState).when(mImsPhone).getServiceState();
+        lenient().doReturn(mPhone).when(mImsPhone).getDefaultPhone();
+        lenient().doReturn(true).when(mPhone).isPhoneTypeGsm();
+        lenient().doReturn(PhoneConstants.PHONE_TYPE_GSM).when(mPhone).getPhoneType();
+        lenient().doReturn(mCT).when(mPhone).getCallTracker();
+        lenient().doReturn(mSST).when(mPhone).getServiceStateTracker();
+        lenient().doReturn(mDeviceStateMonitor).when(mPhone).getDeviceStateMonitor();
+        lenient().doReturn(mDisplayInfoController).when(mPhone).getDisplayInfoController();
+        lenient().doReturn(mSignalStrengthController).when(mPhone).getSignalStrengthController();
+        lenient().doReturn(mEmergencyNumberTracker).when(mPhone).getEmergencyNumberTracker();
+        lenient().doReturn(mCarrierSignalAgent).when(mPhone).getCarrierSignalAgent();
+        lenient().doReturn(mCarrierActionAgent).when(mPhone).getCarrierActionAgent();
+        lenient().doReturn(mAppSmsManager).when(mPhone).getAppSmsManager();
+        lenient().doReturn(mIccSmsInterfaceManager).when(mPhone).getIccSmsInterfaceManager();
+        lenient().doReturn(mAccessNetworksManager).when(mPhone).getAccessNetworksManager();
+        lenient().doReturn(mDataSettingsManager).when(mDataNetworkController)
+                .getDataSettingsManager();
+        lenient().doReturn(mDataNetworkController).when(mPhone).getDataNetworkController();
+        lenient().doReturn(mDataSettingsManager).when(mPhone).getDataSettingsManager();
+        lenient().doReturn(mCarrierPrivilegesTracker).when(mPhone).getCarrierPrivilegesTracker();
+        lenient().doReturn(mSignalStrength).when(mPhone).getSignalStrength();
+        lenient().doReturn(mVoiceCallSessionStats).when(mPhone).getVoiceCallSessionStats();
+        lenient().doReturn(mVoiceCallSessionStats).when(mImsPhone).getVoiceCallSessionStats();
+        lenient().doReturn(mSmsStats).when(mPhone).getSmsStats();
+        lenient().doReturn(mTelephonyAnalytics).when(mPhone).getTelephonyAnalytics();
+        lenient().doReturn(mImsStats).when(mImsPhone).getImsStats();
         mIccSmsInterfaceManager.mDispatchersController = mSmsDispatchersController;
-        doReturn(mLinkBandwidthEstimator).when(mPhone).getLinkBandwidthEstimator();
-        doReturn(mCellIdentity).when(mPhone).getCurrentCellIdentity();
-        doReturn(mCellLocation).when(mCellIdentity).asCellLocation();
-        doReturn(mDataConfigManager).when(mDataNetworkController).getDataConfigManager();
-        doReturn(mDataProfileManager).when(mDataNetworkController).getDataProfileManager();
-        doReturn(mDataRetryManager).when(mDataNetworkController).getDataRetryManager();
-        doReturn(mCarrierPrivilegesTracker).when(mPhone).getCarrierPrivilegesTracker();
-        doReturn(0).when(mPhone).getPhoneId();
-        doReturn(1).when(mPhone2).getPhoneId();
-        doReturn(true).when(mPhone).hasCalling();
-        doReturn(true).when(mPhone2).hasCalling();
+        lenient().doReturn(mLinkBandwidthEstimator).when(mPhone).getLinkBandwidthEstimator();
+        lenient().doReturn(mCellIdentity).when(mPhone).getCurrentCellIdentity();
+        lenient().doReturn(mCellLocation).when(mCellIdentity).asCellLocation();
+        lenient().doReturn(mDataConfigManager).when(mDataNetworkController).getDataConfigManager();
+        lenient().doReturn(mDataProfileManager).when(mDataNetworkController)
+                .getDataProfileManager();
+        lenient().doReturn(mDataRetryManager).when(mDataNetworkController).getDataRetryManager();
+        lenient().doReturn(mCarrierPrivilegesTracker).when(mPhone).getCarrierPrivilegesTracker();
+        lenient().doReturn(0).when(mPhone).getPhoneId();
+        lenient().doReturn(1).when(mPhone2).getPhoneId();
+        lenient().doReturn(true).when(mPhone).hasCalling();
+        lenient().doReturn(true).when(mPhone2).hasCalling();
 
         //mUiccController
-        doReturn(mUiccCardApplication3gpp).when(mUiccController).getUiccCardApplication(anyInt(),
-                eq(UiccController.APP_FAM_3GPP));
-        doReturn(mUiccCardApplication3gpp2).when(mUiccController).getUiccCardApplication(anyInt(),
-                eq(UiccController.APP_FAM_3GPP2));
-        doReturn(mUiccCardApplicationIms).when(mUiccController).getUiccCardApplication(anyInt(),
-                eq(UiccController.APP_FAM_IMS));
-        doReturn(mUiccCard).when(mUiccController).getUiccCard(anyInt());
-        doReturn(mUiccPort).when(mUiccController).getUiccPort(anyInt());
+        lenient().doReturn(mUiccCardApplication3gpp).when(mUiccController).getUiccCardApplication(
+                anyInt(), eq(UiccController.APP_FAM_3GPP));
+        lenient().doReturn(mUiccCardApplication3gpp2).when(mUiccController).getUiccCardApplication(
+                anyInt(), eq(UiccController.APP_FAM_3GPP2));
+        lenient().doReturn(mUiccCardApplicationIms).when(mUiccController).getUiccCardApplication(
+                anyInt(), eq(UiccController.APP_FAM_IMS));
+        lenient().doReturn(mUiccCard).when(mUiccController).getUiccCard(anyInt());
+        lenient().doReturn(mUiccPort).when(mUiccController).getUiccPort(anyInt());
 
-        doAnswer(new Answer<IccRecords>() {
+        lenient().doAnswer(new Answer<IccRecords>() {
             public IccRecords answer(InvocationOnMock invocation) {
                 switch ((Integer) invocation.getArguments()[1]) {
                     case UiccController.APP_FAM_3GPP:
@@ -781,53 +768,54 @@
                 }
             }
         }).when(mUiccController).getIccRecords(anyInt(), anyInt());
-        doReturn(new UiccSlot[] {mUiccSlot}).when(mUiccController).getUiccSlots();
-        doReturn(mUiccSlot).when(mUiccController).getUiccSlotForPhone(anyInt());
-        doReturn(mPinStorage).when(mUiccController).getPinStorage();
+        lenient().doReturn(new UiccSlot[] {mUiccSlot}).when(mUiccController).getUiccSlots();
+        lenient().doReturn(mUiccSlot).when(mUiccController).getUiccSlotForPhone(anyInt());
+        lenient().doReturn(mPinStorage).when(mUiccController).getPinStorage();
 
         //UiccCardApplication
-        doReturn(mSimRecords).when(mUiccCardApplication3gpp).getIccRecords();
-        doReturn(mRuimRecords).when(mUiccCardApplication3gpp2).getIccRecords();
-        doReturn(mIsimUiccRecords).when(mUiccCardApplicationIms).getIccRecords();
+        lenient().doReturn(mSimRecords).when(mUiccCardApplication3gpp).getIccRecords();
+        lenient().doReturn(mRuimRecords).when(mUiccCardApplication3gpp2).getIccRecords();
+        lenient().doReturn(mIsimUiccRecords).when(mUiccCardApplicationIms).getIccRecords();
 
         //mUiccProfile
-        doReturn(mSimRecords).when(mUiccProfile).getIccRecords();
-        doAnswer(new Answer<IccRecords>() {
+        lenient().doReturn(mSimRecords).when(mUiccProfile).getIccRecords();
+        lenient().doAnswer(new Answer<IccRecords>() {
             public IccRecords answer(InvocationOnMock invocation) {
                 return mSimRecords;
             }
         }).when(mUiccProfile).getIccRecords();
 
         //mUiccProfile
-        doReturn(mUiccCardApplication3gpp).when(mUiccProfile).getApplication(
+        lenient().doReturn(mUiccCardApplication3gpp).when(mUiccProfile).getApplication(
                 eq(UiccController.APP_FAM_3GPP));
-        doReturn(mUiccCardApplication3gpp2).when(mUiccProfile).getApplication(
+        lenient().doReturn(mUiccCardApplication3gpp2).when(mUiccProfile).getApplication(
                 eq(UiccController.APP_FAM_3GPP2));
-        doReturn(mUiccCardApplicationIms).when(mUiccProfile).getApplication(
+        lenient().doReturn(mUiccCardApplicationIms).when(mUiccProfile).getApplication(
                 eq(UiccController.APP_FAM_IMS));
 
         //SMS
-        doReturn(true).when(mSmsStorageMonitor).isStorageAvailable();
-        doReturn(true).when(mSmsUsageMonitor).check(nullable(String.class), anyInt());
-        doReturn(true).when(mTelephonyManager).getSmsReceiveCapableForPhone(anyInt(), anyBoolean());
-        doReturn(true).when(mTelephonyManager).getSmsSendCapableForPhone(
+        lenient().doReturn(true).when(mSmsStorageMonitor).isStorageAvailable();
+        lenient().doReturn(true).when(mSmsUsageMonitor).check(nullable(String.class), anyInt());
+        lenient().doReturn(true).when(mTelephonyManager).getSmsReceiveCapableForPhone(anyInt(),
+                anyBoolean());
+        lenient().doReturn(true).when(mTelephonyManager).getSmsSendCapableForPhone(
                 anyInt(), anyBoolean());
 
         //Misc
-        doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState)
+        lenient().doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState)
                 .getRilDataRadioTechnology();
-        doReturn(new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_LTE,
+        lenient().doReturn(new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_LTE,
                 TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE, false, false, false))
                 .when(mDisplayInfoController).getTelephonyDisplayInfo();
-        doReturn(mPhone).when(mCT).getPhone();
-        doReturn(mImsEcbm).when(mImsManager).getEcbmInterface();
-        doReturn(mPhone).when(mInboundSmsHandler).getPhone();
-        doReturn(mImsCallProfile).when(mImsCall).getCallProfile();
-        doReturn(mIBinder).when(mIIntentSender).asBinder();
+        lenient().doReturn(mPhone).when(mCT).getPhone();
+        lenient().doReturn(mImsEcbm).when(mImsManager).getEcbmInterface();
+        lenient().doReturn(mPhone).when(mInboundSmsHandler).getPhone();
+        lenient().doReturn(mImsCallProfile).when(mImsCall).getCallProfile();
+        lenient().doReturn(mIBinder).when(mIIntentSender).asBinder();
         doAnswer(invocation -> {
             Intent[] intents = invocation.getArgument(6);
             if (intents != null && intents.length > 0) {
-                doReturn(intents[0]).when(mIActivityManager)
+                lenient().doReturn(intents[0]).when(mIActivityManager)
                         .getIntentForIntentSender(mIIntentSender);
             }
             return mIIntentSender;
@@ -835,8 +823,9 @@
                 nullable(String.class), nullable(String.class), nullable(IBinder.class),
                 nullable(String.class), anyInt(), nullable(Intent[].class),
                 nullable(String[].class), anyInt(), nullable(Bundle.class), anyInt());
-        doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(anyInt());
-        doReturn(true).when(mTelephonyManager).isDataCapable();
+        lenient().doReturn(mTelephonyManager).when(mTelephonyManager)
+                .createForSubscriptionId(anyInt());
+        lenient().doReturn(true).when(mTelephonyManager).isDataCapable();
 
         mContextFixture.addSystemFeature(PackageManager.FEATURE_TELECOM);
         mContextFixture.addSystemFeature(PackageManager.FEATURE_TELEPHONY_CALLING);
@@ -844,45 +833,46 @@
         mContextFixture.addSystemFeature(PackageManager.FEATURE_TELEPHONY_EUICC);
         mContextFixture.addSystemFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING);
 
-        doReturn(TelephonyManager.PHONE_TYPE_GSM).when(mTelephonyManager).getPhoneType();
-        doReturn(mServiceState).when(mSST).getServiceState();
-        doReturn(mServiceStateStats).when(mSST).getServiceStateStats();
+        lenient().doReturn(TelephonyManager.PHONE_TYPE_GSM).when(mTelephonyManager).getPhoneType();
+        lenient().doReturn(mServiceState).when(mSST).getServiceState();
+        lenient().doReturn(mServiceStateStats).when(mSST).getServiceStateStats();
         mSST.mSS = mServiceState;
         mSST.mRestrictedState = mRestrictedState;
         mServiceManagerMockedServices.put("connectivity_metrics_logger", mConnMetLoggerBinder);
         mServiceManagerMockedServices.put("package", mMockPackageManager);
         mServiceManagerMockedServices.put("legacy_permission", mMockLegacyPermissionManager);
         logd("mMockLegacyPermissionManager replaced");
-        doReturn(new int[]{AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
+        lenient().doReturn(new int[]{AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
                 AccessNetworkConstants.TRANSPORT_TYPE_WLAN})
                 .when(mAccessNetworksManager).getAvailableTransports();
-        doReturn(true).when(mDataSettingsManager).isDataEnabled();
-        doReturn(mNetworkRegistrationInfo).when(mServiceState).getNetworkRegistrationInfo(
+        lenient().doReturn(true).when(mDataSettingsManager).isDataEnabled();
+        lenient().doReturn(mNetworkRegistrationInfo).when(mServiceState).getNetworkRegistrationInfo(
                 anyInt(), anyInt());
-        doReturn(RIL.RADIO_HAL_VERSION_2_0).when(mPhone).getHalVersion(anyInt());
-        doReturn(2).when(mSignalStrength).getLevel();
-        doReturn(mMockRadioConfigProxy).when(mMockRadioConfig).getRadioConfigProxy(any());
+        lenient().doReturn(RIL.RADIO_HAL_VERSION_2_0).when(mPhone).getHalVersion(anyInt());
+        lenient().doReturn(2).when(mSignalStrength).getLevel();
+        lenient().doReturn(mMockRadioConfigProxy).when(mMockRadioConfig).getRadioConfigProxy(any());
 
         // WiFi
-        doReturn(mWifiInfo).when(mWifiManager).getConnectionInfo();
-        doReturn(2).when(mWifiManager).calculateSignalLevel(anyInt());
-        doReturn(4).when(mWifiManager).getMaxSignalLevel();
+        lenient().doReturn(mWifiInfo).when(mWifiManager).getConnectionInfo();
+        lenient().doReturn(2).when(mWifiManager).calculateSignalLevel(anyInt());
+        lenient().doReturn(4).when(mWifiManager).getMaxSignalLevel();
 
-        doAnswer(invocation -> {
+        lenient().doAnswer(invocation -> {
             NetworkCapabilities nc = invocation.getArgument(0);
             return new VcnNetworkPolicyResult(
                     false /* isTearDownRequested */, nc);
         }).when(mVcnManager).applyVcnNetworkPolicy(any(), any());
 
         //SIM
-        doReturn(1).when(mTelephonyManager).getSimCount();
-        doReturn(1).when(mTelephonyManager).getPhoneCount();
-        doReturn(1).when(mTelephonyManager).getActiveModemCount();
+        lenient().doReturn(1).when(mTelephonyManager).getSimCount();
+        lenient().doReturn(1).when(mTelephonyManager).getPhoneCount();
+        lenient().doReturn(1).when(mTelephonyManager).getActiveModemCount();
         // Have getMaxPhoneCount always return the same value with getPhoneCount by default.
-        doAnswer((invocation)->Math.max(mTelephonyManager.getActiveModemCount(),
+        lenient().doAnswer((invocation)->Math.max(mTelephonyManager.getActiveModemCount(),
                 mTelephonyManager.getPhoneCount()))
                 .when(mTelephonyManager).getSupportedModemCount();
-        doReturn(mStatsManager).when(mContext).getSystemService(eq(Context.NETWORK_STATS_SERVICE));
+        lenient().doReturn(mStatsManager).when(mContext)
+                .getSystemService(eq(Context.NETWORK_STATS_SERVICE));
 
         //Data
         //Initial state is: userData enabled, provisioned.
@@ -893,56 +883,57 @@
                 Settings.Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED, 1);
         Settings.Global.putInt(resolver, Settings.Global.DATA_ROAMING, 0);
 
-        doReturn(90).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(90).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_EIMS));
-        doReturn(80).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(80).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_SUPL));
-        doReturn(70).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(70).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_MMS));
-        doReturn(70).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(70).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_XCAP));
-        doReturn(50).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(50).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_CBS));
-        doReturn(50).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(50).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_MCX));
-        doReturn(50).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(50).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_FOTA));
-        doReturn(40).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(40).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_IMS));
-        doReturn(30).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(30).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_DUN));
-        doReturn(20).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(20).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE));
-        doReturn(20).when(mDataConfigManager).getNetworkCapabilityPriority(
+        lenient().doReturn(20).when(mDataConfigManager).getNetworkCapabilityPriority(
                 eq(NetworkCapabilities.NET_CAPABILITY_INTERNET));
-        doReturn(60000).when(mDataConfigManager).getAnomalyNetworkConnectingTimeoutMs();
-        doReturn(60000).when(mDataConfigManager)
+        lenient().doReturn(60000).when(mDataConfigManager).getAnomalyNetworkConnectingTimeoutMs();
+        lenient().doReturn(60000).when(mDataConfigManager)
                 .getAnomalyNetworkDisconnectingTimeoutMs();
-        doReturn(60000).when(mDataConfigManager).getNetworkHandoverTimeoutMs();
-        doReturn(new DataConfigManager.EventFrequency(300000, 12))
+        lenient().doReturn(60000).when(mDataConfigManager).getNetworkHandoverTimeoutMs();
+        lenient().doReturn(new DataConfigManager.EventFrequency(300000, 12))
                 .when(mDataConfigManager).getAnomalySetupDataCallThreshold();
-        doReturn(new DataConfigManager.EventFrequency(0, 2))
+        lenient().doReturn(new DataConfigManager.EventFrequency(0, 2))
                 .when(mDataConfigManager).getAnomalyImsReleaseRequestThreshold();
-        doReturn(new DataConfigManager.EventFrequency(300000, 12))
+        lenient().doReturn(new DataConfigManager.EventFrequency(300000, 12))
                 .when(mDataConfigManager).getAnomalyNetworkUnwantedThreshold();
 
         // CellularNetworkValidator
-        doReturn(SubscriptionManager.INVALID_PHONE_INDEX)
+        lenient().doReturn(SubscriptionManager.INVALID_PHONE_INDEX)
                 .when(mCellularNetworkValidator).getSubIdInValidation();
-        doReturn(true).when(mCellularNetworkValidator).isValidationFeatureSupported();
+        lenient().doReturn(true).when(mCellularNetworkValidator).isValidationFeatureSupported();
 
         // Metrics
-        doReturn(null).when(mContext).getFileStreamPath(anyString());
-        doReturn(mPersistAtomsStorage).when(mMetricsCollector).getAtomsStorage();
-        doReturn(mDefaultNetworkMonitor).when(mMetricsCollector).getDefaultNetworkMonitor();
-        doReturn(mWifiManager).when(mContext).getSystemService(eq(Context.WIFI_SERVICE));
-        doReturn(mDeviceStateHelper).when(mMetricsCollector).getDeviceStateHelper();
-        doReturn(CELLULAR_SERVICE_STATE__FOLD_STATE__STATE_UNKNOWN)
+        lenient().doReturn(null).when(mContext).getFileStreamPath(anyString());
+        lenient().doReturn(mPersistAtomsStorage).when(mMetricsCollector).getAtomsStorage();
+        lenient().doReturn(mDefaultNetworkMonitor).when(mMetricsCollector)
+                .getDefaultNetworkMonitor();
+        lenient().doReturn(mWifiManager).when(mContext).getSystemService(eq(Context.WIFI_SERVICE));
+        lenient().doReturn(mDeviceStateHelper).when(mMetricsCollector).getDeviceStateHelper();
+        lenient().doReturn(CELLULAR_SERVICE_STATE__FOLD_STATE__STATE_UNKNOWN)
                 .when(mDeviceStateHelper)
                 .getFoldState();
-        doReturn(null).when(mContext).getSystemService(eq(Context.DEVICE_STATE_SERVICE));
+        lenient().doReturn(null).when(mContext).getSystemService(eq(Context.DEVICE_STATE_SERVICE));
 
-        doReturn(false).when(mDomainSelectionResolver).isDomainSelectionSupported();
+        lenient().doReturn(false).when(mDomainSelectionResolver).isDomainSelectionSupported();
         DomainSelectionResolver.setDomainSelectionResolver(mDomainSelectionResolver);
 
         //Use reflection to mock singletons
@@ -1341,36 +1332,12 @@
     }
 
     /**
-     * @return The longest delay from all the message queues.
-     */
-    private long getLongestDelay() {
-        long delay = 0;
-        for (TestableLooper looper : mTestableLoopers) {
-            MessageQueue queue = looper.getLooper().getQueue();
-            try {
-                Message msg = (Message) MESSAGE_QUEUE_FIELD.get(queue);
-                while (msg != null) {
-                    delay = Math.max(msg.getWhen(), delay);
-                    msg = (Message) MESSAGE_NEXT_FIELD.get(msg);
-                }
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException("Access failed in TelephonyTest", e);
-            }
-        }
-        return delay;
-    }
-
-    /**
      * @return {@code true} if there are any messages in the queue.
      */
     private boolean messagesExist() {
         for (TestableLooper looper : mTestableLoopers) {
-            MessageQueue queue = looper.getLooper().getQueue();
-            try {
-                Message msg = (Message) MESSAGE_QUEUE_FIELD.get(queue);
-                if (msg != null) return true;
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException("Access failed in TelephonyTest", e);
+            if (looper.peekWhen() > 0) {
+                return true;
             }
         }
         return false;
@@ -1380,8 +1347,14 @@
      * Handle all messages including the delayed messages.
      */
     public void processAllFutureMessages() {
+        final long now = SystemClock.uptimeMillis();
         while (messagesExist()) {
-            moveTimeForward(getLongestDelay());
+            for (TestableLooper looper : mTestableLoopers) {
+                long nextDelay = looper.peekWhen() - now;
+                if (nextDelay > 0) {
+                    looper.moveTimeForward(nextDelay);
+                }
+            }
             processAllMessages();
         }
     }
@@ -1406,20 +1379,7 @@
      */
     public void moveTimeForward(long milliSeconds) {
         for (TestableLooper looper : mTestableLoopers) {
-            MessageQueue queue = looper.getLooper().getQueue();
-            try {
-                Message msg = (Message) MESSAGE_QUEUE_FIELD.get(queue);
-                while (msg != null) {
-                    long updatedWhen = msg.getWhen() - milliSeconds;
-                    if (updatedWhen < 0) {
-                        updatedWhen = 0;
-                    }
-                    MESSAGE_WHEN_FIELD.set(msg, updatedWhen);
-                    msg = (Message) MESSAGE_NEXT_FIELD.get(msg);
-                }
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException("Access failed in TelephonyTest", e);
-            }
+            looper.moveTimeForward(milliSeconds);
         }
     }
 }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/VisualVoicemailSmsFilterTest.java b/tests/telephonytests/src/com/android/internal/telephony/VisualVoicemailSmsFilterTest.java
index 9f76337..df094ce 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/VisualVoicemailSmsFilterTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/VisualVoicemailSmsFilterTest.java
@@ -16,7 +16,7 @@
 
 package com.android.internal.telephony;
 
-import static org.mockito.Matchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.when;
 
 import android.content.ComponentName;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/WapPushOverSmsTest.java b/tests/telephonytests/src/com/android/internal/telephony/WapPushOverSmsTest.java
index 58e5617..2fdd442 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/WapPushOverSmsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/WapPushOverSmsTest.java
@@ -17,8 +17,8 @@
 package com.android.internal.telephony;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.nullable;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.doReturn;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/cat/CATServiceTest.java b/tests/telephonytests/src/com/android/internal/telephony/cat/CATServiceTest.java
index a07ddbe..7ee4832 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/cat/CATServiceTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/cat/CATServiceTest.java
@@ -211,7 +211,7 @@
         mCatService.sendStkSms("test", "12345", 1, cmdPrms, mProxyController);
         verify(mSmsController, Mockito.times(1)).sendTextForSubscriber(anyInt(),
                 anyString(), nullable(String.class), anyString(), nullable(String.class),
-                anyString(), Mockito.anyObject(), any(), eq(false), anyLong(), eq(true), eq(true));
+                anyString(), Mockito.any(), any(), eq(false), anyLong(), eq(true), eq(true));
     }
 
     @Test
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/AccessNetworksManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/AccessNetworksManagerTest.java
index ddd72e3..1203510 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/AccessNetworksManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/AccessNetworksManagerTest.java
@@ -42,7 +42,6 @@
 import android.telephony.AccessNetworkConstants.AccessNetworkType;
 import android.telephony.NetworkService;
 import android.telephony.data.ApnSetting;
-import android.telephony.data.DataServiceCallback;
 import android.telephony.data.IQualifiedNetworksService;
 import android.telephony.data.IQualifiedNetworksServiceCallback;
 import android.testing.AndroidTestingRunner;
@@ -323,9 +322,7 @@
     }
 
     @Test
-    public void testRequestNetworkValidation_WithFlagEnabled()  throws Exception {
-        when(mFeatureFlags.networkValidation()).thenReturn(true);
-
+    public void testRequestNetworkValidation()  throws Exception {
         mQnsCallback.onNetworkValidationRequested(NetworkCapabilities.NET_CAPABILITY_IMS,
                 mIIntegerConsumer);
         processAllMessages();
@@ -333,23 +330,6 @@
     }
 
     @Test
-    public void testRequestNetworkValidation_WithFlagDisabled() throws Exception {
-        mIIntegerConsumerResults.clear();
-        when(mFeatureFlags.networkValidation()).thenReturn(false);
-
-        mQnsCallback.onNetworkValidationRequested(NetworkCapabilities.NET_CAPABILITY_IMS,
-                mIIntegerConsumer);
-        processAllMessages();
-
-        assertThat(waitForIIntegerConsumerResult(1 /*numOfEvents*/)).isTrue();
-        assertThat((long) mIIntegerConsumerResults.get(0))
-                .isEqualTo(DataServiceCallback.RESULT_ERROR_UNSUPPORTED);
-        verify(mDataNetworkController, never()).requestNetworkValidation(
-                NetworkCapabilities.NET_CAPABILITY_IMS,
-                mIntegerConsumer);
-    }
-
-    @Test
     public void testCallbackForReconnectQualifiedNetworkType()  throws Exception {
         mAccessNetworksManager.registerCallback(mMockedCallback);
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/CellularNetworkValidatorTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/CellularNetworkValidatorTest.java
index 9226f47..7ae55b7 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/CellularNetworkValidatorTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/CellularNetworkValidatorTest.java
@@ -24,7 +24,7 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java
index eba0dd6..a7bd9bc 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java
@@ -4043,6 +4043,13 @@
         processAllMessages();
 
         verify(mMockedDataNetworkControllerCallback).onNrAdvancedCapableByPcoChanged(eq(true));
+
+        // Deactivate the data, verify notify PCO gone.
+        mDataNetworkControllerUT.tearDownAllDataNetworks(
+                DataNetwork.TEAR_DOWN_REASON_AIRPLANE_MODE_ON);
+        processAllFutureMessages();
+
+        verify(mMockedDataNetworkControllerCallback).onNrAdvancedCapableByPcoChanged(eq(false));
     }
 
     @Test
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java
index 3289715..6e92353 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java
@@ -25,7 +25,7 @@
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Matchers.argThat;
+import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doAnswer;
@@ -34,7 +34,6 @@
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
 import android.net.ConnectivityManager;
 import android.net.InetAddresses;
@@ -2294,8 +2293,7 @@
     }
 
     @Test
-    public void testValidationStatusOnPreciseDataConnectionState_FlagEnabled() throws Exception {
-        when(mFeatureFlags.networkValidation()).thenReturn(true);
+    public void testValidationStatusOnPreciseDataConnectionState() throws Exception {
         setupIwlanDataNetwork();
 
         ArgumentCaptor<PreciseDataConnectionState> pdcsCaptor =
@@ -2344,37 +2342,7 @@
     }
 
     @Test
-    public void testValidationStatus_FlagDisabled() throws Exception {
-        // network validation flag disabled
-        when(mFeatureFlags.networkValidation()).thenReturn(false);
-        setupIwlanDataNetwork();
-
-        // precise data connection state posted for setup data call response
-        ArgumentCaptor<PreciseDataConnectionState> pdcsCaptor =
-                ArgumentCaptor.forClass(PreciseDataConnectionState.class);
-        verify(mPhone, times(2)).notifyDataConnection(pdcsCaptor.capture());
-
-        // data state updated with network validation status
-        DataCallResponse response = createDataCallResponse(123,
-                DataCallResponse.LINK_STATUS_ACTIVE, Collections.emptyList(), null,
-                PreciseDataConnectionState.NETWORK_VALIDATION_SUCCESS);
-        mDataNetworkUT.sendMessage(8 /*EVENT_DATA_STATE_CHANGED*/, new AsyncResult(
-                AccessNetworkConstants.TRANSPORT_TYPE_WLAN, List.of(response), null));
-        processAllMessages();
-
-        // Verify updated validation status at precise data connection state not posted due to flag
-        // disabled
-        pdcsCaptor = ArgumentCaptor.forClass(PreciseDataConnectionState.class);
-        verify(mPhone, times(2)).notifyDataConnection(pdcsCaptor.capture());
-        List<PreciseDataConnectionState> pdcsList = pdcsCaptor.getAllValues();
-        assertThat(pdcsList.get(1).getNetworkValidationStatus())
-                .isEqualTo(PreciseDataConnectionState.NETWORK_VALIDATION_UNSUPPORTED);
-    }
-
-    @Test
-    public void testHandoverWithSuccessNetworkValidation_FlagEnabled() throws Exception {
-        when(mFeatureFlags.networkValidation()).thenReturn(true);
-
+    public void testHandoverWithSuccessNetworkValidation() throws Exception {
         setupDataNetwork();
 
         setSuccessfulSetupDataResponse(
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
index 55b4f1c..8cbd61f 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
@@ -19,10 +19,11 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.junit.Assert.assertNotNull;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
@@ -581,4 +582,24 @@
         // recovery action will jump to modem reset action if user doing the radio restart.
         assertThat(mDataStallRecoveryManager.getRecoveryAction()).isEqualTo(4);
     }
+
+    @Test
+    public void testDoNotDoRecoveryActionWhenActiveCall() throws Exception {
+        sendOnInternetDataNetworkCallback(true);
+        mDataStallRecoveryManager.setRecoveryAction(
+                DataStallRecoveryManager.RECOVERY_ACTION_RADIO_RESTART);
+        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
+        // Simulate active call
+        doReturn(PhoneConstants.State.OFFHOOK).when(mPhone).getState();
+
+        logd("Sending validation failed callback");
+        sendValidationStatusCallback(NetworkAgent.VALIDATION_STATUS_NOT_VALID);
+        processAllFutureMessages();
+
+        verify(mSST, never()).powerOffRadioSafely();
+        verify(mPhone, never()).rebootModem(any());
+
+        assertThat(mDataStallRecoveryManager.getRecoveryAction())
+                .isEqualTo(DataStallRecoveryManager.RECOVERY_ACTION_RADIO_RESTART);
+    }
 }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/PhoneSwitcherTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/PhoneSwitcherTest.java
index a9c2ece..cd2e88a 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/PhoneSwitcherTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/PhoneSwitcherTest.java
@@ -42,7 +42,7 @@
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java
index 28edeae..8fc0684 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java
@@ -38,7 +38,6 @@
 import static org.mockito.Mockito.anyBoolean;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.anyLong;
-import static org.mockito.Mockito.anyVararg;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
@@ -2529,7 +2528,7 @@
         when(phone.getSubId()).thenReturn(1);
         setEcmSupportedConfig(phone, true);
         PersistableBundle bundle = mCarrierConfigManager.getConfigForSubId(phone.getSubId());
-        doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyVararg());
+        doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(anyInt(), any());
 
         EmergencyStateTracker testEst = setupEmergencyStateTracker(
                 false /* isSuplDdsSwitchRequiredForEmergencyCall */);
@@ -3054,7 +3053,7 @@
         PersistableBundle bundle = mCarrierConfigManager.getConfigForSubId(testPhone.getSubId());
         bundle.putBoolean(CarrierConfigManager.KEY_BROADCAST_EMERGENCY_CALL_STATE_CHANGES_BOOL,
                 true);
-        doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyVararg());
+        doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(anyInt(), any());
         // onCarrierConfigChanged with valid subscription
         carrierConfigChangeListener.onCarrierConfigChanged(
                 testPhone.getPhoneId(), testPhone.getSubId(),
diff --git a/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccConnectorTest.java b/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccConnectorTest.java
index 3ec3ab5..a95d0d7 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccConnectorTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccConnectorTest.java
@@ -21,8 +21,8 @@
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doThrow;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java b/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java
index e542a41..5affa6e 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java
@@ -22,12 +22,12 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.nullable;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java b/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java
index 6935807..1033db1 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java
@@ -25,9 +25,10 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
+import static org.junit.Assume.assumeFalse;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
@@ -42,6 +43,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.PackageManager;
 import android.content.pm.ServiceInfo;
 import android.location.Country;
 import android.location.CountryDetector;
@@ -59,6 +61,7 @@
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
+import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.FlakyTest;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SmallTest;
@@ -534,9 +537,15 @@
         }
     }
 
+    private void skipOnAutomotive() {
+        assumeFalse(InstrumentationRegistry.getTargetContext().getPackageManager().hasSystemFeature(
+                PackageManager.FEATURE_AUTOMOTIVE));
+    }
+
     @Test
     @SmallTest
     public void testSendMultipartSmsByCarrierAppNoResponse() throws Exception {
+        skipOnAutomotive(); // TODO(b/401440427): don't skip
         mockCarrierApp();
         // do not mock result, instead reduce the timeout for test
         mGsmSmsDispatcher.mCarrierMessagingTimeout = 100;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsEnablementTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsEnablementTrackerTest.java
index 270960c..62e9e87 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsEnablementTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsEnablementTrackerTest.java
@@ -23,11 +23,11 @@
 import static junit.framework.Assert.assertTrue;
 
 import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import android.os.Handler;
 import android.os.Looper;
@@ -224,7 +224,7 @@
         mTracker.disableIms(SLOT_1, SUB_1);
         waitForHandler(mHandler);
 
-        verifyZeroInteractions(mMockServiceControllerBinder);
+        verifyNoMoreInteractions(mMockServiceControllerBinder);
         assertTrue(mTracker.isState(SLOT_1, mTracker.STATE_IMS_DISABLED));
     }
 
@@ -299,7 +299,7 @@
         mTracker.enableIms(SLOT_1, SUB_1);
         waitForHandler(mHandler);
 
-        verifyZeroInteractions(mMockServiceControllerBinder);
+        verifyNoMoreInteractions(mMockServiceControllerBinder);
         assertTrue(mTracker.isState(SLOT_1, mTracker.STATE_IMS_ENABLED));
     }
 
@@ -417,7 +417,7 @@
         mTracker.enableIms(SLOT_1, SUB_1);
         waitForHandler(mHandler);
 
-        verifyZeroInteractions(mMockServiceControllerBinder);
+        verifyNoMoreInteractions(mMockServiceControllerBinder);
         assertTrue(mTracker.isState(SLOT_1, mTracker.STATE_IMS_RESETTING));
     }
 
@@ -435,7 +435,7 @@
         mTracker.disableIms(SLOT_1, SUB_1);
         waitForHandler(mHandler);
 
-        verifyZeroInteractions(mMockServiceControllerBinder);
+        verifyNoMoreInteractions(mMockServiceControllerBinder);
         assertTrue(mTracker.isState(SLOT_1, mTracker.STATE_IMS_RESETTING));
     }
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsResolverTest.java b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsResolverTest.java
index 130fba8..bfc3e4a 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsResolverTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsResolverTest.java
@@ -23,9 +23,9 @@
 import static junit.framework.TestCase.assertFalse;
 
 import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsServiceControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsServiceControllerTest.java
index 5f16d9b..529acf3 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsServiceControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsServiceControllerTest.java
@@ -22,9 +22,9 @@
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsTestBase.java b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsTestBase.java
index c6b0fa1..43d8345 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ims/ImsTestBase.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ims/ImsTestBase.java
@@ -23,6 +23,7 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.MessageQueue;
+import android.os.SystemClock;
 import android.testing.TestableLooper;
 
 import androidx.test.InstrumentationRegistry;
@@ -31,7 +32,6 @@
 
 import org.mockito.MockitoAnnotations;
 
-import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
@@ -41,22 +41,6 @@
  * Helper class to load Mockito Resources into a test.
  */
 public class ImsTestBase {
-    private static final Field MESSAGE_QUEUE_FIELD;
-    private static final Field MESSAGE_WHEN_FIELD;
-    private static final Field MESSAGE_NEXT_FIELD;
-
-    static {
-        try {
-            MESSAGE_QUEUE_FIELD = MessageQueue.class.getDeclaredField("mMessages");
-            MESSAGE_QUEUE_FIELD.setAccessible(true);
-            MESSAGE_WHEN_FIELD = Message.class.getDeclaredField("when");
-            MESSAGE_WHEN_FIELD.setAccessible(true);
-            MESSAGE_NEXT_FIELD = Message.class.getDeclaredField("next");
-            MESSAGE_NEXT_FIELD.setAccessible(true);
-        } catch (NoSuchFieldException e) {
-            throw new RuntimeException("Failed to initialize TelephonyTest", e);
-        }
-    }
 
     protected Context mContext;
     protected List<TestableLooper> mTestableLoopers = new ArrayList<>();
@@ -131,36 +115,12 @@
     }
 
     /**
-     * @return The longest delay from all the message queues.
-     */
-    private long getLongestDelay() {
-        long delay = 0;
-        for (TestableLooper looper : mTestableLoopers) {
-            MessageQueue queue = looper.getLooper().getQueue();
-            try {
-                Message msg = (Message) MESSAGE_QUEUE_FIELD.get(queue);
-                while (msg != null) {
-                    delay = Math.max(msg.getWhen(), delay);
-                    msg = (Message) MESSAGE_NEXT_FIELD.get(msg);
-                }
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException("Access failed in TelephonyTest", e);
-            }
-        }
-        return delay;
-    }
-
-    /**
      * @return {@code true} if there are any messages in the queue.
      */
     private boolean messagesExist() {
         for (TestableLooper looper : mTestableLoopers) {
-            MessageQueue queue = looper.getLooper().getQueue();
-            try {
-                Message msg = (Message) MESSAGE_QUEUE_FIELD.get(queue);
-                if (msg != null) return true;
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException("Access failed in TelephonyTest", e);
+            if (looper.peekWhen() > 0) {
+                return true;
             }
         }
         return false;
@@ -170,8 +130,14 @@
      * Handle all messages including the delayed messages.
      */
     public void processAllFutureMessages() {
+        final long now = SystemClock.uptimeMillis();
         while (messagesExist()) {
-            moveTimeForward(getLongestDelay());
+            for (TestableLooper looper : mTestableLoopers) {
+                long nextDelay = looper.peekWhen() - now;
+                if (nextDelay > 0) {
+                    looper.moveTimeForward(nextDelay);
+                }
+            }
             processAllMessages();
         }
     }
@@ -196,20 +162,7 @@
      */
     public void moveTimeForward(long milliSeconds) {
         for (TestableLooper looper : mTestableLoopers) {
-            MessageQueue queue = looper.getLooper().getQueue();
-            try {
-                Message msg = (Message) MESSAGE_QUEUE_FIELD.get(queue);
-                while (msg != null) {
-                    long updatedWhen = msg.getWhen() - milliSeconds;
-                    if (updatedWhen < 0) {
-                        updatedWhen = 0;
-                    }
-                    MESSAGE_WHEN_FIELD.set(msg, updatedWhen);
-                    msg = (Message) MESSAGE_NEXT_FIELD.get(msg);
-                }
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException("Access failed in TelephonyTest", e);
-            }
+            looper.moveTimeForward(milliSeconds);
         }
     }
 }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
index 5903032..26ef9b9 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
@@ -43,11 +43,11 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyChar;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.nullable;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyChar;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doAnswer;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelperTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelperTest.java
index 451c315..6cc2f4f 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelperTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelperTest.java
@@ -26,7 +26,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Matchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java
index 9d8451e..5bc8e68 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java
@@ -1153,6 +1153,13 @@
         mSatelliteController1.countOfP2PSmsAvailableNotificationShown = 3;
         mSatelliteController1.countOfP2PSmsAvailableNotificationRemoved = 5;
         mSatelliteController1.isNtnOnlyCarrier = false;
+        mSatelliteController1.versionOfSatelliteAccessConfig = 10;
+        mSatelliteController1.countOfIncomingDatagramTypeSosSmsSuccess = 1;
+        mSatelliteController1.countOfIncomingDatagramTypeSosSmsFail = 2;
+        mSatelliteController1.countOfOutgoingDatagramTypeSmsSuccess = 3;
+        mSatelliteController1.countOfOutgoingDatagramTypeSmsFail = 4;
+        mSatelliteController1.countOfIncomingDatagramTypeSmsSuccess = 5;
+        mSatelliteController1.countOfIncomingDatagramTypeSmsFail = 6;
 
         mSatelliteController2 = new SatelliteController();
         mSatelliteController2.countOfSatelliteServiceEnablementsSuccess = 2 + 1;
@@ -1187,6 +1194,13 @@
         mSatelliteController2.countOfP2PSmsAvailableNotificationShown = 30;
         mSatelliteController2.countOfP2PSmsAvailableNotificationRemoved = 50;
         mSatelliteController2.isNtnOnlyCarrier = true;
+        mSatelliteController2.versionOfSatelliteAccessConfig = 12;
+        mSatelliteController2.countOfIncomingDatagramTypeSosSmsSuccess = 11;
+        mSatelliteController2.countOfIncomingDatagramTypeSosSmsFail = 12;
+        mSatelliteController2.countOfOutgoingDatagramTypeSmsSuccess = 31;
+        mSatelliteController2.countOfOutgoingDatagramTypeSmsFail = 14;
+        mSatelliteController2.countOfIncomingDatagramTypeSmsSuccess = 15;
+        mSatelliteController2.countOfIncomingDatagramTypeSmsFail = 16;
 
         // SatelliteController atom has one data point
         mSatelliteControllers =
@@ -1394,6 +1408,7 @@
         mCarrierRoamingSatelliteControllerStats1.carrierId = 1;
         mCarrierRoamingSatelliteControllerStats1.isDeviceEntitled = true;
         mCarrierRoamingSatelliteControllerStats1.isMultiSim = false;
+        mCarrierRoamingSatelliteControllerStats1.countOfSatelliteSessions = 1;
 
         mCarrierRoamingSatelliteControllerStats2 = new CarrierRoamingSatelliteControllerStats();
         mCarrierRoamingSatelliteControllerStats2.configDataSource =
@@ -1407,6 +1422,7 @@
         mCarrierRoamingSatelliteControllerStats2.carrierId = 10;
         mCarrierRoamingSatelliteControllerStats2.isDeviceEntitled = false;
         mCarrierRoamingSatelliteControllerStats2.isMultiSim = true;
+        mCarrierRoamingSatelliteControllerStats2.countOfSatelliteSessions = 2;
 
         // CarrierRoamingSatelliteController has one data point
         mCarrierRoamingSatelliteControllerStats = new CarrierRoamingSatelliteControllerStats[] {
@@ -4456,6 +4472,20 @@
         expected.countOfP2PSmsAvailableNotificationRemoved =
                 mSatelliteController1.countOfP2PSmsAvailableNotificationRemoved * 2;
         expected.isNtnOnlyCarrier = mSatelliteController1.isNtnOnlyCarrier;
+        expected.versionOfSatelliteAccessConfig =
+                mSatelliteController1.versionOfSatelliteAccessConfig;
+        expected.countOfIncomingDatagramTypeSosSmsSuccess =
+                mSatelliteController1.countOfIncomingDatagramTypeSosSmsSuccess * 2;
+        expected.countOfIncomingDatagramTypeSosSmsFail =
+                mSatelliteController1.countOfIncomingDatagramTypeSosSmsFail * 2;
+        expected.countOfOutgoingDatagramTypeSmsSuccess =
+                mSatelliteController1.countOfOutgoingDatagramTypeSmsSuccess * 2;
+        expected.countOfOutgoingDatagramTypeSmsFail =
+                mSatelliteController1.countOfOutgoingDatagramTypeSmsFail * 2;
+        expected.countOfIncomingDatagramTypeSmsSuccess =
+                mSatelliteController1.countOfIncomingDatagramTypeSmsSuccess * 2;
+        expected.countOfIncomingDatagramTypeSmsFail =
+                mSatelliteController1.countOfIncomingDatagramTypeSmsFail * 2;
 
         // Service state and service switch should be added successfully
         verifyCurrentStateSavedToFileOnce();
@@ -4608,6 +4638,26 @@
                 satelliteController1.countOfP2PSmsAvailableNotificationRemoved
                         + satelliteController2.countOfP2PSmsAvailableNotificationRemoved;
         expected.isNtnOnlyCarrier = false;
+        expected.versionOfSatelliteAccessConfig =
+                mSatelliteController2.versionOfSatelliteAccessConfig;
+        expected.countOfIncomingDatagramTypeSosSmsSuccess =
+                mSatelliteController1.countOfIncomingDatagramTypeSosSmsSuccess
+                        + mSatelliteController2.countOfIncomingDatagramTypeSosSmsSuccess;
+        expected.countOfIncomingDatagramTypeSosSmsFail =
+                mSatelliteController1.countOfIncomingDatagramTypeSosSmsFail
+                        + mSatelliteController2.countOfIncomingDatagramTypeSosSmsFail;
+        expected.countOfOutgoingDatagramTypeSmsSuccess =
+                mSatelliteController1.countOfOutgoingDatagramTypeSmsSuccess
+                        + mSatelliteController2.countOfOutgoingDatagramTypeSmsSuccess;
+        expected.countOfOutgoingDatagramTypeSmsFail =
+                mSatelliteController1.countOfOutgoingDatagramTypeSmsFail
+                        + mSatelliteController2.countOfOutgoingDatagramTypeSmsFail;
+        expected.countOfIncomingDatagramTypeSmsSuccess =
+                mSatelliteController1.countOfIncomingDatagramTypeSmsSuccess
+                        + mSatelliteController2.countOfIncomingDatagramTypeSmsSuccess;
+        expected.countOfIncomingDatagramTypeSmsFail =
+                mSatelliteController1.countOfIncomingDatagramTypeSmsFail
+                        + mSatelliteController2.countOfIncomingDatagramTypeSmsFail;
 
         // Service state and service switch should be added successfully
         verifyCurrentStateSavedToFileOnce();
@@ -5158,6 +5208,8 @@
         expected.carrierId = mCarrierRoamingSatelliteControllerStats1.carrierId;
         expected.isDeviceEntitled = mCarrierRoamingSatelliteControllerStats1.isDeviceEntitled;
         expected.isMultiSim = mCarrierRoamingSatelliteControllerStats1.isMultiSim;
+        expected.countOfSatelliteSessions =
+                mCarrierRoamingSatelliteControllerStats1.countOfSatelliteSessions * 2;
         verifyCurrentStateSavedToFileOnce();
         CarrierRoamingSatelliteControllerStats[] output =
                 mPersistAtomsStorage.getCarrierRoamingSatelliteControllerStats(0L);
@@ -6054,6 +6106,20 @@
                         stats.countOfP2PSmsAvailableNotificationShown);
                 assertEquals(expectedStats.countOfP2PSmsAvailableNotificationRemoved,
                         stats.countOfP2PSmsAvailableNotificationRemoved);
+                assertEquals(expectedStats.versionOfSatelliteAccessConfig,
+                        stats.versionOfSatelliteAccessConfig);
+                assertEquals(expectedStats.countOfIncomingDatagramTypeSosSmsSuccess,
+                        stats.countOfIncomingDatagramTypeSosSmsSuccess);
+                assertEquals(expectedStats.countOfIncomingDatagramTypeSosSmsFail,
+                        stats.countOfIncomingDatagramTypeSosSmsFail);
+                assertEquals(expectedStats.countOfOutgoingDatagramTypeSmsSuccess,
+                        stats.countOfOutgoingDatagramTypeSmsSuccess);
+                assertEquals(expectedStats.countOfOutgoingDatagramTypeSmsFail,
+                        stats.countOfOutgoingDatagramTypeSmsFail);
+                assertEquals(expectedStats.countOfIncomingDatagramTypeSmsSuccess,
+                        stats.countOfIncomingDatagramTypeSmsSuccess);
+                assertEquals(expectedStats.countOfIncomingDatagramTypeSmsFail,
+                        stats.countOfIncomingDatagramTypeSmsFail);
                 actualCount++;
             }
         }
@@ -6461,6 +6527,8 @@
                         stats.satelliteSessionGapMaxSec);
                 assertEquals(expectedStats.isDeviceEntitled, stats.isDeviceEntitled);
                 assertEquals(expectedStats.isMultiSim, stats.isMultiSim);
+                assertEquals(expectedStats.countOfSatelliteSessions,
+                        stats.countOfSatelliteSessions);
                 count++;
             }
         }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java
index fce481e..d438198 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java
@@ -48,6 +48,7 @@
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 
+import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
 
 public class SatelliteStatsTest extends TelephonyTest {
@@ -110,6 +111,13 @@
                         .setCountOfP2PSmsAvailableNotificationShown(3)
                         .setCountOfP2PSmsAvailableNotificationRemoved(3)
                         .setIsNtnOnlyCarrier(false)
+                        .setVersionOfSatelliteAccessControl(10)
+                        .setCountOfIncomingDatagramTypeSosSmsSuccess(1)
+                        .setCountOfIncomingDatagramTypeSmsFail(2)
+                        .setCountOfOutgoingDatagramTypeSmsSuccess(3)
+                        .setCountOfOutgoingDatagramTypeSmsFail(4)
+                        .setCountOfIncomingDatagramTypeSmsSuccess(5)
+                        .setCountOfIncomingDatagramTypeSmsFail(6)
                         .build();
 
         mSatelliteStats.onSatelliteControllerMetrics(param);
@@ -181,6 +189,20 @@
                 stats.countOfP2PSmsAvailableNotificationRemoved);
         assertEquals(SatelliteStats.SatelliteControllerParams.isNtnOnlyCarrier(),
                 stats.isNtnOnlyCarrier);
+        assertEquals(SatelliteStats.SatelliteControllerParams.getVersionSatelliteAccessConfig(),
+                stats.versionOfSatelliteAccessConfig);
+        assertEquals(param.getCountOfIncomingDatagramTypeSosSmsSuccess(),
+                stats.countOfIncomingDatagramTypeSosSmsSuccess);
+        assertEquals(param.getCountOfIncomingDatagramTypeSosSmsFail(),
+                stats.countOfIncomingDatagramTypeSosSmsFail);
+        assertEquals(param.getCountOfOutgoingDatagramTypeSmsSuccess(),
+                stats.countOfOutgoingDatagramTypeSmsSuccess);
+        assertEquals(param.getCountOfOutgoingDatagramTypeSmsFail(),
+                stats.countOfOutgoingDatagramTypeSmsFail);
+        assertEquals(param.getCountOfIncomingDatagramTypeSmsSuccess(),
+                stats.countOfIncomingDatagramTypeSmsSuccess);
+        assertEquals(param.getCountOfIncomingDatagramTypeSmsSuccess(),
+                stats.countOfIncomingDatagramTypeSmsSuccess);
 
         verifyNoMoreInteractions(mPersistAtomsStorage);
     }
@@ -460,6 +482,7 @@
                         .setCarrierId(10)
                         .setIsDeviceEntitled(true)
                         .setIsMultiSim(true)
+                        .increaseCountOfSatelliteSessions()
                         .build();
 
         mSatelliteStats.onCarrierRoamingSatelliteControllerStatsMetrics(param);
@@ -481,6 +504,7 @@
         assertEquals(param.getCarrierId(), stats.carrierId);
         assertEquals(param.isDeviceEntitled(), stats.isDeviceEntitled);
         assertEquals(param.isMultiSim(), stats.isMultiSim);
+        assertEquals(param.getCountOfSatelliteSessions(), stats.countOfSatelliteSessions);
 
         verifyNoMoreInteractions(mPersistAtomsStorage);
     }
@@ -500,6 +524,7 @@
                         .setCarrierId(10)
                         .setIsDeviceEntitled(true)
                         .setIsMultiSim(true)
+                        .increaseCountOfSatelliteSessions()
                         .build();
         mSatelliteStats.onCarrierRoamingSatelliteControllerStatsMetrics(param);
 
@@ -545,6 +570,7 @@
         assertEquals(20, stats.carrierId);
         assertEquals(false, stats.isDeviceEntitled);
         assertEquals(param.isMultiSim(), stats.isMultiSim);
+        assertEquals(param.getCountOfSatelliteSessions(), stats.countOfSatelliteSessions);
 
         verifyNoMoreInteractions(mPersistAtomsStorage);
     }
@@ -632,4 +658,38 @@
         assertEquals(param.getConfigDataSource(), stats.configDataSource);
         verifyNoMoreInteractions(mPersistAtomsStorage);
     }
+
+    @Test
+    public void testReportRepeatedDataWithAscendingOrder() {
+        int[] supportedSatelliteServicesArray = {3, 2, 1};
+        SatelliteStats.CarrierRoamingSatelliteSessionParams sessionParams =
+                new SatelliteStats.CarrierRoamingSatelliteSessionParams.Builder()
+                        .setSupportedSatelliteServices(supportedSatelliteServicesArray)
+                        .build();
+        mSatelliteStats.onCarrierRoamingSatelliteSessionMetrics(sessionParams);
+        ArgumentCaptor<CarrierRoamingSatelliteSession> sessionArgumentCaptor =
+                ArgumentCaptor.forClass(CarrierRoamingSatelliteSession.class);
+        verify(mPersistAtomsStorage).addCarrierRoamingSatelliteSessionStats(
+                sessionArgumentCaptor.capture());
+        CarrierRoamingSatelliteSession sessionStats = sessionArgumentCaptor.getValue();
+
+        Arrays.sort(supportedSatelliteServicesArray);
+        assertEquals(supportedSatelliteServicesArray, sessionStats.supportedSatelliteServices);
+        verifyNoMoreInteractions(mPersistAtomsStorage);
+
+        int[] entitlementServiceTypeArray = {2, 3, 1};
+        SatelliteStats.SatelliteEntitlementParams entitlementParams =
+                new SatelliteStats.SatelliteEntitlementParams.Builder()
+                        .setEntitlementServiceType(entitlementServiceTypeArray)
+                        .build();
+        mSatelliteStats.onSatelliteEntitlementMetrics(entitlementParams);
+        ArgumentCaptor<SatelliteEntitlement> entitlementArgumentCaptor =
+                ArgumentCaptor.forClass(SatelliteEntitlement.class);
+        verify(mPersistAtomsStorage).addSatelliteEntitlementStats(
+                entitlementArgumentCaptor.capture());
+        SatelliteEntitlement entitlementStats = entitlementArgumentCaptor.getValue();
+        Arrays.sort(entitlementServiceTypeArray);
+        assertEquals(entitlementServiceTypeArray, entitlementStats.entitlementServiceType);
+        verifyNoMoreInteractions(mPersistAtomsStorage);
+    }
 }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramControllerTest.java
index 7cb53d2..f4d7e61 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramControllerTest.java
@@ -35,7 +35,7 @@
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -148,9 +148,9 @@
         int errorCode = SATELLITE_RESULT_SUCCESS;
         mDatagramControllerUT.updateSendStatus(SUB_ID, DATAGRAM_TYPE_KEEP_ALIVE,
                 SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING, sendPendingCount, errorCode);
-        verifyZeroInteractions(mMockSatelliteSessionController);
-        verifyZeroInteractions(mMockPointingAppController);
-        verifyZeroInteractions(mMockDatagramReceiver);
+        verifyNoMoreInteractions(mMockSatelliteSessionController);
+        verifyNoMoreInteractions(mMockPointingAppController);
+        verifyNoMoreInteractions(mMockDatagramReceiver);
     }
 
     @Test
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java
index ba31203..f383068 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java
@@ -43,7 +43,6 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import android.annotation.NonNull;
@@ -230,7 +229,7 @@
                     eq(SATELLITE_RESULT_SUCCESS));
             mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
                     eq(SatelliteServiceUtils.isLastSosMessage(datagramType)));
-            verifyZeroInteractions(mMockSatelliteModemInterface);
+            verifyNoMoreInteractions(mMockSatelliteModemInterface);
             assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
 
             doReturn(false).when(mMockDatagramController)
@@ -273,7 +272,7 @@
             mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramType, mDatagram,
                     true, mResultListener::offer);
             processAllMessages();
-            verifyZeroInteractions(mMockSatelliteModemInterface);
+            verifyNoMoreInteractions(mMockSatelliteModemInterface);
             mInOrder.verify(mMockDatagramController)
                     .needsWaitingForSatelliteConnected(eq(datagramType));
             mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
@@ -282,7 +281,7 @@
 
             moveTimeForward(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS);
             processAllMessages();
-            verifyZeroInteractions(mMockSatelliteModemInterface);
+            verifyNoMoreInteractions(mMockSatelliteModemInterface);
             mInOrder.verify(mMockDatagramController)
                     .updateSendStatus(eq(mPhone.getSubId()),
                             eq(datagramType),
@@ -305,7 +304,7 @@
             mDatagramDispatcherUT.onSatelliteModemStateChanged(
                     SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
             processAllMessages();
-            verifyZeroInteractions(mMockSatelliteModemInterface);
+            verifyNoMoreInteractions(mMockSatelliteModemInterface);
             assertEquals(0, mResultListener.size());
 
             clearInvocations(mMockSatelliteModemInterface);
@@ -315,7 +314,7 @@
             mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramType, mDatagram,
                     true, mResultListener::offer);
             processAllMessages();
-            verifyZeroInteractions(mMockSatelliteModemInterface);
+            verifyNoMoreInteractions(mMockSatelliteModemInterface);
             mInOrder.verify(mMockDatagramController)
                     .needsWaitingForSatelliteConnected(eq(datagramType));
             mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
@@ -329,7 +328,7 @@
             mDatagramDispatcherUT.onSatelliteModemStateChanged(
                     SatelliteManager.SATELLITE_MODEM_STATE_OFF);
             processAllMessages();
-            verifyZeroInteractions(mMockSatelliteModemInterface);
+            verifyNoMoreInteractions(mMockSatelliteModemInterface);
             assertEquals(1, mResultListener.size());
             assertThat(mResultListener.peek()).isEqualTo(
                     SatelliteManager.SATELLITE_RESULT_REQUEST_ABORTED);
@@ -805,7 +804,7 @@
                 eq(SATELLITE_RESULT_SUCCESS));
         mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
                 eq(SatelliteServiceUtils.isLastSosMessage(datagramType)));
-        verifyZeroInteractions(mMockSmsDispatchersController);
+        verifyNoMoreInteractions(mMockSmsDispatchersController);
         assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
 
         doReturn(false).when(mMockDatagramController)
@@ -899,7 +898,7 @@
                 eq(SATELLITE_RESULT_SUCCESS));
         mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
                 eq(SatelliteServiceUtils.isLastSosMessage(datagramType)));
-        verifyZeroInteractions(mMockSmsDispatchersController);
+        verifyNoMoreInteractions(mMockSmsDispatchersController);
         assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
 
         moveTimeForward(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS);
@@ -922,7 +921,7 @@
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
         processAllMessages();
-        verifyZeroInteractions(mMockSmsDispatchersController);
+        verifyNoMoreInteractions(mMockSmsDispatchersController);
     }
 
     @Test
@@ -947,7 +946,7 @@
                 eq(SATELLITE_RESULT_SUCCESS));
         mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
                 eq(SatelliteServiceUtils.isLastSosMessage(datagramType)));
-        verifyZeroInteractions(mMockSmsDispatchersController);
+        verifyNoMoreInteractions(mMockSmsDispatchersController);
         assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
 
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
@@ -1008,7 +1007,7 @@
                 eq(SATELLITE_RESULT_SUCCESS));
         mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
                 eq(SatelliteServiceUtils.isLastSosMessage(datagramTypeSms)));
-        verifyZeroInteractions(mMockSmsDispatchersController);
+        verifyNoMoreInteractions(mMockSmsDispatchersController);
         assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
 
         mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramTypeSos, mDatagram,
@@ -1020,7 +1019,7 @@
                 eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT),
                 eq(2),
                 eq(SATELLITE_RESULT_SUCCESS));
-        verifyZeroInteractions(mMockSatelliteModemInterface);
+        verifyNoMoreInteractions(mMockSatelliteModemInterface);
         assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
 
         doReturn(false).when(mMockDatagramController)
@@ -1108,7 +1107,7 @@
         mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramTypeSos, mDatagram,
                 true, mResultListener::offer);
         processAllMessages();
-        verifyZeroInteractions(mMockSatelliteModemInterface);
+        verifyNoMoreInteractions(mMockSatelliteModemInterface);
 
         mDatagramDispatcherUT.onSendSmsDone(mPhone.getSubId(), mPendingSms.uniqueMessageId, true);
         processAllMessages();
@@ -1153,6 +1152,7 @@
         mDatagramDispatcherUT.handleMessage(
                 mDatagramDispatcherUT.obtainMessage(10 /*EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT*/,
                         new AsyncResult(null, null, null)));
+        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
    }
@@ -1171,7 +1171,7 @@
                 mDatagramDispatcherUT.obtainMessage(10 /*EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT*/,
                         new AsyncResult(null, null, null)));
 
-        verifyZeroInteractions(mMockSmsDispatchersController);
+        verifyNoMoreInteractions(mMockSmsDispatchersController);
    }
 
     @Test
@@ -1188,7 +1188,7 @@
                 mDatagramDispatcherUT.obtainMessage(10 /*EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT*/,
                         new AsyncResult(null, null, null)));
 
-        verifyZeroInteractions(mMockSmsDispatchersController);
+        verifyNoMoreInteractions(mMockSmsDispatchersController);
    }
 
 
@@ -1201,6 +1201,7 @@
                 R.bool.config_satellite_allow_check_message_in_not_connected, true);
 
         mDatagramDispatcherUT.setDeviceAlignedWithSatellite(true);
+        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
@@ -1214,7 +1215,7 @@
 
         mDatagramDispatcherUT.setDeviceAlignedWithSatellite(false);
 
-        verifyZeroInteractions(mMockSmsDispatchersController);
+        verifyNoMoreInteractions(mMockSmsDispatchersController);
     }
 
     @Test
@@ -1227,6 +1228,7 @@
 
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
+        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
@@ -1239,6 +1241,7 @@
 
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
+        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
@@ -1251,6 +1254,7 @@
 
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
+        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
@@ -1278,6 +1282,7 @@
 
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
+        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
@@ -1295,6 +1300,7 @@
                 .thenReturn(true);
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
+        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(0)).sendMtSmsPollingMessage();
 
@@ -1303,6 +1309,7 @@
                 .thenReturn(false);
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
+        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java
index 738a44e..b72cff8 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java
@@ -38,7 +38,6 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import android.annotation.NonNull;
@@ -190,7 +189,7 @@
                 eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT), eq(0),
                 eq(SatelliteManager.SATELLITE_RESULT_SUCCESS));
         mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false));
-        verifyZeroInteractions(mMockSatelliteModemInterface);
+        verifyNoMoreInteractions(mMockSatelliteModemInterface);
         assertTrue(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted());
 
         doReturn(false).when(mMockDatagramController)
@@ -220,7 +219,7 @@
         mInOrder.verify(mMockDatagramController)
                 .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN));
         mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false));
-        verifyZeroInteractions(mMockSatelliteModemInterface);
+        verifyNoMoreInteractions(mMockSatelliteModemInterface);
         assertTrue(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted());
 
         moveTimeForward(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS);
@@ -233,7 +232,7 @@
                 eq(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE),
                 eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE), eq(0),
                 eq(SatelliteManager.SATELLITE_RESULT_SUCCESS));
-        verifyZeroInteractions(mMockSatelliteModemInterface);
+        verifyNoMoreInteractions(mMockSatelliteModemInterface);
         assertEquals(1, mResultListener.size());
         assertThat(mResultListener.peek()).isEqualTo(
                 SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE);
@@ -244,7 +243,7 @@
         mDatagramReceiverUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
         processAllMessages();
-        verifyZeroInteractions(mMockSatelliteModemInterface);
+        verifyNoMoreInteractions(mMockSatelliteModemInterface);
         assertEquals(0, mResultListener.size());
     }
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
index ee43d2a..58c74f1 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
@@ -107,7 +107,6 @@
 import static org.mockito.ArgumentMatchers.anyList;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.anyVararg;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.clearInvocations;
@@ -648,7 +647,7 @@
 
         mCarrierConfigBundle = mContextFixture.getCarrierConfigBundle();
         doReturn(mCarrierConfigBundle)
-                .when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyVararg());
+                .when(mCarrierConfigManager).getConfigForSubId(anyInt(), any());
         doAnswer(invocation -> {
             Executor executor = invocation.getArgument(0);
             CarrierConfigManager.CarrierConfigChangeListener listener = invocation.getArgument(1);
@@ -3911,7 +3910,7 @@
                 KEY_EMERGENCY_CALL_TO_SATELLITE_T911_HANDOVER_TIMEOUT_MILLIS_INT,
                 timeoutMillisForCarrier1);
         doReturn(carrierConfigBundle1)
-                .when(mCarrierConfigManager).getConfigForSubId(eq(SUB_ID), anyVararg());
+                .when(mCarrierConfigManager).getConfigForSubId(eq(SUB_ID), any());
 
         int timeoutMillisForCarrier2 = 2000;
         PersistableBundle carrierConfigBundle2 = new PersistableBundle();
@@ -3923,7 +3922,7 @@
                 KEY_EMERGENCY_CALL_TO_SATELLITE_T911_HANDOVER_TIMEOUT_MILLIS_INT,
                 timeoutMillisForCarrier2);
         doReturn(carrierConfigBundle2)
-                .when(mCarrierConfigManager).getConfigForSubId(eq(SUB_ID1), anyVararg());
+                .when(mCarrierConfigManager).getConfigForSubId(eq(SUB_ID1), any());
 
         for (Pair<Executor, CarrierConfigManager.CarrierConfigChangeListener> pair
                 : mCarrierConfigChangedListenerList) {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java
index 0a60b85..2d8fb21 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java
@@ -332,6 +332,43 @@
     }
 
     @Test
+    public void testTimeoutBeforeEmergencyCallEnd_EventDisplayEmergencyMessageNotSent_Test2() {
+        /*
+         * This test is to test the case where the device is provisioned, supports satellite
+         * via OEM, and is connected via carrier within the hysteresis time. However, satellite
+         * is not allowed at current location and emergency messaing via carrier is not supported.
+         * In this case, the EVENT_DISPLAY_EMERGENCY_MESSAGE should not be sent.
+         */
+        mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(true, SUB_ID1);
+        mTestSatelliteController.isSatelliteEmergencyMessagingSupportedViaCarrier = false;
+        mTestSatelliteController.isOemEnabledSatelliteSupported = true;
+        mTestSatelliteController.setDeviceProvisioned(true);
+        mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
+        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
+        processAllMessages();
+        assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
+        assertRegisterForStateChangedEventsTriggered(mPhone, 1, 1);
+        assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 1);
+        assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+
+        // Move Location service to emergency mode
+        mTestSOSMessageRecommender.onEmergencyCallConnectionStateChanged(
+                mTestConnection.getTelecomCallId(), Connection.STATE_DIALING);
+        processAllMessages();
+        assertNotNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+
+        // Wait for the timeout to expires
+        mTestSOSMessageRecommender.isSatelliteAllowedCallback.onResult(false);
+        moveTimeForward(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS);
+        processAllMessages();
+        assertFalse(mTestConnection.isEventSent(TelephonyManager.EVENT_DISPLAY_EMERGENCY_MESSAGE));
+        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
+        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
+        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
+        assertFalse(mTestSOSMessageRecommender.isDialerNotified());
+    }
+
+    @Test
     public void testTimeoutBeforeEmergencyCallEnd_T911_FromNotConnectedToConnected() {
         mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
         mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false, -1);
@@ -684,6 +721,20 @@
         processAllMessages();
         assertEquals(carrierTimeoutMillis, mTestSOSMessageRecommender.getTimeOutMillis());
         verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());
+
+        // OEM supports satellite, device is connected to carrier satellite within hysteresis time,
+        // but emergency messaging via carrier is not supported. Thus, OEM timer will be used.
+        mTestSatelliteController.isSatelliteEmergencyMessagingSupportedViaCarrier = false;
+        mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(true, SUB_ID1);
+        subscriptionInfo = new SubscriptionInfo.Builder()
+                .setId(SUB_ID1).setOnlyNonTerrestrialNetwork(true).build();
+        when(mMockSubscriptionManagerService.getSubscriptionInfo(eq(SUB_ID1)))
+            .thenReturn(subscriptionInfo);
+        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
+        processAllMessages();
+        assertEquals(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS,
+                mTestSOSMessageRecommender.getTimeOutMillis());
+        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());
     }
 
     @Test
@@ -717,6 +768,22 @@
     }
 
     @Test
+    public void testGetEmergencyCallToSatelliteHandoverType_OnlySatelliteViaOemAvailable() {
+        mSetFlagsRule.enableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN);
+
+        mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(true, SUB_ID1);
+        mTestSatelliteController.isSatelliteEmergencyMessagingSupportedViaCarrier = false;
+        mTestSatelliteController.isOemEnabledSatelliteSupported = true;
+        mTestSatelliteController.setDeviceProvisioned(true);
+        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
+        assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS,
+                mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
+        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());
+
+        mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN);
+    }
+
+    @Test
     public void testGetEmergencyCallToSatelliteHandoverType_OemAndCarrierNotAvailable() {
         mSetFlagsRule.enableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN);
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/IccPhoneBookInterfaceManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/IccPhoneBookInterfaceManagerTest.java
index 53627ca..8cf8c6e 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/IccPhoneBookInterfaceManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/IccPhoneBookInterfaceManagerTest.java
@@ -18,8 +18,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyObject;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
@@ -87,7 +86,7 @@
                 response.sendToTarget();
                 return null;
             }
-        }).when(mAdnRecordCache).requestLoadAllAdnLike(anyInt(), anyInt(), (Message) anyObject());
+        }).when(mAdnRecordCache).requestLoadAllAdnLike(anyInt(), anyInt(), (Message) any());
 
         doAnswer(invocation -> {
             Message response = (Message) invocation.getArguments()[0];
@@ -95,7 +94,7 @@
             AsyncResult.forMessage(response).result = mAdnList;
             response.sendToTarget();
             return null;
-        }).when(mSimPhonebookRecordCache).requestLoadAllPbRecords((Message)anyObject());
+        }).when(mSimPhonebookRecordCache).requestLoadAllPbRecords((Message)any());
         mIccPhoneBookInterfaceManagerHandler = new IccPhoneBookInterfaceManagerHandler(TAG);
         mIccPhoneBookInterfaceManagerHandler.start();
 
@@ -131,7 +130,7 @@
                 response.sendToTarget();
                 return null;
             }
-        }).when(mAdnRecordCache).requestLoadAllAdnLike(anyInt(), anyInt(), (Message) anyObject());
+        }).when(mAdnRecordCache).requestLoadAllAdnLike(anyInt(), anyInt(), (Message) any());
         List<AdnRecord> adnListResultNew = mIccPhoneBookInterfaceMgr.getAdnRecordsInEf(
                 IccConstants.EF_ADN);
         //the later read return null due to exception
@@ -153,7 +152,7 @@
             AsyncResult.forMessage(response).exception = new RuntimeException();
             response.sendToTarget();
             return null;
-        }).when(mSimPhonebookRecordCache).requestLoadAllPbRecords((Message) anyObject());
+        }).when(mSimPhonebookRecordCache).requestLoadAllPbRecords((Message) any());
         List<AdnRecord> adnListResultNew = mIccPhoneBookInterfaceMgr.getAdnRecordsInEf(
                 IccConstants.EF_ADN);
         //the later read return null due to exception
@@ -177,7 +176,7 @@
             }
         }).when(mAdnRecordCache).updateAdnBySearch(
             anyInt(), any(), any(),
-            any(), (Message) anyObject());
+            any(), (Message) any());
 
         ContentValues values = new ContentValues();
         values.put(IccProvider.STR_TAG, "");
@@ -206,7 +205,7 @@
             response.sendToTarget();
             return null;
         }).when(mSimPhonebookRecordCache).updateSimPbAdnBySearch(any(),
-            any(), (Message) anyObject());
+            any(), (Message) any());
 
         ContentValues values = new ContentValues();
         values.put(IccProvider.STR_TAG, "");
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/RuimRecordsTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/RuimRecordsTest.java
deleted file mode 100644
index a9b433f..0000000
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/RuimRecordsTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.telephony.uicc;
-
-import static org.junit.Assert.*;
-
-import android.os.AsyncResult;
-import android.os.HandlerThread;
-
-import com.android.internal.telephony.TelephonyTest;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class RuimRecordsTest extends TelephonyTest {
-
-    private RuimRecords mRuimRecords;
-
-    private class RuimRecordsTestHandler extends HandlerThread {
-        private RuimRecordsTestHandler(String name) {
-            super(name);
-        }
-
-        @Override
-        public void onLooperPrepared() {
-            mRuimRecords = new RuimRecords(mUiccCardApplication3gpp2, mContext, mSimulatedCommands);
-            setReady(true);
-        }
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        super.setUp(getClass().getSimpleName());
-        new RuimRecordsTestHandler(TAG).start();
-        waitUntilReady();
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        mRuimRecords = null;
-        super.tearDown();
-    }
-
-    @Test
-    public void testCsimImsiLoaded() {
-        RuimRecords.EfCsimImsimLoaded mImsiLoaded = mRuimRecords.new EfCsimImsimLoaded();
-        AsyncResult ar = new AsyncResult(null, null, null);
-        mImsiLoaded.onRecordLoaded(ar);
-        String mccmnc = mRuimRecords.getRUIMOperatorNumeric();
-        assertNull(mccmnc);
-
-        byte[] byteArray = new byte[]{0, 19, 3, 75, 68, 88, 99, (byte)128, (byte)209, 0};
-        AsyncResult ar2 = new AsyncResult(null, byteArray, null);
-        mImsiLoaded.onRecordLoaded(ar2);
-        mccmnc = mRuimRecords.getRUIMOperatorNumeric();
-        assertNotNull(mccmnc);
-        assertEquals("310008", mccmnc);
-    }
-
-    @Test
-    public void testCsimImsiDecode() {
-        RuimRecords.EfCsimImsimLoaded efCsimImsimLoaded = mRuimRecords.new EfCsimImsimLoaded();
-
-        // mcc + mnc + min
-        byte[] byteArray = new byte[]{0, 19, 3, 75, 68, 88, 99, (byte)128, (byte)209, 0};
-        String imsi = efCsimImsimLoaded.decodeImsi(byteArray);
-
-        assertEquals("310008984641186", imsi);
-    }
-}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/SIMRecordsTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/SIMRecordsTest.java
index e109ebb..7dc13a0 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/SIMRecordsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/SIMRecordsTest.java
@@ -23,7 +23,7 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.isNull;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRulesTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRulesTest.java
index 9a444d7..7e95107 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRulesTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRulesTest.java
@@ -17,8 +17,8 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.anyString;
 import static org.mockito.Mockito.doAnswer;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccPortTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccPortTest.java
index 47b7c53..ac11c92 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccPortTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccPortTest.java
@@ -23,7 +23,7 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccSlotTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccSlotTest.java
index 8449ecc..1de15fe 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccSlotTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccSlotTest.java
@@ -21,7 +21,7 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyObject;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -428,8 +428,8 @@
         mIccCardStatus.mSlotPortMapping.mPortIndex = 0;
         mUiccSlot.update(mSimulatedCommands, mIccCardStatus, phoneId, slotIndex);
         verify(mTelephonyComponentFactory).makeUiccProfile(
-                anyObject(), eq(mSimulatedCommands), eq(mIccCardStatus), anyInt(), anyObject(),
-                anyObject(), anyObject());
+                any(), eq(mSimulatedCommands), eq(mIccCardStatus), anyInt(), any(),
+                any(), any());
         assertEquals(IccCardStatus.CardState.CARDSTATE_PRESENT, mUiccSlot.getCardState());
         assertNotNull(mUiccSlot.getUiccCard());
 
@@ -451,8 +451,8 @@
         mIccCardStatus.mCardState = IccCardStatus.CardState.CARDSTATE_PRESENT;
         mUiccSlot.update(mSimulatedCommands, mIccCardStatus, phoneId, slotIndex);
         verify(mTelephonyComponentFactory).makeUiccProfile(
-                anyObject(), eq(mSimulatedCommands), eq(mIccCardStatus), anyInt(), anyObject(),
-                anyObject(), anyObject());
+                any(), eq(mSimulatedCommands), eq(mIccCardStatus), anyInt(), any(),
+                any(), any());
         assertEquals(IccCardStatus.CardState.CARDSTATE_PRESENT, mUiccSlot.getCardState());
         assertNotNull(mUiccSlot.getUiccCard());
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccStateChangedLauncherTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccStateChangedLauncherTest.java
index c9b159c..5eeb949 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccStateChangedLauncherTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccStateChangedLauncherTest.java
@@ -19,7 +19,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.anyObject;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -99,7 +98,7 @@
         ArgumentCaptor<Integer> integerArgumentCaptor = ArgumentCaptor.forClass(Integer.class);
         verify(UiccController.getInstance(), times(1)).registerForIccChanged(eq(uiccLauncher),
                 integerArgumentCaptor.capture(),
-                anyObject());
+                any());
         Message msg = Message.obtain();
         msg.what = integerArgumentCaptor.getValue();
 
@@ -163,6 +162,6 @@
         UiccStateChangedLauncher uiccLauncher =
                 new UiccStateChangedLauncher(mContext, UiccController.getInstance(), mFeatureFlags);
         verify(UiccController.getInstance(), never()).registerForIccChanged(eq(uiccLauncher),
-                anyInt(), anyObject());
+                anyInt(), any());
     }
 }