package Ġcom . jam ie ad k ins . gw ent . deck . builder Ċ Ċ import Ġcom . jam ie ad k ins . gw ent . base . Base Comp letable Observer Ċ import Ġcom . jam ie ad k ins . gw ent . base . Base Disposable Observer Ċ import Ġcom . jam ie ad k ins . gw ent . base . Base Disposable Single Ċ import Ġcom . jam ie ad k ins . gw ent . domain . card . Get Cards UseCase Ċ import Ġcom . jam ie ad k ins . gw ent . domain . card . model . Gw ent Card Ċ import Ġcom . jam ie ad k ins . gw ent . domain . deck . Add Card To Deck Result Ċ import Ġcom . jam ie ad k ins . gw ent . domain . deck . Add Card To Deck UseCase Ċ import Ġcom . jam ie ad k ins . gw ent . domain . deck . Delete Deck UseCase Ċ import Ġcom . jam ie ad k ins . gw ent . domain . deck . Get Deck UseCase Ċ import Ġcom . jam ie ad k ins . gw ent . domain . deck . Remove Card From Deck UseCase Ċ import Ġcom . jam ie ad k ins . gw ent . domain . deck . model . Gw ent Deck Ċ import Ġcom . jam ie ad k ins . gw ent . domain . filter . Filter Cards UseCase Ċ import Ġcom . jam ie ad k ins . gw ent . domain . filter . Get Filter UseCase Ċ import Ġcom . jam ie ad k ins . gw ent . domain . filter . model . Card Filter Ċ import Ġcom . jam ie ad k ins . gw ent . base . Base Presenter Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . functions . Bi Function Ċ import Ġio . reactivex . ob servers . Disposable Comp letable Observer Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠDeck Details Presenter Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġview : ĠDeck Details Contract . View , ĊĠĠĠ Ġprivate Ġval Ġdelete Deck UseCase : ĠDelete Deck UseCase , ĊĠĠĠ Ġprivate Ġval Ġget Deck UseCase : ĠGet Deck UseCase , ĊĠĠĠ Ġprivate Ġval Ġget Cards UseCase : ĠGet Cards UseCase , ĊĠĠĠ Ġprivate Ġval Ġfilter Cards UseCase : ĠFilter Cards UseCase , ĊĠĠĠ Ġprivate Ġval Ġget Filter UseCase : ĠGet Filter UseCase , ĊĠĠĠ Ġprivate Ġval Ġadd Card To Deck UseCase : ĠAdd Card To Deck UseCase , ĊĠĠĠ Ġprivate Ġval Ġremove Card From Deck UseCase : ĠRemove Card From Deck UseCase Ċ ) Ġ: ĠBase Presenter (), ĠDeck Details Contract . Presenter Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlatest Deck Id Ġ= ĠBehavior Subject . create < String >() ĊĠĠĠ Ġprivate Ġval Ġsearches Ġ= ĠBehavior Subject . create Default ("") ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠDeck Builder Events . register () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe With ( object Ġ: ĠBase Disposable Observer < Deck Builder Event >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( event : ĠDeck Builder Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDeck Builder Event . Card Database Long Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDeck Builder Event . Deck Long Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDeck Builder Event . Leader Long Click Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Card Details ( event . card Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDeck Builder Event . Card Database Click Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Card To Deck ( event . card Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDeck Builder Event . Leader Click Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Leader Picker () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDeck Builder Event . Deck Click Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Card From Deck ( event . card Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Composite () ĊĊĠĠĠĠĠĠĠ Ġlatest Deck Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map ( get Deck UseCase :: get ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe With ( object Ġ: ĠBase Disposable Observer < Gw ent Deck >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( deck : ĠG w ent Deck ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Deck ( deck ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Composite () ĊĊĠĠĠĠĠĠĠ Ġsearches ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ Ġquery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Search Ġ= Ġquery . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcards Ġ= Ġif Ġ( query . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Cards UseCase . get Cards () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Cards UseCase . search Cards ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcards , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Deck Id . switch Map Ġ{ Ġget Filter UseCase . get Filter ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBi Function Ġ{ Ġcard List : ĠList < Gw ent Card >, Ġfilter : ĠCard Filter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( card List , Ġfilter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Ġ{ Ġfilter Cards UseCase . filter ( it . first , Ġit . second , Ġis Search ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( it , Ġquery ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġview . show Loading Indicator () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe With ( object Ġ: ĠBase Disposable Observer < Pair < List < Gw ent Card >, ĠString >>() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( data : ĠPair < List < Gw ent Card >, ĠString >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Card Database ( data . first , Ġdata . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Loading Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Composite () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Deck Id ( deck Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlatest Deck Id . onNext ( deck Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonDelete Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġlatest Deck Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable ( delete Deck UseCase :: delete ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe With ( object Ġ: ĠDis posable Comp letable Observer () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Composite () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rename Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġview . show Rename Deck Menu () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonChange Leader Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġview . show Leader Picker () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearches . onNext ( query ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġsearches . onNext ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Card To Deck ( card Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlatest Deck Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġdeck Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Card To Deck UseCase . add Card ( deck Id , Ġcard Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe With ( object Ġ: ĠBase Disposable Single < Add Card To Deck Result >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠAdd Card To Deck Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAdd Card To Deck Result . Maximum Reached Ġ-> Ġview . show Maximum Card Count Reached () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Composite () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Card From Deck ( card Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlatest Deck Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable Ġ{ Ġdeck Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Card From Deck UseCase . remove Card ( deck Id , Ġcard Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe With ( object Ġ: ĠBase Comp letable Observer () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Composite () ĊĠĠĠ Ġ} Ċ } Ċ