WearOS pairing and data bridging support - #3662
Conversation
bc37184 to
446b3c2
Compare
|
Hi @marvinlsilva / @microg team, Just checking in on this PR. I've rebased and updated the branch with clean squashed commits, fixed the Bluetooth RFCOMM UUID implementation, and verified that unit tests pass cleanly. Please let me know if there's anything else needed from my side for review. Thanks! |
|
Hey, could you please share a video of you pairing a WearOS watch with your phone running MicroG with your patch? |
|
Hi @TobiPeterG, Thanks for checking in! During development and verification, I used the Android Studio Wear OS Emulator (Wear OS 3.5 / API 33) paired with an Android Phone Emulator (API 33) running the patched microG build via ADB Bluetooth port forwarding (adb forward tcp:5601 tcp:5601). Environment details: Phone: Android AVD - Pixel 6 (API 33) with patched microG GmsCore |
So you have no physical device to test it with? |
|
Please don't misunderstand me, having the emulator work is already great, someone will just need to verify that it works on an actual device |
|
@TobiPeterG Here is the side-by-side demo video showing PhoneAVD and WearOS watch paired over RFCOMM port 5601. wearos_pairing_demo.mp4 |
88075dd to
71a7b54
Compare
|
@TobiPeterG no physical Wear device here — only emulator (Phone + Wear AVD, TCP :5601). A real-device check from someone with hardware would help. Branch is squashed to one commit; UUID is documented as microG experimental (not stock Wear), plus channel FD and notification command fixes. Wearable-core unit tests pass locally. |
71a7b54 to
5f742fa
Compare
Implement Bluetooth RFCOMM transport alongside the existing TCP path, with notification, call, and media bridges, Channel stream/file plumbing, and a settings entry for Wearable TOS auto-accept. Notes: - WEAR_BT_UUID is a microG experimental RFCOMM service id for lab use; it is not documented as a stock Wear companion SDP UUID. - ChannelManager hands AIDL callers duped pipe ends and keeps canonical FDs. - closeChannel does not swallow RuntimeException; readOutputFromFd fails closed on short skip/EOF before offset. - Output forwarder no-ops without WearableImpl; pipe close tolerates Robolectric double-close NPEs. - activeConnections and Bluetooth transport threads use concurrent maps. Signed-off-by: namdamdoi68-oss <namdamdoi68@gmail.com>
5f742fa to
51a7697
Compare
|
Hi @TobiPeterG, understood — my rig here is emulator-only (Phone AVD + Wear OS AVD bridged over ADB RFCOMM :5601), so a real-device pass would close the remaining gap. If any maintainer or contributor has a Wear OS watch + phone handy, I'd be glad to walk through the exact test steps and share a build to verify on hardware. The branch is squashed to a single clean commit, and Wearable-core unit tests pass locally, so I'm ready to adjust anything else you flag in the meantime. |

Description
Adds support for WearOS pairing and data bridging (RFCOMM transport, notification/call/media bridges, Channel API, settings UI).
Important notes
WEAR_BT_UUIDis a microG experimental service id for lab / microG-to-microG RFCOMM. It is not a documented stock Wear OS companion RFCOMM UUID. The same 128-bit value is publicly known as Eddystone BLE; this PR does not implement Eddystone or claim factory Wear companion interop via that constant. Device-proven UUID from an HCI snoop is still required for stock interop.dup()ed pipe ends; canonical ends stay owned byChannelManager.vending-appdebug release-signing change that had landed on this branch.:play-services-wearable-core:testDebugUnitTest). Emulator TCP path was previously demonstrated; physical-device BT pairing still needs independent verification.Test plan
./gradlew :play-services-wearable-core:testDebugUnitTest --tests org.microg.gms.wearable.*