feat(android): reach desktop feature parity and fix 16 KB page-size crash

Swap lazysodium/JNA for a pure-Java Bouncy Castle crypto envelope so the
APK ships no native .so files (resolves the Android 15 16 KB alignment
crash) while staying byte-compatible with the desktop libsodium sync.

Bring the Android app up to the desktop feature set: full item CRUD with
an add/edit screen and FAB, inline editing on the detail view (status,
rating, favorite, per-unit/segment watched toggles, delete), online
metadata search (TMDB/OpenLibrary/AniList/RAWG) that pre-fills the editor,
library filtering and sorting, a statistics view, and settings polish for
dark mode and provider API keys/language.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Tronax 2026-06-21 01:40:55 +02:00
parent de353f0218
commit c0389bd8d2
Signed by: Tronax
SSH key fingerprint: SHA256:2pKKXDZucWvaF/GzXNz0FY53EAO1YDLN80bqS+TTz/o
24 changed files with 2162 additions and 75 deletions

View file

@ -68,12 +68,9 @@ dependencies {
implementation(libs.kotlinx.serialization.json)
implementation(libs.coil.compose)
// lazysodium-android pulls JNA as a plain jar; on Android we need the aar
// (it carries the native .so), so exclude the transitive jar and add the aar.
implementation(libs.lazysodium.android) {
exclude(group = "net.java.dev.jna", module = "jna")
}
implementation(libs.jna) { artifact { type = "aar" } }
// Bouncy Castle (pure Java) provides Argon2id + ChaCha20-Poly1305 with no
// native .so, so the app stays compatible with Android 15's 16 KB page size.
implementation(libs.bouncycastle)
implementation(libs.androidx.security.crypto)
debugImplementation(libs.androidx.ui.tooling)