Gray out Save until settings are dirty, add a Cancel button that discards edits, reorder ReadingScreen to match the watch's build_content() (adds the missing Attitude/Outcome preview and the day-significance rank/count), and fix UI chrome to follow the app's own language setting instead of system locale (values-de/strings.xml + appStringResource()/localizedContext()).
Deck in a Dash — Android app
A standalone Android app showing the same daily tarot (Celtic Cross) +
astrology reading as the Pebble watch app (../watch/), with a burger
menu leading to a config page. Independent of the watch app - neither
requires the other to be installed. See the root
CLAUDE.md's "Android app" section for the full
architecture (JNI-linked engine/interpreter, JSON bridge schema,
WorkManager notification, card art pipeline).
Building
Requires:
- A JDK (17+; the project's own
compileOptions/toolchain target Java 17).JAVA_HOMEshould point at it, or ajavamatching that version must be first onPATH. - The Android SDK, with
ANDROID_HOME(orANDROID_SDK_ROOT) set - needs at minimumplatforms;android-36,build-tools;36.0.0,ndk;30.0.14904198, andcmake;3.22.1installed (seeapp/build.gradle.kts'scompileSdk/ndkVersionandapp/src/main/jni/CMakeLists.txt'scmake_minimum_requiredfor the exact versions this project pins -../build-image/Dockerfileinstalls the same ones for CI). ANDROID_NDK_HOMEset to that installed NDK's directory.- Python 3 + Pillow (
pip install Pillow) - needed byscripts/gen_card_images.py/gen_launcher_icon.py, which Gradle'spreBuildtask runs automatically (seeapp/build.gradle.kts).
./gradlew assembleDebug # -> app/build/outputs/apk/debug/app-debug.apk
Or, from the repo root: make android, which wraps the above and
copies the APK into dist/deck-in-a-dash-<version>.pbw's sibling,
dist/deck-in-a-dash-<version>.apk (same version resolution as make package/make watchapp - see the root Makefile).
The Gradle wrapper (./gradlew) resolves its own pinned Gradle version
on first run - no separate Gradle install is needed.
Ships the Android auto-generated debug keystore, not a release-signed
build - see the root CLAUDE.md's Android section for why.