package Ġorg . ny pl . simpl ified . viewer . ep ub . read ium 2 Ċ Ċ import Ġandroid . content . pm . Application Info Ċ import Ġandroid . webkit . WebView Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . google . common . util . concurrent . Listening ExecutorService Ċ import Ġcom . google . common . util . concurrent . More Executors Ċ import Ġhu . ak arn ok d . rx java 2 . subjects . Un icast Work Subject Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġorg . joda . time . LocalDateTime Ċ import Ġorg . library simpl ified . r 2 . api . SR 2 Bookmark Ċ import Ġorg . library simpl ified . r 2 . api . SR 2 Command Ċ import Ġorg . library simpl ified . r 2 . api . SR 2 Controller Type Ċ import Ġorg . library simpl ified . r 2 . api . SR 2 Event Ċ import Ġorg . library simpl ified . r 2 . views . SR 2 Reader View Event Ċ import Ġorg . library simpl ified . r 2 . views . SR 2 Reader ViewModel Ċ import Ġorg . ny pl . simpl ified . accounts . database . api . Account Type Ċ import Ġorg . ny pl . simpl ified . analytics . api . Analytics Event Ċ import Ġorg . ny pl . simpl ified . analytics . api . Analytics Type Ċ import Ġorg . ny pl . simpl ified . profiles . api . Profile Readable Type Ċ import Ġorg . ny pl . simpl ified . profiles . controller . api . Profiles Controller Type Ċ import Ġorg . ny pl . simpl ified . reader . bookmarks . api . Reader Bookmark ServiceType Ċ import Ġjava . util . concurrent . Executors Ċ Ċ internal Ġclass ĠReader 2 ViewModel ( ĊĠ Ġprivate Ġval Ġapplication Info : ĠApplication Info , ĊĠ Ġprivate Ġval Ġparameters : ĠReader 2 Activity Parameters , ĊĠ Ġprivate Ġval Ġprofiles Controller : ĠPro files Controller Type , ĊĠ Ġprivate Ġval Ġbookmark Service : ĠReader Bookmark ServiceType , ĊĠ Ġprivate Ġval Ġanalytics Service : ĠAnalytics Type , ĊĠ Ġprivate Ġval Ġreader Model : ĠSR 2 Reader ViewModel Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠ Ġprivate Ġval Ġio Executor : ĠList ening ExecutorService Ġ= ĊĠĠĠ ĠMore Executors . list ening Decorator ( ĊĠĠĠĠĠ ĠExec utors . new Fixed ThreadPool ( 1 ) Ġ{ Ġrunnable Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġthread Ġ= ĠThread ( run nable ) ĊĠĠĠĠĠĠĠ Ġthread . name Ġ= Ġ" org . library simpl ified . r 2 . io " ĊĠĠĠĠĠĠĠ Ġthread ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠ Ġprivate Ġval Ġprofile : ĠProfile Readable Type Ġ= ĊĠĠĠ Ġthis . profiles Controller . profile Current () ĊĊĠ Ġprivate Ġval Ġaccount : ĠAccount Type Ġ= ĊĠĠĠ Ġthis . profile . account ( this . parameters . accountId ) ĊĊĠ Ġprivate Ġvar Ġcontroller : ĠSR 2 Controller Type ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġcontroller Lock : ĠAny Ġ= ĠAny () ĊĠ Ġprivate Ġvar Ġpending Book marks : ĠList < SR 2 Bookmark > Ġ= Ġempty List () ĊĊĠ Ġinit Ġ{ ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠEnable Ġweb view Ġdebugging Ġfor Ġdebug Ġbuilds ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġif Ġ(( this . application Info . flags Ġand ĠApplication Info . FLAG _ DEBUG G ABLE ) Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ ĠWebView . set Web Contents Debugging Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠLoad Ġbook marks . ĠThey Ġwill Ġbe Ġsubmitted Ġto Ġthe Ġcontroller , Ġalong Ġwith Ġthe Ġlast Ġposition , ĊĠĠĠ Ġ* Ġas Ġsoon Ġas Ġthey 've Ġbeen Ġloaded Ġand Ġthe Ġcontroller Ġis Ġready . ĊĠĠĠ Ġ*/ ĊĊĠĠĠ Ġio Executor . execute Ġ{ ĊĠĠĠĠĠ Ġval Ġbook marks Ġ= ĠReader 2 Book marks . load Book marks ( ĊĠĠĠĠĠĠĠ Ġbookmark Service Ġ= Ġthis . bookmark Service , ĊĠĠĠĠĠĠĠ Ġaccount ID Ġ= Ġthis . parameters . accountId , ĊĠĠĠĠĠĠĠ Ġbook ID Ġ= Ġthis . parameters . book Id , ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġsynchronized ( this . controller Lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontroller Now Ġ= Ġthis . controller ĊĠĠĠĠĠĠĠ Ġif Ġ( controller Now Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . pending Book marks Ġ= Ġbook marks ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . on Book marks And Controller Ready ( controller Now , Ġbook marks ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġview Events Un icast : ĠUn icast Work Subject < SR 2 Reader View Event > Ġ= ĊĠĠĠ ĠUn icast Work Subject . create () ĊĊĠ Ġprivate Ġval Ġsubscriptions : ĠComposite Disposable Ġ= ĊĠĠĠ ĠComposite Disposable ( ĊĠĠĠĠĠ Ġthis . reader Model . view Events ĊĠĠĠĠĠĠĠ Ġ. subscribe ( this :: on View Event ), ĊĠĠĠĠĠ Ġthis . reader Model . controller Events ĊĠĠĠĠĠĠĠ Ġ. subscribe ( this :: on Controller Event ) ĊĠĠĠ Ġ) ĊĊĠ Ġval Ġview Events : ĠObservable < SR 2 Reader View Event > ĊĠĠĠ Ġget () Ġ= Ġview Events Un icast . observe On ( Android Schedulers . main Thread ()) ĊĊĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠ Ġthis . send Book Closed Analytics Event () ĊĠĠĠ Ġthis . io Executor . shutdown () ĊĠĠĠ Ġthis . subscriptions . clear () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsend Book Closed Analytics Event () Ġ{ ĊĠĠĠ Ġthis . analytics Service . publish Event ( ĊĠĠĠĠĠ ĠAnalytics Event . Book Closed ( ĊĠĠĠĠĠĠĠ Ġtimestamp Ġ= ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠ Ġaccount Ġ= Ġthis . account , ĊĠĠĠĠĠĠĠ Ġprofile UUID Ġ= Ġthis . profile . id . uuid , ĊĠĠĠĠĠĠĠ Ġaccount Provider Ġ= Ġthis . account . provider . id , ĊĠĠĠĠĠĠĠ Ġaccount UUID Ġ= Ġthis . account . id . uuid , ĊĠĠĠĠĠĠĠ Ġop ds Entry Ġ= Ġthis . parameters . entry . feed Entry ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon View Event ( event : ĠSR 2 Reader View Event ) Ġ{ ĊĠĠĠ Ġthis . view Events Un icast . onNext ( event ) ĊĊĠĠĠ Ġreturn Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠ ĠSR 2 Reader View Event . SR 2 Reader View Navigation Event . SR 2 Reader View Navigation Close Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNothing Ġto Ġdo ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠSR 2 Reader View Event . SR 2 Reader View Navigation Event . SR 2 Reader View Navigation Open TOC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNothing Ġto Ġdo ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġis ĠSR 2 Reader View Event . SR 2 Reader View Book Event . SR 2 Book Opened Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this . controller Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . controller Ġ= Ġevent . controller ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . pending Book marks . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . on Book marks And Controller Ready ( event . controller , Ġpending Book marks ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . pending Book marks Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġis ĠSR 2 Reader View Event . SR 2 Reader View Book Event . SR 2 Book Loading Failed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNothing Ġto Ġdo ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Book marks And Controller Ready ( controller : ĠSR 2 Controller Type , Ġbook marks : ĠList < SR 2 Bookmark >) Ġ{ ĊĠĠĠ Ġval Ġlast Read Ġ= Ġbook marks . find Ġ{ Ġbookmark Ġ-> Ġbookmark . type Ġ== ĠSR 2 Bookmark . Type . LAST _ READ Ġ} ĊĠĠĠ Ġcontroller . submit Command ( SR 2 Command . Book marks Load ( bookmarks )) ĊĠĠĠ Ġval Ġstart Locator Ġ= Ġlast Read ?. locator Ġ?: Ġcontroller . book Metadata . start ĊĠĠĠ Ġcontroller . submit Command ( SR 2 Command . Open Chapter ( start Locator )) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠHandle Ġincoming Ġmessages Ġfrom Ġthe Ġcontroller . ĊĠĠ Ġ*/ ĊĊĠ Ġprivate Ġfun Ġon Controller Event ( ĊĠĠĠ Ġevent : ĠSR 2 Event ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Bookmark Event . SR 2 Bookmark Created Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbookmark Ġ= ĊĠĠĠĠĠĠĠĠĠ ĠReader 2 Book marks . from SR 2 Bookmark ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook Entry Ġ= Ġthis . parameters . entry , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId Ġ= ĠReader 2 Devices . deviceId ( this . profiles Controller , Ġthis . parameters . book Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġevent . bookmark ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġthis . bookmark Service . bookmark Create ( ĊĠĠĠĠĠĠĠĠĠ Ġaccount ID Ġ= Ġthis . parameters . accountId , ĊĠĠĠĠĠĠĠĠĠ Ġbookmark Ġ= Ġbookmark ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Bookmark Event . SR 2 Bookmark Deleted Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbookmark Ġ= ĊĠĠĠĠĠĠĠĠĠ ĠReader 2 Book marks . from SR 2 Bookmark ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook Entry Ġ= Ġthis . parameters . entry , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId Ġ= ĠReader 2 Devices . deviceId ( this . profiles Controller , Ġthis . parameters . book Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġevent . bookmark ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġthis . bookmark Service . bookmark Delete ( ĊĠĠĠĠĠĠĠĠĠ Ġaccount ID Ġ= Ġthis . account . id , ĊĠĠĠĠĠĠĠĠĠ Ġbookmark Ġ= Ġbookmark ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Theme Changed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . profiles Controller . profile Update Ġ{ Ġcurrent Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġcurrent . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences Ġ= Ġcurrent . preferences . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader Preferences Ġ= ĠReader 2 Themes . from SR 2 ( event . theme ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 On Center T apped , ĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Reading Position Changed , ĊĠĠĠĠĠ ĠSR 2 Event . SR 2 Bookmark Event . SR 2 Book marks Loaded , ĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Error . SR 2 Chapter Non existent , ĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Error . SR 2 WebView In accessible , ĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 External Link Selected , ĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Command Event . SR 2 Command Execution Started , ĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Command Event . SR 2 Command Execution Running Long , ĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Command Event . SR 2 Command Event Completed . SR 2 Command Execution Succeeded , ĊĠĠĠĠĠ Ġis ĠSR 2 Event . SR 2 Command Event . SR 2 Command Event Completed . SR 2 Command Execution Failed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNothing ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ