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