chahinebrini 63fae25531 fix(android-protection): explicit specialUse FGS type — Samsung/Android 16 crash loop
RebreakVpnService.onStartCommand crashed with SecurityException because Android 16's validateForegroundServiceType rejects the implicit 2-arg startForeground(). Now passes FOREGROUND_SERVICE_TYPE_SPECIAL_USE explicitly (Google's documented best practice) and guards the call so a failed foreground promotion stops the service cleanly instead of crashing the app. Verified vs reported Galaxy A54 / Android 16 signature (97% of crash events, 1-user crash loop).

Bundles pending working-tree work across native/marketing/locales/mac + graphify-out rebuild. gitignore: google-services.json + /screenshots/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 22:33:28 +02:00

82 lines
2.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# screens/04-sos-lyra.yaml
#
# Marketing-Screenshot 04: SOS / Chat mit Lyra
#
# Ziel: Lyra-Chat-Screen im SOS-Modus mit sichtbarer Nachricht und Chip-Row.
# Für vorzeigbaren Marketing-Screenshot: nach Lyra-Antwort warten, dann Screenshot.
# Die Chips ("Atemübung" etc.) müssen sichtbar sein — das beweist Live-Lyra.
#
# Timing: Groq cold start auf Staging = 612s. 20s-Wait für Response inklusive.
#
# Screenshot-Output: screenshots/04-sos-lyra.png
# Env-Vars: E2E_TEST_USER, E2E_TEST_PASSWORD
appId: org.rebreak.app
---
- launchApp:
clearState: true
- waitForAnimationToEnd:
timeout: 5000
# --- Auth ---
- assertVisible:
text: "E-Mail"
- tapOn:
text: "E-Mail"
- inputText: ${E2E_TEST_USER}@rebreak.internal
- tapOn:
text: "Passwort"
- inputText: ${E2E_TEST_PASSWORD}
- tapOn:
text: "Anmelden"
- waitForAnimationToEnd:
timeout: 10000
- assertVisible:
text: "ReBreak"
# --- SOS öffnen via Header-Dropdown ---
# FRAGILE: Avatar-Button hat kein testID → Koordinaten-Tap
# Ersetzen mit: tapOn: { id: "header-avatar-btn" } nach testID-Ergänzung
- tapOn:
id: "header-avatar-btn"
- waitForAnimationToEnd:
timeout: 2000
- assertVisible:
text: "SOS"
- tapOn:
text: "SOS"
# SOS-Screen startet RiveAvatar + Lyra-Streaming
- waitForAnimationToEnd:
timeout: 12000
- assertVisible:
text: "Was beschäftigt dich?"
# Erste Lyra-Nachricht schon sichtbar → Screenshot der leeren/Start-State für clean look
# Für vorzeigbareren Shot: eine Nachricht senden und auf Antwort warten
- tapOn:
text: "Was beschäftigt dich?"
- waitForAnimationToEnd:
timeout: 500
# Realistischer, nicht-klinischer Testtext für Marketing-Screenshot
- inputText: "Ich weiß nicht mehr weiter."
- pressKey: Return
# Warten bis Lyra antwortet und Chips erscheinen
- waitForAnimationToEnd:
timeout: 20000
# Chip "Atemübung" bestätigt aktive Lyra-Response
- assertVisible:
text: "Atemübung"
- waitForAnimationToEnd:
timeout: 1000
- takeScreenshot: screenshots/04-sos-lyra