package Ġcom . tech be lo ved . h ym nb ook . sheet music Ċ Ċ import Ġcom . tech be lo ved . h ym nb ook . data . SharedPreferences Repo Ċ import Ġcom . tech be lo ved . h ym nb ook . data . download . Downloader Ċ import Ġcom . tech be lo ved . h ym nb ook . data . model .* Ċ import Ġcom . tech be lo ved . h ym nb ook . data . repo . H ym ns Repository Ċ import Ġcom . tech be lo ved . h ym nb ook . data . repo . Online Repo Ċ import Ġcom . tech be lo ved . h ym nb ook . h ym n listing . Title Item Ċ import Ġcom . tech be lo ved . h ym nb ook . utils . Scheduler Provider Ċ import Ġio . reactivex . Flow able Transformer Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . functions . Bi Function Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠH ym ns Use Cases Imp Ġ@ Inject Ġconstructor ( private Ġval Ġh ym ns Repository : ĠH ym ns Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġonline Repo : ĠOnline Repo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġscheduler Provider : ĠScheduler Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdown loader : ĠDown loader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġshared Preferences : ĠSharedPreferences Repo ) Ġ: ĠH ym n Use Cases Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġh ym n Sheet Music Detail ( h ym n Id : ĠInt ): ĠObservable < Sheet Music State > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġwant Ġto Ġget Ġthe Ġlatest Ġnight Ġmode Ġand Ġpush Ġit Ġto Ġthe Ġscreen Ġsince Ġour Ġpdf Ġviewer Ġwill ĊĠĠĠĠĠĠĠ Ġ// Ġhave Ġto Ġset Ġit 's Ġown Ġnight Ġmode Ġapart Ġfrom Ġsystem ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh ym ns Repository . get H ym n ById ( h ym n Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( resolve Sheet Music State ()). to Observable (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . is Night Mode Active () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( scheduler Provider . io ()), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBi Function < Sheet Music State , ĠBoolean , ĠSheet Music State > Ġ{ Ġstate , Ġnight Mode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSheet Music State . Ready Ġ-> Ġstate . copy ( dark Mode Ġ= Ġnight Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( scheduler Provider . ui ()) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġh ym n Sheet Music Titles ( sortBy : ĠInt ): ĠObservable < List < Title Item >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġonline Repo . h ym n Ids ( sortBy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġids Ġ-> Ġh ym ns Repository . load H ym n Titles For Indices ( ids , ĠsortBy ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtitles Ġ-> Ġtitles . map Ġ{ Ġit . to Title Item () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( scheduler Provider . io ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġh ym n Sheet Music Indices ( sortBy : ĠInt ): ĠObservable < List < Int >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġonline Repo . h ym n Ids ( sortBy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdownload Sheet Music ( h ym n Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdown loader . enqueue Download For H ym n ( h ym n Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġmusic Ġhas Ġbeen Ġdownloaded Ġpreviously Ġbut Ġthe Ġremote Ġuri Ġhas Ġchanged ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġshould Download Updated Sheet Music ( h ym n Id : ĠInt ): ĠObservable < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġh ym ns Repository . get H ym n ById ( h ym n Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġh ym n Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġonline Repo . get H ym n ById ( h ym n Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġonline H ym n Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( h ym n . sheet Music ?. download Status Ġ== ĠREAD Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( h ym n . sheet Music ?. remote Uri Ġ!= Ġonline H ym n . sheet Music Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. subscribe On ( scheduler Provider . io ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Sheet Music State (): ĠFlow able Transformer < H ym n , ĠSheet Music State > Ġ= ĠFlow able Transformer Ġ{ Ġupstream Ġ-> ĊĠĠĠĠĠĠĠ Ġupstream . map Ġ{ Ġh ym n Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsheet Music State : ĠSheet Music State Ġ= Ġh ym n . sheet Music ?. let Ġ{ Ġsheet Music Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sheet Music . download Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDOWN LOAD _ IN _ PROGRESS Ġ-> ĠSheet Music State . Downloading ( h ym n . num , Ġh ym n . title , Ġsheet Music . download Progress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDOWN LOAD _ FAILED Ġ-> ĠSheet Music State . Download Failed ( h ym n . num , Ġh ym n . title , Ġsheet Music . remote Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREAD Y Ġ-> ĠSheet Music State . Ready ( h ym n . num , Ġh ym n . title , Ġsheet Music . local Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSheet Music State . Not Downloaded ( h ym n . num , Ġh ym n . title , Ġsheet Music . remote Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠSheet Music State . Not Downloaded ( h ym n . num , Ġh ym n . title , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsheet Music State ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ Ċ fun ĠH ym n Title . to Title Item (): ĠTitle Item Ġ{ ĊĠĠĠ Ġreturn ĠTitle Item ( id , Ġtitle ) Ċ } Ċ