package Ġph am . hon est bee . user tracking . data . source . local Ċ Ċ import Ġandroid . content . Context Ċ import Ġph am . hon est bee . user tracking . App Executors Ċ import Ġph am . hon est bee . user tracking . data . Users DataSource Ċ import Ġph am . hon est bee . user tracking . data . Users DataSource . Load Users Callback Ċ import Ġph am . hon est bee . user tracking . db . User Dao Ċ import Ġph am . hon est bee . user tracking . vo . User Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* ĠConcrete Ġimplementation Ġof Ġa Ġdata Ġsource Ġas Ġa Ġdb . Ċ Ġ*/ Ċ @ Singleton Ċ class ĠUsers Local DataSource Ġ@ Inject Ġconstructor ( val Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Dao : ĠUser Dao , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Executors : ĠApp Executors ) Ġ: ĠUsers DataSource Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrefresh Users () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNo Ġneed Ġto Ġhandle Ġhere Ġsince ĠUser Repository Ġwill Ġbe Ġhandling Ġit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Users ( callback : ĠLoad Users Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġuser Dao . get Users () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Executors . main Thread (). execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( users . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġwill Ġbe Ġcalled Ġif Ġthe Ġtable Ġis Ġnew Ġor Ġjust Ġempty . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Data Not Available () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Users Loaded ( users ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapp Executors . disk IO (). execute ( run nable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave User ( user : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( user ) ĊĠĠĠĠĠĠĠ Ġval Ġsave Runnable Ġ= ĠRunnable Ġ{ Ġuser Dao . insert ( user ) Ġ} ĊĠĠĠĠĠĠĠ Ġapp Executors . disk IO (). execute ( save Runnable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete All Users () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelete Runnable Ġ= ĠRunnable Ġ{ Ġuser Dao . delete Users () Ġ} ĊĊĠĠĠĠĠĠĠ Ġapp Executors . disk IO (). execute ( delete Runnable ) ĊĠĠĠ Ġ} Ċ } Ċ