diff --git a/acts_tests/acts_contrib/test_utils/tel/GFTInOutBaseTest.py b/acts_tests/acts_contrib/test_utils/tel/GFTInOutBaseTest.py
index c7f988a..a55959a 100644
--- a/acts_tests/acts_contrib/test_utils/tel/GFTInOutBaseTest.py
+++ b/acts_tests/acts_contrib/test_utils/tel/GFTInOutBaseTest.py
@@ -27,12 +27,29 @@
 import math
 import re
 
-from acts.base_test import BaseTestClass
-from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
+from acts import asserts
+from acts.test_decorators import test_info
 from acts.test_decorators import test_tracker_info
 from acts.logger import epoch_to_log_line_timestamp
 from acts.utils import get_current_epoch_time
 
+from acts.base_test import BaseTestClass
+from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
+
+from acts_contrib.test_utils.tel.tel_test_utils import multithread_func
+from acts_contrib.test_utils.tel.tel_test_utils import run_multithread_func
+from acts_contrib.test_utils.tel.tel_test_utils import get_service_state_by_adb
+from acts_contrib.test_utils.tel.tel_test_utils import get_screen_shot_log
+from acts_contrib.test_utils.tel.tel_test_utils import get_screen_shot_logs
+from acts_contrib.test_utils.tel.tel_test_utils import log_screen_shot
+from acts_contrib.test_utils.tel.tel_test_utils import hangup_call
+from acts_contrib.test_utils.tel.tel_test_utils import is_phone_in_call
+
+from acts_contrib.test_utils.tel.gft_inout_utils import mo_voice_call
+from acts_contrib.test_utils.tel.gft_inout_utils import get_voice_call_type
+from acts_contrib.test_utils.tel.gft_inout_utils import verify_data_connection
+from acts_contrib.test_utils.tel.gft_inout_utils import check_network_service
+
 from acts_contrib.test_utils.tel.gft_inout_defines import NO_SERVICE_POWER_LEVEL
 from acts_contrib.test_utils.tel.gft_inout_defines import IN_SERVICE_POWER_LEVEL
 from acts_contrib.test_utils.tel.gft_inout_defines import NO_SERVICE_AREA
@@ -49,15 +66,20 @@
 class GFTInOutBaseTest(TelephonyBaseTest):
     def __init__(self, controllers):
         TelephonyBaseTest.__init__(self, controllers)
+        self.my_error_msg = ""
 
     def setup_test(self):
         TelephonyBaseTest.setup_test(self)
+        self.my_error_msg = ""
 
     def teardown_test(self):
         TelephonyBaseTest.teardown_test(self)
         begin_time = get_current_epoch_time()
         self._take_bug_report(self.test_name, begin_time)
-       for ad in self.android_devices:
+        for ad in self.android_devices:
+            hangup_call(self.log, ad)
+        get_screen_shot_logs(self.android_devices)
+        for ad in self.android_devices:
             ad.adb.shell("rm -rf /sdcard/Pictures/screenvideo_*", ignore_status=True)
 
     def check_network(self):
@@ -69,6 +91,7 @@
         for ad in self.android_devices:
             network_type_voice = ad.droid.telephonyGetCurrentVoiceNetworkType()
             network_type_data = ad.droid.telephonyGetCurrentDataNetworkType()
+            service_state = get_service_state_by_adb(ad.log,ad)
             sim_state = ad.droid.telephonyGetSimState()
             wifi_info = ad.droid.wifiGetConnectionInfo()
             if wifi_info["supplicant_state"] == "completed":
@@ -78,11 +101,12 @@
             ad.log.info("sim_state=%s" %(sim_state))
             ad.log.info("networkType_voice=%s" %(network_type_voice))
             ad.log.info("network_type_data=%s" %(network_type_data))
-
+            ad.log.info("service_state=%s" %(service_state))
             if network_type_voice == UNKNOWN:
                 return False
         return True
 
+
     def adjust_cellular_signal(self, power):
         """Sets the attenuation value of cellular port
 
@@ -97,6 +121,7 @@
             self.attenuators[CELLULAR_PORT].set_atten(power)
             return True
         else:
+            self.log.info("Attenuator is set to False in config file")
             return False
 
     def adjust_wifi_signal(self, power):
@@ -113,6 +138,9 @@
             self.attenuators[WIFI_PORT].set_atten(power)
             self.attenuators[2].set_atten(power)
             self.attenuators[3].set_atten(power)
+        else:
+            self.log.info("Attenuator is set to False in config file")
+            return False
         return True
 
     def adjust_attens(self, power):
@@ -206,3 +234,28 @@
                 self.check_network()
         return True
 
+    def verify_device_status(self, ad, call_type=None, end_call=True, talk_time=30):
+        """verfiy device status includes network service, data connection and voice call
+
+        Args:
+            ad: android device
+            call_type: WFC call, VOLTE call. CSFB call, voice call
+            end_call: hangup call after voice call flag
+            talk_time: in call duration in sec
+
+        Returns:
+            return True if given port is set
+        """
+        test_result = True
+        tasks = [(check_network_service, (ad, )) for ad in self.android_devices]
+        if not multithread_func(self.log, tasks):
+            test_result = False
+        tasks = [(verify_data_connection, (ad, )) for ad in self.android_devices]
+        if not multithread_func(self.log, tasks):
+            test_result = False
+        if call_type != None:
+            tasks = [(mo_voice_call, (self.log, ad, call_type, end_call, talk_time))
+                for ad in self.android_devices]
+        if not multithread_func(self.log, tasks):
+            test_result = False
+        return test_result
diff --git a/acts_tests/tests/google/tel/lab/TelLabGFTInOutServiceTest.py b/acts_tests/tests/google/tel/lab/TelLabGFTInOutServiceTest.py
index 7924a77..5f04fff 100644
--- a/acts_tests/tests/google/tel/lab/TelLabGFTInOutServiceTest.py
+++ b/acts_tests/tests/google/tel/lab/TelLabGFTInOutServiceTest.py
@@ -20,6 +20,7 @@
 import logging
 
 from acts import asserts
+from acts.test_decorators import test_info
 from acts.test_decorators import test_tracker_info
 
 from acts.base_test import BaseTestClass
@@ -34,6 +35,13 @@
 from acts_contrib.test_utils.tel.tel_test_utils import get_screen_shot_logs
 from acts_contrib.test_utils.tel.tel_test_utils import log_screen_shot
 from acts_contrib.test_utils.tel.tel_test_utils import hangup_call
+from acts_contrib.test_utils.tel.tel_test_utils import active_file_download_test
+
+from acts_contrib.test_utils.tel.tel_data_utils import wait_for_cell_data_connection
+from acts_contrib.test_utils.tel.gft_inout_utils import check_no_service_time
+from acts_contrib.test_utils.tel.gft_inout_utils import check_back_to_service_time
+from acts_contrib.test_utils.tel.gft_inout_utils import mo_voice_call
+from acts_contrib.test_utils.tel.gft_inout_utils import get_voice_call_type
 
 from acts_contrib.test_utils.tel.tel_defines import DATA_STATE_CONNECTED
 from acts_contrib.test_utils.tel.tel_defines import DATA_STATE_DISCONNECTED
@@ -43,11 +51,6 @@
 from acts_contrib.test_utils.tel.tel_defines import SERVICE_STATE_OUT_OF_SERVICE
 from acts_contrib.test_utils.tel.tel_defines import SERVICE_STATE_POWER_OFF
 
-from acts_contrib.test_utils.tel.gft_inout_utils import check_no_service_time
-from acts_contrib.test_utils.tel.gft_inout_utils import check_back_to_service_time
-from acts_contrib.test_utils.tel.gft_inout_utils import mo_voice_call
-from acts_contrib.test_utils.tel.gft_inout_utils import get_voice_call_type
-
 from acts_contrib.test_utils.tel.gft_inout_defines import VOICE_CALL
 from acts_contrib.test_utils.tel.gft_inout_defines import VOLTE_CALL
 from acts_contrib.test_utils.tel.gft_inout_defines import CSFB_CALL
@@ -62,15 +65,24 @@
 from acts_contrib.test_utils.tel.gft_inout_defines import WAIT_FOR_SERVICE_TIME
 
 
+IDLE_CASE = 1
+DATA_TRANSFER_CASE = 2
+PDP_OFF_CASE = 3
+IN_CALL_CASE = 4
+CALL_DATA_CASE = 5
+
 class TelLabGFTInOutServiceTest(GFTInOutBaseTest):
     def __init__(self, controllers):
         GFTInOutBaseTest.__init__(self, controllers)
+        self.my_error_msg = ""
 
     def setup_test(self):
         self.adjust_cellular_signal(IN_SERVICE_POWER_LEVEL)
         self.adjust_wifi_signal(IN_SERVICE_POWER_LEVEL)
         GFTInOutBaseTest.setup_test(self)
         self.check_network()
+        self.my_error_msg = ""
+
 
     @test_tracker_info(uuid="c602e556-8273-4c75-b8fa-4d51ba514654")
     @TelephonyBaseTest.tel_test_wrap
@@ -135,13 +147,247 @@
         """
         return self._test_in_out_service_idle(idle_time)
 
-    def _test_in_out_service_idle(self, idle_time, loop=1):
+
+    @test_tracker_info(uuid="65ebac02-8d5a-48c2-bd26-6d931d6048f1")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_no_service_data_transfer_1min(self, idle_time=60):
+        """ In/Out service - Stationary data transfer - 1 min
+            UE is performing data transfer (E.g. Use FTP or browse tools)
+            move UE from coverage area to no service area and UE shows no service
+            Wait for 1 min, then re-enter coverage area
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, DATA_TRANSFER_CASE)
+
+
+    @test_tracker_info(uuid="ec3e7de4-bcf6-4a8a-ae04-868bd7925191")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_no_service_data_transfer_2min(self, idle_time=120):
+        """ In/Out service - Stationary data transfer - 2 min
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, DATA_TRANSFER_CASE)
+
+
+    @test_tracker_info(uuid="8bd7017d-0a88-4423-a94b-1e37060bba1d")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_no_service_data_transfer_5min(self, idle_time=300):
+        """ In/Out service - Stationary data transfer - 5 min
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, DATA_TRANSFER_CASE)
+
+
+    @test_tracker_info(uuid="c3b9c52d-41d3-449c-99ff-4bb830ca0219")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_no_service_data_transfer_10min(self, idle_time=600):
+        """ In/Out service - Stationary data transfer - 10 min
+
+            Args:
+                idle_time: idle time in service area
+                file_name: download filename
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, DATA_TRANSFER_CASE)
+
+
+    @test_tracker_info(uuid="86a6b3b3-e754-4bde-b418-d4273b1ad907")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_incall_1min(self, idle_time=60):
+        """ In/Out service - Stationary incall - 1 min
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, IN_CALL_CASE)
+
+
+    @test_tracker_info(uuid="0f8772cd-6f86-48eb-b583-4cbaf80a21a9")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_incall_2min(self, idle_time=120):
+        """ In/Out service - Stationary incall - 2 min
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, IN_CALL_CASE)
+
+
+    @test_tracker_info(uuid="11f24c0f-db33-4eb3-b847-9aed447eb820")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_incall_5min(self, idle_time=300):
+        """ In/Out service - Stationary incall - 5 min
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, IN_CALL_CASE)
+
+
+    @test_tracker_info(uuid="e318921b-de6b-428b-b2c4-3db7786d7558")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_incall_10min(self, idle_time=600):
+        """ In/Out service - Stationary incall - 10 min
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, IN_CALL_CASE)
+
+
+    @test_tracker_info(uuid="f6cf0019-e123-4ebd-990b-0fa5b236840c")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_call_date_1min(self, idle_time=60):
+        """ In/Out service - Stationary incall + data transfer - 1 mins
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, CALL_DATA_CASE)
+
+
+    @test_tracker_info(uuid="2f49a9de-0383-4ec6-a8ee-c62f52ea0cf2")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_call_date_2min(self, idle_time=120):
+        """ In/Out service - Stationary incall + data transfer - 2 mins
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, CALL_DATA_CASE)
+
+
+    @test_tracker_info(uuid="73a6eedb-791f-4486-b815-8067a95efd5c")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_call_date_5min(self, idle_time=300):
+        """ In/Out service - Stationary incall + data transfer - 5 mins
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, CALL_DATA_CASE)
+
+    @test_tracker_info(uuid="5cfbc90a-97e1-43e9-a69e-4ce2815c544d")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_call_date_10min(self, idle_time=600):
+        """ In/Out service - Stationary incall + data transfer - 10 mins
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, CALL_DATA_CASE)
+
+
+
+    @test_tracker_info(uuid="c70180c9-5a36-4dc5-9ccc-3e6c0b5e6d37")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_pdp_off_1min(self, idle_time=60):
+        """ In/Out service - Stationary data off - 1 min
+            Disable UE mobile data
+            Move UE from coverage area to no service area and UE shows no service
+            Wait for 1 min, then re-enter coverage area
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, PDP_OFF_CASE)
+
+
+    @test_tracker_info(uuid="50cc8e73-d96f-45a6-91cd-bf51de5241d2")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_pdp_off_2min(self, idle_time=120):
+        """ In/Out service - Stationary data off - 2 min
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, PDP_OFF_CASE)
+
+
+    @test_tracker_info(uuid="1f25d40c-1bfe-4d18-b57c-d7be69664f0d")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_pdp_off_5min(self, idle_time=300):
+        """ In/Out service - Stationary data off - 5 min
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, PDP_OFF_CASE)
+
+
+    @test_tracker_info(uuid="b076b0d0-a105-4be9-aa0b-db0d782f70f2")
+    @TelephonyBaseTest.tel_test_wrap
+    def test_in_out_service_pdp_off_10min(self, idle_time=600):
+        """ In/Out service - Stationary data off - 10 min
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        return self._test_in_out_service_idle(idle_time, PDP_OFF_CASE)
+
+
+
+    def _test_in_out_service_idle(self, idle_time, case= IDLE_CASE, loop=1):
         """ UE is in idle
             Move UE from coverage area to no service area and UE shows no service
             Args:
-                loop: cycle
                 idle_time: idle time in service area
-
+                case: include IDLE_CAS, DATA_TRANSFER_CASE, PDP_OFF_CASE,
+                    IN_CALL_CASE, CALL_DATA_CASE
+                loop: cycle
             Returns:
                 True if pass; False if fail.
         """
@@ -151,13 +397,28 @@
 
         for x in range (loop):
             self.log.info("%s loop: %s/%s" %(self.current_test_name,x+1, loop))
-            if not self._in_out_service_idle(idle_time):
-                test_result = False
+            if case == IDLE_CASE:
+                if not self._in_out_service_idle_only(idle_time):
+                    test_result = False
+            elif case == DATA_TRANSFER_CASE:
+                if not self._data_transfer_mode(idle_time):
+                    test_result = False
+            elif case == PDP_OFF_CASE:
+                if not self._in_out_service_pdp_off(idle_time):
+                    test_result = False
+            elif case == IN_CALL_CASE:
+                if not self._in_call_in_out_service(idle_time):
+                    test_result = False
+            elif case == CALL_DATA_CASE:
+                if not self._call_data_in_out_service(idle_time):
+                    test_result = False
+            asserts.assert_true(test_result, "Fail: %s." %(self.my_error_msg),
+                extras={"failure_cause": self.my_error_msg})
         return test_result
 
 
-    def _in_out_service_idle(self, no_service_time=60, check_back_to_service=True,
-                             check_no_service=True):
+    def _in_out_service_idle_only(self, no_service_time=60, check_back_to_service=True,
+        check_no_service=True):
         """ Move UE from coverage area to no service area and UE shows no service
             Wait for no_service_time sec , then re-enter coverage area
 
@@ -170,14 +431,16 @@
                 True if pass; False if fail.
         """
         test_result = True
+        error_msg = ""
         for ad in self.android_devices:
             network_type = ad.droid.telephonyGetNetworkType()
             service_state = get_service_state_by_adb(self.log,ad)
             ad.log.info("service_state=%s. network_type=%s"
                 %(service_state ,network_type))
             if service_state != SERVICE_STATE_IN_SERVICE:
-                ad.log.info("Device is not ready for AutoIO test. service_state=%s."
-                            %(service_state))
+                error_msg = "Device is not ready for test. Service_state=%s." %(service_state)
+                ad.log.info("Device is not ready for test. Service_state=%s." %(service_state))
+                self.my_error_msg += error_msg
                 return False
 
         self.log.info("Move UE from coverage area to no service area")
@@ -186,17 +449,132 @@
         if check_no_service:
             tasks = [(check_no_service_time, (ad, )) for ad in self.android_devices]
             if not multithread_func(self.log, tasks):
-                self.log.info("Device does not become no service")
+                self.check_network()
+                error_msg = "Device does not become no service"
+                self.my_error_msg += error_msg
+                self.log.info(error_msg)
                 return False
             else:
                 self.log.info("wait for %s sec in no/limited service area" %(no_service_time))
                 time.sleep(no_service_time)
         self.log.info("Move UE back to service area")
         self.adjust_cellular_signal(IN_SERVICE_POWER_LEVEL)
+        if check_back_to_service:
+            test_result = self._check_after_no_service()
+        return test_result
 
-        if test_result:
-            if check_back_to_service:
-                tasks = [(check_back_to_service_time, (ad,)) for ad in self.android_devices]
-                test_result = multithread_func(self.log, tasks)
-                self.log.info("Device is not back to the service")
-        return test_result
\ No newline at end of file
+    def _data_transfer_mode(self, idle_time, file_name="10MB"):
+        """ Download file and in/out service
+
+            Args:
+                idle_time: stay at no service area time in sec
+                file_name: file to be download
+
+            Returns:
+                True if pass; False if fail.
+        """
+        error_msg =""
+        tasks_a = [(self._in_out_service_idle_only, (idle_time, False,))]
+        tasks_b = [(active_file_download_test, (self.log, ad, file_name))
+            for ad in self.android_devices]
+        tasks_b.extend(tasks_a)
+        if not multithread_func(self.log, tasks_b):
+            error_msg = " data transfer fail. "
+            self.my_error_msg +=  error_msg
+            self.log.info(error_msg)
+            return False
+        return self._check_after_no_service()
+
+    def _in_out_service_pdp_off(self, idle_time):
+        """ UE is in idle
+            Disable UE mobile data
+            Move UE from coverage area to no/limited service area
+            enable UE mobile data
+            After UE show no service, re-enter coverage area
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        error_msg =""
+        for ad in self.android_devices:
+            ad.log.info("Turn off mobile data")
+            ad.droid.telephonyToggleDataConnection(False)
+            if not wait_for_cell_data_connection(self.log, ad, False):
+                self.my_error_msg += "fail to turn off mobile data"
+                return False
+
+        if not self._in_out_service_idle_only(idle_time, False):
+            return False
+
+        for ad in self.android_devices:
+            ad.log.info("Turn on mobile data")
+            ad.droid.telephonyToggleDataConnection(True)
+            #If True, it will wait for status to be DATA_STATE_CONNECTED
+            if not wait_for_cell_data_connection(self.log, ad, True):
+                self.my_error_msg += "fail to turn on mobile data"
+                return False
+        return self._check_after_no_service()
+
+    def _in_call_in_out_service(self, idle_time):
+        """ UE is in call
+            Move UE from coverage area to no/limited service area
+            After UE show no service, re-enter coverage area
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        error_msg = ""
+        tasks = [(mo_voice_call, (self.log, ad, VOICE_CALL, False)) for ad in self.android_devices]
+        if not multithread_func(self.log, tasks):
+            error_msg = "MO voice call fail"
+            self.my_error_msg += error_msg
+            self.log.info(error_msg)
+            return False
+
+        if not self._in_out_service_idle_only(idle_time, False):
+            return False
+        return self._check_after_no_service()
+
+    def _call_data_in_out_service(self, idle_time):
+        """ UE is performing data transfer (E.g. Use FTP or browse tools)
+            UE makes a MO call
+            Move UE from coverage area to no/limited service area
+            After UE show no service, re-enter coverage area
+
+            Args:
+                idle_time: idle time in service area
+
+            Returns:
+                True if pass; False if fail.
+        """
+        tasks_a = [(active_file_download_test, (self.log, ad, )) for ad in self.android_devices]
+        tasks_b= [(mo_voice_call, (self.log, ad, VOICE_CALL, False)) for ad in self.android_devices]
+        tasks_b.extend(tasks_a)
+        if not multithread_func(self.log, tasks_b):
+            error_msg = "fail to perfrom data transfer/voice call"
+            self.my_error_msg += error_msg
+            return False
+
+        if not self._in_out_service_idle_only(idle_time, False):
+            return False
+        return self._check_after_no_service()
+
+    def _check_after_no_service(self):
+        """ check device is back to service or not
+
+            Returns:
+                True if pass; False if fail.
+        """
+        tasks = [(check_back_to_service_time, (ad,)) for ad in self.android_devices]
+        if not multithread_func(self.log, tasks):
+            error_msg = "Device is not back to the service"
+            self.my_error_msg += error_msg
+            self.log.info(error_msg)
+            return False
+        return True
