package Ġme . pa ix ao . t mdb explorer . data . source . local Ċ Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . support . annotation . Visible ForTesting Ċ import Ġio . reactivex . Observable Ċ import Ġme . pa ix ao . t mdb explorer . data . Movie Ċ import Ġme . pa ix ao . t mdb explorer . data . Movie List Ċ import Ġme . pa ix ao . t mdb explorer . data . source . Movies DataSource Ċ import Ġme . pa ix ao . t mdb explorer . utils . App Executors ĊĊ Ċ /** Ċ Ġ* ĠConcrete Ġimplementation Ġof Ġa Ġdata Ġsource Ġas Ġa Ġdb . Ċ Ġ*/ Ċ class ĠMov ies Local DataSource Ġprivate Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġval Ġapp Executors : ĠApp Executors , ĊĠĠĠĠĠĠĠ Ġval Ġmovies Dao : ĠMov ies Dao Ċ ) Ġ: ĠMov ies DataSource Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval ĠlistOf Movies : ĠLive Data < List < Movie >> Ġ= Ġmovies Dao . get Movies () ĊĊĠĠĠ Ġoverride Ġfun Ġget Movies (): ĠLive Data < List < Movie >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf Movies ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Movies ( page Nr : ĠInt ): ĠLive Data < List < Movie >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf Movies ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch Movies ( query : ĠString ): ĠObservable < Movie List > Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Search Ġonly Ġworks Ġonline ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Mov ied On DB ( movies : ĠList < Movie >) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp Executors . disk IO . execute Ġ{ Ġmovies Dao . insert Movies ( movies ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Movie ( movie Id : ĠLong ): ĠLive Data < Movie ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmovies Dao . get Movie ById ( movie Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrefresh Movies () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete All Movies () Ġ{ ĊĠĠĠĠĠĠĠ Ġapp Executors . disk IO . execute Ġ{ Ġmovies Dao . delete Movies () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Movie ( movie Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp Executors . disk IO . execute Ġ{ Ġmovies Dao . delete Movie ById ( movie Id ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠINSTANCE : ĠMov ies Local DataSource ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( app Executors : ĠApp Executors , Ġmovies Dao : ĠMov ies Dao ): ĠMov ies Local DataSource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( INSTANCE Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( Movies Local DataSource :: java Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ= ĠMov ies Local DataSource ( app Executors , Ġmovies Dao ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINSTANCE !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠĠĠĠĠ Ġfun Ġclear Instance () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ