/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠAd vent ech Ġ< info @ ad vent ech . io > Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . cry art . s abb ath school . lessons . ui . read ings Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . core . view . Window Compat Ċ import Ġandroidx . lifecycle . View Tree Lifecycle Owner Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġapp . ss . lessons . data . model . SSL ess on Info Ċ import Ġapp . ss . lessons . data . model . SS Read Ċ import Ġapp . ss . lessons . data . model . SS Read Comments Ċ import Ġapp . ss . lessons . data . model . SS Read Highlight s Ċ import Ġapp . ss . media . model . Media Availability Ċ import Ġapp . ss . media . playback . Playback ViewModel Ċ import Ġapp . ss . media . playback . ui . now Playing . show Now Playing Ċ import Ġapp . ss . media . playback . ui . video . show Video List Ċ import Ġapp . ss . pdf . Pdf Reader Ċ import Ġco il . load Ċ import Ġcom . cry art . design . theme Ċ import Ġcom . cry art . s abb ath school . core . extensions . context . color Primary Ċ import Ġcom . cry art . s abb ath school . core . extensions . context . share Content Ċ import Ġcom . cry art . s abb ath school . core . extensions . context . to Web Uri Ċ import Ġcom . cry art . s abb ath school . core . extensions . coroutines . flow . collect In Ċ import Ġcom . cry art . s abb ath school . core . extensions . prefs . SS Prefs Ċ import Ġcom . cry art . s abb ath school . core . extensions . view . view Binding Ċ import Ġcom . cry art . s abb ath school . core . misc . Date Helper Ċ import Ġcom . cry art . s abb ath school . core . misc . SS Constants Ċ import Ġcom . cry art . s abb ath school . core . misc . SS Un zip Ċ import Ġcom . cry art . s abb ath school . core . model . SS Reading Display Options Ċ import Ġcom . cry art . s abb ath school . core . model . color Theme Ċ import Ġcom . cry art . s abb ath school . core . model . display Theme Ċ import Ġcom . cry art . s abb ath school . core . navigation . App Navigator Ċ import Ġcom . cry art . s abb ath school . core . ui . Share able Screen Ċ import Ġcom . cry art . s abb ath school . core . ui . Sl iding Activity Ċ import Ġcom . cry art . s abb ath school . lessons . R Ċ import Ġcom . cry art . s abb ath school . lessons . databinding . Ss Reading Activity Binding Ċ import Ġcom . cry art . s abb ath school . lessons . ui . read ings . components . Mini Player Component Ċ import Ġcom . google . firebase . storage . Firebase Storage Ċ import Ġcom . google . firebase . storage . Storage Metadata Ċ import Ġcom . google . firebase . storage . Storage Reference Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . File Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠSS Reading Activity Ġ: ĠSl iding Activity (), ĠSS Reading ViewModel . Data Listener , ĠShare able Screen Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġapp Navigator : ĠApp Navigator ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġss Prefs : ĠS SP refs ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpdf Reader : ĠPdf Reader ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġview Binding ( Ss Reading Activity Binding :: inflate ) ĊĠĠĠ Ġprivate Ġval Ġlatest Reader Artifact Ref : ĠStorage Reference Ġ= ĠFirebase Storage . getInstance () ĊĠĠĠĠĠĠĠ Ġ. reference . child ( SS Constants . SS _ READ ER _ AR TI FACT _ NAME ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġss Reading ViewModel : ĠSS Reading ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġreading View Adapter : ĠReading ViewPager Adapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠReading ViewPager Adapter ( ss Reading ViewModel ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Read ings ViewModel >() ĊĠĠĠ Ġprivate Ġval Ġplayback ViewModel Ġby Ġview Models < Playback ViewModel >() ĊĊĠĠĠ Ġprivate Ġvar Ġapp bar ChangeListener : ĠApp bar Offset ChangeListener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Read Position : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġcheck If Reader Needed () ĊĊĠĠĠĠĠĠĠ Ġinit UI () ĊĠĠĠĠĠĠĠ Ġval Ġlesson Index Ġ= Ġintent . extras ?. getString ( SS Constants . SS _ LESS ON _ INDEX _ EXTRA ) ĊĠĠĠĠĠĠĠ Ġif Ġ( lesson Index . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠView Tree Lifecycle Owner . set ( binding . root , Ġthis ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! this :: ss Reading ViewModel . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġss Reading ViewModel Ġ= ĠSS Reading ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlesson Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRead Ġposition Ġpassed Ġin Ġintent Ġextras ĊĠĠĠĠĠĠĠ Ġval Ġextra Position Ġ= Ġintent . extras ?. getString ( SS Constants . SS _ READ _ POSITION _ EXTRA ) ĊĠĠĠĠĠĠĠ Ġcurrent Read Position Ġ= ĠsavedInstanceState ?. getInt ( SS Constants . SS _ READ _ POSITION _ EXTRA ) Ġ?: Ġextra Position ?. toInt OrNull () ĊĊĠĠĠĠĠĠĠ Ġbinding . ss Reading ViewPager . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Page Limit Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġreading View Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister On Page Change Callback ( object Ġ: ĠView Pager 2 . On Page Change Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Selected ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġss Read Ġ= Ġreading View Adapter . get Read At ( position ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Page Title And Subtitle ( ss Read . title , ĠDate Helper . format Date ( ss Read . date , ĠSS Constants . SS _ DATE _ FORMAT _ OUTPUT _ DAY )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= Ġss Reading ViewModel ĊĠĠĠĠĠĠĠ Ġupdate Color Scheme () ĊĊĠĠĠĠĠĠĠ Ġobserve Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . ss Reading AppBar . ss Reading Toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġwith ( binding . ss Reading ViewPager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinset Animator Ġ= ĠKeyboard Insets Change Animator ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Compat . set Decor Fits System Windows ( window , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . setWindow Insets Animation Callback ( this , Ġinset Animator ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . setOn Apply Window Insets Listener ( this , Ġinset Animator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcurrent Read Position ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ss Reading ViewPager . currentItem Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* binding . ss Reading AppBar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp bar ChangeListener Ġ= ĠApp bar Offset ChangeListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ SS Reading Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss Reading Col lap sing Toolbar , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss Reading Toolbar , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss Reading AppBar Layout . add On Offset Changed Listener ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠ ĠMini Player Component ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ss Player View , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayback ViewModel . playback Connection , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġss Prefs . display Options Flow (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Expand Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . show Now Playing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . lesson Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Read Index () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Color Scheme ( display Options : ĠSS Reading Display Options ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġdisplay Options . color Theme ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . ss Reading AppBar . ss Reading Col lap sing Toolbar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content S cri m Color ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset StatusBar S cri m Color ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Collapsed Title TextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( display Options . display Theme ( this @ SS Reading Activity )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSS Reading Display Options . SS _ THEME _ DARK Ġ-> ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠColor . BLACK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck If Reader Needed () Ġ{ ĊĠĠĠĠĠĠĠ Ġlatest Reader Artifact Ref . metadata . add On Success Listener Ġ{ Ġstorage Metadata : ĠStorage Metadata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Reader Artifact Creation Time Ġ= Ġss Prefs . getLast Reader Artifact Creation Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Reader Artifact Creation Time Ġ!= Ġstorage Metadata . creation Time Millis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Latest Reader ( storage Metadata . updated Time Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it . fill In StackTrace ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Color Scheme () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprimary Color Ġ= Ġthis . color Primary ĊĠĠĠĠĠĠĠ Ġbinding . ss Reading AppBar . ss Reading Col lap sing Toolbar . setContent S cri m Color ( primary Color ) ĊĠĠĠĠĠĠĠ Ġbinding . ss Reading AppBar . ss Reading Col lap sing Toolbar . set BackgroundColor ( primary Color ) ĊĠĠĠĠĠĠĠ Ġbinding . ss ProgressBar . ss Qu arter lies Loading . theme ( primary Color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdownload Latest Reader ( reader Artifact Creation Time : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal File Ġ= ĠFile ( files Dir , ĠSS Constants . SS _ READ ER _ AR TI FACT _ NAME ) ĊĠĠĠĠĠĠĠ Ġlatest Reader Artifact Ref . getFile ( local File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss Prefs . set Last Reader Artifact Creation Time ( reader Artifact Creation Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSS Un zip ( local File . path , Ġfiles Dir . path Ġ+ Ġ"/") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . ss _ reading _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish After Transition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ss _ reading _ menu _ audio Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . show Now Playing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . lesson Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Read Index () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ss _ reading _ menu _ video Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . lesson Index ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . show Video List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ss _ reading _ menu _ share Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġbinding . ss Reading ViewPager . currentItem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread Title Ġ= Ġreading View Adapter . get Read At ( position )?. title Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ"${ ss Reading ViewModel . lesson Title } Ġ- Ġ$ read Title " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshare Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ message \ n ${ get Share Web Uri () }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . ss _ menu _ share _ app ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ss _ reading _ menu _ pdf Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( index , Ġp dfs ) Ġ= ĠviewModel . lesson P dfs Flow . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pdf s . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Ġ= ĠMedia Availability ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Ġ= ĠviewModel . audio Available Flow . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Ġ= ĠviewModel . video Available Flow . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( pdf Reader . launch Intent ( pdf s , Ġindex , Ġmedia Availability Ġ= Ġmedia )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ss _ reading _ menu _ display _ options Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss Reading ViewModel . on Display Options Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu ?. find Item ( R . id . ss _ reading _ menu _ audio )?. isVisible Ġ= ĠviewModel . audio Available Flow . value ĊĠĠĠĠĠĠĠ Ġmenu ?. find Item ( R . id . ss _ reading _ menu _ video )?. isVisible Ġ= ĠviewModel . video Available Flow . value ĊĠĠĠĠĠĠĠ Ġmenu ?. find Item ( R . id . ss _ reading _ menu _ pdf )?. isVisible Ġ= ĠviewModel . pdf Available Flow . value ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Prepare Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( binding . ss Reading AppBar . ss Col lap sing Toolbar Back drop . drawable Ġas ? ĠBitmap Drawable )?. bitmap ?. recycle () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Lesson Info Changed ( ss Lesson Info : ĠSSL ess on Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ss Reading AppBar . ss Col lap sing Toolbar Back drop . load ( ss Lesson Info . lesson . cover ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Page Title And Subtitle ( title : ĠString , Ġsub Title : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ss Reading AppBar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġss Reading Col lap sing Toolbar . title Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġss Col lap sing Toolbar Subtitle . text Ġ= Ġsub Title ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Reads Downloaded ( ĊĠĠĠĠĠĠĠ Ġss Reads : ĠList < SS Read >, ĊĠĠĠĠĠĠĠ Ġss Read Highlight s : ĠList < SS Read Highlight s >, ĊĠĠĠĠĠĠĠ Ġss Read Comments : ĠList < SS Read Comments >, ĊĠĠĠĠĠĠĠ Ġss Read Index : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcurrent Read Position Ġ?: Ġss Read Index ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġobject Ġ: ĠRecyclerView . Adapter Data Observer () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ss Reading ViewPager . currentItem Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss Reads . get OrNull ( index )?. let Ġ{ Ġread Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Page Title And Subtitle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Helper . format Date ( read . date , ĠSS Constants . SS _ DATE _ FORMAT _ OUTPUT _ DAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( reading View Adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Adapter Data Observer ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content ( ss Reads , Ġss Read Highlight s , Ġss Read Comments ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Adapter Data Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcurrent Read Position Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Super Call ") ĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġbinding . ss Reading ViewPager . currentItem ĊĠĠĠĠĠĠĠ Ġout State . put Int ( SS Constants . SS _ READ _ POSITION _ EXTRA , Ġposition ) ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġss Prefs . display Options Flow (). collect In ( this ) Ġ{ Ġdisplay Options Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreading View Adapter . reading Options Ġ= Ġdisplay Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp bar ChangeListener ?. reading Options Ġ= Ġdisplay Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Color Scheme ( display Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġss Reading ViewModel . on SS Reading Display Options ( display Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . audio Available Flow . collect In ( this ) Ġ{ Ġavailable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Ġ= Ġbinding . ss Reading AppBar . ss Reading Toolbar . menu ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . ss _ reading _ menu _ audio )?. isVisible Ġ= Ġavailable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . video Available Flow . collect In ( this ) Ġ{ Ġavailable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Ġ= Ġbinding . ss Reading AppBar . ss Reading Toolbar . menu ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . ss _ reading _ menu _ video )?. isVisible Ġ= Ġavailable ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . pdf Available Flow . collect In ( this ) Ġ{ Ġavailable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Ġ= Ġbinding . ss Reading AppBar . ss Reading Toolbar . menu ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . ss _ reading _ menu _ pdf )?. isVisible Ġ= Ġavailable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Share Web Uri (): ĠUri Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġbinding . ss Reading ViewPager . currentItem ĊĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġreading View Adapter . get Read At ( position ) ĊĠĠĠĠĠĠĠ Ġval Ġread Index Ġ= Ġread ?. share Index ( ss Reading ViewModel . lesson Share Index , Ġposition Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ getString ( R . string . ss _ app _ host ) }/${ read Index Ġ?: Ġ"" }". to Web Uri () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Read Index (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġbinding . ss Reading ViewPager . currentItem ĊĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġreading View Adapter . get Read At ( position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġread ?. index ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġlaunch Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlesson Index : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Position : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ): ĠIntent Ġ= ĠIntent ( context , ĠSS Reading Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( SS Constants . SS _ LESS ON _ INDEX _ EXTRA , Ġlesson Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Position ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( SS Constants . SS _ READ _ POSITION _ EXTRA , Ġread Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ