/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠRead ium ĠFoundation . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠBSD - style Ġlicense Ċ Ġ* Ġavailable Ġin Ġthe Ġtop - level ĠLICENSE Ġfile Ġof Ġthe Ġproject . Ċ Ġ*/ Ċ Ċ package Ġorg . read ium . r 2 . test app . reader Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . empty Flow Ċ import Ġkotlinx . coroutines . flow . flatMap Latest Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . read ium . r 2 . navigator . Experimental Audio book Ċ import Ġorg . read ium . r 2 . navigator . media . Media Service Ċ import Ġorg . read ium . r 2 . shared . publication . Publication Ċ import Ġorg . read ium . r 2 . shared . publication . Publication Id Ċ import Ġorg . read ium . r 2 . test app . books he lf . Book Repository Ċ import Ġorg . read ium . r 2 . test app . db . Book Database Ċ Ċ @ Opt In ( Experimental Audio book :: class , ĠExperimental Cor outines Api :: class ) Ċ class ĠAudio book Service Ġ: ĠMedia Service () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbooks Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠBook Repository ( Book Database . get Database ( this ). books Dao ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSave Ġthe Ġcurrent Ġlocator Ġin Ġthe Ġdatabase . ĠWe Ġcan 't Ġdo Ġthis Ġin Ġthe Ġ[ Reader Activity ] Ġsince ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġplayback Ġcan Ġcontinue Ġin Ġthe Ġbackground Ġwithout Ġany Ġ[ Activity ]. ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Latest Ġ{ Ġnavigator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Ġ?: Ġreturn @ flatMap Latest Ġempty Flow () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator . current Locator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( navigator . publication Id , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġ( pub Id , Ġlocator ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbooks . save Progress ion ( locator , Ġpub Id . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠonCreate Notification Intent ( publication Id : ĠPublic ation Id , Ġpublication : ĠPublic ation ): ĠPending Intent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbook Id Ġ= Ġpublication Id . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġbook Ġ= Ġbooks . get ( book Id ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġflags Ġ= ĠPending Intent . FLAG _ UPDATE _ CURRENT ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠPending Intent . FLAG _ IM MUT ABLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠReader Contract (). create Intent ( this , ĠReader Contract . Input ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Type Ġ= Ġbook . media Type (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Ġ= Ġpublication , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġbook Id , ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ CLEAR _ TOP ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPending Intent . getActivity ( this , Ġ 0 , Ġintent , Ġflags ) ĊĠĠĠ Ġ} Ċ Ċ }