diff --git a/replica/telefon/features.csv b/replica/telefon/features.csv new file mode 100644 index 0000000..4a7e8c9 --- /dev/null +++ b/replica/telefon/features.csv @@ -0,0 +1,34 @@ +feature,area,priority,original,clone,notes +Become the default phone app (role request),core,must,yes,no, +Call log grouped by day with direction icons,home,must,yes,no, +Call back from the log in one tap,home,must,yes,no, +Missed calls highlighted,home,must,yes,no, +Filter chips All Missed Contacts,home,should,yes,no, +Favourites row (starred contacts),home,must,yes,no, +Search contacts and numbers,search,must,yes,no, +Keypad with letters,keypad,must,yes,no, +T9 contact suggestions on the keypad,keypad,should,yes,no, +Place a call,call,must,yes,no, +Incoming call full screen with slide answer/decline,call,must,yes,no, +Incoming call notification with actions,call,must,yes,no, +In-call screen with timer,call,must,yes,no, +Mute,call,must,yes,no, +Speaker,call,must,yes,no, +In-call keypad (DTMF),call,must,yes,no, +Hold,call,should,yes,no, +Second incoming call (call waiting),call,should,yes,no, +Ongoing call notification,call,must,yes,no, +Proximity sensor screen off at the ear,call,must,yes,no, +Decline with quick reply SMS,call,should,yes,no, +Contact and number details with history,details,should,yes,no, +Toggle favourite,details,could,yes,no, +Open contact in contacts app / add contact,details,should,yes,no, +Call voicemail,voicemail,should,yes,no, +Delete call log entries,home,could,yes,no, +Expressive design (scalloped avatars grouped cards slide pill),design,must,yes,no, +Dynamic colour and dark mode,design,must,yes,no, +Bluetooth audio route,call,should,yes,no, +Spam detection and caller ID,home,could,yes,skip,Google database +Call screening and hold for me,call,could,yes,skip,Google AI +Call recording and live translation,call,could,yes,skip,Google AI; recording blocked for apps +Visual voicemail transcription,voicemail,could,yes,skip,carrier/Google diff --git a/replica/telefon/recon.md b/replica/telefon/recon.md new file mode 100644 index 0000000..085b286 --- /dev/null +++ b/replica/telefon/recon.md @@ -0,0 +1,98 @@ +# Recon map: Google Phone / Pixel Phone (Android) + +Scope: home (search, filter chips, favourites, call log), keypad with contact search, voicemail tab, contact/number details, incoming call, in-call screen, call notifications +For: personal use, a dialer without Google services (project NoGooleApps) +Date: 2026-10-17 + +## Sources + +| # | source | URL | notes | +| --- | --- | --- | --- | +| 1 | screenshots | replica/telefon/screens/ref-01..03.png | supplied by user: home/incoming/in-call (Material 3 Expressive, 2025), older dark in-call with keypad and "More" (hold, video, add call), German call-assist sheet (recording, translation). Reference only | +| 2 | platform docs | https://developer.android.com/reference/android/telecom/InCallService | how a default dialer receives and controls calls | +| 3 | platform docs | https://developer.android.com/reference/android/app/role/RoleManager#ROLE_DIALER | default phone app role | +| 4 | general knowledge as a user | – | filters, favourites, call history grouping, swipe pill answer/decline | + +## Core loop + +See who called and call back in one tap; answer an incoming call reliably, even on the lock screen. + +## Screens + +| ID | screen | how to reach | purpose | key components | states seen | +| --- | --- | --- | --- | --- | --- | +| S01 | Home | launch, tab "Start" | favourites + recent calls | search bar with menu, filter chips (Alle, Verpasst, Kontakte), favourites row (round avatars, "Alle ansehen"), call log grouped by day (avatar/initial, name or number, direction icon + type + time, call button), bottom nav | empty, no permission, filled, missed in red (ref-01) | +| S02 | Search | tap the search bar | find contacts and numbers | text field, contact results, "call number" row | empty, results | +| S03 | Keypad | tab "Wähltasten" | dial a number | number field, 12 keys with letters, call FAB, backspace (long = clear), T9 contact suggestions | empty, typing, matches | +| S04 | Voicemail | tab "Mailbox" | reach voicemail | call voicemail button, number from SIM | no number, number set | +| S05 | Contact / number details | tap avatar or row | everything about a person | big avatar, name, numbers with call/SMS, recent calls with that number, favourite star, open in contacts app | contact, unknown number | +| S06 | Incoming call | system, full screen | answer or decline | caller name, number + label, big scalloped avatar, quick actions (Nachricht), slide pill Ablehnen ← ☎ → Annehmen | ringing, locked screen (ref-01) | +| S07 | In call | after answer / outgoing | control the call | status (Wird angerufen…, timer), name, number, avatar, buttons Wähltasten, Stumm, Lautsprecher, Mehr (Halten, Anruf hinzufügen), red hang-up pill; inline DTMF keypad | dialing, active, on hold, ended (ref-01, ref-02) | +| S08 | Call notification | heads-up / ongoing | answer from anywhere, return to call | incoming (Annehmen/Ablehnen), ongoing (Auflegen, timer) | | +| S09 | Settings | menu | options | default app status, quick replies, sounds and vibration (system), blocked numbers (system) | | + +## Flows + +``` +F01 Call back a missed call + S01 → tap call icon on the row → S07 + taps: 1 +F02 Call a favourite + S01 → tap avatar → S07 (taps: 1) +F03 Dial a number + S03 → digits → call FAB → S07 +F04 Answer + S06 slide to "Annehmen" → S07 → hang up + edge: locked phone, second incoming call while in a call, caller hangs up while ringing +F05 Decline with a message + S06 → Nachricht → pick a quick reply → SMS app +F06 Find a contact + S01 search → S02 → tap → S05 → call +F07 Use the keypad during a call (menus, PIN) + S07 → Wähltasten → DTMF +F08 Become the default phone app (first run) + S01 → banner → system role dialog → yes +``` + +## Components + +| component | variants | states | used on | +| --- | --- | --- | --- | +| Search bar | pill with menu + search icon | idle, focused | S01, S02 | +| Filter chip | selected, unselected | | S01 | +| Avatar | photo, initial on colour, unknown (person icon), business (building icon); sizes 48 / 120 / 200 scalloped | | all | +| Call log row | grouped card (large outer, small inner radius), direction icon (incoming, outgoing, missed red), call button | pressed | S01 | +| Dial key | digit + letters | pressed | S03, S07 | +| Call button | green round FAB (keypad), red pill (hang up) | | S03, S07 | +| Slide pill | Ablehnen ← thumb → Annehmen | idle, dragging | S06 | +| Toggle button | round tonal, on = filled | mute, speaker, hold | S07 | +| Bottom nav | Start, Wähltasten, Mailbox | | S01, S03, S04 | + +## Inferred data model + +The phone app owns almost no data: call history is the system `CallLog`, people are the system `ContactsContract`, voicemail number comes from the SIM. + +``` +CallEntry (system CallLog) number, name, type (incoming|outgoing|missed|rejected|blocked|voicemail), date, duration, numberLabel + confidence: high +Contact (system Contacts) id, lookupKey, name, photoUri, starred, phones[label, number] + confidence: high +QuickReply own: id, text, position (default set, editable) confidence: high +Settings own: theme confidence: high +``` + +## Feature matrix + +See `features.csv`. + +## Out of scope + +- Spam detection, caller ID from Google's database, "Non-Spam/Spam" filters: Google service. +- Call screening, hold for me, direct my call, call recording, live translation (ref-03): Google AI services; recording is also blocked for normal apps since Android 10. +- Visual voicemail transcription: carrier/Google service; we only dial voicemail. +- Wi-Fi calling, RTT, video calls: carrier/IMS features the system handles. +- Editing contacts: done by a contacts app; we open it. + +## Size + +Screens 9, flows 8, entities 2 own. Hard parts: (1) becoming the default dialer and implementing an `InCallService` correctly (call states, audio routing, hold, multiple calls), (2) the incoming call UI over the lock screen with full-screen intent and ringtone handled by the system, (3) fast call log + contacts merging and T9 search. Size: M. diff --git a/replica/telefon/screens/ref-01.png b/replica/telefon/screens/ref-01.png new file mode 100644 index 0000000..bac5ca0 Binary files /dev/null and b/replica/telefon/screens/ref-01.png differ diff --git a/replica/telefon/screens/ref-02.png b/replica/telefon/screens/ref-02.png new file mode 100644 index 0000000..2e1c194 Binary files /dev/null and b/replica/telefon/screens/ref-02.png differ diff --git a/replica/telefon/screens/ref-03.png b/replica/telefon/screens/ref-03.png new file mode 100644 index 0000000..cd5d813 Binary files /dev/null and b/replica/telefon/screens/ref-03.png differ