Add spec.md: goal, limits and rules for working on the project
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4044303764
commit
b2ca212c45
1 file changed
+52
@@ -0,0 +1,52 @@
|
||||
# Podlite (Android) — spec
|
||||
|
||||
The short contract for working on this app. `README.md` is the user guide; this file says what the app is
|
||||
for, what limits it lives within, and what must not break.
|
||||
|
||||
## Goal
|
||||
|
||||
A small Audiobookshelf podcast client for the Samsung Galaxy Mini whose progress stays in sync with the
|
||||
server and other apps.
|
||||
|
||||
## Target and hard limits
|
||||
|
||||
- Samsung Galaxy Mini GT-S5570 and other Android 2.2+ phones (API 8), 240×320 ldpi.
|
||||
- Native Java, no libraries beyond the bundled TLS stack. All sizes in `res/values/dimens.xml`.
|
||||
- Galician interface; warm dark colours with an amber accent (from the radio icon).
|
||||
|
||||
## Current scope (1.11)
|
||||
|
||||
- Login with user/password (refreshes 2.26+ short-lived tokens; older servers' long-lived token) or an API key.
|
||||
- HTTP on the LAN; bundled TLS 1.2 for `https://` (Mozilla roots); other certificates shown by fingerprint,
|
||||
trusted once (trusting the issuing CA so renewals work), forgettable in Settings.
|
||||
- Loopback stream proxy for HTTPS, forwarding seeks with a fresh token per request.
|
||||
- Tabs: Latest (continue listening + newest), Shows, Saved (SD-card downloads, Wi-Fi only by default).
|
||||
- Player: skip back/forward (amounts in Settings), seek, show notes, sleep timer, mark played, close.
|
||||
- Progress sync every 15 s and on pause; offline positions sent later.
|
||||
- Headset buttons; pauses for calls and unplugging.
|
||||
|
||||
## Out of scope
|
||||
|
||||
- Audiobooks, playback speed (Android 2.x can't), HLS/transcoded streams (so no Opus).
|
||||
|
||||
## Must not break
|
||||
|
||||
- An episode only counts as played within a minute of its real end; drop-outs and cut files are retried or
|
||||
reported, never marked played. A stall of 12 s is reported.
|
||||
- Package `com.miniabs` and `miniabs.keystore` (password `miniabs`): updates install over MiniABS.
|
||||
- `src/com/miniabs/net/` is a copy of `tlskit`: change it in `../tlskit` and reinstall.
|
||||
- Installs to internal storage.
|
||||
|
||||
## Code map
|
||||
|
||||
`Api` · `PlayerService` · `StreamProxy` · `DownloadService` / `Downloads` · `Trust` / `TrustPrompt` · `Prefs` ·
|
||||
activities Home, Podcast, Player, Login, Settings · `net/` tlskit · `tools/make_icons.py`, `translate_gl.py`.
|
||||
|
||||
## Build, test, release
|
||||
|
||||
- `ANDROID_JAR=/path/to/android-8/android.jar ./build.sh` (JDK, aapt, dx, zipalign, apksigner, `BC_SRC`).
|
||||
- `JSON_JAR=… test/run_tests.sh`: API, JSON, progress, HTTPS trust and proxy against `test/mock_abs.py`,
|
||||
with good, expired, wrong-host, forged and self-signed certificates (`test/make_pki.sh`).
|
||||
- Release: raise `versionCode`/`versionName`, build, add `changes` in `../tenda-lite/repo/apps.json`, commit
|
||||
and push, `../tenda-lite/repo/publish.sh`.
|
||||
- Siblings: `podlite-ios`, `podlite-mac`; behaviour fixes are backported between them.
|
||||
Reference in new issue
Block a user