package Ġsl ak . fan fi ction stories . activities Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . annotation . Any Thread Ċ import Ġandroidx . annotation . Ui Thread Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroidx . activity . view Models Ċ import Ġkotlinx . android . synt hetic . main . activity _ can on _ story _ list .* Ċ import Ġkotlinx . android . synt hetic . main . dialog _ ff net _ filter . view .* Ċ import Ġkotlinx . android . synt hetic . main . loading _ activity _ in determinate .* Ċ import Ġkotlinx . coroutines . Dispatch ers . Main Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġsl ak . fan fi ction stories .* Ċ import Ġsl ak . fan fi ction stories . Story ListItem . Group Title Ċ import Ġsl ak . fan fi ction stories . Story ListItem . Story Card Data Ċ import Ġsl ak . fan fi ction stories . data . Prefs Ċ import Ġsl ak . fan fi ction stories . data . database Ċ import Ġsl ak . fan fi ction stories . data . fetch ers .* Ċ import Ġsl ak . fan fi ction stories . utility .* Ċ Ċ /** ĠStores Ġthe Ġdata Ġrequired Ġfor Ġa Ġ[ Can on Story List Activity ]. Ġ*/ Ċ class ĠCan on List ViewModel ( val Ġparent Link : ĠCategory Link ) Ġ: ĠStory List ViewModel () Ġ{ ĊĠ Ġprivate Ġvar ĠcurrentPage : ĠInt Ġ= Ġ 1 ĊĊĠ Ġvar Ġis Favorite : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġset ĊĊĠ Ġvar Ġmetadata Ġ= ĠCan on Metadata () ĊĠĠĠ Ġprivate Ġset ĊĊĠ Ġval Ġfilters Ġ= ĠCan on Filters () ĊĊĠ Ġ@ Any Thread ĊĠ Ġfun Ġtoggle Favorite (): ĠJob Ġ{ ĊĠĠĠ Ġval Ġlink Ġ= ĠCategory Link ( ĊĠĠĠĠĠĠĠ Ġmetadata . can on Title . orElse Throw ( IllegalStateException (" Actual Ġcan on Ġtitle Ġmissing ")), ĊĠĠĠĠĠĠĠ Ġparent Link . url Component , ĊĠĠĠĠĠĠĠ Ġparent Link . story Count ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġlaunch ( Main ) Ġ{ ĊĠĠĠĠĠ Ġis Favorite Ġ= Ġ! is Favorite ĊĠĠĠĠĠ Ġif Ġ( is Favorite ) ĠStatic . database . add Favorite Can on ( link ). await () ĊĠĠĠĠĠ Ġelse ĠStatic . database . remove Favorite Can on ( link ). await () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġreset Pagination () Ġ{ ĊĠĠĠ ĠcurrentPage Ġ= Ġ 1 ĊĠ Ġ} ĊĊĠ Ġsuspend Ġfun ĠgetCurrent Page () Ġ= Ġget Page ( currentPage ) ĊĠ Ġsuspend Ġfun ĠgetNext Page () Ġ= Ġget Page ( ++ currentPage ) ĊĊĠ Ġprivate Ġsuspend Ġfun Ġget Page ( page : ĠInt ): ĠList < Story ListItem > Ġ{ ĊĠĠĠ Ġval Ġcan on Page Ġ= Ġget Can on Page ( parent Link , Ġfilters , Ġpage ) ĊĠĠĠ Ġmetadata Ġ= Ġcan on Page . metadata ĊĠĠĠ Ġval Ġfavour ite Def Ġ= ĠStatic . database . is Can on Favorite ( parent Link ) ĊĠĠĠ Ġval Ġstory Map Ġ= Ġcan on Page . story List . map Ġ{ Ġit . story Id Ġto Ġit Ġ}. toMap () ĊĠĠĠ Ġfor Ġ( db Story Ġin ĠStatic . database . stories ById ( story Map . keys ). await ()) Ġ{ ĊĠĠĠĠĠ Ġstory Map . getValue ( db Story . story Id ). progress Ġ= Ġdb Story . progress ĊĠĠĠĠĠ Ġstory Map . getValue ( db Story . story Id ). status Ġ= Ġdb Story . status ĊĠĠĠ Ġ} ĊĠĠĠ Ġis Favorite Ġ= Ġfavour ite Def . await () ĊĠĠĠ Ġval Ġstory Data Ġ= Ġstory Map . values . map Ġ{ ĠStory Card Data ( it ) Ġ} ĊĠĠĠ Ġif Ġ( story Data . isEmpty ()) Ġreturn Ġempty List () ĊĠĠĠ Ġreturn ĠlistOf ( Group Title ( str ( R . string . page _ x , Ġpage )), Ġ* story Data . to Typed Array ()) ĊĠ Ġ} Ċ } Ċ Ċ /** ĠA Ġlist Ġof Ġstories Ġwithin Ġa Ġcan on . Ġ*/ Ċ class ĠCan on Story List Activity Ġ: ĠCor outine Scope Activity (), ĠI Has Loading Bar Ġ{ ĊĠ Ġoverride Ġval Ġloading : ĠProgress Bar ĊĠĠĠ Ġget () Ġ= Ġactivity ProgressBar ĊĊĠ Ġprivate Ġval ĠviewModel : ĠCan on List ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠ ĠViewModel Factory ( intent . get Parcelable Extra ( INT ENT _ LINK _ DATA ) !! ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ ĠsetContentView ( R . layout . activity _ can on _ story _ list ) ĊĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠ Ġset Loading View ( toolbar ) ĊĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠ Ġcan on Story ListView . adapter Ġ= ĠStory Adapter ( viewModel ) ĊĠĠĠ Ġval Ġlayout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠ Ġcan on Story ListView . layout Manager Ġ= Ġlayout Manager ĊĠĠĠ Ġcan on Story ListView . create Story Swipe Helper () ĊĠĠĠ Ġinfinite Page Scroll ( can on Story ListView , Ġlayout Manager ) Ġ{ ĊĠĠĠĠĠ ĠviewModel . add Sus pending Items Ġ{ ĠviewModel . getNext Page () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( Prefs . filter Language ()) ĠviewModel . filters . lang Ġ= ĠP refs . preferred Language ĊĊĠĠĠ Ġset App bar Text () ĊĊĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġtrigger Load UI (). invoke On Completion Ġ{ Ġinvalidate Options Menu () Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġon Restore InstanceState ( savedInstanceState ) ĊĠĠĠĠĠ Ġhide Loading () ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠviewModel . default Story List Observer . register () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ ĠviewModel . default Story List Observer . unregister () ĊĠ Ġ} ĊĊĠ Ġ@ Any Thread ĊĠ Ġprivate Ġfun Ġtrigger Load UI () Ġ= Ġlaunch ( Main ) Ġ{ ĊĠĠĠ Ġshow Loading () ĊĠĠĠ ĠviewModel . add Items ( viewModel . getCurrent Page ()) ĊĠĠĠ ĠviewModel . metadata . can on Title . if Present Ġ{ ĊĠĠĠĠĠ Ġdatabase . update Favorite Can on ( ĊĠĠĠĠĠĠĠĠĠ ĠCategory Link ( it , ĠviewModel . parent Link . url Component , ĠviewModel . parent Link . story Count )). await () ĊĠĠĠ Ġ} ĊĠĠĠ Ġset App bar Text () ĊĠĠĠ Ġhide Loading () ĊĠ Ġ} ĊĊĠ Ġ@ Ui Thread ĊĠ Ġprivate Ġfun Ġset App bar Text () Ġ{ ĊĠĠĠ Ġtitle Ġ= ĠviewModel . metadata . can on Title . orElse ( str ( R . string . loading )) ĊĠĠĠ ĠviewModel . metadata . un filtered Story Count . if Present Ġ{ ĊĠĠĠĠĠ Ġsupport ActionBar ?. subtitle Ġ= Ġstr ( R . string . x _ stories , Ġit ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠ Ġmenu . find Item ( R . id . favorite ). icon Ġ= Ġresources . get Drawable ( ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is Favorite ) ĠR . drawable . ic _ favorite _ black _ 2 4 dp ĊĠĠĠĠĠĠĠ Ġelse ĠR . drawable . ic _ favorite _ border _ black _ 2 4 dp , Ġtheme ) ĊĠĠĠ Ġmenu . find Item ( R . id . filter ). icon Tint ( R . color . white , Ġtheme ) ĊĠĠĠ Ġmenu . find Item ( R . id . favorite ). icon Tint ( R . color . white , Ġtheme ) ĊĠĠĠ Ġreturn Ġsuper . on Prepare Options Menu ( menu ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ can on _ story _ list , Ġmenu ) ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġdialog Opened : ĠBoolean Ġ= Ġfalse ĊĠ Ġ@ Suppress Lint (" Inf late Params ") ĊĠ Ġprivate Ġfun Ġopen Filter Dialog () Ġ{ ĊĠĠĠ Ġ// ĠDon 't Ġopen Ġmore Ġthan Ġone Ġdialog ĊĠĠĠ Ġif Ġ( dialog Opened ) Ġreturn ĊĠĠĠ Ġdialog Opened Ġ= Ġtrue ĊĠĠĠ Ġval Ġlayout Ġ= ĠLayoutInflater . from ( this ) ĊĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . dialog _ ff net _ filter , Ġnull , Ġfalse ) ĊĊĠĠĠ Ġval Ġstr None Ġ= Ġstr ( R . string . none ) ĊĠĠĠ Ġval Ġstr Any Ġ= Ġstr ( R . string . any ) ĊĊĠĠĠ Ġwith ( viewModel . filters ) Ġ{ ĊĠĠĠĠĠ Ġval Ġgen res Edit Ġ= Ġresources . getString Array ( R . array . genres ). to Mutable List () ĊĠĠĠĠĠ Ġgen res Edit [ 0 ] Ġ= Ġstr None ĊĠĠĠĠĠ Ġlayout . not Genre . set Entries ( genres Edit ) ĊĊĠĠĠĠĠ Ġlayout . sort . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġsort Ġ= ĠSort . values ()[ pos ] Ġ} ĊĠĠĠĠĠ Ġlayout . time Range . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġtime Range Ġ= ĠTime Range . values ()[ pos ] Ġ} ĊĠĠĠĠĠ Ġlayout . genre 1 . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġgenre 1 Ġ= ĠGen re . values ()[ pos ] Ġ} ĊĠĠĠĠĠ Ġlayout . genre 2 . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġgenre 2 Ġ= ĠGen re . values ()[ pos ] Ġ} ĊĠĠĠĠĠ Ġlayout . rating . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġrating Ġ= ĠRating . values ()[ pos ] Ġ} ĊĠĠĠĠĠ Ġlayout . status . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġstatus Ġ= ĠStatus . values ()[ pos ] Ġ} ĊĠĠĠĠĠ Ġlayout . length . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġword Count Ġ= ĠWord Count . values ()[ pos ] Ġ} ĊĠĠĠĠĠ Ġlayout . not Genre . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġgenre Without Ġ= ĠGen re . values ()[ pos ]. opt () Ġ} ĊĠĠĠĠĠ Ġlayout . language . on Select Ġ{ Ġ_, Ġpos Ġ-> ĊĠĠĠĠĠĠĠ Ġlang Ġ= ĠLanguage . values ()[ pos ] ĊĠĠĠĠĠĠĠ ĠP refs . preferred Language Ġ= Ġlang ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġlayout . sort . setSelection ( Sort . values (). indexOf ( sort )) ĊĠĠĠĠĠ Ġlayout . time Range . setSelection ( Time Range . values (). indexOf ( time Range )) ĊĠĠĠĠĠ Ġlayout . genre 1 . setSelection ( Genre . values (). indexOf ( genre 1 )) ĊĠĠĠĠĠ Ġlayout . genre 2 . setSelection ( Genre . values (). indexOf ( genre 2 )) ĊĠĠĠĠĠ Ġlayout . rating . setSelection ( Rating . values (). indexOf ( rating )) ĊĠĠĠĠĠ Ġlayout . language . setSelection ( Language . values (). indexOf ( lang )) ĊĠĠĠĠĠ Ġlayout . status . setSelection ( Status . values (). indexOf ( status )) ĊĠĠĠĠĠ Ġlayout . length . setSelection ( Word Count . values (). indexOf ( word Count )) ĊĠĠĠĠĠ Ġgenre Without . if Present Ġ{ Ġlayout . not Genre . setSelection ( Genre . values (). indexOf ( it )) Ġ} ĊĊĠĠĠĠĠ Ġwith ( viewModel . metadata ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchar List . if Present Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġchar Name List Ġ= Ġlist . map To ( mutable ListOf ()) Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġchar Name List [ 0 ] Ġ= Ġstr Any ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 1 . set Entries ( char Name List ) ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 2 . set Entries ( char Name List ) ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 3 . set Entries ( char Name List ) ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 4 . set Entries ( char Name List ) ĊĠĠĠĠĠĠĠĠĠ Ġchar Name List [ 0 ] Ġ= Ġstr None ĊĠĠĠĠĠĠĠĠĠ Ġlayout . not Char 1 . set Entries ( char Name List ) ĊĠĠĠĠĠĠĠĠĠ Ġlayout . not Char 2 . set Entries ( char Name List ) ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 1 . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġchar 1 Id Ġ= Ġchar List . get ()[ pos ]. id Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 2 . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġchar 2 Id Ġ= Ġchar List . get ()[ pos ]. id Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 3 . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġchar 3 Id Ġ= Ġchar List . get ()[ pos ]. id Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 4 . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġchar 4 Id Ġ= Ġchar List . get ()[ pos ]. id Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġlayout . not Char 1 . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġchar 1 Without Ġ= Ġchar List . get ()[ pos ]. id . opt () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġlayout . not Char 2 . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġchar 2 Without Ġ= Ġchar List . get ()[ pos ]. id . opt () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 1 . setSelection ( char List . get (). indexOf First Ġ{ Ġit . id Ġ== Ġchar 1 Id Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 2 . setSelection ( char List . get (). indexOf First Ġ{ Ġit . id Ġ== Ġchar 2 Id Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 3 . setSelection ( char List . get (). indexOf First Ġ{ Ġit . id Ġ== Ġchar 3 Id Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġlayout . char 4 . setSelection ( char List . get (). indexOf First Ġ{ Ġit . id Ġ== Ġchar 4 Id Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġchar 1 Without . if Present Ġ{ Ġlayout . not Char 1 . setSelection ( char Name List . indexOf ( it )) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġchar 2 Without . if Present Ġ{ Ġlayout . not Char 2 . setSelection ( char Name List . indexOf ( it )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġchar Spinner State Ġ= Ġif Ġ( viewModel . metadata . char List Ġis ĠEmpty ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠ ĠlistOf ( layout . char 1 , Ġlayout . char 2 , Ġlayout . char 3 , Ġlayout . char 4 , Ġlayout . not Char 1 , ĊĠĠĠĠĠĠĠĠĠ Ġlayout . not Char 2 , Ġlayout . char 1 Text , Ġlayout . char 2 Text , Ġlayout . char 3 Text , Ġlayout . char 4 Text , ĊĠĠĠĠĠĠĠĠĠ Ġlayout . not Char 1 Text , Ġlayout . not Char 2 Text ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . visibility Ġ= Ġchar Spinner State ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠviewModel . metadata . world List . if Present Ġ{ Ġwl Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġworld Name List Ġ= Ġwl . map To ( mutable ListOf ()) Ġ{ Ġit . name Ġ} ĊĊĠĠĠĠĠĠĠ Ġworld Name List [ 0 ] Ġ= Ġstr Any ĊĠĠĠĠĠĠĠ Ġlayout . world . set Entries ( world Name List ) ĊĊĠĠĠĠĠĠĠ Ġworld Name List [ 0 ] Ġ= Ġstr None ĊĠĠĠĠĠĠĠ Ġlayout . not World . set Entries ( world Name List ) ĊĊĠĠĠĠĠĠĠ Ġlayout . world . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġworld Id Ġ= Ġwl [ pos ]. id Ġ} ĊĠĠĠĠĠĠĠ Ġlayout . world . setSelection ( wl . indexOf First Ġ{ Ġit . id Ġ== Ġworld Id Ġ}) ĊĊĠĠĠĠĠĠĠ Ġlayout . not World . on Select Ġ{ Ġ_, Ġpos Ġ-> Ġworld Without Ġ= Ġwl [ pos ]. name . opt () Ġ} ĊĊĠĠĠĠĠĠĠ Ġworld Without . if Present Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlayout . not World . setSelection ( world Name List . indexOf ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġworld Spinner State Ġ= Ġif Ġ( viewModel . metadata . world List Ġis ĠEmpty ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠ Ġlayout . world . visibility Ġ= Ġworld Spinner State ĊĠĠĠĠĠ Ġlayout . not World . visibility Ġ= Ġworld Spinner State ĊĠĠĠĠĠ Ġlayout . world Text . visibility Ġ= Ġworld Spinner State ĊĠĠĠĠĠ Ġlayout . not World Text . visibility Ġ= Ġworld Spinner State ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . filter _ by ) ĊĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ Ġdialog Opened Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . native _ filter _ btn ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . clear Data () ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . reset Pagination () ĊĠĠĠĠĠĠĠĠĠ Ġtrigger Load UI () ĊĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. setView ( layout ) ĊĠĠĠĠĠĠĠ Ġ. show () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠ ĠR . id . filter Ġ-> ĠviewModel . metadata . page Count . if Present Ġ{ Ġopen Filter Dialog () Ġ} ĊĠĠĠĠĠ ĠR . id . favorite Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . metadata . page Count Ġis ĠEmpty ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ ĠviewModel . toggle Favorite (). invoke On Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠIt 's Ġalready Ġtoggle d Ġat Ġthis Ġpoint ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( this @ Can on Story List Activity . root , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . un f avor ited , ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( this @ Can on Story List Activity . root , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr ( R . string . f avor ited _ x , Ġtitle . toString ()), ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġon Back Pressed () ĊĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} Ċ } Ċ