feat(android): add Wear OS companion (#109433)

* feat(android): add Wear OS companion

Co-authored-by: Sebastian Schubotz <git@sibbl.net>

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>

* style(android): format Wear release gate test

* test(android): cover Wear release CI contracts

* test(android): import Wear JSON fixture type

* fix(android): harden Wear proxy event actor

* test(android): stabilize Wear proxy actor tests

* test(android): isolate Wear proxy actor lifecycles

* test(android): own Wear actor dispatchers

* test(android): use real time for Wear actor tests

* test(android): own Wear actors in test scope

* test(android): stop Wear actors explicitly

* test(android): drain Wear actor cancellation

* test(android): isolate Wear actors from test scheduler

* test(android): inject Wear test clock

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
This commit is contained in:
Peter Steinberger
2026-07-16 20:59:29 -07:00
committed by GitHub
parent 61bec3a2de
commit 8d5e39afcd
44 changed files with 4778 additions and 125 deletions

View File

@@ -701,18 +701,24 @@ jobs:
android_matrix: createMatrix(
runAndroid
? [
// android-ci-contract-v2: both app variants, Android lint, benchmark, and ktlint.
// android-ci-contract-v3: phone variants, Wear modules, Android lint, benchmark, and ktlint.
{
check_name: "android-test-play",
task: useCompatibleAndroidCi ? "test-play-compat" : "test-play",
},
{ check_name: "android-test-third-party", task: "test-third-party" },
...(!useCompatibleAndroidCi
? [{ check_name: "android-test-wear", task: "test-wear" }]
: []),
{
check_name: "android-build-play",
task: useCompatibleAndroidCi ? "build-play-compat" : "build-play",
},
...(!useCompatibleAndroidCi
? [{ check_name: "android-ktlint", task: "ktlint" }]
? [
{ check_name: "android-build-wear", task: "build-wear" },
{ check_name: "android-ktlint", task: "ktlint" },
]
: []),
]
: [],
@@ -3054,6 +3060,9 @@ jobs:
test-third-party)
./gradlew --no-daemon --build-cache :app:testThirdPartyDebugUnitTest
;;
test-wear)
./gradlew --no-daemon --build-cache :wear:testDebugUnitTest
;;
build-play)
./gradlew --no-daemon --build-cache \
:app:assemblePlayDebug \
@@ -3064,6 +3073,11 @@ jobs:
:wear-shared:assembleDebug \
:wear-shared:lintDebug
;;
build-wear)
./gradlew --no-daemon --build-cache \
:wear:assembleDebug \
:wear:lintDebug
;;
build-play-compat)
# Frozen targets keep their target-owned Android build contract. New lint rules
# must not retroactively reject a previously validated release branch.
@@ -3074,6 +3088,7 @@ jobs:
./gradlew --no-daemon --build-cache \
:app:ktlintCheck \
:benchmark:ktlintCheck \
:wear:ktlintCheck \
:wear-shared:ktlintCheck
;;
*)