Skip to content

Mail: eigener Tab für GateControl Mail (Phase 1) - #156

Merged
CallMeTechie merged 3 commits into
mainfrom
feature/mail
Oct 30, 2026
Merged

CallMeTechie merged 3 commits into
mainfrom
feature/mail

Conversation

@CallMeTechie

@CallMeTechie CallMeTechie commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

GateControl Mail – Android (Phase 1, Vertrag D)

Neuer Tab Mail für das Plugin gatecontrol-mail (Tab-Id mail), gebaut strikt gegen den Vertrag C2. Ohne installiertes Plugin (bzw. ohne Tab für die Person) ändert sich in der App nichts.

Was drin ist

  • Tab und Start-Seiten: PluginAvailability.mail (Plugin gelistet mit Tab = installiert und freigeschaltet), Tab nach Chats, Seiten-Id mail (StartPages.MAIL), anheftbar wie die anderen Tabs, Redirect auf die Pager-Seite, eigene Routen in navigation/MailNavigation.kt.
  • Posteingang + Seitenmenü (Mockups Main/Menue): Alle Posteingänge/Konto-Chips mit Farbpunkt, Relevant | Sonstige, Wischgesten nach settings (auch als Bedienungshilfe-Aktionen), Aktionen per langem Druck (gelesen, markieren, Relevant/Sonstige, archivieren, verschieben, Spam, löschen), Pull-to-Refresh, Nachladen, Menü mit Zum Ablegen, Postausgang, Konten mit Ordnern, Speicherbelegung, Konto hinzufügen, Einstellungen. Kein Kalender/Ressourcen.
  • Lesen (Mockup Lesen): KI-Leiste (Kurz gesagt, Zu tun als Chips → Familienkalender/eigener Kalender, Antwortvorschläge), Anhänge mit Drive-Vorschlag, „In Drive speichern“, „Anderer Ordner“ (Drive-Ordnerwahl), „künftig automatisch ablegen“, „Alle in Drive speichern“, „Bilder laden“/„Immer für diesen Absender“, Zählpixel-Hinweis, Unterhaltung, Abmelden, Antworten/Allen antworten/Weiterleiten.
  • HTML-Anzeige: WebView mit JavaScript aus, ohne Datei-/Content-Zugriff, ohne DOM-Storage/Fenster, mit CSP; alle Anfragen abgefangen – nur img/<token> und cid/<mail>/<anhang> werden mit der Client-Anmeldung über die Plugin-API geladen (cid: wird umgeschrieben), alles andere bleibt leer; Links extern, mailto: im Schreiben.
  • Schreiben (Mockup Schreiben): Absender-Konto, Empfänger-Chips mit Vorschlägen (contacts), Cc/Bcc, Betreff, Text + Zitat, Anhänge vom Gerät (Plugin-Media, ≤ 25 MB) oder „Aus Drive“ (Drive-Suche, je Datei Kopie/Link), Server-Warnungen, laufendes Speichern als Entwurf, Senden mit 10-s-Rückgängig-Leiste im Posteingang, Senden planen (morgen 8 Uhr, Montag 8 Uhr, frei).
  • Ablegen (Mockup Ablegen): Liste filing mit Vorschlag und Sicherheit, Ablegen / Anderer Ordner / Nicht ablegen, Alle ablegen.
  • Konto (Mockup Konto): Anbieterliste, Formular mit Hinweis, IMAP/SMTP von Hand für eigene Domains (nur TLS/STARTTLS), Microsoft-Anmeldung mit PKCE im Custom Tab, Redirect msauth://com.gatecontrol.client/<URL-kodierter Base64-SHA-1 der Signatur> zur Laufzeit aus der App-Signatur; MailSigninActivity (exportiert, aber erst mit Plugin aktiviert). Einstellungen (Unterhaltungen, Wischen) und Konto-Seite (Name, Farbe, Art, Push, KI, Anhänge, Signatur, Passwort/Neu anmelden, Entfernen), Postausgang.
  • Push: Topic mail öffnet die Mail (Kanal „Mail“), mail_failed den Postausgang; Realtime-Event mail lädt Listen neu.
  • Offline: Listen (Posteingang ≥ 30 Tage, mind. 100) und geöffnete Mails pro Anmeldung in noBackupFilesDir/mail; gelöscht bei Plugin weg, Login-Wechsel oder 401 (Fernlöschen), samt geöffneter Anhänge.
  • Feature-Flags: ohne ai keine KI-Leiste, ohne drive keine Drive-Knöpfe/kein „Zum Ablegen“, ohne microsoft Microsoft mit „noch nicht eingerichtet“, ohne images kein „Bilder laden“, ohne familyCalendar kein Familienkalender.
  • Texte DE/EN, R8-Keep-Regel, Doku in docs/FEATURES.md.

Tests

Neue Unit-Tests: MailJsonTest, MailLogicTest, MailMicrosoftTest (RFC-7636-Vektor, Redirect-Hash), MailPushCacheTest, dazu MainTabsTest (Tab-Reihenfolge, Seiten, Routen) und ManifestSecurityTest (msauth-Redirect, FileProvider-Pfad).
Lokal: :app:testDebugUnitTest, :app:lintRelease, :app:assembleDebug, :app:minifyReleaseWithR8.

Abgleich mit dem fertigen Plugin (gatecontrol-plugins#121)

  • GET img/<token> liefert { mime, size, data } (Base64) → wird im WebView dekodiert ausgeliefert; GET cid/… liefert { mediaId, … } → Bild aus der Plugin-Media; nur Rasterbilder, SVG abgelehnt.
  • bodyMissing mit Hinweis, KI erneut fragen mit { again: true }, Gerätedatei als Att { mediaId, name }, vorhandene Anhänge beim PUT drafts als { id }.
  • Gelesen-Markieren per POST messages/flags { unread: false } beim Öffnen; Signatur setzt die App oben in neue Mails, Antworten und Weiterleitungen.
  • Microsoft-Konten: Warnung too_large mit Servertext, 409 attachments_unsupported verständlich erklärt; alle neuen Fehlercodes mit Texten.
  • counts = ungelesene je Tab („Sonstige · n“), Ordnerlisten laden über next ältere Mails nach.

https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD


Generated by Claude Code

Claude added 3 commits October 30, 2026 18:54
Tab „Mail“ für das Plugin gatecontrol-mail nach Vertrag D: Posteingang mit
Alle/Konto, Relevant/Sonstige und Wischgesten, Seitenmenü mit Konten und
Ordnern, Lesen mit KI-Leiste, Drive-Ablage und abgesicherter HTML-Anzeige
(WebView ohne JavaScript, Anfragen abgefangen), Schreiben mit Empfänger-
Vorschlägen, Anhängen vom Gerät oder aus Drive, 10-s-Rückgängig und
Senden planen, Zum Ablegen, Postausgang, Konto hinzufügen (inkl.
Microsoft-Anmeldung mit PKCE über Custom Tabs und msauth-Redirect),
Einstellungen, Push (Kanal „Mail“), Realtime-Events und Offline-Kopie.
Als Seite neben Start anheftbar. Ohne Plugin ändert sich nichts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
- Bilder im WebView: img/<token> liefert JSON mit Base64, cid/… die mediaId
  (Bild aus der Plugin-Media); nur Rasterbilder, SVG wird abgelehnt.
- Message.bodyMissing mit Hinweis und „Erneut versuchen“.
- KI erneut fragen mit { again: true }.
- Gerätedatei als Att { mediaId, name }.
- Neue Fehlercodes (microsoft_off, attachments_unsupported, images_blocked,
  images_off, drive_unavailable, no_folder, not_waiting, exists,
  links_disabled) mit Texten DE/EN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
@CallMeTechie
CallMeTechie merged commit 20d31b2 into main Oct 30, 2026
9 checks passed
CallMeTechie pushed a commit that referenced this pull request Oct 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants