package Ġcom . ra iden . data . datas ources . device . contacts Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . provider . Contacts Contract Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . ra iden . data . extensions . md 5 Ċ import Ġcom . ra iden . domain . models . Contact ĊĊ Ċ internal Ġclass ĠDevice Contacts Impl ( private Ġval Ġcontext : ĠContext ) Ġ: ĠDevice Contacts Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcontacts Ġ= Ġarray ListOf < Contact >() ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Contacts (): ĠIterable < Contact > Ġ{ ĊĠĠĠĠĠĠĠ Ġcontacts . clear () ĊĠĠĠĠĠĠĠ Ġval Ġchecker Permission Ġ= ĠContext Compat . check Self Permission ( context , ĠManifest . permission . READ _ CONTACT S ) ĊĠĠĠĠĠĠĠ Ġif Ġ( checker Permission Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Contacts () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcontacts ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Contacts () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġcontext . content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Contacts . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor . count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Contact Data And Add ToList ( cursor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Contact Data And Add ToList ( cursor : ĠCursor ){ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Contacts Contract . Contacts ._ ID )) ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Contacts Contract . Contacts . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠ Ġval Ġhas PhoneNumber Ġ= ĠInteger . parseInt ( cursor . getString ( cursor . getColumnIndex ( Contacts Contract . Contacts . HAS _ PHONE _ NUMBER ))) ĊĠĠĠĠĠĠĠ Ġif Ġ( has PhoneNumber Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload PhoneNumber And Add Contact ToList ( id , Ġname ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload PhoneNumber And Add Contact ToList ( id : ĠString , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġphone Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġp Cur Ġ= Ġcontext . content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Common Data Kinds . Phone . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Common Data Kinds . Phone . CONTACT _ ID Ġ+ Ġ" Ġ= Ġ?", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠ Ġwhile Ġ( p Cur . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphone Ġ= Ġget PhoneNumber ( p Cur ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġp Cur . close () ĊĠĠĠĠĠĠĠ Ġval Ġid Md 5 Ġ= Ġid . md 5 () ĊĠĠĠĠĠĠĠ Ġval Ġcontact Ġ= ĠContact ( id Md 5 , Ġname , Ġphone ) ĊĠĠĠĠĠĠĠ Ġcontacts . add ( contact ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget PhoneNumber ( cursor : ĠCursor ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcursor . getString ( cursor . getColumnIndex ( Contacts Contract . Common Data Kinds . Phone . NUMBER )) ĊĊĠĠĠ Ġ} Ċ }