package Ġmob i . c wik lin ski . smo g . database Ċ Ċ import Ġandroid . content . Content Provider Ċ import Ġandroid . content . Content Provider Operation Ċ import Ġandroid . content . Content Provider Result Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . net . Uri Ċ import Ġjava . util .* Ċ Ċ class ĠApp Provider Ġ: ĠContent Provider () Ġ{ ĊĊĠĠĠ Ġvar Ġm Open Helper : ĠApp Database ? Ġ= Ġnull ; ĊĠĠĠ Ġval Ġm Matcher : ĠApp Uri Matcher Ġ= ĠApp Uri Matcher () ĊĠĠĠ Ġvar Ġis Bulk Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġm Open Helper Ġ= ĠApp Database ( context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( uri : ĠUri ?, Ġvalues : ĠContent Values ?): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdb : ĠSQLite Database Ġ= Ġm Open Helper !!. writable Database ĊĠĠĠĠĠĠĠ Ġvar Ġmatch Ġ= Ġm Matcher . matcher . match ( uri ) ĊĠĠĠĠĠĠĠ Ġvar Ġsync To Network Ġ= Ġ! App Contract . has Caller Is Sync Adapter Parameter ( uri !! ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Uri Matcher . READ INGS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdon ation Id Ġ= Ġdb . insert OrThrow ( App Contract . Read ings . TABLE _ NAME , Ġnull , Ġvalues ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Change ( uri , Ġsync To Network ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApp Contract . Read ings . build Reading Uri ( don ation Id . toString ()); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Unknown Ġuri : Ġ" Ġ+ Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( uri : ĠUri ?, Ġprojection : ĠArray < String > ?, Ġselection : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args : ĠArray < out ĠString > ?, Ġsort Order : ĠString ?): ĠCursor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdb : ĠSQLite Database Ġ= Ġm Open Helper !!. readable Database ĊĠĠĠĠĠĠĠ Ġvar Ġmatch Ġ= Ġm Matcher . matcher . match ( uri ) ĊĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= Ġbuild Simple Selection ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcursor Ġ= Ġbuilder . where ( selection , Ġselection Args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query ( db , Ġprojection , Ġsort Order ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . set Notification Uri ( context . content Resolver , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcursor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( uri : ĠUri ?, Ġvalues : ĠContent Values ?, Ġselection : ĠString ?, Ġselection Args : ĠArray < out ĠString >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdb : ĠSQLite Database Ġ= Ġm Open Helper !!. writable Database ĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= Ġbuild Simple Selection ( uri !! ) ĊĠĠĠĠĠĠĠ Ġvar ĠretVal Ġ= Ġbuilder . where ( selection , Ġselection Args ). update ( db , Ġvalues !! ); ĊĠĠĠĠĠĠĠ Ġvar Ġsync To Network : ĠBoolean Ġ= Ġ! App Contract . has Caller Is Sync Adapter Parameter ( uri ); ĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull , Ġsync To Network ); ĊĠĠĠĠĠĠĠ Ġreturn ĠretVal ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( uri : ĠUri ?, Ġselection : ĠString ?, Ġselection Args : ĠArray < out ĠString >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( uri !!. equals ( App Contract . BASE _ CONTENT _ URI )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Database () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull , Ġfalse ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġdb : ĠSQLite Database Ġ= Ġm Open Helper !!. writable Database ĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= Ġbuild Simple Selection ( uri ) ĊĠĠĠĠĠĠĠ Ġvar ĠretVal Ġ= Ġbuilder . where ( selection , Ġselection Args ). delete ( db ) ĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! App Contract . has Caller Is Sync Adapter Parameter ( uri )) ĊĠĠĠĠĠĠĠ Ġreturn ĠretVal ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType ( uri : ĠUri ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmatch Ġ= Ġm Matcher . matcher . match ( uri ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Uri Matcher . READ INGS Ġ-> Ġreturn ĠApp Contract . Read ings . CONTENT _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Uri Matcher . READ INGS _ ID Ġ-> Ġreturn ĠApp Contract . Read ings . CONTENT _ ITEM _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Unknown Ġuri : Ġ" Ġ+ Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Simple Selection ( uri : ĠUri ) Ġ: ĠSelection Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠSelection Builder () ĊĠĠĠĠĠĠĠ Ġvar Ġmatch Ġ= Ġm Matcher . matcher . match ( uri ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Uri Matcher . READ INGS Ġ-> Ġreturn Ġbuilder . table ( App Contract . Read ings . TABLE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Uri Matcher . READ INGS _ ID Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdon ation Id Ġ= ĠApp Contract . Read ings . get Reading Id ( uri ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder . table ( App Contract . Read ings . TABLE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( App Contract . Read ings ._ ID Ġ+ Ġ"= ?", ĠarrayOf ( don ation Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Unknown Ġuri : Ġ" Ġ+ Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply Batch ( operations : ĠArrayList < Content Provider Operation >? ): ĠArray < out ĠContent Provider Result >? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdb : ĠSQLite Database Ġ= Ġm Open Helper !!. writable Database ĊĠĠĠĠĠĠĠ Ġvar Ġresults Ġ: ĠArray < Content Provider Result >? ĊĠĠĠĠĠĠĠ Ġis Bulk Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdb . beginTransaction () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnum Operations : ĠInt Ġ= Ġoperations !!. size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġ= ĠarrayOf < Content Provider Result >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperations . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . apply ( this , Ġresults , Ġnum Operations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Operations -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . set Transaction Successful (); ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . end Transaction () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify Change ( uri : ĠUri , Ġsync To Network : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Bulk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull , Ġsync To Network ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Database () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Open Helper !!. close () ĊĠĠĠĠĠĠĠ Ġm Open Helper !!. delete Database ( context ); ĊĠĠĠĠĠĠĠ Ġm Open Helper Ġ= ĠApp Database ( context ); ĊĠĠĠ Ġ} Ċ Ċ } Ċ