package Ġio . pl ast ique . feed Ċ Ċ import Ġcom . github . tech no ir 4 2 . rx java 2 . extensions . sur round With Ċ import Ġcom . github . tech no ir 4 2 . rx java 2 . extensions . val ve Latest Ċ import Ġcom . google . auto . factory . Auto Factory Ċ import Ġcom . google . auto . factory . Provided Ċ import Ġcom . sch . neon . Effect Handler Ċ import Ġcom . sch . neon . Main Loop Ċ import Ġcom . sch . neon . State Reducer Ċ import Ġcom . sch . neon . State With Effects Ċ import Ġcom . sch . neon . next Ċ import Ġcom . sch . neon . tim ber . Tim ber Logger Ċ import Ġio . pl ast ique . collections . F avorites Model Ċ import Ġio . pl ast ique . common . ErrorMessage Provider Ċ import Ġio . pl ast ique . core . content . Content State Ċ import Ġio . pl ast ique . core . content . Empty State Ċ import Ġio . pl ast ique . core . lists . Loading Indicator Item Ċ import Ġio . pl ast ique . core . lists . Paged List State Ċ import Ġio . pl ast ique . core . mv vm . Base ViewModel Ċ import Ġio . pl ast ique . core . network . Network Connectivity Checker Ċ import Ġio . pl ast ique . core . session . Session Ċ import Ġio . pl ast ique . core . session . Session Manager Ċ import Ġio . pl ast ique . core . session . userId Changes Ċ import Ġio . pl ast ique . core . sn ackbar . Snackbar State Ċ import Ġio . pl ast ique . dev i ations . Content Settings Ċ import Ġio . pl ast ique . feed . Feed Effect . Load Feed Effect Ċ import Ġio . pl ast ique . feed . Feed Effect . Load More Effect Ċ import Ġio . pl ast ique . feed . Feed Effect . Open SignIn Effect Ċ import Ġio . pl ast ique . feed . Feed Effect . Refresh Effect Ċ import Ġio . pl ast ique . feed . Feed Effect . Set Favorite Effect Ċ import Ġio . pl ast ique . feed . Feed Effect . Set Feed Settings Effect Ċ import Ġio . pl ast ique . feed . Feed Event . Items Changed Event Ċ import Ġio . pl ast ique . feed . Feed Event . Load Error Event Ċ import Ġio . pl ast ique . feed . Feed Event . Load More Error Event Ċ import Ġio . pl ast ique . feed . Feed Event . Load More Event Ċ import Ġio . pl ast ique . feed . Feed Event . Load More Finished Event Ċ import Ġio . pl ast ique . feed . Feed Event . Load More Started Event Ċ import Ġio . pl ast ique . feed . Feed Event . Refresh Error Event Ċ import Ġio . pl ast ique . feed . Feed Event . Refresh Event Ċ import Ġio . pl ast ique . feed . Feed Event . Refresh Finished Event Ċ import Ġio . pl ast ique . feed . Feed Event . Retry Click Event Ċ import Ġio . pl ast ique . feed . Feed Event . Set Favorite Error Event Ċ import Ġio . pl ast ique . feed . Feed Event . Set Favorite Event Ċ import Ġio . pl ast ique . feed . Feed Event . Set Favorite Finished Event Ċ import Ġio . pl ast ique . feed . Feed Event . Set Feed Settings Event Ċ import Ġio . pl ast ique . feed . Feed Event . Settings Change Error Event Ċ import Ġio . pl ast ique . feed . Feed Event . Settings Changed Event Ċ import Ġio . pl ast ique . feed . Feed Event . Show M ature Changed Event Ċ import Ġio . pl ast ique . feed . Feed Event . Snackbar Shown Event Ċ import Ġio . pl ast ique . feed . Feed Event . User Changed Event Ċ import Ġio . pl ast ique . feed . settings . Feed Settings Manager Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . rx kotlin . of Type Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠFeed ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġstate Reducer : ĠFeed State Reducer , ĊĠĠĠ Ġeffect Handler Factory : ĠFeed Effect Handler Factory , ĊĠĠĠ Ġval Ġnavigator : ĠFeed Navigator , ĊĠĠĠ Ġprivate Ġval Ġcontent Settings : ĠContent Settings , ĊĠĠĠ Ġprivate Ġval Ġsession Manager : ĠSession Manager Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġloop Ġ= ĠMain Loop ( ĊĠĠĠĠĠĠĠ Ġreducer Ġ= Ġstate Reducer , ĊĠĠĠĠĠĠĠ Ġeffect Handler Ġ= Ġeffect Handler Factory . create ( navigator , Ġscreen Visible ), ĊĠĠĠĠĠĠĠ Ġexternal Events Ġ= Ġexternal Events (), ĊĠĠĠĠĠĠĠ Ġlistener Ġ= ĠTim ber Logger ( LOG _ TAG )) ĊĊĠĠĠ Ġval Ġstate : ĠObservable < Feed ViewState > Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshow M ature Content Ġ= Ġcontent Settings . show M ature ĊĠĠĠĠĠĠĠ Ġval Ġsigned In Ġ= Ġsession Manager . session Ġis ĠSession . User ĊĠĠĠĠĠĠĠ Ġval Ġstate And Effects Ġ= Ġif Ġ( signed In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( Feed ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent State Ġ= ĠContent State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Signed In Ġ= Ġsigned In , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow M ature Content Ġ= Ġshow M ature Content ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Feed Effect ( show M ature Content )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( Feed ViewState ( content State Ġ= ĠContent State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Signed In Ġ= Ġsigned In , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow M ature Content Ġ= Ġshow M ature Content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty State Ġ= ĠEmpty State . Message With Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Res Id Ġ= ĠR . string . feed _ message _ sign _ in , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Text Id Ġ= ĠR . string . common _ button _ sign _ in ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġloop . loop ( state And Effects ). dispose On Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdispatch ( event : ĠFeed Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloop . dispatch ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexternal Events (): ĠObservable < Feed Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . merge ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Settings . show M ature Changes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. val ve Latest ( screen Visible ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġshow M ature Ġ-> ĠShow M ature Changed Event ( show M ature ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Manager . userId Changes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. skip ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. val ve Latest ( screen Visible ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠuserId Ġ-> ĠUser Changed Event ( userId . to Nullable ()) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" Feed ViewModel " ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Auto Factory Ċ class ĠFeed Effect Handler ( ĊĠĠĠ Ġ@ Provided Ġprivate Ġval Ġconnectivity Checker : ĠNetwork Connectivity Checker , ĊĠĠĠ Ġ@ Provided Ġprivate Ġval Ġfeed Model : ĠFeed Model , ĊĠĠĠ Ġ@ Provided Ġprivate Ġval Ġfeed Settings Manager : ĠFeed Settings Manager , ĊĠĠĠ Ġ@ Provided Ġprivate Ġval Ġfavor ites Model : ĠF avorites Model , ĊĠĠĠ Ġ@ Provided Ġprivate Ġval Ġsession Manager : ĠSession Manager , ĊĠĠĠ Ġprivate Ġval Ġnavigator : ĠFeed Navigator , ĊĠĠĠ Ġprivate Ġval Ġscreen Visible : ĠObservable < Boolean > Ċ ) Ġ: ĠEffect Handler < Feed Effect , ĠFeed Event > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( effects : ĠObservable < Feed Effect >): ĠObservable < Feed Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġload Events Ġ= Ġeffects . of Type < Load Feed Effect >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ Ġeffect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Model . items ( effect . m ature Content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. val ve Latest ( screen Visible ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take While Ġ{ Ġsession Manager . session Ġis ĠSession . User Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map < Feed Event > Ġ{ Ġitems Data Ġ-> ĠItems Changed Event ( items Data . items , Ġitems Data . hasMore ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError ( Tim ber :: e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ Ġerror Ġ-> ĠLoad Error Event ( error ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġload More Events Ġ= Ġeffects . of Type < Load More Effect >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġconnectivity Checker . isConnected To Network Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Model . load More () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable < Feed Event >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sur round With ( Load More Started Event , ĠLoad More Finished Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError ( Tim ber :: e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ Ġerror Ġ-> ĠLoad More Error Event ( error ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrefresh Events Ġ= Ġeffects . of Type < Refresh Effect >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Single Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Model . refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Single Default < Feed Event >( Refresh Finished Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError ( Tim ber :: e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ Ġerror Ġ-> ĠRefresh Error Event ( error ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsettings Events Ġ= Ġeffects . of Type < Set Feed Settings Effect >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Single Ġ{ Ġeffect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Settings Manager . update Settings ( effect . settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Single Default < Feed Event >( Settings Changed Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError ( Tim ber :: e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ Ġerror Ġ-> ĠSettings Change Error Event ( error ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfavorite Events Ġ= Ġeffects . of Type < Set Favorite Effect >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Ġ{ Ġeffect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavor ites Model . set Favorite ( effect . dev iation Id , Ġeffect . favorite ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Single Default < Feed Event >( Set Favorite Finished Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError ( Tim ber :: e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ Ġerror Ġ-> ĠSet Favorite Error Event ( error ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnavigation Events Ġ= Ġeffects . of Type < Open SignIn Effect >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġnavigator . open SignIn () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ignore Elements () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable < Feed Event >() ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . merge Array ( load Events , Ġload More Events , Ġrefresh Events , Ġsettings Events , Ġfavorite Events , Ġnavigation Events ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠFeed State Reducer Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠerrorMessage Provider : ĠError Message Provider Ċ ) Ġ: ĠState Reducer < Feed Event , ĠFeed ViewState , ĠFeed Effect > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠFeed ViewState , Ġevent : ĠFeed Event ): ĠState With Effects < Feed ViewState , ĠFeed Effect > Ġ= Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠItems Changed Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent State Ġ= ĠContent State . Content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist State Ġ= Ġstate . list State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġif Ġ( state . list State . isLoading More ) Ġevent . items Ġ+ ĠLoading Indicator Item Ġelse Ġevent . items , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Items Ġ= Ġevent . items , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas More Ġ= Ġevent . hasMore ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty State Ġ= Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent State Ġ= ĠContent State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist State Ġ= ĠP aged List State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty State Ġ= ĠEmpty State . Message ( R . string . feed _ message _ empty ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠLoad Error Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent State Ġ= ĠContent State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist State Ġ= ĠP aged List State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty State Ġ= ĠerrorMessage Provider . getError State ( event . error ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLoad More Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! state . list State . isLoading More ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state , ĠLoad More Effect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLoad More Started Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( list State Ġ= Ġstate . list State . copy ( isLoading More Ġ= Ġtrue , Ġitems Ġ= Ġstate . list State . content Items Ġ+ ĠLoading Indicator Item ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLoad More Finished Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( list State Ġ= Ġstate . list State . copy ( isLoading More Ġ= Ġfalse ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠLoad More Error Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist State Ġ= Ġstate . list State . copy ( isLoading More Ġ= Ġfalse , Ġitems Ġ= Ġstate . list State . content Items ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar State Ġ= ĠSn ackbar State . Message ( errorMessage Provider . get ErrorMessage Id ( event . error )))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠRefresh Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( list State Ġ= Ġstate . list State . copy ( is Refresh ing Ġ= Ġtrue )), ĠRefresh Effect ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠRefresh Finished Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( list State Ġ= Ġstate . list State . copy ( is Refresh ing Ġ= Ġfalse ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠRefresh Error Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist State Ġ= Ġstate . list State . copy ( is Refresh ing Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar State Ġ= ĠSn ackbar State . Message ( errorMessage Provider . get ErrorMessage Id ( event . error )))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠRetry Click Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . is Signed In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( content State Ġ= ĠContent State . Loading , Ġempty State Ġ= Ġnull ), ĠLoad Feed Effect ( state . show M ature Content )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state , ĠOpen SignIn Effect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠSn ackbar Shown Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( sn ackbar State Ġ= Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠUser Changed Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsigned In Ġ= Ġevent . userId Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( signed In Ġ!= Ġstate . is Signed In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( signed In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent State Ġ= ĠContent State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Signed In Ġ= Ġsigned In , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty State Ġ= Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Feed Effect ( state . show M ature Content )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent State Ġ= ĠContent State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Signed In Ġ= Ġsigned In , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist State Ġ= ĠP aged List State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty State Ġ= ĠEmpty State . Message With Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Res Id Ġ= ĠR . string . feed _ message _ sign _ in , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Text Id Ġ= ĠR . string . common _ button _ sign _ in ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠShow M ature Changed Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . show M ature Content Ġ!= Ġevent . show M ature Content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent State Ġ= ĠContent State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist State Ġ= ĠP aged List State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow M ature Content Ġ= Ġevent . show M ature Content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty State Ġ= Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Feed Effect ( event . show M ature Content )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠSet Feed Settings Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( is Apply ing Settings Ġ= Ġtrue ), ĠSet Feed Settings Effect ( event . settings )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠSettings Changed Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Apply ing Settings Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent State Ġ= ĠContent State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist State Ġ= ĠP aged List State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty State Ġ= Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Feed Effect ( state . show M ature Content )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠSettings Change Error Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Apply ing Settings Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar State Ġ= ĠSn ackbar State . Message ( errorMessage Provider . get ErrorMessage Id ( event . error , ĠR . string . feed _ message _ settings _ change _ error )))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠSet Favorite Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( show Progress Dialog Ġ= Ġtrue ), ĠSet Favorite Effect ( event . dev iation Id , Ġevent . favorite )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠSet Favorite Finished Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( show Progress Dialog Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠSet Favorite Error Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( state . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress Dialog Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar State Ġ= ĠSn ackbar State . Message ( errorMessage Provider . get ErrorMessage Id ( event . error )))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ