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