jianglk.darker
7ee447c011
|
4 months ago | |
---|---|---|
.. | ||
common | 4 months ago | |
cp2 | 4 months ago | |
directories | 4 months ago | |
list | 4 months ago | |
nearbyplaces | 4 months ago | |
remote/res | 4 months ago | |
README.md | 4 months ago |
README.md
Dialer Search Ui
searchfragment/ contains all code relevant to loading, rendering and filtering search results in both dialpad search and regular search.
Loading
On Device Contacts
On device contacts loading happens in SearchContactsCursorLoader. It is used in conjunction with NewSearchFragment and Loader Callbacks to return a cursor from cp2 containing all of the relevant info needed to rendering.
Business Search
// TODO(calderwoodra)
Google Directory Search
// TODO(calderwoodra)
Rendering
NewSearchFragment, SearchAdapter, SearchContactViewHolder and SearchCursorManager are used to render contact information. The fragment's recyclerview, adapter and viewholder work as expected like a normal recyclerview paradigm.
The are three things to note about rendering:
- There are three data sources rendered: On device contacts, business search results and google directory results.
- SearchContactsCursorLoader returns its cursor from cp2 and we filter/wrap it with SearchContactCursor to render useful results (see below).
- SearchCursorManager is used to coalesce all three data sources to help with determining row count, row type and returning the correct data source for each position.
Filtering
On device contacts are filtered using SearchContactCursor. We wrap the cursor returned from SearchContactsCursorLoader in NewSearchFragment#onLoadFinished in order to abstract away the filtering logic from the recyclerview adapter and viewholders.
SearchContactCursor applies filtering in SearchContactCursor#filter to remove duplicate phone numbers returned from cp2 and phone numbers that do not match the given search query.
Filtering methods used are:
- T9/dialpad search methods
- Initial match (957 matches [W]illiam [J]ohn [S]mith)
- Number + name match (1800946 matches [1800-Win]-A-Prize)
- Numeric/dialpad search methods
- Simple number match (510333 matches [510-333]-7596)
- Country-code agnostic matching for E164 normalized numbers (9177 matches +65[9177]6930)
- Country-code agnostic matching (510333 matches 1-[510-333]-7596)
- Area-code agnostic matching (333 matches 510-[333]-7596)
- Name/keyboard search methods:
- Simple name match (564 matches [Joh]n)