Update apk

PiperOrigin-RevId: 802485775
diff --git a/ui_automator/android/app/new_snippet.apk b/ui_automator/android/app/new_snippet.apk
new file mode 100755
index 0000000..cf27667
--- /dev/null
+++ b/ui_automator/android/app/new_snippet.apk
Binary files differ
diff --git a/ui_automator/ui_automator.py b/ui_automator/ui_automator.py
index 8402af3..96d9222 100644
--- a/ui_automator/ui_automator.py
+++ b/ui_automator/ui_automator.py
@@ -31,7 +31,6 @@
 
 from absl import app
 from absl import flags
-import inflection
 from mobly.controllers import android_device
 from mobly.controllers.android_device_lib import adb
 from mobly.snippet import errors as snippet_errors
@@ -43,14 +42,11 @@
 from ui_automator import version
 
 
-_GOOGLE_HOME_APP = {
-    'id': 'gha',
-    'name': 'Google Home Application (GHA)',
-    'minVersion': '3.1.18.1',
-    'minMatter': '231456000',
-    'minThread': '231456000',
-}
-_MOBLY_SNIPPET_APK: str = 'com.chip.interop.moblysnippet'
+_MOBLY_SNIPPET_APK: str = (
+    'com.google.assistant.verticals.homeautomation.partners.androidchiptool'
+)
+_APK_VERSION_SUFFIX = '-userdebug'
+_G3_VERSION_INDICATOR = 'cl'
 _MOBLY_SNIPPET_APK_NAME: str = 'mbs'
 _REGRESSION_TESTS_TIMEOUT_IN_SECS = 1
 _COMMISSION_FLAG_USAGE_GUIDE = (
@@ -272,7 +268,9 @@
     if not is_apk_installed or not ad.is_apk_version_correct(
         self._connected_device,
         _MOBLY_SNIPPET_APK,
-        version.VERSION,
+        version.VERSION
+        if _G3_VERSION_INDICATOR in version.VERSION
+        else f'{version.VERSION}{_APK_VERSION_SUFFIX}',
     ):
       if is_apk_installed:
         ad.uninstall_apk(self._connected_device, _MOBLY_SNIPPET_APK)
@@ -323,24 +321,22 @@
 
     Raises:
         ValueError: When any of passed arguments is invalid.
-        MoblySnippetError: When running `commissionDevice` method in snippet apk
-        encountered an error.
+        MoblySnippetError: When running `commissionDeviceInGha` method in
+        snippet apk encountered an error.
     """
     self._logger.info('Start commissioning the device.')
 
     _validate_commission_arg(device_name, pairing_code, gha_room)
 
-    device_name_snake_case = f'_{inflection.underscore(device_name)}'
     matter_device = {
-        'id': device_name_snake_case,
         'name': device_name,
         'pairingCode': pairing_code,
         'roomName': gha_room,
     }
 
     try:
-      self._connected_device.mbs.commissionDevice(
-          _GOOGLE_HOME_APP, matter_device, _GOOGLE_ACCOUNT.value
+      self._connected_device.mbs.commissionDeviceInGha(
+          matter_device, _GOOGLE_ACCOUNT.value
       )
       self._logger.info('Successfully commission the device on GHA.')
     # TODO(google-home-testsuite-dev+ui-automator): Narrow exception type.
@@ -359,8 +355,8 @@
 
     Raises:
         ValueError: When passed argument is invalid.
-        MoblySnippetError: When running `removeDevice` method in snippet apk
-        encountered an error.
+        MoblySnippetError: When running `removeDeviceFromGha` method in snippet
+        apk encountered an error.
     """
     if not re.fullmatch(r'\S{1,24}', device_name):
       raise ValueError(
@@ -370,7 +366,7 @@
 
     self._logger.info('Start removing the device.')
     try:
-      self._connected_device.mbs.removeDevice(
+      self._connected_device.mbs.removeDeviceFromGha(
           device_name, _GOOGLE_ACCOUNT.value
       )
       self._logger.info('Successfully remove the device on GHA.')
@@ -389,14 +385,14 @@
         device_name: Display name of commissioned device on GHA.
 
     Raises:
-        MoblySnippetError: When running `isDeviceExist` method in snippet apk
-        encountered an error.
+        MoblySnippetError: When running `isDeviceExistInGha` method in snippet
+        apk encountered an error.
 
     Returns:
         True if the device exists on GHA.
     """
     try:
-      return self._connected_device.mbs.isDeviceExist(
+      return self._connected_device.mbs.isDeviceExistInGha(
           device_name, _GOOGLE_ACCOUNT.value
       )
     except Exception as e:
@@ -500,7 +496,7 @@
         os.path.dirname(os.path.abspath(__file__)),
         'android',
         'app',
-        'snippet.apk',
+        'new_snippet.apk',
     )
 
   def _add_test_to_commission_test_suite(
diff --git a/ui_automator/ui_automator_test.py b/ui_automator/ui_automator_test.py
index 5663b10..f01b0f4 100644
--- a/ui_automator/ui_automator_test.py
+++ b/ui_automator/ui_automator_test.py
@@ -39,13 +39,6 @@
 _FAKE_MATTER_DEVICE_NAME = 'fake-matter-device-name'
 _FAKE_GHA_ROOM = 'Office'
 _FAKE_PAIRING_CODE = '34970112332'
-_GOOGLE_HOME_APP = {
-    'id': 'gha',
-    'name': 'Google Home Application (GHA)',
-    'minVersion': '3.1.18.1',
-    'minMatter': '231456000',
-    'minThread': '231456000',
-}
 _PYTHON_PATH = subprocess.check_output(['which', 'python']).decode('utf-8')
 _PYTHON_BIN_PATH = _PYTHON_PATH.removesuffix('python')
 _FAKE_VALID_SYS_ARGV_FOR_COMMISSION = [
@@ -82,7 +75,7 @@
     '--commission',
 ]
 _FAKE_PROJECT_FOLDER = '/path/to/'
-_EXPECTED_APK_PATH = f'{_FAKE_PROJECT_FOLDER}android/app/snippet.apk'
+_EXPECTED_APK_PATH = f'{_FAKE_PROJECT_FOLDER}android/app/new_snippet.apk'
 _FAKE_GOOGLE_ACCOUNT = 'fake_google_account'
 
 
@@ -313,8 +306,9 @@
       self, mock_dirname, mock_get_all_instances
   ):
     self.mock_android_device.adb.shell.side_effect = [
-        b'package:com.chip.interop.moblysnippet\n',
-        f'versionName={version.VERSION}'.encode('utf-8'),
+        f'package:{ui_automator._MOBLY_SNIPPET_APK}\n'.encode('utf-8'),
+        f'versionName={version.VERSION}{ui_automator._APK_VERSION_SUFFIX}'
+        .encode('utf-8'),
     ]
     mock_get_all_instances.return_value = [self.mock_android_device]
     self.ui_automator.load_device()
@@ -333,7 +327,7 @@
       self, mock_dirname, mock_get_all_instances
   ):
     self.mock_android_device.adb.shell.side_effect = [
-        b'package:com.chip.interop.moblysnippet\n',
+        f'package:{ui_automator._MOBLY_SNIPPET_APK}\n'.encode('utf-8'),
         b'versionName=fake.version',
     ]
     mock_get_all_instances.return_value = [self.mock_android_device]
@@ -342,7 +336,7 @@
     self.ui_automator.load_snippet()
 
     self.mock_android_device.adb.uninstall.assert_called_with(
-        'com.chip.interop.moblysnippet'
+        'com.google.assistant.verticals.homeautomation.partners.androidchiptool'
     )
     self.mock_android_device.adb.install.assert_called_once_with(
         ['-r', '-g', _EXPECTED_APK_PATH]
@@ -468,7 +462,6 @@
   ):
     mock_get_all_instances.return_value = [self.mock_android_device]
     expected_matter_device = {
-        'id': '_fake_matter_device_name',
         'name': _FAKE_MATTER_DEVICE_NAME,
         'pairingCode': _FAKE_PAIRING_CODE,
         'roomName': _FAKE_GHA_ROOM,
@@ -483,8 +476,8 @@
           _FAKE_GHA_ROOM,
       )
 
-    self.mock_android_device.mbs.commissionDevice.assert_called_once_with(
-        _GOOGLE_HOME_APP, expected_matter_device, _FAKE_GOOGLE_ACCOUNT
+    self.mock_android_device.mbs.commissionDeviceInGha.assert_called_once_with(
+        expected_matter_device, _FAKE_GOOGLE_ACCOUNT
     )
 
   @mock.patch.object(android_device, 'get_all_instances', autospec=True)
@@ -496,7 +489,7 @@
         'Unable to continue automated commissioning process on'
         f' device({self.mock_android_device.device_info["serial"]}).'
     )
-    self.mock_android_device.mbs.commissionDevice.side_effect = Exception(
+    self.mock_android_device.mbs.commissionDeviceInGha.side_effect = Exception(
         'Can not find next button in the page.'
     )
 
@@ -594,7 +587,7 @@
       with self.assertRaises(flags.IllegalFlagValueError):
         ui_automator.run()
 
-    self.mock_android_device.mbs.commissionDevice.assert_not_called()
+    self.mock_android_device.mbs.commissionDeviceInGha.assert_not_called()
 
   @mock.patch.object(sys.stderr, 'write', autospec=True)
   @mock.patch.object(sys, 'exit', autospec=True)
@@ -617,7 +610,7 @@
         second_call_args,
         'Pass --helpshort or --helpfull to see help on flags.\n',
     )
-    self.mock_android_device.mbs.commissionDevice.assert_not_called()
+    self.mock_android_device.mbs.commissionDeviceInGha.assert_not_called()
     mock_exit.assert_called()
 
   @flagsaver.flagsaver((ui_automator._DECOMMISSION, 'm5stack'))
@@ -659,7 +652,7 @@
         f'Unable to remove {_FAKE_MATTER_DEVICE_NAME} from GHA'
         f' on device({self.mock_android_device.device_info["serial"]}).'
     )
-    self.mock_android_device.mbs.removeDevice.side_effect = Exception(
+    self.mock_android_device.mbs.removeDeviceFromGha.side_effect = Exception(
         'Can not remove the device.'
     )
 
@@ -678,7 +671,7 @@
     with self.assertLogs() as cm:
       self.ui_automator.decommission_device(_FAKE_MATTER_DEVICE_NAME)
 
-    self.mock_android_device.mbs.removeDevice.assert_called_once_with(
+    self.mock_android_device.mbs.removeDeviceFromGha.assert_called_once_with(
         _FAKE_MATTER_DEVICE_NAME, _FAKE_GOOGLE_ACCOUNT
     )
     self.assertEqual(
@@ -1295,10 +1288,10 @@
       self, mock_get_all_instances
   ):
     mock_get_all_instances.return_value = [self.mock_android_device]
-    self.mock_android_device.mbs.isDeviceExist.return_value = True
+    self.mock_android_device.mbs.isDeviceExistInGha.return_value = True
 
     self.assertTrue(self.ui_automator.is_device_exist(_FAKE_MATTER_DEVICE_NAME))
-    self.mock_android_device.mbs.isDeviceExist.assert_called_once_with(
+    self.mock_android_device.mbs.isDeviceExistInGha.assert_called_once_with(
         _FAKE_MATTER_DEVICE_NAME, _FAKE_GOOGLE_ACCOUNT
     )
 
@@ -1307,7 +1300,7 @@
       self, mock_get_all_instances
   ):
     mock_get_all_instances.return_value = [self.mock_android_device]
-    self.mock_android_device.mbs.isDeviceExist.return_value = False
+    self.mock_android_device.mbs.isDeviceExistInGha.return_value = False
 
     self.assertFalse(
         self.ui_automator.is_device_exist(_FAKE_MATTER_DEVICE_NAME)
@@ -1318,7 +1311,7 @@
       self, mock_get_all_instances
   ):
     mock_get_all_instances.return_value = [self.mock_android_device]
-    self.mock_android_device.mbs.isDeviceExist.side_effect = Exception(
+    self.mock_android_device.mbs.isDeviceExistInGha.side_effect = Exception(
         'fake-error'
     )
 
diff --git a/ui_automator/version.py b/ui_automator/version.py
index ba7f496..b281ce0 100644
--- a/ui_automator/version.py
+++ b/ui_automator/version.py
@@ -17,6 +17,8 @@
 from typing import Optional
 
 
-_SEMANTIC_VERSION = "1.0.5"
+# The full version name is "2025.09.02.801969437-userdebug", and -userdebug
+# is removed since it's not valid.
+_SEMANTIC_VERSION = "2025.09.02.801969437"
 
 VERSION = _SEMANTIC_VERSION