{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":644154981,"defaultBranch":"main","name":"snippet-uiautomator","ownerLogin":"google","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-05-23T00:01:36.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1342004?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1717005331.0","currentOid":""},"activityList":{"items":[{"before":"70fb9e33e46eeb82bcceaf8e992247bed720ffc3","after":"46e2e3b1189a70e3403f90ebe1ea58de942d1fa5","ref":"refs/heads/main","pushedAt":"2024-05-30T04:22:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Support ancestor search in Selector (#49)\n\nExample Usage:\r\n\r\n```python\r\nad.ui(res='android:id/text')\r\n .ancestor(res='android:id/notification_headerless_view_column')\r\n .child(res='android:id/title')\r\n .info\r\n```","shortMessageHtmlLink":"Support ancestor search in Selector (#49)"}},{"before":"8fd542c4e4bfa6ccf7014038bc60a46579d24ad8","after":"70fb9e33e46eeb82bcceaf8e992247bed720ffc3","ref":"refs/heads/main","pushedAt":"2024-05-22T03:29:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Release v1.1.1 (#48)\n\n* Migrate -jre flavor of Guava to -android flavor\r\n* Fix the type of percent in scrollUntilFinished and scrollUntil","shortMessageHtmlLink":"Release v1.1.1 (#48)"}},{"before":"5e33dddb272121a290b4285c63e57a63da931127","after":"8fd542c4e4bfa6ccf7014038bc60a46579d24ad8","ref":"refs/heads/main","pushedAt":"2024-05-21T16:38:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Migrate -jre flavor of Guava to -android flavor (#47)\n\n* Migrate -jre flavor of Guava to -android flavor\r\n\r\nSee https://github.com/google/guava/wiki/ReleasePolicy#flavors\r\n\r\n* Use Collectors.toList() to replace Stream.iterator()\r\n\r\n`Stream.iterator` is strongly discouraged, see\r\nhttps://engdoc.corp.google.com/eng/doc/devguide/java/practices/streams.md?cl=head#iterator.\r\n\r\n* Upgrade the Guava lib to 33.2.0-android","shortMessageHtmlLink":"Migrate -jre flavor of Guava to -android flavor (#47)"}},{"before":"95914b288678d93f0927605b8b3ef3a7bca22c2f","after":"5e33dddb272121a290b4285c63e57a63da931127","ref":"refs/heads/main","pushedAt":"2024-05-02T04:17:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Fix the type of percent in scrollUntilFinished and scrollUntil (#46)\n\nThe percent type in Python wrapper should be int type (range from 0 to\r\n100), then convert in Java to be a float type.","shortMessageHtmlLink":"Fix the type of percent in scrollUntilFinished and scrollUntil (#46)"}},{"before":"344009732391c4abb6b571581b31aeee9103f264","after":"95914b288678d93f0927605b8b3ef3a7bca22c2f","ref":"refs/heads/main","pushedAt":"2024-03-14T04:30:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Update uiautomator lib to stable 2.3.0 (#45)","shortMessageHtmlLink":"Update uiautomator lib to stable 2.3.0 (#45)"}},{"before":"ab9c4d6f08b0a73c9fd81d687b8d7614f1f2e428","after":"344009732391c4abb6b571581b31aeee9103f264","ref":"refs/heads/main","pushedAt":"2024-02-06T03:25:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Print Mobly AndroidDevice object for better evaluated as a proper prefix (#43)","shortMessageHtmlLink":"Print Mobly AndroidDevice object for better evaluated as a proper pre…"}},{"before":"2077b595b513de78bd2958415c0490e64df479db","after":"ab9c4d6f08b0a73c9fd81d687b8d7614f1f2e428","ref":"refs/heads/main","pushedAt":"2024-01-16T06:19:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Remove deprecated service registration method (#42)\n\nPlease follow Mobly Android standard service registration.\n\nRegister:\n\n```\nad.services.register(\n uiautomator.ANDROID_SERVICE_NAME, uiautomator.UiAutomatorService\n)\n```\nDeregister:\n\n```\nad.services.unregister(uiautomator.ANDROID_SERVICE_NAME)\n```","shortMessageHtmlLink":"Remove deprecated service registration method (#42)"}},{"before":"3dde53cff3b7307aee40443fc65367c1758cb151","after":"2077b595b513de78bd2958415c0490e64df479db","ref":"refs/heads/main","pushedAt":"2024-01-11T17:31:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Include device debug tag when raising an error (#40)","shortMessageHtmlLink":"Include device debug tag when raising an error (#40)"}},{"before":"3ee97c8a3ce6875eb22e3f92b774d62627f333a8","after":"3dde53cff3b7307aee40443fc65367c1758cb151","ref":"refs/heads/main","pushedAt":"2024-01-09T04:33:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Add pytype hints, update pyink, and refactor UiDevice.dump (#41)\n\n1. Add pytype hints to avoid Union[str, pathlib.Path].\r\n2. Update pyink version to fix 'pygram' has no attribute 'python_grammar_no_print_statement_no_exec_statement_async_keywords' error.\r\n3. Refactor codes in UiDevice.dump for improved clarity.","shortMessageHtmlLink":"Add pytype hints, update pyink, and refactor UiDevice.dump (#41)"}},{"before":"076e964318e9b9b7cd66c793eaf4290cf821bf73","after":"3ee97c8a3ce6875eb22e3f92b774d62627f333a8","ref":"refs/heads/main","pushedAt":"2024-01-08T03:08:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Refactor the way to get log path and dump to file (#39)\n\n* Refactor the way to get log path and dump to file\r\n\r\n* Refactor the logic to dump window hierarchy\r\n\r\n1. Compressed when value changed\r\n2. Get timestamp right after dumped\r\n3. Return pathlib.Path object when dumped to file","shortMessageHtmlLink":"Refactor the way to get log path and dump to file (#39)"}},{"before":"41b9d27c459405152977ecd7d17f5f66048c7fed","after":"076e964318e9b9b7cd66c793eaf4290cf821bf73","ref":"refs/heads/main","pushedAt":"2023-12-29T03:14:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Handle null value returned from QueryController.getCurrentPackageName (#38)","shortMessageHtmlLink":"Handle null value returned from QueryController.getCurrentPackageName ("}},{"before":"478f66e025ea4a09cc9222a8bdd3d76f640a96c7","after":"41b9d27c459405152977ecd7d17f5f66048c7fed","ref":"refs/heads/main","pushedAt":"2023-12-27T17:41:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Update the visibility of uiDevice in UiDeviceSnippet (#37)\n\nTo make the extends and tests the Snippet easier.","shortMessageHtmlLink":"Update the visibility of uiDevice in UiDeviceSnippet (#37)"}},{"before":"78e30e7663145ad917b5155041caabd1d1ebcf6f","after":"478f66e025ea4a09cc9222a8bdd3d76f640a96c7","ref":"refs/heads/main","pushedAt":"2023-12-26T19:11:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Release v1.0.5 (#36)","shortMessageHtmlLink":"Release v1.0.5 (#36)"}},{"before":"61fcbcbbc7737e1c8637d12ff76416a450331649","after":"78e30e7663145ad917b5155041caabd1d1ebcf6f","ref":"refs/heads/main","pushedAt":"2023-12-13T20:06:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Update androidx.test.uiautomator to 2.3.0-beta01 (#35)","shortMessageHtmlLink":"Update androidx.test.uiautomator to 2.3.0-beta01 (#35)"}},{"before":"e7084da10bb14f489c395b2f99d69ff4f187a559","after":"61fcbcbbc7737e1c8637d12ff76416a450331649","ref":"refs/heads/main","pushedAt":"2023-12-13T03:43:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Support KeyEvent in UiAutomator Python Lib (#34)\n\n* Support KeyEvent in UiAutomator Python Lib\r\n\r\n* Updated doc to clearly show sequence of keyevents","shortMessageHtmlLink":"Support KeyEvent in UiAutomator Python Lib (#34)"}},{"before":"da88aee9e47ad5dc1a903293994a2a80b94a1ac6","after":"e7084da10bb14f489c395b2f99d69ff4f187a559","ref":"refs/heads/main","pushedAt":"2023-12-07T17:37:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Set default value for uiautomator configs and send warning message for deprecation notice (#33)\n\n* Set default value for uiautomator configs and send warning message for deprecation notice\r\n\r\nMobly Android service should follow standard service registration. Set\r\ndefault value to allow users to start service in a normal way.\r\n\r\nStandard:\r\n\r\n```python\r\nad.services.register('uiautomator', uiautomator.UiAutomatorService)\r\n```\r\n\r\nGoing to deprecate:\r\n\r\n```python\r\nuiautomator.load_uiautomator_service(ad)\r\n```\r\n\r\n* Update uiautomator service registration example","shortMessageHtmlLink":"Set default value for uiautomator configs and send warning message fo…"}},{"before":"775a217c1f129fb07334ee3d41d06d4bf5c0fe37","after":"da88aee9e47ad5dc1a903293994a2a80b94a1ac6","ref":"refs/heads/main","pushedAt":"2023-12-06T16:24:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Release v1.0.4 (#31)\n\n* Handle NullPointerException throw from Until#scrollUntilFinished when cannot determint if scroll has finished\r\n\r\nFollow the API change regarding Until#scrollFinished#getResult can now be Nullable.\r\n\r\n* Release v1.0.4","shortMessageHtmlLink":"Release v1.0.4 (#31)"}},{"before":"b1ab1247dfa26ff6f09b14f3d09cf4d9f51c06ba","after":"775a217c1f129fb07334ee3d41d06d4bf5c0fe37","ref":"refs/heads/main","pushedAt":"2023-12-06T15:55:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Enable UiWatcher to monitor the condition without subsequent action. (#32)","shortMessageHtmlLink":"Enable UiWatcher to monitor the condition without subsequent action. (#…"}},{"before":"a333fd8b376183d472594fc246d06001f1af535c","after":"b1ab1247dfa26ff6f09b14f3d09cf4d9f51c06ba","ref":"refs/heads/main","pushedAt":"2023-12-06T07:13:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Handle NullPointerException throw from Until#scrollUntilFinished when cannot determint if scroll has finished (#30)\n\nFollow the API change regarding Until#scrollFinished#getResult can now be Nullable.","shortMessageHtmlLink":"Handle NullPointerException throw from Until#scrollUntilFinished when…"}},{"before":"5351c1792c290eaed918b499ebe0136be70086d6","after":"a333fd8b376183d472594fc246d06001f1af535c","ref":"refs/heads/main","pushedAt":"2023-12-05T06:15:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Fix sibling find the grandchildren object (#29)\n\n* Fix sibling find the grandchildren object\r\n\r\nSince [UiObject2.findObject](https://developer.android.com/reference/androidx/test/uiautomator/UiObject2#findObjects(androidx.test.uiautomator.BySelector)) finds all objects under base object, when use it to find the sibling objects, it might find those objects which are not directly under parent object. Therefore, add one more stepto cross-compare with [UiObject2.getChildren](https://developer.android.com/reference/androidx/test/uiautomator/UiObject2#getChildren()).\r\n\r\n* Use Java stream to cross-match two object list\r\n\r\n* Support `descriptionEndsWith` to search desc\r\n\r\nMissing the full name of `descEndsWith` in definition.\r\n\r\n* Collect to an immutable type\r\n\r\nError captured by Java Code Clarity\r\n\r\n```\r\nPrefer collecting to an immutable type or explicitly specifying a mutable type\r\n```","shortMessageHtmlLink":"Fix sibling find the grandchildren object (#29)"}},{"before":"133d6fbda345964d4814567f6e9af272401641a6","after":"5351c1792c290eaed918b499ebe0136be70086d6","ref":"refs/heads/main","pushedAt":"2023-12-04T07:34:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Implement UiAutomation.clearCache API for SDK 34 or higher device (#28)","shortMessageHtmlLink":"Implement UiAutomation.clearCache API for SDK 34 or higher device (#28)"}},{"before":"b7c30546ab43d86d020f03aef7b19e8e62e41b1a","after":"133d6fbda345964d4814567f6e9af272401641a6","ref":"refs/heads/main","pushedAt":"2023-11-03T14:33:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Support updating gesture margin when scrolling (#27)\n\n* Implement pause and resume in service\n\nFor scheduleRpc, it required mobly android service to have pause/resume implementation to work. Or the Rpc will be shutdown by default which caused the scheduleRpc won't work.\n\n* Support updating gesture margin when scrolling\n\nUsage:\n ```\n ad.ui(scrollable=True).scroll(margin=30).down()\n ad.ui(scrollable=True).scroll(percent=0.3).down()\n ```","shortMessageHtmlLink":"Support updating gesture margin when scrolling (#27)"}},{"before":"1450b5a5d9cbc9267f8c6550d0cf909be658f94d","after":"b7c30546ab43d86d020f03aef7b19e8e62e41b1a","ref":"refs/heads/main","pushedAt":"2023-10-03T04:16:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Implement pause and resume in service (#26)\n\nFor scheduleRpc, it required mobly android service to have pause/resume implementation to work. Or the Rpc will be shutdown by default which caused the scheduleRpc won't work.","shortMessageHtmlLink":"Implement pause and resume in service (#26)"}},{"before":"cd487ce6baeb0ce44fe5c42d5035a21848df5585","after":"1450b5a5d9cbc9267f8c6550d0cf909be658f94d","ref":"refs/heads/main","pushedAt":"2023-09-23T14:02:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Parse byte string before decoding to string (#25)\n\n* Parse byte string before decoding to string\r\n\r\nSince sometimes characters with different encodings may appear in logcat, causing UnicodeDecodeError, so find the timestampe first and then decode it.\r\n\r\n* Encode f-string when searching logcat","shortMessageHtmlLink":"Parse byte string before decoding to string (#25)"}},{"before":"966bdd81581062003d033f084a06dcc1b85d4d69","after":"cd487ce6baeb0ce44fe5c42d5035a21848df5585","ref":"refs/heads/main","pushedAt":"2023-09-21T09:47:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Raise an error when uiautomation service has already registered (#21)\n\n* Raise an error when uiautomation service has already registered\r\n\r\n* Check logcat timestamp instead of clear buffer\r\n\r\n* Use mobly#logger to compare logcat timestamp\r\n\r\n* Refactor RE pattern for searching logcat timestamp\r\n\r\n* Add unittest for parsing logcat","shortMessageHtmlLink":"Raise an error when uiautomation service has already registered (#21)"}},{"before":"1d8e7fa5680ba383a2e7b98776d9c0a7e24c51f4","after":"966bdd81581062003d033f084a06dcc1b85d4d69","ref":"refs/heads/main","pushedAt":"2023-09-18T09:10:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"eric100lin","name":"Eric Lin (Tzu Hsiang Lin)","path":"/eric100lin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2316378?s=80&v=4"},"commit":{"message":"Change the Pyformat and add it to git pre-commit hook. (#24)\n\n1. Align with Google internal Python formatter\r\ngo/pyformat#pyink\r\nSince Feb 2, 2023, we have switched Pyformat from using YAPF to Pyink for all of google3 by default.\r\nPyink is open sourced: https://github.com/google/pyink\r\n2. Git hook scripts run on every commit to automatically point out issues in code\r\nReference: https://pre-commit.com/","shortMessageHtmlLink":"Change the Pyformat and add it to git pre-commit hook. (#24)"}},{"before":"fed99eba2883a054626bd980eae4b0970b135891","after":"1d8e7fa5680ba383a2e7b98776d9c0a7e24c51f4","ref":"refs/heads/main","pushedAt":"2023-09-18T07:13:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"eric100lin","name":"Eric Lin (Tzu Hsiang Lin)","path":"/eric100lin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2316378?s=80&v=4"},"commit":{"message":"Fix the import order to follow Google Python Style. (#23)","shortMessageHtmlLink":"Fix the import order to follow Google Python Style. (#23)"}},{"before":"a52ae4aba3a2c9e2b9e3bc2bc419168ee129d15e","after":"fed99eba2883a054626bd980eae4b0970b135891","ref":"refs/heads/main","pushedAt":"2023-09-18T02:32:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"eric100lin","name":"Eric Lin (Tzu Hsiang Lin)","path":"/eric100lin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2316378?s=80&v=4"},"commit":{"message":"Add first test and enable pytest+coverage in CI (#22)","shortMessageHtmlLink":"Add first test and enable pytest+coverage in CI (#22)"}},{"before":"4c741ba17acfe2e64c118914b1409faeba1cc26e","after":"a52ae4aba3a2c9e2b9e3bc2bc419168ee129d15e","ref":"refs/heads/main","pushedAt":"2023-09-15T03:35:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Fix typo on the badge link of APK build status (#20)","shortMessageHtmlLink":"Fix typo on the badge link of APK build status (#20)"}},{"before":"7bff1ba8c3eb1b4de88c408adf03d645ab28b773","after":"4c741ba17acfe2e64c118914b1409faeba1cc26e","ref":"refs/heads/main","pushedAt":"2023-09-15T03:00:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ko1in1u","name":"Kolin Lu","path":"/ko1in1u","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/106761476?s=80&v=4"},"commit":{"message":"Add latest release version and testing result for apk and python build status (#19)","shortMessageHtmlLink":"Add latest release version and testing result for apk and python buil…"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEV5noEwA","startCursor":null,"endCursor":null}},"title":"Activity · google/snippet-uiautomator"}