package Ġcom . andre ha ue is en . list ade jan ot . c _ database Ċ Ċ import Ġandroid . content . Content Provider Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Uri Matcher Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . SQLException Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . database . sqlite . SQLite QueryBuilder Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġcom . andre ha ue is en . list ade jan ot . c _ database . tables . Polit ician Db Helper Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġand re Ġon Ġ 4 / 1 6 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠPol it ici ans Content Provider Ġ: ĠContent Provider () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠLOG _ TAG Ġ= ĠPol it ici ans Content Provider :: class . java . simple Name ĊĊĠĠĠ Ġprivate Ġval ĠPOL IT IC IAN S Ġ= Ġ 1 0 0 ĊĠĠĠ Ġprivate Ġval ĠPOL IT IC IAN _ SPEC IFIC Ġ= Ġ 1 0 1 ĊĠĠĠ Ġprivate Ġval Ġm Uri Matcher Ġ= Ġbuild Uri Matcher () ĊĊĠĠĠ Ġlateinit Ġprivate Ġvar Ġm Polit ici ans Db Helper : ĠPol it ician Db Helper ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Uri Matcher (): ĠUri Matcher Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠUri Matcher ( Uri Matcher . NO _ MATCH ) ĊĠĠĠĠĠĠĠ Ġmatcher . add URI ( Polit ici ans Contract . AUTH ORITY , ĠPol it ici ans Contract . PATH _ POL IT IC IAN S , ĠPOL IT IC IAN S ) ĊĠĠĠĠĠĠĠ Ġmatcher . add URI ( Polit ici ans Contract . AUTH ORITY , Ġ"${ Polit ici ans Contract . PATH _ POL IT IC IAN S }/ # ", ĠPOL IT IC IAN _ SPEC IFIC ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmatcher ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġm Polit ici ans Db Helper Ġ= ĠPol it ician Db Helper ( context ) ĊĠĠĠĠĠĠĠ Ġm Polit ici ans Db Helper . create Data Base () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType ( uri : ĠUri ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġm Uri Matcher . match ( uri ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN S Ġ-> ĠPol it ici ans Contract . Companion . Polit ici ans Entry (). CONTENT _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN _ SPEC IFIC Ġ-> ĠPol it ici ans Contract . Companion . Polit ici ans Entry (). CONTENT _ ITEM _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Uri Ġunknown : Ġ${ uri . toString () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( uri : ĠUri , Ġvalues : ĠContent Values ?): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsq Lite Database : ĠSQLite Database ĊĠĠĠĠĠĠĠ Ġval Ġreturn Uri : ĠUri ĊĠĠĠĠĠĠĠ Ġval Ġpolit ici ans Entry Ġ= ĠPol it ici ans Contract . Companion . Polit ici ans Entry () ĊĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġm Uri Matcher . match ( uri ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( match ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN S Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database Ġ= Ġm Polit ici ans Db Helper . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġsq Lite Database . insert ( polit ici ans Entry . TABLE _ NAME , Ġnull , Ġvalues ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Uri Ġ= Ġpolit ici ans Entry . build Uri With Id ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" Insert Ġon Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Failed Ġinsert Ġinto Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( sql E : ĠSQLException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" Failed Ġinsert Ġinto Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Unknown Ġuri : Ġ" Ġ+ Ġuri ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull ) ĊĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" Item Ġinserted : Ġ$ return Uri ") ĊĠĠĠĠĠĠĠ Ġreturn Ġreturn Uri ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( uri : ĠUri , Ġprojection : ĠArray < out ĠString > ?, Ġselection : ĠString ?, Ġselection Args : ĠArray < out ĠString > ?, Ġsort Order : ĠString ?): ĠCursor Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsq Lite Database : ĠSQLite Database ĊĠĠĠĠĠĠĠ Ġval Ġquery Builder Ġ= ĠSQLite QueryBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ĊĠĠĠĠĠĠĠ Ġval Ġpolit ici ans Entry Ġ= ĠPol it ici ans Contract . Companion . Polit ici ans Entry () ĊĠĠĠĠĠĠĠ Ġvar Ġmutable SortOrder Ġ= Ġsort Order ĊĊĠĠĠĠĠĠĠ Ġif ( mutable SortOrder Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable SortOrder Ġ= Ġpolit ici ans Entry . DEFAULT _ SORT _ ORDER ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġm Uri Matcher . match ( uri ) ĊĊĠĠĠĠĠĠĠ Ġwhen ( match ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database Ġ= Ġm Polit ici ans Db Helper . readable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġsq Lite Database . query ( polit ici ans Entry . TABLE _ NAME , Ġprojection , Ġselection , Ġselection Args , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN _ SPEC IFIC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database Ġ= Ġm Polit ici ans Db Helper . readable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Builder . append Where ("${ polit ici ans Entry ._ ID } =${ uri . last Path Segment }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġquery Builder . query ( sq Lite Database , Ġprojection , Ġselection , Ġselection Args , Ġnull , Ġnull , Ġmutable SortOrder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Uri Ġunknown : Ġ$ uri ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcursor . set Notification Uri ( context . content Resolver , Ġuri ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcursor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( uri : ĠUri , Ġvalues : ĠContent Values ?, Ġselection : ĠString ?, Ġselection Args : ĠArray < out ĠString >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsq Lite Database : ĠSQLite Database ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString ĊĠĠĠĠĠĠĠ Ġvar Ġwhere : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġm Uri Matcher . match ( uri ) ĊĠĠĠĠĠĠĠ Ġval Ġrows Updated : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġpolit ici ans Entry Ġ= ĠPol it ici ans Contract . Companion . Polit ici ans Entry () ĊĊĠĠĠĠĠĠĠ Ġwhen ( match ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database Ġ= Ġm Polit ici ans Db Helper . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Updated Ġ= Ġsq Lite Database . update ( polit ici ans Entry . TABLE _ NAME , Ġvalues , Ġselection , Ġselection Args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN _ SPEC IFIC Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database Ġ= Ġm Polit ici ans Db Helper . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġuri . last Path Segment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ= Ġ"${ polit ici ans Entry ._ ID } =$ id " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! selection . isNull OrEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ+= Ġ" ĠAND Ġ$ selection " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Updated Ġ= Ġsq Lite Database . update ( polit ici ans Entry . TABLE _ NAME , Ġvalues , Ġwhere , Ġselection Args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Unknown Ġuri : Ġ" Ġ+ Ġuri ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( rows Updated Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrows Updated ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( uri : ĠUri , Ġselection : ĠString ?, Ġselection Args : ĠArray < out ĠString >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsq Lite Database : ĠSQLite Database ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString ĊĠĠĠĠĠĠĠ Ġvar Ġwhere : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġrows Deleted : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġpolit ici ans Entry Ġ= ĠPol it ici ans Contract . Companion . Polit ici ans Entry () ĊĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġm Uri Matcher . match ( uri ) ĊĊĠĠĠĠĠĠĠ Ġwhen ( match ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database Ġ= Ġm Polit ici ans Db Helper . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Deleted Ġ= Ġsq Lite Database . delete ( polit ici ans Entry . TABLE _ NAME , Ġselection , Ġselection Args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN _ SPEC IFIC Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database Ġ= Ġm Polit ici ans Db Helper . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġuri . last Path Segment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ= Ġ"${ polit ici ans Entry ._ ID }= Ġ$ id " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! selection . isNull OrEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ+= Ġ" ĠAND Ġ$ selection " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Deleted Ġ= Ġsq Lite Database . delete ( polit ici ans Entry . TABLE _ NAME , Ġwhere , Ġselection Args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Unknown Ġuri : Ġ" Ġ+ Ġuri ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( rows Deleted Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" Deletion Ġsuccessful : Ġ$ rows Deleted Ġrows Ġdeleted ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrows Deleted ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbulk Insert ( uri : ĠUri , Ġvalues : ĠArray < out ĠContent Values >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsq Lite Database : ĠSQLite Database ĊĠĠĠĠĠĠĠ Ġval Ġpolit ici ans Entry Ġ= ĠPol it ici ans Contract . Companion . Polit ici ans Entry () ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġm Uri Matcher . match ( uri ) ĊĠĠĠĠĠĠĠ Ġvar ĠnumberOf Inserted Items Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġwhen ( match ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOL IT IC IAN S Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database Ġ= Ġm Polit ici ans Db Helper . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . map { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġsq Lite Database . insert ( polit ici ans Entry . TABLE _ NAME , Ġnull , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( id Ġ!= Ġ- 1 L ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Inserted Items ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database . set Transaction Successful () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} finally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsq Lite Database . end Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" Bulk Insert Ġsuccessful : Ġ$ numberOf Inserted Items Ġrows Ġinserted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠnumberOf Inserted Items ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġsuper . bulk Insert ( uri , Ġvalues ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }