Skip to content

feat(mail): Favoriten-Kachel ruft die Hauptnummer direkt an - #168

Merged
CallMeTechie merged 2 commits into
mainfrom
feature/favorite-direct-call
Oct 31, 2026
Merged

CallMeTechie merged 2 commits into
mainfrom
feature/favorite-direct-call

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

Worum es geht

Seit #167 gibt es Kontakt-Favoriten als Kacheln auf Start. Ein Tipp sollte direkt die Hauptnummer anrufen, CALL_PHONE fehlte aber im Manifest, deshalb öffnete sich immer nur der Wähler.

Umsetzung

  • Manifest: CALL_PHONE neu, dazu android.hardware.telephony mit required="false", damit Tablets ohne Telefon die App weiter installieren.
  • Erster Tipp ohne Berechtigung: Ein kurzer Hinweis im App-Design erklärt: „Damit ein Tipp direkt anruft, braucht GateControl die Berechtigung ‚Anrufe tätigen‘.“ Er nennt auch den Weg in den Android-Einstellungen (Apps › GateControl › Berechtigungen › Telefon). Danach kommt die System-Abfrage über den Activity-Result-Launcher.
    • Erteilt: Die App ruft sofort an.
    • Abgelehnt: Diesmal öffnet sich der Wähler (ACTION_DIAL), beim nächsten Tipp fragt die App erneut.
    • „Nicht mehr fragen“: Ab dann öffnet sich immer der Wähler, ohne erneute Nachfrage.
    • „Wähler öffnen“ im Hinweis: Diesmal öffnet sich der Wähler.
    • Wird die Berechtigung später in den Einstellungen erteilt, ruft die Kachel direkt an.
  • Sicherheit:
    • Die Nummer geht über Uri.fromParts("tel", nummer, null) an Android.
    • Erlaubt sind nur Ziffern, ein führendes +, *, # und Trennzeichen (Leerzeichen, -, ., /, Klammern). Alles andere öffnet den Kontakt, zum Beispiel Buchstaben, Wahlpausen ,/; oder ein + mitten in der Nummer.
    • Nummern mit * oder # sind MMI- oder USSD-Codes (zum Beispiel *#06#, **21*…#, #31#… oder eine Nummer mit # am Ende). Sie werden nie per ACTION_CALL gewählt, sondern immer nur in den Wähler gelegt.
    • Auf Geräten ohne Telefonie öffnet sich immer der Wähler, ohne Nachfrage.
  • Nur Favoriten-Kacheln rufen direkt an. „Anrufen“ in der Kontaktansicht, beim Absender und auf der Notfall-Karte bleibt beim Wähler (ACTION_VIEW/ACTION_DIAL). Die CALL/DIAL-Logik gab es nur an der Kachel.
  • Texte: Deutsch und Englisch.
  • Datenschutz: Die Berechtigungstabellen in docs/PRIVACY_POLICY.md (DE/EN), die Berechtigungsliste in privacy-policy.html und die Notiz in docs/GOOGLE_PLAY.md nennen die neue Berechtigung. CALL_PHONE ist bei Google Play nicht eingeschränkt, ein Formular braucht es also nicht. Die App erhebt dadurch keine neue Datenart.

Tests

  • MailContactLogicTest:
    • Nummernprüfung
    • Servicecodes
    • Entscheidung CALL/DIAL/ASK
    • Erkennung von „Nicht mehr fragen“
  • ManifestSecurityTest: CALL_PHONE vorhanden, Telefonie optional.
  • Lokal: :app:testDebugUnitTest, :app:lintRelease und :app:assembleDebug sind grün.

Generated by Claude Code

Claude added 2 commits October 31, 2026 20:36
Ein Tipp auf einen Kontakt-Favoriten auf Start ruft die Hauptnummer jetzt
direkt an (ACTION_CALL). CALL_PHONE steht dafür im Manifest, Telefonie
bleibt optional (android.hardware.telephony required=false), damit Tablets
ohne Telefon die App weiter installieren.

- Erster Tipp ohne Berechtigung: kurzer Hinweis im App-Design (mit dem Weg
  in den Android-Einstellungen), dann die System-Abfrage über den
  Activity-Result-Launcher. Erteilt: sofort anrufen; abgelehnt: diesmal der
  Wähler; „Nicht mehr fragen“: dauerhaft der Wähler ohne erneute Nachfrage.
- Nummernprüfung: nur Ziffern, führendes +, * und # sowie Trennzeichen;
  alles andere öffnet den Kontakt. Übergabe per Uri.fromParts("tel", …).
- Nummern mit * oder # (MMI/USSD wie *#6#, **21*…#, # am Ende) gehen nie
  direkt raus, immer nur in den Wähler. Geräte ohne Telefonie: Wähler.
- „Anrufen“ in der Kontaktansicht, beim Absender und auf der Notfall-Karte
  bleibt beim Wähler.
- Datenschutzerklärung (DE/EN, HTML) und Play-Notizen nennen die neue
  Berechtigung.
- Unit-Tests für Nummernprüfung, Servicecodes, CALL/DIAL-Entscheidung,
  „Nicht mehr fragen“ und das Manifest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
@CallMeTechie
CallMeTechie merged commit fbb49e6 into main Oct 31, 2026
5 checks passed
CallMeTechie pushed a commit that referenced this pull request Oct 31, 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