package Ġxyz . har mony app . oly mp us blog . ui . main . article Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . af ol le st ad . material dialogs . input . input Ċ import Ġcom . bump tech . glide . Request Manager Ċ import Ġxyz . har mony app . oly mp us blog . R Ċ import Ġxyz . har mony app . oly mp us blog . api . main . responses . Comment Response Ċ import Ġxyz . har mony app . oly mp us blog . databinding . Fragment Comment Binding Ċ import Ġxyz . har mony app . oly mp us blog . di . main . Main Scope Ċ import Ġxyz . har mony app . oly mp us blog . ui . Are You S ure Callback Ċ import Ġxyz . har mony app . oly mp us blog . ui . main . article . state . ARTIC LE _ VIEW _ STATE _ B UNDLE _ KEY Ċ import Ġxyz . har mony app . oly mp us blog . ui . main . article . state . Article State Event .* Ċ import Ġxyz . har mony app . oly mp us blog . ui . main . article . state . Article ViewState Ċ import Ġxyz . har mony app . oly mp us blog . ui . main . article . view model . remove Deleted Comment Ċ import Ġxyz . har mony app . oly mp us blog . ui . main . article . view model . set Comment Ċ import Ġxyz . har mony app . oly mp us blog . utils .* Ċ import Ġjavax . inject . Inject Ċ Ċ @ Main Scope Ċ class ĠComment Fragment Ċ @ Inject Ċ constructor ( ĊĠĠĠ ĠviewModel Factory : ĠViewModel Provider . Factory , ĊĠĠĠ Ġprivate Ġval Ġrequest Manager : ĠRequest Manager Ċ ) Ġ: ĠBase Article Fragment ( viewModel Factory ), ĊĠĠĠ ĠSw ipe Refresh Layout . On Refresh Listener , ĊĠĠĠ ĠComment ListAdapter . Comment Interaction Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Comment Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cycler Adapter : ĠComment ListAdapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// ĠRestore Ġstate Ġafter Ġprocess Ġdeath ĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. let Ġ{ Ġin State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( in State [ ARTIC LE _ VIEW _ STATE _ B UNDLE _ KEY ] Ġas ĠArticle ViewState ?) ?. let Ġ{ Ġview State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . setView State ( view State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview State Ġ= ĠviewModel . view State . value ĊĊĠĠĠĠĠĠĠ Ġ// clear Ġthe Ġlist . ĠDon 't Ġwant Ġto Ġsave Ġa Ġlarge Ġlist Ġto Ġbundle . ĊĠĠĠĠĠĠĠ Ġview State ?. article Fields ?. article List Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġview State ?. search Fields ?. profile List Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġout State . put Parcelable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA RT IC LE _ VIEW _ STATE _ B UNDLE _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Comment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . setOn Refresh Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĠĠĠĠĠĠĠ Ġsubscribe Observer s () ĊĊĠĠĠĠĠĠĠ Ġbinding . add Comment . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Add Comment Dialog () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Observer s () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠviewModel . view State . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġview State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view State Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler Adapter . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment List Ġ= Ġview State . view Article Fields . comment List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . num Active Jobs . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Communication Listener . display ProgressBar ( viewModel . are Any Jobs Active ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . state Message . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġstate Message Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Message ?. response ?. message . equals ( Success Handling . SUCCESS _ COMMENT _ DELETED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove Deleted Comment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Message ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Communication Listener . on Response Received ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġit . response , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Message Callback Ġ= Ġobject Ġ: ĠState Message Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove Message From Stack () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . clear State Message () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding . comment Recycler view . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( this @ Comment Fragment . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler Adapter Ġ= ĠComment ListAdapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getCurrent UserId (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Comment Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġre cycler Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Add Comment Dialog () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog ( it ). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( hint Ġ= Ġ" Enter Ġyour Ġcomment ", ĠmaxLength Ġ= Ġ 2 5 0 ) Ġ{ Ġdialog , Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . setState Event ( Post Comment Event ( text . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Button ( R . string . submit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Comments () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is Job Already Active ( Get Article Comments Event ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . setState Event ( Get Article Comments Event ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset UI () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonDelete Comment ( position : ĠInt , Ġitem : ĠComment Response ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcallback : ĠAre You S ure Callback Ġ= Ġobject Ġ: ĠAre You S ure Callback Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġproceed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Comment ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . setState Event ( Delete Comment Event ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġui Communication Listener . on Response Received ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠResponse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠgetString ( R . string . are _ you _ sure _ delete ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui ComponentType Ġ= ĠUI ComponentType . Are You S ure Dialog ( callback ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type Ġ= ĠMessageType . Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Message Callback Ġ= Ġobject Ġ: ĠState Message Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove Message From Stack () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . clear State Message () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . comment Recycler view . smooth Scroll To Position ( 0 ) ĊĠĠĠĠĠĠĠ Ġui Communication Listener . hide Soft Keyboard () ĊĠĠĠĠĠĠĠ Ġbinding . focus ableView . request Focus () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Comments () ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠviewModel . setState Event ( Get Article Comments Event ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġbinding . comment Recycler view . adapter Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }