Unload snippet after actions have been done

PiperOrigin-RevId: 594135259
diff --git a/ui_automator/ui_automator.py b/ui_automator/ui_automator.py
index f351812..a9fab62 100644
--- a/ui_automator/ui_automator.py
+++ b/ui_automator/ui_automator.py
@@ -139,14 +139,15 @@
     try:
       self.load_device()
       self.load_snippet()
+      return func(self, *args, **kwargs)
     except (
         errors.AdbError,
         errors.AndroidDeviceNotReadyError,
         errors.NoAndroidDeviceError,
     ) as e:
       raise errors.AndroidDeviceNotReadyError(f'{func.__name__} failed.') from e
-
-    return func(self, *args, **kwargs)
+    finally:
+      self.unload_snippet()
 
   return wrapped_func
 
@@ -235,6 +236,13 @@
       # has been loaded.
       self._logger.debug(str(e))
 
+  def unload_snippet(self) -> None:
+    """Unloads loaded mobly snippet on connected android device."""
+    if not self._connected_device:
+      return
+
+    self._connected_device.unload_snippet(_MOBLY_SNIPPET_APK_NAME)
+
   @get_android_device_ready
   def commission_device(
       self,
diff --git a/ui_automator/ui_automator_test.py b/ui_automator/ui_automator_test.py
index 7e5cdef..c03b179 100644
--- a/ui_automator/ui_automator_test.py
+++ b/ui_automator/ui_automator_test.py
@@ -350,6 +350,22 @@
           _FAKE_MATTER_DEVICE_NAME, _FAKE_PAIRING_CODE, _FAKE_GHA_ROOM
       )
 
+  @mock.patch.object(ui_automator.UIAutomator, 'unload_snippet', autospec=True)
+  @mock.patch.object(android_device, 'get_all_instances', autospec=True)
+  def test_get_android_device_ready_calls_unload_snippet_on_finish(
+      self, mock_get_all_instances, mock_unload_snippet
+  ):
+    mock_get_all_instances.return_value = [self.mock_android_device]
+
+    @ui_automator.get_android_device_ready
+    def decorated_function(self):
+      del self
+      pass
+
+    decorated_function(self.ui_automator)
+
+    mock_unload_snippet.assert_called_once()
+
   @mock.patch.object(android_device, 'get_all_instances', autospec=True)
   def test_commission_device_calls_a_method_in_snippet_with_desired_args(
       self, mock_get_all_instances