Files
markandClaude Fable 5 edb367cca3 feat: system media controls (MediaSession) for the active server (#1)
* feat: add system media controls for the active server

Add a media3 MediaSessionService that mirrors playback on the active
RelayTV server as a system media session (lock screen / quick settings):

- MediaControlService polls GET /status and publishes state, metadata,
  artwork, and remote volume; forwards play/pause, next/previous, seek,
  stop, and volume to the server HTTP API
- RelayRemotePlayer implements SimpleBasePlayer over the remote state
- RemoteStatus parses /status defensively across server versions
- New Settings screen (toolbar menu) with a media-controls toggle and a
  Manage servers shortcut; fix open_servers intent handling via
  onNewIntent when MainActivity is already running

Release prep:

- Bump to versionCode 6 / versionName 1.3.0
- Wire optional release signing from MYAPP_RELEASE_* gradle properties
- Add FOREGROUND_SERVICE(_MEDIA_PLAYBACK) permissions and lint opt-ins
- Update privacy policy, release checklist (Play Console foreground
  service declaration), README, and Gradle daemon heap

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: sign release bundle in GitHub Actions

Decode the upload keystore from the RELEASE_KEYSTORE_BASE64 secret and pass
the MYAPP_RELEASE_* signing properties to Gradle via ORG_GRADLE_PROJECT_*
env vars, so tagged releases produce a signed .aab. Fail fast if the keystore
secret is missing, and verify the bundle signature after the build.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 19:45:34 -05:00

193 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RelayTV Android Companion App
RelayTV Android is the Android companion app for the self-hosted RelayTV server. It gives you a fast mobile remote, embedded RelayTV web UI access, multi-server management, and Android share targets for queueing or immediately playing links on a RelayTV device.
RelayTV server:
https://github.com/mcgeezy/relaytv
Home Assistant integration:
https://github.com/mcgeezy/relaytv-ha
Support the project:
https://buymeacoffee.com/relaytv
---
## Features
- Multi-server support
- Health verification before saving a server
- LAN auto-discovery of `_relaytv._tcp` servers using Android NSD / mDNS
- Embedded RelayTV `/ui` WebView access
- System media controls (lock screen / quick settings) mirroring playback on the active server
- Reconnect and heartbeat recovery
- Dedicated Android share targets:
- `RelayTV Queue``POST /smart`
- `RelayTV Play``POST /play_now`
- HTTP and HTTPS support for self-hosted RelayTV servers
- Lightweight remote-friendly workflow for local RelayTV control
---
## Why Use The Android App
RelayTV Android is designed to make self-hosted TV playback feel easy from your phone.
Use it to:
- Quickly open and control your RelayTV server
- Share links from YouTube and other apps directly to your TV
- Queue media without interrupting what is already playing
- Start playback immediately when needed
- Manage more than one RelayTV server from one app
---
## Screenshots
<!-- Suggested screenshots:
1. Server list screen
2. Add server screen
3. Embedded RelayTV UI in WebView
4. Android share sheet showing RelayTV Queue / RelayTV Play
5. Remote/control screen if available
-->
_Add screenshots here for release._
---
## Requirements
- Android 8.0+ (`minSdk 26`)
- A reachable RelayTV server on your LAN or trusted remote URL
---
## Companion Projects
- RelayTV server: https://github.com/mcgeezy/relaytv
- RelayTV Home Assistant integration: https://github.com/mcgeezy/relaytv-ha
### Planned / work in progress
- iPhone companion app
- Continued Android UX polish
- Expanded companion app ecosystem
---
## Build And Test
Validate host environment:
```bash
./scripts/check-android-env.sh all
```
Install or refresh Android SDK components:
```bash
./scripts/bootstrap-android.sh
```
Debug build, lint, and unit tests:
```bash
./scripts/build-debug.sh
```
Debug APK output:
```text
app/build/outputs/apk/debug/app-debug.apk
```
Release bundle and release lint:
```bash
./scripts/build-release.sh
```
GitHub release assets are generated automatically when you push a tag like:
```bash
git tag v1.2.0
git push origin v1.2.0
```
Connected tests on a physical device or emulator:
```bash
./scripts/test-connected.sh
```
---
## Release Notes
- Current Play target: Android 15 / API 35
- Release bundle output: `app/build/outputs/bundle/release/app-release.aab`
- Release checklist: [docs/RELEASE_CHECKLIST.md](docs/RELEASE_CHECKLIST.md)
- Privacy policy draft: [docs/PRIVACY_POLICY.md](docs/PRIVACY_POLICY.md)
---
## Network Notes
RelayTV Android supports both:
- `http://`
- `https://`
HTTP support is intentionally retained because RelayTV is often used as a trusted LAN-first service on private IPs and hostnames. If your RelayTV server is exposed outside your private network, HTTPS is recommended.
---
## API Surface Used By The App
- `GET /health`
- `GET /ui`
- `POST /smart`
- `POST /play_now`
---
## Typical Workflows
### Queue from Android share sheet
Share a link from another app and choose **RelayTV Queue** to send it to RelayTVs smart play/enqueue behavior.
### Play immediately from Android share sheet
Share a link and choose **RelayTV Play** to start playback right away.
### Open your RelayTV UI from your phone
Use the app as a quick launcher and controller for one or more RelayTV servers.
---
## Support The Project
If RelayTV Android saves you time or improves your setup, consider supporting development across the RelayTV ecosystem.
Buy me a coffee:
https://buymeacoffee.com/relaytv
---
## Contributing
- Keep Android UX aligned with RelayTVs self-hosted, local-first model
- Preserve the queue vs play-now share behavior
- Avoid regressions in reconnect and server discovery flows
---
## License
Same license as the RelayTV core project:
https://github.com/mcgeezy/relaytv