package Ġio . github . fe elf re el inux . wy kop mob il ny . base Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . R Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . api . entries . Entries Api Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . models . dataclass . Entry Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . models . dataclass . V oter Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . ui . adapters . Entries Adapter Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . ui . dialogs . create V ot ers Dialog Listener Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . ui . dialogs . V ot ers Dialog Listener Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . ui . fragments . entries . Entries Fragment View Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . utils . isVisible Ċ import Ġio . github . fe elf re el inux . wy kop mob il ny . utils . prepare Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġkotlinx . android . synt hetic . main . dialog _ vot ers . view .* Ċ import Ġkotlinx . android . synt hetic . main . entries _ fragment .* Ċ import Ġkotlinx . android . synt hetic . main . search _ empty _ view .* Ċ import Ġjavax . inject . Inject Ċ Ċ open Ġclass ĠBase Entries Fragment Ġ: ĠBase Fragment (), ĠEnt ries Fragment View , Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout . On Refresh Listener Ġ{ ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġentries Api : ĠEnt ries Api ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġentries Adapter : ĠEnt ries Adapter ĊĊĠĠĠ Ġopen Ġvar Ġload Data Listener : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġlateinit Ġvar Ġvot ers Dialog Listener : ĠV ot ers Dialog Listener ĊĠĠĠ Ġprivate Ġval Ġsubject Disposable Ġby Ġlazy Ġ{ ĠComposite Disposable () Ġ} ĊĊĠĠĠ Ġvar Ġshow Search Empty View : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsearch Empty View . isVisible ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Empty View . isVisible Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠInf late Ġview ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?) Ġ= ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . entries _ fragment , Ġcontainer , Ġfalse ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġentries Adapter . load New Data Listener Ġ= Ġ{ Ġload Data Listener ( false ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetup Ġviews ĊĠĠĠĠĠĠĠ Ġswipe Refresh . setOn Refresh Listener ( this ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepare () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġentries Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġloading View . isVisible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġs chedulers Ġ= ĠW yk op Schedulers () ĊĠĠĠĠĠĠĠ Ġsubject Disposable . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries Api . entry Vote Subject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . background Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( schedul ers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġupdate Entry Vote State ( it . entry Id , Ġit . vote Response . vote Count , Ġtrue ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries Api . entry Un Vote Subject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . background Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( schedul ers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġupdate Entry Vote State ( it . entry Id , Ġit . vote Response . vote Count , Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubject Disposable . dispose () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Entry Vote State ( entry Id : ĠInt , Ġvote Count : ĠInt , Ġis V oted : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries Adapter . data . first OrNull Ġ{ Ġit . id Ġ== Ġentry Id Ġ} ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . vote Count Ġ= Ġvote Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . is V oted Ġ= Ġis V oted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries Adapter . update Entry ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ= Ġload Data Listener ( true ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġprogress bar Ġfrom Ġadapter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdisable Loading () Ġ= Ġentries Adapter . disable Loading () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUse Ġthis Ġfunction Ġto Ġadd Ġitems Ġto ĠEnt ries Fragment ĊĠĠĠĠ Ġ* Ġ@ param Ġitems ĠList Ġof Ġentries Ġto Ġadd ĊĠĠĠĠ Ġ* Ġ@ param Ġshould Refresh ĠIf Ġtrue Ġadapter Ġwill Ġrefresh Ġits Ġdata Ġwith Ġprovided Ġitems . ĠFalse Ġby Ġdefault ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġadd Items ( items : ĠList < Entry >, Ġshould Refresh : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries Adapter . addData ( items , Ġshould Refresh ) ĊĠĠĠĠĠĠĠ Ġswipe Refresh ?. is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġloading View ?. isVisible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠScroll Ġto Ġtop Ġif Ġrefresh ing Ġlist ĊĠĠĠĠĠĠĠ Ġif Ġ( should Refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( re cyclerView ?. layout Manager Ġas ? Ġandroidx . recyclerview . widget . Linear LayoutManager )?. scrollTo Position With Offset ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Entry ( entry : ĠEntry ) Ġ= Ġentries Adapter . update Entry ( entry ) ĊĊĠĠĠ Ġoverride Ġfun Ġshow V ot ers ( vot ers : ĠList < V oter >) Ġ= Ġvot ers Dialog Listener ( vot ers ) ĊĊĠĠĠ Ġoverride Ġfun Ġopen V ot ers Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog ( activity !! ) ĊĠĠĠĠĠĠĠ Ġval Ġvot ers Dialog View Ġ= Ġactivity !!. layout Inflater . inflate ( R . layout . dialog _ vot ers , Ġnull ) ĊĠĠĠĠĠĠĠ Ġvot ers Dialog View . vot ers TextView . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġdialog . set ContentView ( vot ers Dialog View ) ĊĠĠĠĠĠĠĠ Ġvot ers Dialog Listener Ġ= Ġcreate V ot ers Dialog Listener ( dialog , Ġvot ers Dialog View ) ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} Ċ }