package Ġcom . coin ninja . coin keeper . util Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . provider . Contacts Contract Ċ import Ġapp . drop bit . annotations . Mock able Ċ import Ġcom . coin ninja . coin keeper . model . Contact Ċ import Ġcom . coin ninja . coin keeper . model . PhoneNumber Ċ import Ġcom . coin ninja . coin keeper . util . android . Permissions Util Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ @ Mock able Ċ class ĠCoin N inja Contact Resolver Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġpermissions Util : ĠPermissions Util , ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġcontent Resolver : ĠContent Resolver ) Ġ{ ĊĊĠĠĠ Ġfun Ġget Contacts (): ĠList < Contact > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! permissions Util . has Permission ( Manifest . permission . READ _ CONTACT S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcontacts Ġ= ĠArrayList < Contact >() ĊĠĠĠĠĠĠĠ Ġval Ġmanaged Cursor Ġ= Ġcontent Resolver . query ( Contacts Contract . Common Data Kinds . Phone . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Contacts Contract . Common Data Kinds . Phone . CONTACT _ ID , ĠContact s Contract . Common Data Kinds . Phone . TYPE , ĠContact s Contract . Common Data Kinds . Phone . DISPLAY _ NAME , ĠContact s Contract . Common Data Kinds . Phone . NUMBER ), Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Common Data Kinds . Phone . DISPLAY _ NAME Ġ+ Ġ" ĠASC " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġnumber : ĠString ? ĊĊĠĠĠĠĠĠĠ Ġif Ġ( managed Cursor ?. moveTo First () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ= Ġmanaged Cursor . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanaged Cursor . getColumnIndex ( Contacts Contract . Common Data Kinds . Phone . NUMBER )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġnumber ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! PhoneNumber ( number ). isValid ) Ġ{ Ġcontinue ; Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontact Ġ= ĠContact () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact . displayName Ġ= Ġmanaged Cursor . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanaged Cursor . getColumnIndex ( Contacts Contract . Common Data Kinds . Phone . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact . set PhoneNumber ( number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts . add ( contact ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( managed Cursor . moveTo Next ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmanaged Cursor ?. close () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcontacts ĊĠĠĠ Ġ} Ċ }