A single-APK LightOS tool for TIDAL, built on the official TIDAL SDK. The current milestone (Phase 0) establishes the SDK-first binder RPC seam and TIDAL authentication; saved releases, release detail, and playback follow.
- :app – Light SDK tool module. Light UI screens and
TideClient— the binder RPC client. Declares thecom.lightphone.tideapplication ID. No TIDAL or server imports; communicates entirely over typed protocol methods. - :server – Unrestricted Android library merged into the APK at runtime (
debugRuntimeOnly). HostsTideRuntime(TIDAL auth),TideServiceMethods(RPC dispatch), the self-hostedLightSdkServer, and the OAuthWebViewactivity. - :protocol – Pure Kotlin/JVM module. Serializable contracts and domain models (
AuthSnapshot,ReleaseSummary,TideRemoteMethod) shared between app and server. No Android or TIDAL dependencies. - Both
:appand:serverdepend on the included../light-sdkcomposite build (same as the existingchatsproject).
The SDK reads its configuration from local.properties (which is git‑ignored). Provide the following keys, matching the official SDK demo:
tidal.clientid=<your client id>
tidal.clientsecret=<your client secret>
tidal.clientscopes=<space-separated scopes>
tidal.clientredirecturi=tide://auth
A local.properties.example file is included as a template.
# From the tide project root
./gradlew :app:assembleDebug # builds the APK
# The resulting APK is at app/build/outputs/apk/debug/app-debug.apkInstall with adb install or via Android Studio.
- The tool's
lighttool.tomlpointsserverPackage = "com.lightphone.tide", so the tool binds to itself — same single-APK pattern as Chats. :appnever touchesTideRuntimedirectly. It callsTideClient(interface) backed byBinderTideClient, which serializes requests throughLightServiceConnection.callRemoteServiceMethod(...)usingTideRemoteMethodIDs (e.g.com.lightphone.tide.auth.snapshot.v1).:serverregistersTideServiceMethods.dispatchasLightSdkServer.customServiceMethodResolverinTideBootstrapProvider, so custom Tide methods are answered alongside built-in Light SDK methods.TideRuntimeowns the singleton returned byTidalAuth.getInstance(...)and exposescurrentAuthSnapshot()returning a protocolAuthSnapshot.- The login flow calls the instance
Auth.initializeLogin(...)and passes the full redirect URI toAuth.finalizeLogin(redirectUri). - Missing credentials produce an in-app configuration message while still allowing a credential-free debug build.
- TIDAL SDK
com.tidal.sdk:auth:0.10.1com.tidal.sdk:player:0.0.71com.tidal.sdk:tidalapi:0.3.53
- JitPack repository is added in the root
settings.gradle.ktsfor any transitive dependencies.
Apache-2.0 (same as the surrounding LightOS codebase).