package Ġcom . alex styl . contact store Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Contacts Contract Ċ import Ġcom . alex styl . contact store . utils . iterate Ċ import Ġcom . alex styl . contact store . utils . run Query Ċ Ċ internal Ġclass ĠRaw Contact Queries ( ĊĠĠĠ Ġprivate Ġval Ġcontent Resolver : ĠContent Resolver Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġfetch Raw Contacts ( contact : ĠContact ): ĠList < Raw Contact > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġraw Contact : ĠRaw Contact ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Raw Contact Id : ĠLong Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġraw Contacts Ġ= Ġmutable ListOf < Raw Contact >() ĊĊĠĠĠĠĠĠĠ Ġcontent Resolver . run Query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Uri Ġ= Ġentity Uri ( contact ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprojection Ġ= ĠContact Query . COLUMNS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Order Ġ= ĠContact s Contract . Contacts . Entity . RAW _ CONTACT _ ID ĊĠĠĠĠĠĠĠ Ġ). iterate Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Contact Id Ġ= Ġcursor . getLong ( Contact Query . RAW _ CONTACT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Raw Contact Id Ġ!= Ġraw Contact Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Raw Contact Id Ġ= Ġraw Contact Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Contact Ġ= ĠRaw Contact ( load Raw Contact Values ( cursor )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Contacts . add ( raw Contact !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cursor . isNull ( Contact Query . DATA _ ID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠContent Values Ġ= Ġload Data Values ( cursor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Contact !!. addData Item Values ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġraw Contacts . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġentity Uri ( for Contact : ĠContact ): ĠUri Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontact Id Ġ= Ġfor Contact . contact Id ĊĠĠĠĠĠĠĠ Ġval Ġcontact Uri Ġ= Ġensure Is Contact Uri ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= ĠContact s Contract . Contacts . get Lookup Uri ( contact Id , Ġfor Contact . lookup Key ?. value ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠUri . with App ended Path ( contact Uri , ĠContact s Contract . Contacts . Entity . CONTENT _ DIRECTORY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Data Values ( cursor : ĠCursor ): ĠContent Values Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcv Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠ Ġcv . put ( Contacts Contract . Data ._ ID , Ġcursor . getLong ( Contact Query . DATA _ ID )) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 1 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 2 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 3 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 4 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 5 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 6 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 7 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 8 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 9 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 1 0 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 1 1 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 1 2 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 1 3 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 1 4 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA 1 5 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA _ SYNC 1 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA _ SYNC 2 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA _ SYNC 3 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA _ SYNC 4 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA _ VERSION ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . IS _ PRIMARY ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . IS _ SUPER PRIMARY ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . MIME TYPE ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . GROUP _ SOURCE _ ID ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . CHAT _ CAP ABILITY ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . CAR RI ER _ PRES ENCE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Raw Contact Values ( cursor : ĠCursor ): ĠContent Values Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcv Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠ Ġcv . put ( Contacts Contract . Raw Contacts ._ ID , Ġcursor . getLong ( Contact Query . RAW _ CONTACT _ ID )) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . ACCOUNT _ NAME ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . ACCOUNT _ TYPE ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DATA _ SET ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DIR TY ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . VERSION ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . SOURCE _ ID ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . SYNC 1 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . SYNC 2 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . SYNC 3 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . SYNC 4 ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . DELETED ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . CONTACT _ ID ) ĊĠĠĠĠĠĠĠ Ġcursor Column To Content Values ( cursor , Ġcv , ĠContact Query . STAR RED ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcursor Column To Content Values ( ĊĠĠĠĠĠĠĠ Ġcursor : ĠCursor , Ġvalues : ĠContent Values , Ġindex : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( cursor . getType ( index )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCursor . FIELD _ TYPE _ NULL Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCursor . FIELD _ TYPE _ INTEGER Ġ-> Ġvalues . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContact Query . COLUMNS [ index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getLong ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCursor . FIELD _ TYPE _ STRING Ġ-> Ġvalues . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContact Query . COLUMNS [ index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCursor . FIELD _ TYPE _ BLOB Ġ-> Ġvalues . put ( Contact Query . COLUMNS [ index ], Ġcursor . get Blob ( index )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Invalid Ġor Ġunhandled Ġdata Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġensure Is Contact Uri ( resolver : ĠContent Resolver , Ġuri : ĠUri ): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauthority Ġ= Ġuri . authority ĊĊĠĠĠĠĠĠĠ Ġ// ĠCurrent ĠStyle ĠUri ? ĊĠĠĠĠĠĠĠ Ġif Ġ( Contacts Contract . AUTH ORITY Ġ== Ġauthority ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġresolver . getType ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠContact - Uri ? ĠGood , Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Contacts Contract . Contacts . CONTENT _ ITEM _ TYPE Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRaw Contact - Uri ? ĠTransform Ġit Ġto ĠContact Uri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Contacts Contract . Raw Contacts . CONTENT _ ITEM _ TYPE Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Contact Id Ġ= ĠContent U ris . parse Id ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContact s Contract . Raw Contacts . get Contact Lookup Uri ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent U ris . with App ended Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Raw Contacts . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Contact Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" uri Ġformat Ġis Ġunknown ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠLegacy ĠStyle ? ĠConvert Ġto ĠRaw Contact ĊĠĠĠĠĠĠĠ Ġval ĠOB SO LETE _ AUTH ORITY Ġ= Ġandroid . provider . Contacts . AUTH ORITY ĊĠĠĠĠĠĠĠ Ġif Ġ( OB SO LETE _ AUTH ORITY Ġ== Ġauthority ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLegacy ĠFormat . ĠConvert Ġto ĠRaw Contact - Uri Ġand Ġthen Ġlookup Ġthe Ġcontact ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Contact Id Ġ= ĠContent U ris . parse Id ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContact s Contract . Raw Contacts . get Contact Lookup Uri ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent U ris . with App ended Id ( Contacts Contract . Raw Contacts . CONTENT _ URI , Ġraw Contact Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" uri Ġauthority Ġis Ġunknown ") ĊĠĠĠ Ġ} Ċ } Ċ