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>
3.8 KiB
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
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):
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:
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.
Für Mitlesende
Dieses Repo gehört zum Ökosystem von mana 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.