Bernds Anruftest Handy↔PC (2026-10-07):
- Teilen am Handy: App "verkleinerte sich", Anruf danach weg. Ursache:
Android 14+ verlangt vor MediaProjection einen Vordergrunddienst vom Typ
mediaProjection; flutter_webrtc startet keinen, der Manifest-Eintrag
verwies auf eine nicht mehr existierende Klasse. Neu: CallService
(microphone|mediaProjection) + CallForeground: Zustimmung → Dienst
(wartet auf echten startForeground) → Mitschnitt. Emulator-Test (Android
16): mit Fix 1080x2400@30 läuft; Gegenprobe ohne Dienst wirft genau
'Media projections require a foreground service ...'.
- Dienst läuft während jedes Anrufs: Mikrofon bleibt im Hintergrund aktiv,
Benachrichtigung "Anruf läuft" führt zurück. Mikrofon-Typ nur mit
Berechtigung, sonst schmalere Variante statt Dienst-Abbruch.
- Handy hörte nichts: SDK schaltet Sprachanrufe auf die Hörmuschel. Jetzt
Lautsprecher als Standard (wie Discord) + Umschalter in der Anrufleiste.
- LiveKit-Teilen am Handy öffnete den PC-Quellen-Auswähler → System-Dialog.
- Im offenen Chat (Handy) Leiste "Anruf läuft · Zurück".
- Einstellungen → Sprache & Video: Mikrofontest mit Pegel (PC-Diagnose:
das Standardgerät lieferte nur Stille – Voicemeeter/virtuelle Geräte).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Bernds Test mit der PC-Testinstanz:
- ✓✓ erschien erst nach erneutem Öffnen: eine Lesebestätigung ohne neue
Nachricht zeichnete nichts neu (Raum-Update kommt im SDK vor der
Bestätigung). Jetzt nach jedem Sync Fingerabdruck der Lesepositionen
prüfen und bei Änderung neu zeichnen.
- Einladung: Chat zeigte leeren Verlauf, Annehmen ging nur in der Liste, und
danach blieb der Chat leer bis zum App-Neustart. Jetzt Annehmen/Ablehnen
direkt im Chat; Annehmen wartet auf den Beitritts-Sync, der Verlauf baut
sich bei invite→join selbst neu auf.
- Trenner blieb stehen, wenn nach dem Öffnen/Zurückkommen nicht gescrollt
wurde. Jetzt: neueste Nachrichten sichtbar (≤ halbe Bildschirmhöhe
hochgescrollt) → nach 6 s weich ausblenden, auch ohne Scrollen.
- Live-Test mit beiden Testkonten (Gegenprobe: ohne Fix rot) in
scripts/test.ps1 -Ui; Testlauf-Sperre erkennt nur noch eigene Testläufe.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- "Neue Nachrichten"-Trenner verschwand beim Öffnen aus der Benachrichtigung
sofort (Bernd). Jetzt: bei den neuesten Nachrichten angekommen noch 6 s
stehen, dann weich ausblenden; wer hochscrollt, behält ihn.
- Windows: mit PYRAMID_PROFILE_DIR heißt das Fenster "Pyramid - TESTINSTANZ"
(Testinstanz mit Testkonto nicht mit der echten Pyramid verwechseln).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Die App signierte LiveKit-Tokens selbst – dafür steckte das SFU-Secret im
App-Code (jeder mit der APK konnte sich Tokens für beliebige Räume und
Identitäten ausstellen). Jetzt holt die App das Token von der bereits
vorhandenen Server-Route /api/livekit-token (whoami-Prüfung, Identität =
geprüfte Matrix-ID). Secret und JWT-Signieren sind aus dem Client entfernt.
- Lesbare Fehlermeldungen (offline, 401, Serverfehler) statt stiller Fehler.
- Gruppenanruf aus dem Chat-Kopf übergibt jetzt den Matrix-Client.
- Tests: Unit-Test mit Mock-HTTP + echter LiveKit-Beitritt (Testkonto).
- Offen: Handy-Anruftest; danach Secret-Rotation durch Bernd (Doku).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Handy: Chat gleitet federnd über die Chatliste (Liste bleibt aufgebaut,
Scrollposition erhalten), beim Zurück wieder hinaus; Liste schon während
des Hinausgleitens bedienbar. Mitgliederleiste gleitet herein.
- Neue/gesendete Nachrichten ploppen weich auf (nur live, nicht beim Öffnen
oder Nachladen), Reaktionen ploppen auf und hüpfen beim Hochzählen,
Ungelesen-Zähler hüpft, Scroll-nach-unten-Knopf federt (Handy größer),
Antwort-Leiste klappt federnd auf/zu, Senden-Pfeil ploppt, Vollansicht
zoomt auf. Alles skaliert mit Einstellung „Animationen“ (0 % = aus).
- Fix: Beim Raumwechsel blieben Antwort-Ziel, Auswahl und getippter Text am
neuen Raum hängen (Antwort auf Raum A konnte in Raum B rausgehen). Jetzt
eigenes Eingabefeld je Raum mit Entwurf im Speicher.
- Antwort-Leiste: größeres Schließen-X auf dem Handy.
- Tests: test/spring_motion_test.dart, UI-Durchlauf mit Übergängen.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Offener Chat meldete bei jedem Neuaufbau erneut "gelesen" – auch mit
App im Hintergrund; die gerade gezeigte Benachrichtigung verschwand dann
sofort wieder. Jetzt nur bei Fokus, je Event nur einmal.
- Zurück in der App: "Neue Nachrichten"-Trenner hinter dem zuletzt
gelesenen Stand, danach gelesen melden.
- "Lesebestätigungen senden" aus: nur noch private Bestätigung
(m.read.private) statt gar keiner – Ungelesen-Zähler stimmen wieder.
Gilt auch für "Gelesen" aus der Benachrichtigung.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Bernds Wunsch 2026-10-07: Die Nachrichtenliste reicht jetzt bis ganz unten;
Tipp-Anzeige und Eingabefeld schweben darueber. Um das Feld herum ist die
Flaeche klar (Chat sichtbar), aber beruehrungsdicht - dort reagiert nur die
Eingabe. Hinter dem Feld selbst Milchglas (Unschaerfe + 78 % Flaeche), Rahmen
und Fokus-Ring aussen. Die Liste bekommt unten genau die gemessene Hoehe der
Leiste als Abstand (MeasureSize; waechst mit Antwort-Leiste/mehrzeiligem
Text), damit die neueste Nachricht ganz ueber die Leiste scrollt; der
Nach-unten-Knopf sitzt darueber.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
_ReplyPreview nutzt den Sprung-Mechanismus der Suche (pendingJumpEventProvider).
Der Sprung scrollt jetzt schrittweise Richtung aeltere Nachrichten, wenn das
Ziel zwar geladen, aber in der lazy ListView noch nicht gezeichnet ist (vorher
gab er dann nach 40 Versuchen auf); dasselbe Zitat darf erneut angetippt
werden. UI-Durchlauf prueft den Sprung per Screenshot.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Bernds Feedback 2026-10-07:
- Schrift-Standard Handy 110 % (statt 115 %).
- PyrIconBtn: im Handy-Layout Symbol 22 px (vorher fest 16), Flaeche 40,
Tippflaeche 44; Farben aus dem Farbmodus statt fest verdrahtet.
- Eingabeleiste: Anhaengen/GIF/Emoji/Senden auf dem Handy 22-23 px statt
12-13 px.
- Chat-Kopf (Handy): Anrufen + Videoanruf sichtbar, Suchen + Mitglieder im
Drei-Punkte-Menue.
- Aufklappbarer DM-Kopf als Ebenen: Zurueck + Symbole bleiben oben,
Profilbereich gleitet darunter und nutzt die volle Breite (vorher Name zu
"p..." gekuerzt, Symbole rutschten in die Mitte); Kuerzel im Avatar
mittig, skaliert mit.
- SpringPress (widgets/spring_press.dart): federnde Druck-Rueckmeldung,
aus bei "Animationen 0 %".
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- rooms_mobile_tile.dart: auf dem Handy grosser Avatar, Name + Uhrzeit der
letzten Nachricht, Vorschau (gleiche Texte wie Push: Medien-Labels,
Antwort-Zitat entfernt; "Du:" bzw. Absender in Gruppen), Ungelesen-Zaehler.
PC behaelt die kompakte Liste, Voice-Kanaele ihre Darstellung.
- utils/date_labels.dart: chatListTime (heute Uhrzeit, Gestern, Wochentag,
Datum; sicher an Zeitumstellungs-Tagen) + 5 Tests.
- Sichtbare englische Texte eingedeutscht (Chats durchsuchen,
Direktnachrichten, Raeume, Nachricht..., Mitglieder, Suchen, ...).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- CallSignalingService/callSignalingProvider und VoiceChannelService/
voiceChannelProvider als einzige oeffentliche Schnittstellen
- voip_manager.dart / livekit_call_manager.dart in ihre Module verschoben,
Logik unangetastet (nur Klassen-Koepfe, @override, Imports, Provider-Namen)
- Alle Konsumenten entkoppelt; Kompositions-Punkt matrix_client.dart als
dokumentierte Ausnahme. analyze sauber, 29 Tests gruen, Windows-Start ok.
Call-Klick-/Geraetetest steht aus (PROGRESS.md)
Qualitäts-Review-Befund (a): Alle 6 part/part-of-Aufteilungen hatten Code
vollständig übernommen (Zeilen-Multiset-Vergleich Original vs. heutiger
Stand: keine Code-Zeile verloren, keine hinzugefügt), ABER erklärende
Kommentare über den Klassen gingen verloren (24 Blöcke, u. a. die
HTML-Subset-Doku über _MatrixHtmlText, die Selbst-Aussperr-Warnung über
updatePowerLevelsSafely, TURN-Verbrauchskarte, PDF-Cache/Viewer-Doku).
Alle an den richtigen Klassen wiederhergestellt; reine Trennlinien und
ALL-CAPS-Abschnittslabels bewusst nicht (Gott-Datei-Navigation, durch
die neuen Dateinamen ersetzt).
Co-Authored-By: Claude Fable 5 <[email protected]>
Fünfter und letzter Durchgang der part/part-of-Aufteilung - reine
Verschiebung, keine Logikänderung. chat_view.dart schrumpft von 2116 auf
33 Zeilen (nur noch Bibliothekskopf). Verifiziert per automatisiertem
Blockvergleich gegen das Original und flutter analyze.
Damit sind alle 5 in der M2-Ist-Analyse gefundenen Gott-Dateien aufgeteilt;
ROADMAP-Punkt "Toten Code & Duplikate entfernen, Ordnerstruktur
vereinheitlichen" abgehakt.
Co-Authored-By: Claude Sonnet 5 <[email protected]>