Vorbereitung für die Spiegelung nach git.mana.how/offen (Prüfliste QUELLOEFFNUNG.md §5): Sweep sauber, keine Privat-Marker, Apache-2.0 mit NOTICE seit Welle 1, Schriften mit OFL-Texten. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
94 lines
3.8 KiB
Markdown
94 lines
3.8 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.
|
|
|
|
## Bauen
|
|
|
|
Kotlin/Gradle. Die mana-Bibliotheken finden sich gegenseitig über
|
|
`mavenLocal()` — in dieser Reihenfolge veröffentlichen:
|
|
|
|
```bash
|
|
for r in mana-kotlin-core mana-kotlin-tokens mana-kotlin-event-sync \
|
|
mana-kotlin-widget mana-kotlin-event-sync-room mana-kotlin-ui; do
|
|
git clone https://git.mana.how/offen/$r.git && (cd $r && ./gradlew publishToMavenLocal)
|
|
done
|
|
```
|
|
|
|
Danach baut auch [Pageta für Android](https://git.mana.how/offen/pageta-android).
|
|
|
|
## Für Mitlesende
|
|
|
|
Dieses Repo gehört zum Ökosystem von [mana](https://mana.how) und liegt
|
|
offen, damit andere es lesen, einordnen und als Grundlage nutzen können —
|
|
das spart Arbeit, egal ob ein Mensch oder ein Modell davorsitzt.
|
|
|
|
**Was du erwarten darfst:** den Code so, wie er tatsächlich in Gebrauch ist,
|
|
unter Apache-2.0 (siehe `LICENSE` und `NOTICE`). Keine Attrappe, kein
|
|
zurechtgeschnittener Auszug — samt seiner Geschichte.
|
|
|
|
**Was du nicht erwarten darfst:** Support, Antwortzeiten, Zusagen zur
|
|
Abwärtskompatibilität oder die Übernahme von Änderungswünschen. Dieses Repo
|
|
folgt dem, was die eigenen Anwendungen brauchen. Fehlermeldungen sind
|
|
willkommen, eine Antwort ist nicht zugesagt.
|
|
|
|
**Fork ist ausdrücklich erlaubt** und oft der schnellere Weg als zu warten.
|