package Ġcom . open class rooms . re ale state manager . provider Ċ Ċ import Ġandroid . content . Content Provider Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Uri Matcher Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . core . net . to Uri Ċ import Ġcom . open class rooms . re ale state manager . data . database . Real StateManager Database Ċ import Ġcom . open class rooms . re ale state manager . utils .* Ċ import Ġkotlinx . coroutines . run Blocking ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠMut w ak il - Mo ĠðŁ¤ © Ċ Ġ* ĠAndroid ĠEngineer , Ċ Ġ* ĠBr us se ls Ċ Ġ*/ ĊĊ Ċ class ĠProperty Provider Ġ: ĠContent Provider () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġval Ġuri Property Ġ= Ġ"$ URI _ PATH /$ PROPERTY _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ Ġval Ġuri Agent Ġ= Ġ"$ URI _ PATH /$ AGENT _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ Ġval Ġuri P ictures Ġ= Ġ"$ URI _ PATH /$ PI CTURE _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ Ġval Ġuri A men ities Ġ= Ġ"$ URI _ PATH /$ AM EN ITY _ TABLE _ NAME " ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġuri Matcher Ġ= ĠUri Matcher ( Uri Matcher . NO _ MATCH ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd URI ( AUTH ORITY , ĠPROPERTY _ TABLE _ NAME , ĠCODE _ PROPERTY _ DIR ) ĊĠĠĠĠĠĠĠ Ġadd URI ( AUTH ORITY , Ġ"$ PROPERTY _ TABLE _ NAME /* ", ĠCODE _ PROPERTY _ ITEM ) ĊĠĠĠĠĠĠĠ Ġadd URI ( AUTH ORITY , Ġ"$ PROPERTY _ TABLE _ NAME /*/ address ", ĠCODE _ PROPERTY _ ADDRESS ) ĊĠĠĠĠĠĠĠ Ġadd URI ( AUTH ORITY , Ġ"$ PROPERTY _ TABLE _ NAME /* /$ PI CTURE _ TABLE _ NAME ", ĠCODE _ PROPERTY _ PI CTURE S ) ĊĠĠĠĠĠĠĠ Ġadd URI ( AUTH ORITY , Ġ"$ PROPERTY _ TABLE _ NAME /* /$ AM EN ITY _ TABLE _ NAME ", ĠCODE _ PROPERTY _ AM EN ITIES ) ĊĠĠĠĠĠĠĠ Ġadd URI ( AUTH ORITY , Ġ"$ AM EN ITY _ TABLE _ NAME /* ", ĠCODE _ AM EN ITY _ ITEM ) ĊĠĠĠĠĠĠĠ Ġadd URI ( AUTH ORITY , Ġ"$ PI CTURE _ TABLE _ NAME /* ", ĠCODE _ PI CTURE _ ITEM ) ĊĠĠĠĠĠĠĠ Ġadd URI ( AUTH ORITY , ĠAG ENT _ TABLE _ NAME , ĠCODE _ AGENT _ DIR ) ĊĠĠĠĠĠĠĠ Ġadd URI ( AUTH ORITY , Ġ"$ AGENT _ TABLE _ NAME /* ", ĠCODE _ AGENT _ ITEM ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( uri : ĠUri , Ġcontent Values : ĠContent Values ?): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( context Ġ!= Ġnull Ġ&& Ġcontent Values Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠReal StateManager Database . get Database ( context !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( uri Matcher . match ( uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ ITEM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Ġ= Ġproperty From Content Values ( content Values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġaddress From Content Values ( content Values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist P ictures Ġ= Ġpicture From Content Values ( content Values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist A men ities Ġ= Ġam en ity From Content Values ( content Values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . property Dao (). create Property And Data ( property , Ġaddress , Ġlist P ictures , Ġlist A men ities ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !!. content Resolver . notify Change ( uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ uri /${ property . id }". to Uri () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ DIR Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid ĠURI Ġcannot Ġinsert Ġwithout Ġan ĠID Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PI CTURE _ ITEM Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid ĠURI Ġcannot Ġcreate Ġdata Ġwithout Ġa Ġproperty Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ AM EN ITY _ ITEM Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid ĠURI Ġcannot Ġcreate Ġdata Ġwithout Ġa Ġproperty Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ ADDRESS Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid ĠURI Ġcannot Ġcreate Ġdata Ġwithout Ġa Ġproperty Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ AGENT _ DIR Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid ĠURI Ġcannot Ġinsert Ġwithout Ġan ĠID Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ AGENT _ ITEM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagent Ġ= Ġagent From Content Values ( content Values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . agent Dao (). create Agent ( agent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !!. content Resolver . notify Change ( uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ uri /${ agent . id }". to Uri () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unknown ĠURI Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠException (" Failed Ġto Ġinsert Ġrow Ġinto Ġ$ uri ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( uri : ĠUri , Ġprojection : ĠArray < String > ?, Ġselection : ĠString ?, Ġselection Args : ĠArray < String > ?, Ġsort Order : ĠString ?): ĠCursor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġuri . last Path Segment ĊĠĠĠĠĠĠĠ Ġif ( id Ġ!= Ġnull Ġ&& Ġcontext Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠReal StateManager Database . get Database ( context !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen ( uri Matcher . match ( uri )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PI CTURE _ ITEM Ġ-> Ġdatabase . picture Dao (). get Picture With Cursor ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ AM EN ITY _ ITEM Ġ-> Ġdatabase . amen ity Dao (). get A men ity With Cursor ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ AM EN ITIES Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Property Ġ= Ġuri . path Segments [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . amen ity Dao (). getProperty A men ities With Cursor ( id Property ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ PI CTURE S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Property Ġ= Ġuri . path Segments [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . picture Dao (). getProperty P ictures With Cursor ( id Property ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ ADDRESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Property Ġ= Ġuri . path Segments [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . address Dao (). getAddress With Cursor ( id Property ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ ITEM Ġ-> Ġdatabase . property Dao (). getProperty With Cursor ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ DIR Ġ-> Ġdatabase . property Dao (). getAll Properties With Cursor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ AGENT _ DIR Ġ-> Ġdatabase . agent Dao (). getAll Agent sWith Cursor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ AGENT _ ITEM Ġ-> Ġdatabase . agent Dao (). get Agent With Cursor ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Query Ġdoesn 't Ġexist Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠException (" Failed Ġto Ġquery Ġrow Ġfor Ġuri Ġ$ uri ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate (): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( uri : ĠUri , Ġcontent Values : ĠContent Values ?, Ġp 2 : ĠString ?, Ġp 3 : ĠArray < String >? ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Imp ossible Ġto Ġupdate Ġ$ uri ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( uri : ĠUri , Ġp 1 : ĠString ?, Ġp 2 : ĠArray < String >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Imp ossible Ġto Ġdelete Ġdata ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType ( uri : ĠUri ): ĠString ? Ġ= Ġwhen ( uri Matcher . match ( uri )){ ĊĠĠĠĠĠĠĠ ĠCODE _ PI CTURE _ ITEM Ġ-> Ġ" vnd . android . cursor . item /$ AUTH ORITY .$ PI CTURE _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ ĠCODE _ AM EN ITY _ ITEM Ġ-> Ġ" vnd . android . cursor . item /$ AUTH ORITY .$ AM EN ITY _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ AM EN ITIES Ġ-> Ġ" vnd . android . cursor . dir /$ AUTH ORITY .$ AM EN ITY _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ PI CTURE S Ġ-> Ġ" vnd . android . cursor . dir /$ AUTH ORITY .$ PI CTURE _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ ADDRESS Ġ-> Ġ" vnd . android . cursor . item /$ AUTH ORITY .$ ADDRESS _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ ITEM Ġ-> Ġ" vnd . android . cursor . item /$ AUTH ORITY .$ PROPERTY _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ ĠCODE _ PROPERTY _ DIR Ġ-> Ġ" vnd . android . cursor . dir /$ AUTH ORITY .$ PROPERTY _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ ĠCODE _ AGENT _ DIR Ġ-> Ġ" vnd . android . cursor . dir /$ AUTH ORITY .$ AGENT _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ ĠCODE _ AGENT _ ITEM Ġ-> Ġ" vnd . android . cursor . item /$ AUTH ORITY .$ AGENT _ TABLE _ NAME " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unknown ĠURI : Ġ$ uri ") ĊĠĠĠ Ġ} Ċ Ċ }