Remove Bluetooth from multiplayer

Multiplayer now runs over Wi-Fi (LAN) only.

- Delete BluetoothTransport and drop it from LobbyController's transport
  list, leaving LanTransport as the sole transport.
- Drop TransportKind.BLUETOOTH and the now-unused RFCOMM_UUID constant.
- Remove the BLUETOOTH/BLUETOOTH_ADMIN/BLUETOOTH_CONNECT permissions and
  the android.hardware.bluetooth feature from the manifest, along with
  the runtime permission request in MainActivity and the
  requestBluetoothPermissions hook on AppEnv.
- Update lobby copy so an empty transport list and an empty host list
  talk about Wi-Fi rather than pairing, and refresh the comments and
  README sections that described two transports.

The transport abstraction itself is kept: everything after the handshake
was already transport independent, so adding another one later needs no
changes above LanTransport.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01YEsqYAMJKUJoM7UAavm169
This commit is contained in:
Claude
2026-08-06 21:38:35 +00:00
parent e17272b909
commit 43394b8d45
12 changed files with 29 additions and 260 deletions
@@ -33,10 +33,10 @@ class SeatForDeviceTest {
* The regression this exists for.
*
* The seat used to be looked up by [PlayerSlot.peerId], which is the address
* the host's own transport made up for the incoming link — an IP on Wi-Fi, a
* MAC over Bluetooth. A guest has never seen that value and so never matched
* it, and every guest fell through to "the first seat held by somebody
* remote". With one guest that is right by luck. With two, both of them
* the host's own transport made up for the incoming link — an IP on Wi-Fi. A
* guest has never seen that value and so never matched it, and every guest
* fell through to "the first seat held by somebody remote". With one guest
* that is right by luck. With two, both of them
* claimed seat 1, and the one really sitting in seat 2 was left looking at a
* table with no cards in front of it.
*/