mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-09-15 23:00:09 -04:00
androidx.datastore.preferences publishes no wasmJs variant at any version, so core:prefs can no longer depend on DataStore<Preferences> from commonMain. Introduces PrefsStore/PrefsSnapshot/PrefsKey (core/prefs/store/PrefsStore.kt), a minimal interface mirroring DataStore<Preferences>'s own shape closely enough that porting each *PrefsImpl off DataStore is a mechanical key-factory rename, not a rewrite. Two implementations: nonWebMain's DataStorePrefsStore adapts a real DataStore<Preferences> (android/jvm/iOS unchanged underneath), and wasmJsMain's LocalStoragePrefsStore is backed by the browser's localStorage directly -- synchronous and built-in, so unlike core:database's OPFS story this needs no Worker or npm dependency. Unlike core:database's DatabaseManager split, none of the 17 *PrefsImpl classes needed to move out of commonMain: the platform difference is fully absorbed inside PrefsStore's two implementations, so every impl's diff is exactly the mechanical shape promised (defaults, migration logic, dynamic per-node keys all unchanged). PrefsDataStores.kt's 12 marker interfaces/wrappers get the same mechanical swap. Enabling core:prefs's wasmJs target exposed a second, one-module-upstream gap: core:repository had no wasmJs target at all (its `expect class Location` had android/jvm/iOS actuals but no wasmJs one). Fixed with a wasmJsMain placeholder mirroring the existing jvmMain placeholder exactly -- desktop has no real location hardware either, so this introduces no new product decision, just parity with the platform that already has none. core:service's MeshLogCleanupWorkerTest fake DataStore<Preferences> is updated to fake PrefsStore/PrefsSnapshot instead, following the interface change through its one external consumer. CorePrefsWasmJsModule (new Koin module, localStorage-backed) is not yet registered anywhere -- no webApp module exists yet to wire it into, same as core:database's SingleDatabaseProvider precedent. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>