Latest compiled manual player build: 0.7.7 revision 1 for Android TV/Fire TV and 0.7.7 for Windows/Linux; BrightSign 0.2.0-pilot.5. Social displays require layout capability 8. All package downloads are available and their published sizes and SHA-256 hashes have been verified. Automatic release remains 0.6.10. See [manual layout updates](MANUAL-LAYOUT-UPDATES.md).

> 10 October 2026: manual Android TV/Fire TV layout trials use 0.7.5 revision 1 (70501), with page sequences, advanced webpage controls and playback progress. They retain the original signing identity and TV launcher artwork. Fire TV installed in place with pairing retained; separate Google TV/Android TV hardware checks remain pending. The standard release remains 0.6.10. See [Manual layout updates](MANUAL-LAYOUT-UPDATES.md).

# dsigns for Google TV and Android TV

For the separate manual-launch Fire OS build and its validation limits, see [FIRE-TV.md](FIRE-TV.md). Vega OS is not an Android APK target.

The Android TV app follows the shared dsigns product release, currently 0.6.10, and is available as a signed APK for a hardware pilot. It opens from the TV’s app launcher and uses the remote control. It is not yet listed in Google Play.

## Install and connect

1. Use a Google TV or Android TV device running Android 8.0 or later that allows APK installation. Chromecast with Google TV is the intended Chromecast family. Older casting-only Chromecast models cannot install this APK.
2. Transfer the Android APK from [Downloads & setup](https://dsigns.bitprecision.com/install#android) to the TV and open it with the device’s package installer. If prompted, allow installation from that transfer/file-manager app. Menu names vary by device. An administrator can also install it using Android’s `adb install -r dsigns-android-tv-0.6.10-1.apk` after connecting to an authorised debugging session.
3. Open **dsigns** from the TV’s apps. Use **Network settings** if the TV is offline. **Change website** selects another HTTPS dsigns dashboard before pairing; the default is `https://dsigns.bitprecision.com`.
4. On your phone or computer, log in to the dashboard, choose **Players → Add player**, enter the five letters shown on the TV, and select the customer and group. Codes expire after ten minutes and renew while setup is open.
5. Assign a playlist and publish it. Start with a JPEG/PNG image and a 1080p H.264 MP4 video. Check both on the physical TV before leaving it unattended.

During playback, press **OK** or **Back** for the menu. It offers content sync, retrying skipped media, network settings and exit to the TV home screen. Exiting or switching to another app stops playback; reopen dsigns to resume.

## Included in the Android TV pilot

- One fullscreen output per device, Fit/Fill/Stretch, custom content areas, rotation and per-screen volume; new outputs are muted.
- Native Android image/video rendering. This build attempts JPEG, PNG, static WebP, BMP and MP4. Video decoding depends on the codecs supported by the actual device. GIF, AVI, MOV, MKV and WebM files accepted for desktop players are skipped by this Android release with a diagnostic.
- Existing customer/group assignments, playlists with saved or random order, weekly schedules, inclusive campaign dates and IANA timezones. Schedules run on the TV’s local clock, including when offline; keep the device clock correct.
- Verified local media cache, stored pairing credentials and startup from a complete saved playlist when the app is reopened. Downloads use SHA-256 chunk checks and temporary files. A new publication activates between items; a schedule change can interrupt the current item. Failed or incomplete downloads retain the previous complete playlist.
- Check-ins every 30 seconds while the app process is running, current media/progress, available storage and bounded incident history. Being online does not prove the panel is showing content.
- A retry for media-open, decode and video-progress failures, followed by persistent skipping for that media version. **Retry media** or replacing the asset clears that skip. Skipped files are reported in Activity. Images are decoded at reduced resolution to limit memory use on inexpensive devices.
- Remote **Sync**, **Retry media**, **Restart output** and timed **Maintenance**. Standby uses published artwork where available, otherwise the bundled dsigns image.

## Limits before unattended use

**Startup depends on the device.** Startup settings can request dsigns as the default Home app where Android allows it; otherwise open it manually. Physical reboot validation remains pending. Kiosk lockdown, process recovery after Android kills the app, remote reboot, screenshots, identify-screen overlays and remote application updates are not included. Commands the app does not support return a failed result. Android can stop background apps; dsigns does not bypass that behaviour.

Install a newer APK over the existing app to update it. The package name and signing key must remain the same to preserve pairing and cached media. Clearing app data or uninstalling removes the connection and cache. Android installers are included in the shared release catalog. Each download keeps its own release URL and checksum; desktop-only releases retain the latest Android download at its existing URL. Desktop update ZIPs cannot update Android. Matching product version numbers do not imply identical platform features.

Allow enough internal storage for the current and next playlist plus at least 100 MiB free during downloads. Very large playlists can exceed a low-cost device’s storage. Cache integrity is checked at app startup and when preparing a new publication. If a file becomes corrupt during playback, restart the app to recheck and download it again while online.

Google Play publication requires a Play Console app, store assets, account declarations and review. No store submission has been made. APK installation does not establish compatibility with every box or TV; validate the exact model before buying a fleet.

## Validation — 15–16 September 2026

- **Passed:** APK compilation, Android v2/v3 signatures, alignment and archive checks; TV launcher registration; Android 8.0 minimum and no touchscreen requirement.
- **Passed:** executable Java checks for schedule boundaries, inclusive dates, DST repetition, HTTPS origin restrictions, manifest/device/output validation, cache identities and damaged/truncated media rejection.
- **Passed against the hosted dashboard:** a labelled Android protocol simulator paired, received its output/playlist/schedule, downloaded and verified assigned media, reported telemetry, acknowledged commands and lost access after deletion. The actual Android core parsed that hosted manifest and verified its downloaded files. The simulator and its customer/content were removed.
- **Not run:** APK installation, remote-control navigation, physical playback, video codecs, audio, fit/rotation, network loss, offline relaunch, recovery and a 48-hour soak on an Android device. No Android emulator was run. These checks need the target TV/player.

## Rebuild

Use JDK 17 and the Android SDK platform 35/build-tools 35.0.0. Set `JAVA_HOME`, `ANDROID_PLATFORM_JAR` (the path to `android.jar`) and `ANDROID_BUILD_TOOLS` (the directory containing `aapt2`, `d8`, `zipalign` and `apksigner`), then run:

```sh
python3 android/build.py --register
```

The builder reads the product version from `player/releases.json`, generates the Android manifest/runtime version, and derives a monotonically increasing Android version code. Use `--revision 2` (then 3, and so on) for another Android build within the same product version. `--register` adds the verified APK to the shared catalog without changing desktop artifacts or old URLs. Never overwrite a catalogued APK with different bytes.

The builder creates the APK, SHA-256 file and release metadata in `deliverables/android/`. It uses only Java and Android platform APIs; there is no web server or Docker. Fullscreen playback uses Android media APIs; layouts use the device’s WebView.

Back up `.secrets/android-signing/` privately before distributing the APK. It contains the signing key and password needed for compatible future updates. Never commit it or include it in a download. Set `ANDROID_SIGNING_DIR` when building from another checkout. The builder requires that existing key and verifies its public certificate against `android/signing-certificate.sha256`; it does not generate a replacement.

For the portable checks, set `JSON_TEST_JAR` to `org.json:json:20240303` and run `python3 android/check.py`. That jar is a build-host test input, not an APK dependency. `android/hosted-check.py` additionally uses the documented `DSIGNS_*` test credentials and cleans up its own simulator records.

Platform references: [Android TV application requirements](https://developer.android.com/training/tv/get-started/create), [Android media formats](https://developer.android.com/media/platform/supported-formats), [activity lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle).

## Store publication

The APK is for direct installation. Google Play needs an Android App Bundle (AAB), a verified developer account, Play App Signing setup, store artwork/screenshots, privacy and Data safety information, reviewer access and TV quality review. A signed AAB can now be prepared from a verified release APK with `android/build-bundle.py`. The 0.6.2 / 60201 bundle passed structural/signature and generated-APK checks. See `android/play/README.md` for exact build instructions, signing setup and remaining submission gates; there has been no store upload or submission.

## Hosted access in 0.6.4

Trial accounts display a persistent `dsigns · trial` mark above images and video. Access is saved separately from the playlist, including its expiry deadline. After expiry the app displays subscription-ended artwork and continues checking in; renewed access restores playback without pairing again. The 14-day trial and paid grace deadlines also apply while offline. Self-hosted core and complimentary access have no trial mark. Portable deadline tests and the signed build passed; physical rendering, offline restart and recovery on Android hardware are not run.


The 0.6.6 startup screens share the approved Signal artwork across Windows, Linux and Android TV. Offline screens link to network help with a branded QR. Online screens show a valid connection code, a live activity indicator and the time until the next code. Android hardware testing remains pending.


Android updates remain operator-initiated APK installations. The player does not interrupt signage with update or installation prompts.

## Custom display areas — 0.6.8

After installing the 0.6.8 APK, screen settings offer Automatic, 1080p/4K portrait and landscape, or a custom width and height. On Android these define a content area within the app's reported display. Set its left/top offsets, save and publish. An area larger than the reported display falls back to the whole screen and reports the problem. HDMI signal modes remain in Android TV's system settings and depend on the device. Rotation and Fit/Fill/Stretch apply inside the selected content area. Physical display and codec checks remain pending.

## TV launcher artwork — 10 October 2026

The APK supplies a square icon and a 320 × 180 xhdpi banner made from the canonical Signal logo. The wordmark fills the wide artwork without stretching. Android TV/Google TV launchers choose which asset to display; a large featured area is controlled by the launcher, so its appearance needs a device check. See [Android’s banner requirements](https://developer.android.com/training/tv/get-started/create).

## TV power and HDMI-CEC

The 0.7.16 candidate reports whether Android advertises system CEC support. The normally installed APK cannot access Android’s privileged CEC controls; direct Wake TV / TV standby buttons remain unavailable. Device firmware and Android TV settings can link power independently of dsigns. [CEC setup and platform limits](https://dsigns.bitprecision.com/install/cec.md). Physical Android power behaviour remains not run.
