Commit graph

16 commits

Author SHA1 Message Date
KhooLy
47e8c7d22f Accept Apple catalog snapshots as JSON 2026-07-13 15:51:52 +03:00
KhooLy
dabcbc39c2 Use Apple platform services in shared host 2026-07-13 15:44:02 +03:00
KhooLy
d2d075ed6b Accept platform services in shared app host 2026-07-13 15:40:38 +03:00
KhooLy
6fa6c81af3 Split shared platform service capabilities 2026-07-13 15:39:51 +03:00
KhooLy
8790838407 Add Android shared services composition root 2026-07-13 15:38:19 +03:00
KhooLy
fa4adcc5d8 Add shared player controls boundary 2026-07-13 15:37:40 +03:00
KhooLy
42f905af62 Add shared profile settings stores 2026-07-13 15:36:57 +03:00
KhooLy
3ecdb37e5a Add shared search and detail stores 2026-07-13 15:36:18 +03:00
KhooLy
dd54966fb8 Include shared app state 2026-07-13 15:16:59 +03:00
KhooLy
cb99b2b1e8 Add shared catalog action boundary 2026-07-13 15:08:20 +03:00
KhooLy
45c45b0ce6 Add Apple multiplatform foundation 2026-07-13 03:47:45 +03:00
KhooLy
31cfd2b931 Add Koin as the DI mechanism for shared code
Hilt is Android/Dagger-only and can't run on Kotlin/Native, so it
can't be used for anything moving into :shared. Koin is the standard
KMP alternative — this wires it up for real: a Koin module
(sharedModule) providing GreetingViewModel via the koin viewmodel DSL,
CmpSmokeTest now resolves it through koinViewModel() instead of
constructing it directly, and AppApplication.onCreate() calls
initSharedKoin() at startup so this isn't just compile-checked dead
code — Koin actually starts alongside Hilt (the two coexist fine,
verified by compiling the full app afterward).

This is the pattern for every ViewModel/ScreenModel that moves to
:shared going forward. HomeViewModel/DetailViewModel themselves stay
Hilt-based in app for now — porting them means porting their
repositories to KMP first, which is separate, larger work.

Verified compiling for android, iosArm64, iosSimulatorArm64, and both
app product flavors still build with Koin initialized at startup.
2026-07-13 03:09:18 +03:00
KhooLy
89ee3eb95f Move DeviceType and card size presets into the shared KMP module
DeviceType/LocalDeviceType/touchClickable and the four poster/
horizontal card size preset functions were pure Compose (no Android
imports beyond foundation.clickable, which is multiplatform) — same
straight move as FluxaColors/FluxaDimensions, same package name, zero
call-site changes across the 38 files that reference them.

This unblocks moving more of the mobile card layout math into :shared
later, since the device-aware sizing helpers no longer live only in
the Android-only app module.

Verified compiling for android, iosArm64, iosSimulatorArm64, and both
app product flavors still build.
2026-07-13 03:02:30 +03:00
KhooLy
ddb556cb27 Move the mobile catalog card to the shared KMP module
Adds CatalogCardUiModel + CatalogCard to :shared: a fully-resolved,
primitive-only render model (Dp/Sp/String/Float, no Meta/UserProfile)
and a Coil3-based composable that draws it, per this project's UI
optimization rule (leaf UI components get small immutable models, not
domain objects). MobileMovieCard.kt in app becomes a thin mapper —
Meta/UserProfile/DeviceType-aware layout math stays Android-side,
producing a CatalogCardUiModel that the shared composable renders.

Pinned coil3 to 3.4.0 (was 3.5.0): 3.5.0's iosarm64/iossimulatorarm64
klibs were built with a newer Kotlin ABI (2.4.0) than this project's
compiler (2.3.20) can consume. Revisit once the project bumps Kotlin.

Verified: CatalogCard/CatalogCardUiModel compile for android,
iosArm64, and iosSimulatorArm64; app's mobile and tv flavors both
still build against the rewritten MobileMovieCard.
2026-07-13 03:00:38 +03:00
KhooLy
a3d42a15ca Move FluxaColors/FluxaDimensions into the shared KMP module
First real slice of ui/catalog moving to :shared: both objects were
already pure Compose (Color/dp/sp), no Android imports, so this is a
straight module move with zero call-site changes elsewhere in app —
they keep the same package (com.fluxa.app.ui.catalog), so every
existing same-package and imported reference resolves unchanged
across the module boundary. Verified compiling for android,
iosArm64, and iosSimulatorArm64, and that both app product flavors
still build against it.

Every future shared mobile composable needs this theme foundation,
so it's the natural first thing to move.
2026-07-13 02:52:47 +03:00
KhooLy
395f49a340 Add Compose Multiplatform module
New :shared module with a fluxa.kmp.compose convention plugin (Compose
Multiplatform's runtime/foundation/material3/ui, layered on the
existing fluxa.kmp.library android+iOS target setup) plus a smoke-test
composable proving a real @Composable using Material3 compiles for
android, iosArm64, and iosSimulatorArm64.

This is where ui/catalog/mobile/** screens will move to in the next
phase, sharing the same UI code between Android mobile and iOS.
2026-07-13 02:47:02 +03:00