# 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.