package Ġio . go los . go los . screens . story Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Mediator LiveData Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġio . go los . go los . R Ċ import Ġio . go los . go los . repository . Repository Ċ import Ġio . go los . go los . repository . model . Go los Dis cussion Item Ċ import Ġio . go los . go los . repository . model . Story Filter Ċ import Ġio . go los . go los . repository . model . Tag Ċ import Ġio . go los . go los . screens . editor . Editor Activity Ċ import Ġio . go los . go los . screens . profile . UserProfile Activity Ċ import Ġio . go los . go los . screens . stories . Filtered St ories Activity Ċ import Ġio . go los . go los . screens . stories . model . Feed Type Ċ import Ġio . go los . go los . screens . story . model .* Ċ import Ġio . go los . go los . screens . users list . Users List Activity Ċ import Ġio . go los . go los . utils .* Ċ Ċ class ĠStory ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġm Story LiveData Ġ= ĠMed iator LiveData < Story ViewState >() ĊĠĠĠ Ġprivate Ġval Ġm Subscriptions LiveData Ġ= ĠMed iator LiveData < Story Subscription BlockState >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Repository : ĠRepository ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauthor : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġperm Link : ĠString ĊĠĠĠ Ġprivate Ġvar Ġfilter : ĠStory Filter ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġblog : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfeed Type : ĠFeed Type ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Internet Status Notifier : ĠInternet Status Notifier ĊĠĠĠ Ġprivate Ġval Ġm Image Click Events Ġ= ĠMutable LiveData < Image Click Data >() ĊĠĠĠ Ġpublic Ġval Ġimage Dialog Show Event : ĠLive Data < Image Click Data > Ġ= Ġm Image Click Events ĊĠĠĠ Ġprivate Ġvar Ġc urent UserName : ĠString ? Ġ= Ġnull ĊĊĊĠĠĠ Ġfun ĠonCreate ( author : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperm Link : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblog : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Type : ĠFeed Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter : ĠStory Filter ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternet Status Notifier : ĠInternet Status Notifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository : ĠRepository Ġ= ĠRepository . get ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . author Ġ= Ġauthor ĊĠĠĠĠĠĠĠ Ġthis . perm Link Ġ= Ġperm Link ĊĠĠĠĠĠĠĠ Ġthis . blog Ġ= Ġblog ĊĠĠĠĠĠĠĠ Ġthis . feed Type Ġ= Ġfeed Type ĊĠĠĠĠĠĠĠ Ġthis . filter Ġ= Ġfilter ĊĠĠĠĠĠĠĠ Ġthis . m Internet Status Notifier Ġ= Ġinternet Status Notifier ĊĠĠĠĠĠĠĠ Ġm Repository Ġ= Ġrepository ĊĠĠĠĠĠĠĠ Ġm Story LiveData . value Ġ= ĠStory ViewState () ĊĠĠĠĠĠĠĠ Ġm Subscriptions LiveData . value Ġ= ĠStory Subscription BlockState ( false , ĠSubscribe Status . Un subscribed Status , ĠSubscribe Status . Un subscribed Status ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġval Ġstory LiveData : ĠLive Data < Story ViewState > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Story LiveData ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġval Ġsubscription LiveData : ĠLive Data < Story Subscription BlockState > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Subscriptions LiveData ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Main Story Text Click ( activity : ĠActivity , Ġtext : ĠString ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Go los User Subscriptions StateChanged () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Subscriptions Ġ= Ġm Repository . currentUser Subscriptions . value . or Empty () ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrent Subscriptions States Ġ= Ġm Repository . currentUser Subscriptions Update Status . value . or Empty () ĊĠĠĠĠĠĠĠ Ġm Subscriptions LiveData . value Ġ= Ġm Subscriptions LiveData ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . copy ( subscribe On Story Author Status Ġ= ĠSubscribe Status . create ( current Subscriptions . contains ( author ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Subscriptions States [ author ] Ġ?: ĠUpdating State . DONE )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonStart () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġm Story LiveData . add Source ( m Repository . get St ories ( feed Type , Ġfilter )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. items ?. find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . root Story ()?. author Ġ== Ġthis . author ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġit . root Story ()?. per mlink Ġ== Ġthis . perm Link ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Subscriptions Ġ= Ġm Repository . currentUser Subscriptions . value . or Empty () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Subscriptions States Ġ= Ġm Repository . currentUser Subscriptions Update Status . value . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Subscriptions LiveData . value Ġ= Ġm Subscriptions LiveData ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . copy ( subscribe On Story Author Status Ġ= ĠSubscribe Status . create ( current Subscriptions . contains ( author ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Subscriptions States [ author ] Ġ?: ĠUpdating State . DONE )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstory Ġ= Ġit . root Story () Ġ?: Ġreturn @ let ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmust Have Comments Ġ= Ġstory . comments Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomments Size Ġ= Ġit . comments (). size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( must Have Comments Ġ> Ġ 0 Ġ&& Ġcomments Size Ġ== Ġ 0 ) ĠisLoading Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Story LiveData . value Ġ= Ġm Story LiveData . value ?. copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= ĠisLoading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstory Title Ġ= Ġit . root Story ()?. title . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġit . root Story ()?. tags . or Empty (). to ArrayList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstory Tree Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Story Comment Button Shown Ġ= Ġm Repository . is User LoggedIn ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . blog Ġ= Ġm Story LiveData . value ?. story Tree ?. root Story ()?. category Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠĠĠĠĠ Ġm Subscriptions LiveData . add Source ( m Repository . getUser Sub scribed Tags ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Item Ġ= Ġit ?. find Ġ{ Ġit . name Ġ== Ġthis . blog Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Subscriptions LiveData . value Ġ= Ġm Subscriptions LiveData . value ?. copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe On Tag Status Ġ= ĠSubscribe Status ( tag Item Ġ!= Ġnull , ĠUpdating State . DONE )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Subscriptions LiveData . add Source ( m Repository . currentUser Subscriptions Update Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Go los User Subscriptions StateChanged () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Repository . request Story Update ( this . author , Ġthis . perm Link , Ġthis . blog , Ġtrue , Ġtrue , Ġfeed Type ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Story LiveData . remove Source ( m Repository . get St ories ( feed Type , Ġfilter )) ĊĠĠĠĠĠĠĠ Ġm Subscriptions LiveData . remove Source ( m Repository . getUser Sub scribed Tags ()) ĊĠĠĠĠĠĠĠ Ġm Subscriptions LiveData . remove Source ( m Repository . currentUser Subscriptions Update Status ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠImage Click Data ( val Ġposition : ĠInt , Ġval Ġimages : ĠList < String >) ĊĊĊĠĠĠ Ġfun Ġon Main Story Image Click ( src : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimages Ġ= Ġm Story LiveData . value ?. story Tree ?. root Story ()?. parts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġit Ġis ĠImage Row Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġit Ġas ĠImage Row Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġit . src Ġ} Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠ Ġif Ġ( images . isEmpty ()) Ġimages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to ArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addAll ( m Story LiveData . value ?. story Tree ?. root Story ()?. images ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġarray ListOf ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( images . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġimages . indexOf ( src ) ĊĠĠĠĠĠĠĠ Ġm Image Click Events . value Ġ= ĠImage Click Data ( position , Ġimages ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcan User Vote : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Repository . is User LoggedIn () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcan User Up Vote On This ( story : ĠStory Wrapper ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstory . story . user V ot est atus Ġ!= ĠGo los Dis cussion Item . User Vote Type . V OT ED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Story Vote ( story : ĠStory Wrapper , Ġpercent : ĠShort ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( story . updating State Ġ== ĠUpdating State . UP DAT ING ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( percent Ġ== Ġ 0 . to Short ()) Ġm Repository . cancel Vote ( story ) ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( story . story . user V ot est atus Ġ== ĠGo los Dis cussion Item . User Vote Type . FLAG ED _ DOWN V OT ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġpercent Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . vote ( story , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . vote ( story , Ġpercent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġcan User Write Comments (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Repository . is User LoggedIn () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Write Root Comment ( ctx : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( can User Write Comments ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstory Ġ= Ġm Story LiveData . value ?. story Tree Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( story . root Story ()?. is Root Story Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Activity . start Root Comment Editor ( ctx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Activity . start Answer On Comment Editor ( ctx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Story Ġ= Ġstory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment To Answer Ġ= Ġstory . root Story () Ġ?: Ġreturn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Type Ġ= Ġfeed Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstory Filter Ġ= Ġfilter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Answer To Comment ( ctx : ĠContext , Ġitem : ĠGo los Dis cussion Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Repository . is User LoggedIn ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Story LiveData . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Activity . start Answer On Comment Editor ( ctx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . story Tree , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( Go los Error ( ErrorCode . ERROR _ AUTH , Ġnull , ĠR . string . login _ write _ comment )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Edit Click ( ctx : ĠContext , Ġitem : ĠGo los Dis cussion Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Repository . is User LoggedIn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġm Repository . app UserData . value ?. name Ġ== Ġitem . author ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Story LiveData . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Activity . start Edit Post Or Comment ( ctx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . story Tree , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġis Post Editable () Ġ= Ġm Story LiveData . value ?. story Tree ?. story With State ()?. is Story Editable Ġ== Ġtrue ĊĊĠĠĠ Ġfun Ġon Vote Rejected () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Error ( Go los Error ( ErrorCode . ERROR _ AUTH , Ġnull , ĠR . string . must _ be _ logged _ in _ for _ this _ action )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Tag Click ( context : ĠContext , Ġtext : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠFilter ed St ories Activity . start ( context , Ġtext Ġ?: Ġreturn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Share Click ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġm Repository . get Share Story Link ( m Story LiveData . value ?. story Tree ?. root Story () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ) ĊĠĠĠĠĠĠĠ Ġval Ġsend Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġsend Intent . action Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠ Ġsend Intent . putExtra ( Intent . EXTRA _ TEXT , Ġlink ) ĊĠĠĠĠĠĠĠ Ġsend Intent . type Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠ Ġcontext . startActivity ( send Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Repository . request Story Update ( this . author , Ġthis . perm Link , Ġthis . blog , Ġtrue , Ġtrue , Ġfeed Type ) Ġ{ Ġ_, Ġe Ġ-> Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Comment Click ( context : ĠContext , Ġcomment : ĠGo los Dis cussion Item ) Ġ{ ĊĠĠĠĠĠĠĠ ĠStory Activity . start ( context , Ġcomment . author , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment . category Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment . per mlink , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Type . UN CLAS SI FIED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Subscribe To Blog Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Repository . is User LoggedIn ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( Go los Error ( ErrorCode . ERROR _ AUTH , Ġnull , ĠR . string . must _ be _ logged _ in _ for _ this _ action )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Internet Status Notifier . is App Online ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( Go los Error ( ErrorCode . ERROR _ NO _ CONNECTION , Ġnull , ĠR . string . no _ internet _ connection )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Subscriptions LiveData . value ?. subscribe On Story Author Status ?. is CurrentUser Sub scribed Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . un Subscribe From Go los User Blog ( m Story LiveData . value ?. story Tree ?. root Story ()?. author ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ) Ġ{ Ġ_, Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( e Ġ?: Ġreturn @ un Subscribe From Go los User Blog ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( m Subscriptions LiveData . value ?. subscribe On Story Author Status ?. is CurrentUser Sub scribed Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . subscribe On Go los User Blog ( m Story LiveData . value ?. story Tree ?. root Story ()?. author ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ) Ġ{ Ġ_, Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( e Ġ?: Ġreturn @ subscribe On Go los User Blog ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Subscribe To Main Tag Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġm Story LiveData . value ?. story Tree ?. root Story ()?. category Name Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( m Subscriptions LiveData . value ?. subscribe On Tag Status ?. is CurrentUser Sub scribed Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . un Subscribe On Tag ( Tag ( tag , Ġ 0 . 0 , Ġ 0 L , Ġ 0 L )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Subscriptions LiveData . value ?. subscribe On Tag Status ?. is CurrentUser Sub scribed Ġ== Ġfalse ) Ġm Repository . subscribe On Tag ( Tag ( tag , Ġ 0 . 0 , Ġ 0 L , Ġ 0 L )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon User Click ( context : ĠContext , ĠuserName : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠUser Profile Activity . start ( context , ĠuserName ?. toLowerCase () Ġ?: Ġreturn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error ( error : ĠGo los Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Story LiveData . value Ġ= Ġm Story LiveData . value ?. copy ( isLoading Ġ= Ġfalse , ĠerrorCode Ġ= Ġerror ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Story Votes Click ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUsers List Activity . start To Show V ot ers ( context , Ġm Story LiveData . value ?. story Tree ?. root Story ()?. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Comment Vote Click ( activity : ĠActivity , Ġit : ĠStory Wrapper ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUsers List Activity . start To Show V ot ers ( activity , Ġit . story . id ) ĊĠĠĠ Ġ} Ċ Ċ }