README.md
1 # Dialer Search Ui
2
3 searchfragment/ contains all code relevant to loading, rendering and filtering
4 search results in both dialpad search and regular search.
5
6 ## Loading
7
8 ### On Device Contacts
9
10 On device contacts loading happens in SearchContactsCursorLoader. It is used in
11 conjunction with NewSearchFragment and Loader Callbacks to return a cursor from
12 cp2 containing all of the relevant info needed to rendering.
13
14 ### Business Search
15
16 // TODO(calderwoodra)
17
18 ### Google Directory Search
19
20 // TODO(calderwoodra)
21
22 ## Rendering
23
24 NewSearchFragment, SearchAdapter, SearchContactViewHolder and
25 SearchCursorManager are used to render contact information. The fragment's
26 recyclerview, adapter and viewholder work as expected like a normal recyclerview
27 paradigm.
28
29 The are three things to note about rendering:
30
31 * There are three data sources rendered: On device contacts, business search
32 results and google directory results.
33 * SearchContactsCursorLoader returns its cursor from cp2 and we filter/wrap it
34 with SearchContactCursor to render useful results (see below).
35 * SearchCursorManager is used to coalesce all three data sources to help with
36 determining row count, row type and returning the correct data source for
37 each position.
38
39 ## Filtering
40
41 On device contacts are filtered using SearchContactCursor. We wrap the cursor
42 returned from SearchContactsCursorLoader in NewSearchFragment#onLoadFinished in
43 order to abstract away the filtering logic from the recyclerview adapter and
44 viewholders.
45
46 SearchContactCursor applies filtering in SearchContactCursor#filter to remove
47 duplicate phone numbers returned from cp2 and phone numbers that do not match
48 the given search query.
49
50 Filtering methods used are:
51
52 * T9/dialpad search methods
53 * Initial match (957 matches [W]illiam [J]ohn [S]mith)
54 * Number + name match (1800946 matches [1800-Win]-A-Prize)
55 * Numeric/dialpad search methods
56 * Simple number match (510333 matches [510-333]-7596)
57 * Country-code agnostic matching for E164 normalized numbers (9177 matches
58 +65[9177]6930)
59 * Country-code agnostic matching (510333 matches 1-[510-333]-7596)
60 * Area-code agnostic matching (333 matches 510-[333]-7596)
61 * Name/keyboard search methods:
62 * Simple name match (564 matches [Joh]n)
63