package Ġcom . kick starter . view models Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . util . Pair Ċ import Ġcom . kick starter . libs . CurrentUser Type Ċ import Ġcom . kick starter . libs . Environment Ċ import Ġcom . kick starter . libs . Experiment s Client Type Ċ import Ġcom . kick starter . libs . Fragment ViewModel Ċ import Ġcom . kick starter . libs . Ref Tag Ċ import Ġcom . kick starter . libs . load more . A pol lo Pag inate . Companion . builder Ċ import Ġcom . kick starter . libs . models . Optim iz ely Feature Ċ import Ġcom . kick starter . libs . preferences . Int Preference Type Ċ import Ġcom . kick starter . libs . rx . transformers . Transform ers Ċ import Ġcom . kick starter . libs . utils . Event Context Values Ċ import Ġcom . kick starter . libs . utils . Event Context Values . Context Page Name . DIS COVER Ċ import Ġcom . kick starter . libs . utils . Experiment Data Ċ import Ġcom . kick starter . libs . utils . List Utils Ċ import Ġcom . kick starter . libs . utils . Ref Tag Utils Ċ import Ġcom . kick starter . libs . utils . extensions . combine Projects And Params Ċ import Ġcom . kick starter . libs . utils . extensions . fill Root Category For Feature d Projects Ċ import Ġcom . kick starter . libs . utils . extensions . isTrue Ċ import Ġcom . kick starter . libs . utils . extensions . update Started Project And Discovery Params List Ċ import Ġcom . kick starter . models . Activity Ċ import Ġcom . kick starter . models . Category Ċ import Ġcom . kick starter . models . Project Ċ import Ġcom . kick starter . models . User Ċ import Ġcom . kick starter . services . ApiClient Type Ċ import Ġcom . kick starter . services . A pol lo Client Type Ċ import Ġcom . kick starter . services . Discovery Params Ċ import Ġcom . kick starter . services . ap ire sponse s . Discover Envelope Ċ import Ġcom . kick starter . ui . adapters . Discovery Activity Sample Adapter Ċ import Ġcom . kick starter . ui . adapters . Discovery Editor ial Adapter Ċ import Ġcom . kick starter . ui . adapters . Discovery On boarding Adapter Ċ import Ġcom . kick starter . ui . adapters . Discovery Project Card Adapter Ċ import Ġcom . kick starter . ui . data . Editor ial Ċ import Ġcom . kick starter . ui . data . Project Data . Companion . builder Ċ import Ġcom . kick starter . ui . fragments . Discovery Fragment Ċ import Ġcom . kick starter . ui . view holders . Activity Sample Friend Backing ViewHolder Ċ import Ġcom . kick starter . ui . view holders . Activity Sample Friend Follow ViewHolder Ċ import Ġcom . kick starter . ui . view holders . Activity Sample Project ViewHolder Ċ import Ġcom . kick starter . ui . view holders . Discovery On boarding ViewHolder Ċ import Ġrx . Observable Ċ import Ġrx . subjects . Behavior Subject Ċ import Ġrx . subjects . Publish Subject Ċ import Ġjava . net . Cookie Manager Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ interface ĠDiscovery Fragment ViewModel Ġ{ ĊĠĠĠ Ġinterface ĠInputs Ġ: ĊĠĠĠĠĠĠĠ ĠDiscovery Project Card Adapter . Delegate , ĊĠĠĠĠĠĠĠ ĠDiscovery On boarding Adapter . Delegate , ĊĠĠĠĠĠĠĠ ĠDiscovery Editor ial Adapter . Delegate , ĊĠĠĠĠĠĠĠ ĠDiscovery Activity Sample Adapter . Delegate Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠCall Ġwhen Ġthe Ġpage Ġcontent Ġshould Ġbe Ġcleared . ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġclear Page () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCall Ġwhen Ġuser Ġclicks Ġheart s Ġto Ġstart Ġanimation . ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġheart Container Clicked () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCall Ġfor Ġproject Ġpagination . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġnext Page () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCall Ġwhen Ġparams Ġfrom ĠDiscovery ĠActivity Ġchange . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparams From Activity ( params : ĠDiscovery Params ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCall Ġwhen Ġthe Ġprojects Ġshould Ġbe Ġref reshed . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġrefresh () ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ ĠCall Ġwhen Ġwe Ġshould Ġload Ġthe Ġroot Ġcategories . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġroot Categories ( root Categories : ĠList < Category >) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOutputs Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** Ġ ĠEmit s Ġan Ġactivity Ġfor Ġthe Ġactivity Ġsample Ġview . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġactivity (): ĠObservable < Activity > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġa Ġboolean Ġindicating Ġwhether Ġprojects Ġare Ġbeing Ġfetched Ġfrom Ġthe ĠAPI . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Fetching Projects (): ĠObservable < Boolean > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġa Ġlist Ġof Ġprojects Ġto Ġdisplay . Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġproject List (): ĠObservable < List < Pair < Project , ĠDiscovery Params >>> ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġa Ġboolean Ġthat Ġdetermines Ġif Ġan Ġeditor ial Ġshould Ġbe Ġshown . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshould Show Editor ial (): ĠObservable < Editor ial > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġa Ġboolean Ġthat Ġdetermines Ġif Ġthe Ġsaved Ġempty Ġview Ġshould Ġbe Ġshown . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshould Show Empty Saved View (): ĠObservable < Boolean > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġa Ġboolean Ġthat Ġdetermines Ġif Ġthe Ġon boarding Ġview Ġshould Ġbe Ġshown . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshould Show On boarding View (): ĠObservable < Boolean > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġwhen Ġthe Ġactivity Ġfeed Ġshould Ġbe Ġshown . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshow Activity Feed (): ĠObservable < Boolean > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġwhen Ġthe Ġlogin Ġtout Ġactivity Ġshould Ġbe Ġshown . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshow Login T out (): ĠObservable < Boolean > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġwhen Ġthe Ġheart Ġanimation Ġshould Ġplay . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Heart Animation (): ĠObservable < Void ?> ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġan ĠEditor ial Ġwhen Ġwe Ġshould Ġstart Ġthe Ġ[ com . kick starter . ui . activities . Editor ial Activity ]. Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Editor ial Activity (): ĠObservable < Editor ial > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġa ĠProject Ġand ĠRef Tag Ġpair Ġwhen Ġwe Ġshould Ġstart Ġthe Ġ[ com . kick starter . ui . activities . Project Activity ]. Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Project Activity (): ĠObservable < Pair < Project , ĠRef Tag >> ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġan Ġactivity Ġwhen Ġwe Ġshould Ġstart Ġthe Ġ[ com . kick starter . ui . activities . Update Activity ]. Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Update Activity (): ĠObservable < Activity > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġwhen Ġwe Ġshould Ġstart Ġ[ com . kick starter . ui . activities . Login T out Activity ]. Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Login T out Activity To Save Project (): ĠObservable < Project > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġwhen Ġwe Ġneed Ġto Ġscroll Ġto Ġsaved Ġproject Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġscroll To Saved Project Position (): ĠObservable < Int > ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEmit s Ġwhen Ġthe Ġsuccess Ġprompt Ġfor Ġsaving Ġshould Ġbe Ġdisplayed . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshow Saved Prompt (): ĠObservable < Void > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠViewModel ( environment : ĠEnvironment ) Ġ: ĊĠĠĠĠĠĠĠ ĠFragment ViewModel < Discovery Fragment ? >( environment ), ĊĠĠĠĠĠĠĠ ĠInputs , ĊĠĠĠĠĠĠĠ ĠOutputs Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠapiClient : ĠApi Client Type Ġ= Ġenvironment . apiClient () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġap ollo Client : ĠApollo Client Type Ġ= Ġenvironment . apollo Client () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġactivity Sample Preference : ĠInt Preference Type Ġ= Ġenvironment . activity Sample Preference () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoptim iz ely : ĠExperiment s Client Type Ġ= Ġenvironment . optim iz ely () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshared Preferences : ĠSharedPreferences Ġ= Ġenvironment . shared Preferences () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcookie Manager : ĠCookie Manager Ġ= Ġenvironment . cookie Manager () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠcurrentUser : ĠCurrent User Type Ġ= Ġenvironment . currentUser () ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval Ġinputs : ĠInputs Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval Ġoutputs : ĠOutputs Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġactivity Click Ġ= ĠPublish Subject . create < Boolean >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġactivity Sample Project Click Ġ= ĠPublish Subject . create < Project >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġactivity Update Click Ġ= ĠPublish Subject . create < Activity >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġclear Page Ġ= ĠPublish Subject . create < Void ?> () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdiscovery On boarding Login T out Click Ġ= ĠPublish Subject . create < Boolean >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġeditor ial Clicked Ġ= ĠPublish Subject . create < Editor ial >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnext Page Ġ= ĠPublish Subject . create < Void ?> () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġparams From Activity Ġ= ĠPublish Subject . create < Discovery Params >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproject Card Clicked Ġ= ĠPublish Subject . create < Project >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Heart Button Clicked Ġ= ĠPublish Subject . create < Project >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrefresh Ġ= ĠPublish Subject . create < Void ?> () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġroot Categories Ġ= ĠPublish Subject . create < List < Category >>() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġactivity Ġ= ĠBehavior Subject . create < Activity ?> () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġheart Container Clicked Ġ= ĠBehavior Subject . create < Void ?> () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġis Fetching Projects : ĠBehavior Subject < Boolean > Ġ= ĠBehavior Subject . create () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproject List Ġ= ĠBehavior Subject . create < List < Pair < Project , ĠDiscovery Params >> >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshow Activity Feed : ĠObservable < Boolean > ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshow Login T out : ĠObservable < Boolean > ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshould Show Editor ial Ġ= ĠBehavior Subject . create < Editor ial ?> () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshould Show Empty Saved View Ġ= ĠBehavior Subject . create < Boolean >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshould Show On boarding View Ġ= ĠBehavior Subject . create < Boolean >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstart Editor ial Activity Ġ= ĠPublish Subject . create < Editor ial >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstart Project Activity : ĠObservable < Pair < Project , ĠRef Tag >> ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstart Update Activity : ĠObservable < Activity > ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstart Heart Animation Ġ= ĠBehavior Subject . create < Void ?> () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstart Login T out Activity To Save Project Ġ= ĠPublish Subject . create < Project >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġscroll To Saved Project Position Ġ= ĠPublish Subject . create < Int >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshow Saved Prompt Ġ= ĠPublish Subject . create < Void >() ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchanged User Ġ= ĠcurrentUser . observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Is LoggedIn Ġ= ĠcurrentUser . is LoggedIn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Params Ġ= ĠObservable . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged User , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams From Activity . distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Over With Ġ= ĠObservable . merge ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Params , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Params . compose ( Transform ers . take When ( refresh )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpag inator Ġ= Ġbuilder < Project , ĠDis cover Envelope , ĠDiscovery Params ?> () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. next Page ( next Page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Over With ( start Over With ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. envelope ToList Of Data Ġ{ Ġit . projects () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load With Params Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . first ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Call With Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( it , Ġparams . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clear When Starting Over ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. conc ater Ġ{ Ġxs , Ġys Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxs ?. let Ġ{ Ġfirst List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġys ?. let Ġ{ Ġsecond List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList Utils . concat Distinct ( first List , Ġsecond List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpag inator . is Fetching () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( is Fetching Projects ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . ignore Values ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġis Fetching Projects . onNext ( false ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Sample Project Click Ġ= Ġactivity Sample Project Click ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map < Pair < Project , ĠRef Tag >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRef Tag . activity Sample () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Card Clicked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan alytic Events . track Project Card Clicked ( it , ĠEvent Context Values . Context Page Name . DIS COVER . context Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams From Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . take Pair When ( project Card Clicked )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Tag Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRef Tag Utils . project And Ref Tag From Params And Project ( it . first , Ġit . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcookie Ref Tag Ġ= ĠRef Tag Utils . stored Cookie Ref Tag For Project ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcookie Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Data Ġ= Ġbuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ref Tag From Intent ( ref Tag . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ref Tag From Cookie ( cookie Ref Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. project ( it . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan alytic Events . track Discover Project C ta Clicked ( it . first , Ġproject Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Card Click Ġ= Ġparams From Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . take Pair When ( project Card Clicked )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRef Tag Utils . project And Ref Tag From Params And Project ( it . first , Ġit . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprojects Ġ= ĠObservable . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpag inator . pag inated Data (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Categories ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġprojects , Ġroot Categories Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojects . fill Root Category For Feature d Projects ( root Categories ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojects , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Params . distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġprojects , Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcombine Projects And Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojects , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Activity Feed Ġ= Ġactivity Click ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Update Activity Ġ= Ġactivity Update Click ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Login T out Ġ= Ġdiscovery On boarding Login T out Click ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Project Activity Ġ= ĠObservable . merge ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Sample Project Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Card Click ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Page ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Show On boarding View . onNext ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . onNext ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject List . onNext ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser When Optim iz ely Ready Ġ= ĠObservable . merge ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged User , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged User . compose ( Transform ers . take When ( optim iz ely Ready )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlights On Enabled Ġ= Ġuser When Optim iz ely Ready ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġuser : ĠUser ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptim iz ely . is Feature Enabled ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptim iz ely Feature . Key . LIGHT S _ ON , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExperiment Data ( user , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentUser . observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . combine Latest Pair ( params From Activity )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . combine Latest Pair ( lights On Enabled )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġdefault Params And Enabled : ĠPair < Pair < User , ĠDiscovery Params >, ĠBoolean > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Default Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Params And Enabled . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ&& Ġdefault Params And Enabled . second . isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġshould Show : ĠBoolean Ġ-> Ġif Ġ( should Show ) ĠEditor ial . LIGHT S _ ON Ġelse Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( should Show Editor ial ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial Clicked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( start Editor ial Activity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams From Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . combine Latest Pair ( user Is LoggedIn )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġpu : ĠPair < Discovery Params , ĠBoolean > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis On boarding Visible ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpu . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpu . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( should Show On boarding View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams From Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġparams : ĠDiscovery Params Ġ-> Ġis Saved Visible ( params ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . combine Latest Pair ( project List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . first Ġ&& Ġit . second . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( should Show Empty Saved View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Show Empty Saved View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isTrue () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map < Any ?> Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. merge With ( heart Container Clicked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġstart Heart Animation . onNext ( null ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogged In User And Params Ġ= ĠcurrentUser . logged In User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . combine Latest Pair ( params From Activity . distinct Until Changed ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠActivity Ġshould Ġshow Ġon Ġthe Ġuser 's Ġdefault Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogged In User And Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Default Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġactivity Has Not Been Seen ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġsave Last Seen Activity Id ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( activity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġactivity Ġsample Ġwhen Ġparams Ġchange Ġfrom Ġdefault ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogged In User And Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! is Default Params ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( activity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpag inator . loading Page ()?. distinct Until Changed ()?. let Ġ{ Ġloading Page Observer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams From Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransform ers . combine Latest Pair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Page Observer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . second Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan alytic Events . track Discovery Page View ed ( it . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiscovery On boarding Login T out Click ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan alytic Events . track Login Or SignUp C ta Clicked ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Context Values . Context Page Name . DIS COVER . context Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogged In User On Heart Click Ġ= Ġuser Is LoggedIn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . take Pair When ( this . on Heart Button Clicked )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . first Ġ== Ġtrue Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogged Out User On Heart Click Ġ= Ġuser Is LoggedIn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . take Pair When ( this . on Heart Button Clicked )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . first Ġ== Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject On User Change Save Ġ= Ġlogged In User On Heart Click ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . toggle Project Save ( it . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. share () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogged Out User On Heart Click ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start Login T out Activity To Save Project . onNext ( it . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsaved Project On Login Success Ġ= Ġthis . start Login T out Activity To Save Project ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . combine Latest Pair ( this . currentUser . observable ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġsu Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsu . second Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. take ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . save Project ( it . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. share () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . project List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . take Pair When ( project On User Change Save )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second . update Started Project And Discovery Params List ( it . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . project List . onNext ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . project List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . take Pair When ( saved Project On Login Success )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first . indexOf First Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . first . id () Ġ== Ġit . second . id () Ġ&& Ġitem . first . slug () Ġ== Ġit . second . slug () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delay ( 3 0 0 , ĠTimeUnit . MILLISECONDS , Ġenvironment . scheduler ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll To Saved Project Position . onNext ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Saved Status Ġ= Ġproject On User Change Save . merge With ( saved Project On Login Success ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Saved Status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġthis . an alytic Events . track Watch Project CT A ( it , ĠDIS COVER ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Saved Status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġp Ġ-> Ġp . is Star red () Ġ&& Ġp . is Live Ġ&& Ġ! p . is Appro aching Deadline Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . ignore Values ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( bind To Lifecycle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( this . show Saved Prompt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalls Ġto ĠGraphQL Ġclient Ġto Ġfetch Ġprojects Ġfiltering Ġby ĠDiscovery Params ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdiscovery Params String Pair Ġ. first Ġdiscovery Ġparams . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdiscovery Params String Pair Ġ. second Ġcursor Ġfor Ġpagination , Ġnull Ġon Ġthe Ġfirst Ġcall . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠObservable < Discover Envelope > ĊĠĠĠĠĠĠĠĠ Ġ</ Discover Envelope > Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmake Call With Params ( discovery Params String Pair : ĠPair < Discovery Params , ĠString ?> ): ĠObservable < Discover Envelope > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġap ollo Client . get Projects ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscovery Params String Pair . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscovery Params String Pair . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġactivity Has Not Been Seen ( activity : ĠActivity ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity Ġ!= Ġnull Ġ&& Ġactivity . id () Ġ!= Ġactivity Sample Preference . get (). to Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfetch Activity (): ĠObservable < Activity ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠapiClient . fetch Activities ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . activities () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . first OrNull () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis Default Params ( user And Params : ĠPair < User , ĠDiscovery Params >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiscovery Params Ġ= Ġuser And Params . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser And Params . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdiscovery Params Ġ== ĠDiscovery Params . getDefault Params ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis On boarding Visible ( params : ĠDiscovery Params , Ġis LoggedIn : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsort Ġ= Ġparams . sort () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Sort Home Ġ= ĠDiscovery Params . Sort . MAGIC Ġ== Ġsort ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparams . is All Projects . isTrue () Ġ&& Ġis Sort Home Ġ&& Ġ! is LoggedIn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis Saved Visible ( params : ĠDiscovery Params ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparams . is Saved Projects ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsave Last Seen Activity Id ( activity : ĠActivity ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Sample Preference . set ( activity . id (). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsave Project ( project : ĠProject ): ĠObservable < Project > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . apollo Client . watch Project ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Transform ers . never Error ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġun Save Project ( project : ĠProject ): ĠObservable < Project > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . apollo Client . un Watch Project ( project ). compose ( Transform ers . never Error ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtoggle Project Save ( project : ĠProject ): ĠObservable < Project > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( project . is Star red ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Save Project ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Project ( project ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġactivity Sample Friend Backing ViewHolder See Activity Clicked ( view Holder : ĠActivity Sample Friend Backing ViewHolder ?) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Click . onNext ( true ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġactivity Sample Friend Follow ViewHolder See Activity Clicked ( view Holder : ĠActivity Sample Friend Follow ViewHolder ?) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Click . onNext ( true ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġactivity Sample Project ViewHolder See Activity Clicked ( view Holder : ĠActivity Sample Project ViewHolder ?) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Click . onNext ( true ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġeditor ial ViewHolder Clicked ( editor ial : ĠEditor ial ) Ġ= Ġeditor ial Clicked . onNext ( editor ial ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrefresh () Ġ= Ġrefresh . onNext ( null ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġroot Categories ( root Categories : ĠList < Category >) Ġ= Ġthis . root Categories . onNext ( root Categories ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclear Page () Ġ= Ġclear Page . onNext ( null ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġheart Container Clicked () Ġ= Ġheart Container Clicked . onNext ( null ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġactivity Sample Friend Backing ViewHolder Project Clicked ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder : ĠActivity Sample Friend Backing ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠProject ? ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġactivity Sample Project Click . onNext ( project ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġactivity Sample Project ViewHolder Project Clicked ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder : ĠActivity Sample Project ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠProject ? ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġactivity Sample Project Click . onNext ( project ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġactivity Sample Project ViewHolder Update Clicked ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder : ĠActivity Sample Project ViewHolder ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity : ĠActivity ? ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Update Click . onNext ( activity ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdiscovery On boarding ViewHolder Login T out Click ( view Holder : ĠDiscovery On boarding ViewHolder ?) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiscovery On boarding Login T out Click . onNext ( true ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġproject Card ViewHolder Clicked ( project : ĠProject ?) Ġ= Ġproject Card Clicked . onNext ( project ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext Page () Ġ= Ġnext Page . onNext ( null ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġparams From Activity ( params : ĠDiscovery Params ) Ġ= Ġparams From Activity . onNext ( params ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġactivity (): ĠObservable < Activity > Ġ= Ġactivity ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Fetching Projects (): ĠObservable < Boolean > Ġ= Ġis Fetching Projects ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġproject List (): ĠObservable < List < Pair < Project , ĠDiscovery Params >>> Ġ= Ġproject List ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshow Activity Feed (): ĠObservable < Boolean > Ġ= Ġshow Activity Feed ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshow Login T out (): ĠObservable < Boolean > Ġ= Ġshow Login T out ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Show Editor ial (): ĠObservable < Editor ial > Ġ= Ġshould Show Editor ial ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Show Empty Saved View (): ĠObservable < Boolean > Ġ= Ġshould Show Empty Saved View ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Heart Animation (): ĠObservable < Void ?> Ġ= Ġstart Heart Animation ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Editor ial Activity (): ĠObservable < Editor ial > Ġ= Ġstart Editor ial Activity ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Project Activity (): ĠObservable < Pair < Project , ĠRef Tag >> Ġ= Ġstart Project Activity ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Show On boarding View (): ĠObservable < Boolean > Ġ= Ġshould Show On boarding View ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Update Activity (): ĠObservable < Activity > Ġ= Ġstart Update Activity ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Heart Button Clicked ( project : ĠProject ) Ġ= Ġon Heart Button Clicked . onNext ( project ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Login T out Activity To Save Project (): ĠObservable < Project > Ġ= Ġthis . start Login T out Activity To Save Project ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġscroll To Saved Project Position (): ĠObservable < Int > Ġ= Ġthis . scrollTo Saved Project Position ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshow Saved Prompt (): ĠObservable < Void > Ġ= Ġthis . show Saved Prompt ĊĠĠĠ Ġ} Ċ } Ċ