package Ġcom . sed software . y apt alk er . presentation . feature . news Ċ Ċ import Ġcom . are l lo mobile . mvp . Inject ViewState Ċ import Ġcom . sed software . y apt alk er . data . system . Schedulers Provider Ċ import Ġcom . sed software . y apt alk er . domain . device . Settings Ċ import Ġcom . sed software . y apt alk er . domain . inter actor . Black list Interactor Ċ import Ġcom . sed software . y apt alk er . domain . inter actor . News Interactor Ċ import Ġcom . sed software . y apt alk er . domain . inter actor . Video Thumb nails Interactor Ċ import Ġcom . sed software . y apt alk er . presentation . base . Base Presenter Ċ import Ġcom . sed software . y apt alk er . presentation . base . enums . lifecycle . Presenter Lifecycle Ċ import Ġcom . sed software . y apt alk er . presentation . base . enums . navigation . Navigation Screen Ċ import Ġcom . sed software . y apt alk er . presentation . delegate . Link Browser Delegate Ċ import Ġcom . sed software . y apt alk er . presentation . feature . news . adapter . News Item Elements ClickListener Ċ import Ġcom . sed software . y apt alk er . presentation . mapper . News Model Mapper Ċ import Ġcom . sed software . y apt alk er . presentation . model . base . News Item Model Ċ import Ġcom . uber . aut od is pose . kotlin . auto Disposable Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . Single Observer Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġru . ter r ak ok . c icer one . Router Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ @ Inject ViewState Ċ class ĠNews Presenter Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrouter : ĠRouter , ĊĠĠĠ Ġprivate Ġval Ġsettings : ĠSettings , ĊĠĠĠ Ġprivate Ġval Ġtarget Screen : ĠString , ĊĠĠĠ Ġprivate Ġval Ġnews Interactor : ĠNews Interactor , ĊĠĠĠ Ġprivate Ġval Ġvideo Thumb nails Interactor : ĠVideo Thumb nails Interactor , ĊĠĠĠ Ġprivate Ġval Ġblacklist Interactor : ĠBlack list Interactor , ĊĠĠĠ Ġprivate Ġval Ġnews Model Mapper : ĠNews Model Mapper , ĊĠĠĠ Ġprivate Ġval Ġlinks Delegate : ĠLink Browser Delegate , ĊĠĠĠ Ġprivate Ġval Ġs chedulers : ĠS chedulers Provider Ċ ) Ġ: ĠBase Presenter < News View >(), ĠNews Item Elements ClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdisplayed Topics Ġ= Ġmutable Set Of < Int >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcurrent News Item : ĠNews Item Model ĊĠĠĠ Ġprivate Ġvar Ġnext Pages Loading Active : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon First View Attach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on First View Attach () ĊĠĠĠĠĠĠĠ Ġload First Page () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattach View ( view : ĠNews View ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . attach View ( view ) ĊĠĠĠĠĠĠĠ Ġview State . update Current Ui State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon News Item Clicked ( forum Id : ĠInt , Ġtopic Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . navigate To ( Navigation Screen . CH OS EN _ TOPIC _ SCREEN , ĠTrip le ( forum Id , Ġtopic Id , Ġ 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon News Item Long Clicked ( item : ĠNews Item Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent News Item Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġview State . show Black list Request () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Media Preview Clicked ( url : ĠString , Ġdirect Url : ĠString , Ġtype : ĠString , Ġhtml : ĠString , Ġis Video : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlinks Delegate . check Video Link ( direct Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġview State . show Loading Indicator () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Finally Ġ{ Ġview State . hide Loading Indicator () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. auto Disposable ( event ( Presenter Lifecycle . DESTROY )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġlink : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinks Delegate . browse ( url , Ġlink , Ġtype , Ġhtml , Ġis Video ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġe : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ?. let Ġ{ Ġview State . show ErrorMessage ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Selected Topic To Black list () Ġ{ ĊĠĠĠĠĠĠĠ Ġblacklist Interactor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Topic To Black list ( current News Item . title , Ġcurrent News Item . topic Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( schedul ers . ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. auto Disposable ( event ( Presenter Lifecycle . DESTROY )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Current Ġtopic Ġadded Ġto Ġblacklist .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . show Topic Black listed Message () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . remove Black listed Topic From List ( current News Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġe : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ?. let Ġ{ Ġview State . show ErrorMessage ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Fab Visibility ( diff : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Ġ> Ġ 0 Ġ-> Ġview State . hide Fab () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Ġ< Ġ 0 Ġ-> Ġview State . show Fab () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Thumbnail ( video Url : ĠString ): ĠSingle < String > Ġ= ĊĠĠĠĠĠĠĠ Ġvideo Thumb nails Interactor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Thumbnail ( video Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( schedul ers . ui ()) ĊĊĊĠĠĠ Ġfun Ġload First Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġbuild Url () ĊĠĠĠĠĠĠĠ Ġnext Pages Loading Active Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġnews Interactor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get News Page ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( news Model Mapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Observable Ġ{ ĠObservable . from Iterable ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( schedul ers . ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġview State . show Loading Indicator () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Finally Ġ{ Ġview State . hide Loading Indicator () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. auto Disposable ( event ( Presenter Lifecycle . DESTROY )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( get News Observer ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Next Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġnext Pages Loading Active Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġnews Interactor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getNext News Page () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( news Model Mapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Observable Ġ{ ĠObservable . from Iterable ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( schedul ers . ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġview State . show Loading Indicator () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Finally Ġ{ Ġview State . hide Loading Indicator () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. auto Disposable ( event ( Presenter Lifecycle . DESTROY )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( get News Observer ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget News Observer () Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠSingle Observer < List < News Item Model >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" News Ġpage Ġloading Ġstarted .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( items : ĠList < News Item Model >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! next Pages Loading Active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . clear News List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplayed Topics . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Topic Ids Ġ= Ġitems . map Ġ{ Ġit . topic Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Topics Ġ= Ġitems . filter Ġ{ Ġ! display ed Topics . contains ( it . topic Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplayed Topics . addAll ( loaded Topic Ids ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Topics . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Next Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . append News Items ( new Topics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ?. let Ġ{ Ġview State . show ErrorMessage ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Url (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġif Ġ( settings . is Https Enabled ()) Ġ" https ://" Ġelse Ġ" http ://" ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġwhen Ġ( target Screen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Screen . NE WS _ SCREEN Ġ-> Ġ" www . y apl ak al . com " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Screen . PI CTURE S _ SCREEN Ġ-> Ġ" p ics . y apl ak al . com " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Screen . VID EOS _ SCREEN Ġ-> Ġ" video . y apl ak al . com " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Screen . EVENTS _ SCREEN Ġ-> Ġ" news . y apl ak al . com " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Screen . AUTO _ MOT O _ SCREEN Ġ-> Ġ" auto . y apl ak al . com " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Screen . AN IMAL S _ SCREEN Ġ-> Ġ" animal s . y apl ak al . com " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Screen . PH OTO BO MB _ SCREEN Ġ-> Ġ" foto zh aba . y apl ak al . com " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" ink ubator . y apl ak al . com " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ schema $ base " ĊĠĠĠ Ġ} Ċ } Ċ