Contact search
v0.9.7Contacts appear in drawer search alongside apps, with call, message and email buttons on the row. People you star or contact often come first.
- Settings → Drawer → Contacts
- Settings → Drawer → Contact actions
- Settings → Drawer → Contact ranking data
Turning it on
Contact search is off by default and requires the Contacts permission. When you turn on the switch in Settings → Drawer → Contacts, Android shows a permission prompt. Until you grant it, the switch stays off and the drawer shows only apps and answers.
What a contact row shows
Each contact row carries up to three trailing buttons — call, message, and email. You choose which actions to show in Settings → Drawer → Contact actions; all three are on by default. A button appears only when the contact has that target, so three is the worst case rather than the common one.
Call opens the phone dialer, message opens your messaging app, and email opens your email app — so none of them requires a permission beyond the Contacts permission already granted.
Picking a number or address
When a contact has several numbers or several email addresses, tapping a quick-action button opens a picker. A “Remember my choice” checkbox appears at the bottom. Check it and the picker goes away for that action, on that contact — the three actions remember independently.
Long-press the same button to reopen the picker and change the remembered target.
The picker marks one of the contact’s numbers with • ⭐ Default, bold, on the type line. The marker is text only — no badge, no color, no layout change — so the rows stay two lines.
Under the hood
The three actions store separate keys (call:, sms:, email:) in a contact_number_choices preferences file. That file is kept out of the config export archive, so remembered choices never ship when you share a backup — the archive is meant to be shareable.
The marked number is the contact’s super-primary, or the first primary when there is no super-primary — the same precedence the Android contact provider uses.
How results are ordered
Four signals decide which contacts surface first. Starring is the strongest single nudge, but how often you contact someone is capped — so one person you message constantly cannot bury a favorite, and a favorite you never actually contact still loses to someone you message daily.
Under the hood
score(contact) =
80 if starred
+ min(70, 12 × log2(1 + taps)) # frecency; halves every 30 days
+ 5 if has_photo
+ 30 × (1 - rank / pool_size) # provider match rank, fades down the pool
pool = provider results, widened from 3 to 20 to give the scorer
something to reorder
show top 3 by score
A weighted sum rather than strict tiers: tiers would rank a favorite you never contact above someone you message daily, and would let a barely-matching favorite head a query meant for someone else.
What is stored on your device
Each contact row open and each quick action adds 1.0 to a score that halves every 30 days. Decay stops the tally from fossilizing; the cap on its contribution keeps a heavily contacted person from outranking a favorite.
This tap data lives in its own preferences file, which keeps it out of both the config export archive and Google cloud backup.
Under the hood
The isolation is by construction, not by an exclusion rule — both the config exporter and cloud backup are allowlists naming the one preferences file they carry, so any new file is outside them automatically.
Settings → Drawer → Contact ranking data deletes the tap data and reports how many contacts are tallied, so you can see whether there is anything to clear. The control stays reachable even when contact search is off, because the tap data outlives the switch.
Limits
Only the top three contacts show in search results. A launch the user cancels teaches nothing — the tap score updates only when an activity actually starts. A cancelled picker records nothing, so changing your mind in the chooser does not boost the contact’s score.