24Seven.FM PlayerProject portal GitHub

Quality and evidence

Test the behavior, not the claim

The project combines fast local tests with connected Compose coverage, real emulator configurations, a physical Motorola Razr, release-artifact audits, and written evidence that records what passed and what remains.

Validation strategy

Start narrow, broaden with risk

Routine development preserves Gradle caches and starts with the smallest affected task. Broader checks are added only after targeted behavior passes or when integration risk requires them.

Fast

Local unit tests

146 tests cover models, parsers, policies, repository behavior, ViewModel state, timer restoration/formatting, audio-route classification, diagnostic allowlisting/redaction, Chat-mention matching/deduplication, availability indexing, report classification, and release helpers.

./gradlew :app:testDebugUnitTest
Integration

Connected Compose tests

The current 40-test Tablet suite exercises UI semantics, navigation, dialogs, adaptive layouts, accessibility reflow, Favorites traversal, and device behavior.

./gradlew :app:connectedDebugAndroidTest
Static

Compilation and lint

Kotlin compilation catches layer and type failures early; Android lint checks resources, manifests, API usage, accessibility, and packaging concerns.

./gradlew :app:compileDebugKotlin :app:lintDebug
Release

Artifact validation

Release AAB/APK signatures, registered upload certificate, production manifest, dependencies, backup exclusions, and 16 KB packaging are audited separately.

validate-protected-play-bundle-linux.py

Device coverage

Real Android configurations

Window width, platform level, runtime page size, accessibility scale, network state, and physical hinge posture are separate test dimensions—not aliases for a single phone emulator.

ConfigurationPurposeVerified result
API 26 phoneMinimum supported Android 8 runtimePass prior 36/36 connected coverage
API 36 phoneTarget Android 16 behavior, edge-to-edge, predictive BackPass 27/27 readiness suite
API 35 · 16 KBModern runtime memory-page compatibilityPass APK, ELF, and runtime checks
Pixel FoldFoldable window states and compact/expanded transitionsPass open-state suite and focused regressions
Pixel TabletExpanded portrait/landscape and two-pane behaviorPass current 40/40 connected suite
Motorola Razr 2023 · Android 16OEM behavior, notification navigation, local mention controls, and physical hinge lifecyclePass focused M27.1 2/2 checks, earlier 21/21 suite, and open/tabletop/closed/reopened playback cycle

Specialized evidence

Stress the boundaries users notice

Accessibility and reflow

Navigation, Player station cards, account headers, dialogs, and list content remain operable at Android's 2× text setting with enlarged display size. Prior maximum-settings coverage passes 39/39.

Read accessibility evidence

Network loss and recovery

Live phone and Tablet cut/restore cycles show a clear offline waiting state and exactly one automatic prepare after validated connectivity returns.

Read recovery evidence

Large Favorites performance

A full VIP/RIP list preserves stable list instances, avoids unrelated recomputation, and traverses end to end while keeping sort and request state responsive.

Read performance evidence

Startup diagnostics

Five API 35 debug-emulator cold launches measured 948–986 ms with a 969 ms median. This is diagnostic evidence, not a physical-device or Play performance claim.

See measurements

Station certification

All five stations have representative public and authenticated validation covering their supported metadata, Queue, account, Chat, Favorites, request, and secondary-page boundaries.

Browse station evidence

Protected signing

The Ubuntu path keeps the keystore in memory-backed storage, uses non-persistent Gradle inputs, verifies the exact registered upload certificate, and removes temporary material.

Read release audit

GitHub Actions

Every PR gets an independent build

The Android workflow checks out the candidate, configures JDK 17 and Android 36, and runs tests, lint, and debug assembly. A separate Pages workflow builds the canonical privacy notice and project portal with Jekyll before deployment from main.

1Pull requestFocused change and evidence
2Android CITest · lint · assemble
3Review and mergeProtected main history
4Discord updateChange and verification summary

View current workflow runs

Evidence library

Results remain inspectable

Milestone records distinguish automated results, emulator observations, physical-device checks, assumptions, and work that still requires Play or owner access.

Open validation gates

Green locally does not mean published

Play

Delivered artifact

Confirm version-code eligibility, install/update behavior from Play, and the generated delivery artifact.

Pre-launch

Google device report

Review and remediate the Play pre-launch crawler results once protected reviewer access is available.

Accessibility

Spoken TalkBack pass

Automated semantics and large-text reflow pass; a complete spoken physical-device traversal remains a release check.

See how these checks map to M23–M28

Turn use into evidence

Testing the player?

Use the guided tester workspace to choose a session, record the exact environment, and submit a structured pass, failure, or blocked result.