package Ġde . sch alter . los ungen . ser mon . ser mon Provider Ċ Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . os . IB inder Ċ import Ġde . sch alter . los ungen . data Access . Language Ċ import Ġde . sch alter . los ungen . data Access . Ver ses Database Ċ import Ġde . sch alter . los ungen . data Access . daily . Daily Ver se Ċ import Ġde . sch alter . los ungen . data Access . ser mon . Ser mon Ċ import Ġde . sch alter . los ungen . ser mon . File Dest inations Ċ import Ġde . sch alter . los ungen . ser mon . er f . E rf W ort Z um Tag Ser mon Implementation Ċ import Ġde . sch alter . los ungen . utils . Async Utils Ċ import Ġde . sch alter . los ungen . utils . Language Utils Ċ import Ġio . reactivex . Single Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ import Ġjava . util .* Ċ Ċ abstract Ġclass ĠSer mon Provider ( val Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġservice Connection : ĠService Connection ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoads Ġa Ġser mon . ĠThat Ġmeans Ġthat Ġafter Ġthis Ġmethod Ġall Ġdata ĊĠĠĠĠ Ġ* Ġis Ġpresent Ġto Ġdownload Ġthe Ġser mon . ĊĠĠĠĠ Ġ* ĠAuthor Ġand Ġver se Ġin Ġb ible Ġis Ġalso Ġpresent Ġif Ġpossible ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġdownload Ġurl Ġof Ġthe Ġser mon ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġload Download Url ( daily Ver se : ĠDaily Ver se ): ĠSingle < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcan Ġbe Ġcalled Ġafter Ġthe Ġload Download Url Ġmethod Ġwas Ġsuccessful ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġfile Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġget FileName (): ĠString ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠS aves Ġthe Ġser mon Ġto Ġthe Ġfile Ġsystem Ġand Ġthe Ġdatabase . ĊĠĠĠĠ Ġ* ĠUse Ġthe Ġmethod Ġsave Ser mon Ġand Ġsave To Database ĊĠĠĠĠ Ġ* Ġ@ return Ġabsolute Ġpath Ġof Ġthe Ġser mon Ġon Ġthe Ġfile Ġsystem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġdownload And Save ToFile And Database ( url : ĠString ): ĠSingle < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġcalled Ġafter Ġdownload And Save ToFile And Database Ġwas Ġsuccessful ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġget Ser mon (): ĠSer mon ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġcalled Ġafter Ġload Download Url Ġfinished . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġver se Ġthe Ġser mon Ġis Ġabout Ġwhen Ġknown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġget Ver se In Bible (): ĠString ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġcalled Ġafter Ġload Download Url Ġfinished ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġauthor Ġof Ġthe Ġser mon Ġwhen Ġknown ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġget Author (): ĠString ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġname Ġof Ġthe Ġimplementation Ġof Ġthis Ġprovider ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġname Ġof Ġthe Ġprovider ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġget Provider Name (): ĠString ĊĊĠĠĠ Ġabstract Ġfun Ġlanguage (): ĠLanguage ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġthis Ġmethod Ġsave Ġthe Ġser mon Ġto Ġthe Ġfile Ġsystem Ġlike Ġthe Ġusers ĊĠĠĠĠ Ġ* Ġspecified Ġin Ġthe Ġsettings . ĠThe Ġstream Ġhas Ġto Ġbe Ġclosed Ġself ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġsave Ser mon ( input : ĠInputStream ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwrite Ġto Ġprivate Ġstorage ĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= ĠFile ( File Dest inations . getCache Path ( context ), ĠSER MON _ FOLDER ) ĊĠĠĠĠĠĠĠ Ġdirectory . mkdir s () ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( directory , Ġget FileName ()) ĊĠĠĠĠĠĠĠ Ġwrite File ( file , Ġinput ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfile . absolute Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġinformation Ġhas Ġto Ġbe Ġready . ĊĠĠĠĠ Ġ* ĠSo Ġthe Ġmethod Ġdownload And Save ToFile And Database Ġhas Ġto Ġbe Ġcalled Ġfirst ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġsave To Database () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Ser mon ()?. let Ġ{ Ġser mon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġser mon Dao Ġ= ĠVer ses Database . provide Ver se Database ( context ). ser mon Dao () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġser mon Dao . insert Ser mon ( ser mon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoad Ġser mon Ġto Ġdatabase Ġif Ġit Ġexists ĊĠĠĠĠ Ġ* Ġ@ return Ġnull Ġwhen Ġno Ġser mon Ġwas Ġfound Ġor ĠSer mon Ġwhen Ġa Ġser mon Ġwas Ġfound Ġin Ġthe Ġdatabase ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġget Ser mon IfExists ( daily Ver se : ĠDaily Ver se ): ĠSingle < Async Utils . Optional < Ser mon >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġser mon Dao Ġ= ĠVer ses Database . provide Ver se Database ( context ). ser mon Dao () ĊĠĠĠĠĠĠĠ Ġval Ġser mon s Ġ= Ġser mon Dao . get Ser mon s For Daily Ver se Id ( daily Ver se . daily Ver se Id !! ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAsync Utils . live DataTo Single Optional ( ser mon s ). subscribe Ġ{ Ġsuccess Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success . value ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( Async Utils . Optional ( success . value [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( Async Utils . Optional ( null )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoads Ġthe Ġser mon Ġand Ġsaves Ġthe Ġser mon Ġto Ġthe Ġfile Ġsystem Ġand Ġdatabase ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġser mon Ġfrom Ġdatabase Ġor Ġdownloaded Ġser mon ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget IfExists Or Load And Save ( date : ĠDate ): ĠSingle < Ser mon > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠSer mon Provider Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . start Service ( intent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġun bind Service () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Connection Ġ= Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name ?, Ġservice Binder : ĠI Binder ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġ( service Binder Ġas ĠSer mon Provider Service . Ser mon Provider Service Binder ). getService () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . add Result Listener ( object Ġ: ĠSer mon Provider Service . Result Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( ser mon : ĠSer mon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( ser mon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . is Disposed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . onError ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . check Database Or Download ( date . time , Ġthis @ Ser mon Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . bind Service ( intent , Ġthis , ĠContext . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun bind Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice Connection ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . unbind Service ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite File ( file : ĠFile , Ġinput : ĠInputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfile . output Stream (). use Ġ{ Ġinput . copy To ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSER MON _ FOLDER Ġ= Ġ" ser mon s " ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Implementation ( context : ĠContext ): ĠSer mon Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE rf W ort Z um Tag Ser mon Implementation ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġimplementation For Language Available ( context : ĠContext , Ġlanguage : ĠLanguage ? Ġ= ĠLanguage Utils . getDisplay Language Enum ()): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( E rf W ort Z um Tag Ser mon Implementation ( context ). language () Ġ== Ġlanguage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }