Add 2 sms/mms mo mt in csfb call test cases on 5G NSA

Test mo/mt sms in csfb call on 5G NSA and mo/mt mms in csfb call and wifi connection on 5G NSA.
Move common code to tel_mms_utils and tel_sms_utils.

Test: yes, Chunghwa Telecom
Bug: 184537858
Change-Id: I9fcf863b6ebcb17b28c4b9123d85b16f90a25c2e
diff --git a/acts_tests/tests/google/nr/nsa5g/Nsa5gMmsTest.py b/acts_tests/tests/google/nr/nsa5g/Nsa5gMmsTest.py
index 44988cc..2d812e3 100755
--- a/acts_tests/tests/google/nr/nsa5g/Nsa5gMmsTest.py
+++ b/acts_tests/tests/google/nr/nsa5g/Nsa5gMmsTest.py
@@ -22,11 +22,13 @@
 from acts.test_decorators import test_tracker_info
 from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
 from acts_contrib.test_utils.tel.tel_defines import WAIT_TIME_ANDROID_STATE_SETTLING
+from acts_contrib.test_utils.tel.tel_defines import SMS_OVER_WIFI_PROVIDERS
 from acts_contrib.test_utils.tel.tel_test_utils import call_setup_teardown
 from acts_contrib.test_utils.tel.tel_test_utils import ensure_phones_idle
 from acts_contrib.test_utils.tel.tel_test_utils import ensure_wifi_connected
 from acts_contrib.test_utils.tel.tel_voice_utils import is_phone_in_call_iwlan
 from acts_contrib.test_utils.tel.tel_voice_utils import is_phone_in_call_volte
+from acts_contrib.test_utils.tel.tel_voice_utils import is_phone_in_call_csfb
 from acts_contrib.test_utils.tel.tel_5g_utils import connect_both_devices_to_wifi
 from acts_contrib.test_utils.tel.tel_5g_utils import disable_apm_mode_both_devices
 from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_5g
@@ -34,9 +36,11 @@
 from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_wfc_cell_pref
 from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_wfc_wifi_pref
 from acts_contrib.test_utils.tel.tel_5g_utils import verify_5g_attach_for_both_devices
+from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_csfb
 from acts_contrib.test_utils.tel.tel_mms_utils import _mms_test_mo
 from acts_contrib.test_utils.tel.tel_mms_utils import _mms_test_mt
 from acts_contrib.test_utils.tel.tel_mms_utils import _long_mms_test_mo
+from acts_contrib.test_utils.tel.tel_mms_utils import test_mms_mo_in_call
 
 class Nsa5gMmsTest(TelephonyBaseTest):
     def setup_class(self):
@@ -44,6 +48,19 @@
         self.number_of_devices = 2
         self.message_lengths = (50, 160, 180)
 
+        is_roaming = False
+        for ad in self.android_devices:
+            ad.sms_over_wifi = False
+            # verizon supports sms over wifi. will add more carriers later
+            for sub in ad.telephony["subscription"].values():
+                if sub["operator"] in SMS_OVER_WIFI_PROVIDERS:
+                    ad.sms_over_wifi = True
+            if getattr(ad, 'roaming', False):
+                is_roaming = True
+        if is_roaming:
+            # roaming device does not allow message of length 180
+            self.message_lengths = (50, 160)
+
     def setup_test(self):
         TelephonyBaseTest.setup_test(self)
 
@@ -401,4 +418,43 @@
 
         return _mms_test_mt(self.log, ads)
 
+
+    @TelephonyBaseTest.tel_test_wrap
+    def test_5g_nsa_mms_mo_mt_in_call_csfb_wifi(self):
+        """ Test MO/MT MMS during a MO csfb call and devices connect to Wifi.
+
+        Disable APM on both devices
+        Set up PhoneA/PhoneB are in CSFB mode.
+        Provision PhoneA/B in 5g NSA.
+        Make sure PhoneA/B is able to make/receive call.
+        Connect PhoneA/B to Wifi.
+        Call from PhoneA to PhoneB, accept on PhoneB, send MMS on PhoneA,
+         receive MMS on B.
+
+        Returns:
+            True if pass; False if fail.
+        """
+        ads = self.android_devices
+
+        if not disable_apm_mode_both_devices(self.log, ads):
+            return False
+
+        if not provision_both_devices_for_csfb(self.log, ads):
+            return False
+        time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING)
+
+        if not provision_both_devices_for_5g(self.log, ads):
+            return False
+
+        if not connect_both_devices_to_wifi(self.log,
+                                            ads,
+                                            self.wifi_network_ssid,
+                                            self.wifi_network_pass):
+            return False
+        if not test_mms_mo_in_call(self.log,
+                                   ads,
+                                   wifi=True,
+                                   caller_func=is_phone_in_call_csfb):
+            return False
+
     """ Tests End """