mana-kotlin-widget/README.md
Till JS 2d7704e354 README: Bau-Anleitung aus offenen Klonen und Erwartungssatz
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>
2026-09-30 13:35:36 +02:00

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.