package Ġcom . example . android . sun sh ine . data Ċ Ċ import Ġandroid . content . Content Provider Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Uri Matcher Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . net . Uri Ċ import Ġcom . example . android . sun sh ine . utilities . Sun sh ine Date Utils Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġp mv b Ġon Ġ 1 7 - 0 8 - 2 2 . Ċ Ġ*/ Ċ class ĠWeather Provider Ġ: ĠContent Provider () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Db Helper : ĠWeather Db Helper ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠCODE _ WE ATHER Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval ĠCODE _ WE ATHER _ WITH _ DATE Ġ= Ġ 1 0 1 ĊĠĠĠĠĠĠĠ Ġval Ġs Uri Matcher Ġ= Ġbuild Uri Matcher () ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġbuild Uri Matcher (): ĠUri Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Matcher Ġ= ĠUri Matcher ( Uri Matcher . NO _ MATCH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri Matcher . add URI ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Contract . CONTENT _ AUTH ORITY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Contract . Weather Entry . PATH _ WE ATHER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ WE ATHER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri Matcher . add URI ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Contract . CONTENT _ AUTH ORITY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Weather Contract . Weather Entry . PATH _ WE ATHER }/ # ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ WE ATHER _ WITH _ DATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuri Matcher ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġm Db Helper Ġ= ĠWeather Db Helper ( context ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri : ĠUri , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprojection : ĠArray < out ĠString > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args : ĠArray < out ĠString > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Order : ĠString ? ĊĠĠĠ Ġ): ĠCursor Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcursor : ĠCursor ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġs Uri Matcher . match ( uri ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ WE ATHER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġm Db Helper . readable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġdb . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Contract . Weather Entry . TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Order ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ WE ATHER _ WITH _ DATE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġm Db Helper . readable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġdb . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Contract . Weather Entry . TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Weather Contract . Weather Entry . COLUMN _ DATE } Ġ= Ġ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < String >( uri . last Path Segment ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Order ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Unknown Ġuri : Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcursor . set Notification Uri ( context . content Resolver , Ġuri ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcursor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbulk Insert ( uri : ĠUri , Ġvalues : ĠArray < out ĠContent Values >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( s Uri Matcher . match ( uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ WE ATHER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġm Db Helper . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrows Inserted Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . forEach Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ_ id Ġ= Ġinsert Util ( db , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ id Ġ!= Ġ- 1 . to Long ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Inserted ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . set Transaction Successful () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . end Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rows Inserted Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrows Inserted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġsuper . bulk Insert ( uri , Ġvalues ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( uri : ĠUri , Ġvalues : ĠContent Values ): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( s Uri Matcher . match ( uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ WE ATHER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġm Db Helper . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ_ id Ġ= Ġinsert Util ( db , Ġvalues ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ id Ġ!= Ġ- 1 . to Long ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . end Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Util ( db : ĠSQLite Database , Ġvalues : ĠContent Values ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdate Ġ= Ġvalues . getAs Long ( Weather Contract . Weather Entry . COLUMN _ DATE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Sun sh ine Date Utils . is Date Normalized ( date )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Contract . Weather Entry . COLUMN _ DATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSun sh ine Date Utils . normalize Date ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġ_ id Ġ= Ġdb . insert ( Weather Contract . Weather Entry . TABLE _ NAME , Ġnull , Ġvalues ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri : ĠUri , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues : ĠContent Values , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args : ĠArray < out ĠString >? ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( uri : ĠUri , Ġselection : ĠString ?, Ġselection Args : ĠArray < out ĠString >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ_ selection Ġ= Ġselection Ġ?: Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġvar Ġrows Deleted Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhen Ġ( s Uri Matcher . match ( uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ WE ATHER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Deleted Ġ= Ġm Db Helper . writable Database . delete ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Contract . Weather Entry . TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ selection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Unknown Ġuri : Ġ$ uri ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( rows Deleted Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . notify Change ( uri , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrows Deleted ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType ( uri : ĠUri ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} Ċ }