mana-kotlin-widget/README.md
Till JS 625042484d build: Maven-Registry till/maven -> mana/maven (Namespace-Vereinheitlichung)
Kotlin-Libs liegen jetzt in der Verein-Package-Registry git.mana.how/api/packages/mana/maven
(alle 10 Libs / 50 Versionen registry-zu-registry kopiert). Consumer- und
Publisher-URLs nachgezogen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 18:05:29 +02:00

63 lines
2.6 KiB
Markdown

# mana-kotlin-widget
Geteilte Bausteine für **Home-Screen-Widgets** (Jetpack Glance) der mana-
Android-Flotte. Schwesterlib zu `mana-kotlin-tokens` / `-ui` / `-core`,
publiziert auf dem Forgejo-Maven (`git.mana.how/api/packages/mana/maven`,
anonym lesbar).
## Warum
Jede App, die ein Widget hatte (memoro, nutriphi, stetick, wordeck, zitare),
hat **Farben hart kodiert** und den Glance-Boilerplate (Receiver, Intents)
kopiert. Diese Lib zieht den teilbaren Teil heraus — vor allem die
**Theme-Brücke**: Glance kann das Material-3-Theme der App nicht mitbenutzen,
also rechnet diese Lib eine `ManaTheme`-Variant in Glance-taugliche,
Hell/Dunkel-umschaltende Farben um.
Was **nicht** geteilt wird: das Datenladen (jede App liest ihr eigenes
Repository) und bewusst eigene Paletten (z. B. Zitares Pergament-Optik).
## API
| Symbol | Zweck |
|--------|-------|
| `ManaGlanceTheme(theme) { … }` | `GlanceTheme`-Wrapper; innen liefert `GlanceTheme.colors.*` die Variant-Farben. |
| `ManaTheme.toGlanceColors()` | Die 12 Tokens als `ColorProvider` (Auto-Hell/Dunkel) — für kleine Widgets, die Farben direkt setzen. |
| `ManaTheme.glanceColorProviders()` | Variant als Glance-`ColorProviders` (für eigene `GlanceTheme`-Aufrufe). |
| `openAppAction(ctx, Activity::class.java)` | Tap → App öffnen (`NEW_TASK \| CLEAR_TOP`). |
| `openAppAction(ctx, …, action, extras)` | App öffnen mit Action/String-Extras. |
| `deepLinkAction(ctx, "app://…", Activity::class.java)` | Tap → Deep-Link öffnen. |
| `ManaGlanceWidgetReceiver(MyWidget())` | Receiver-Basis (spart die `override`-Zeile). |
## Beispiel
```kotlin
class DueWidget : GlanceAppWidget() {
override suspend fun provideGlance(context: Context, id: GlanceId) {
val due = withContext(Dispatchers.IO) {
(context.applicationContext as MyApp).container.repo.dueCount()
}
provideContent {
ManaGlanceTheme(ManaTheme.SKYLIGHT) {
Column(GlanceModifier.fillMaxSize().background(GlanceTheme.colors.surface).padding(12.dp)) {
Text("Wordeck", style = TextStyle(color = GlanceTheme.colors.primary))
Text(if (due > 0) "$due fällig" else "Nichts fällig")
}
}
}
}
}
class DueWidgetReceiver : ManaGlanceWidgetReceiver(DueWidget())
```
## Build / Publish
Wie die anderen Kotlin-Libs auf der GPU-Box (Java/Android SDK):
```bash
FORGEJO_TOKEN=… ./gradlew publishReleasePublicationToForgejoRepository
```
Versionen: Glance `1.1.1`, Compose BOM `2024.12.01`, `mana-kotlin-tokens 0.2.0`
— deckungsgleich mit den App-Modulen, damit das Artefakt binär passt.