package Ġcom . max im erous sy . f iz zh ub . presentation . repository list Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . widget . Swipe Refresh Layout Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . view . Action Mode Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . max im erous sy . f iz zh ub . Main Application Ċ import Ġcom . max im erous sy . f iz zh ub . R Ċ import Ġcom . max im erous sy . f iz zh ub . databinding . Fragment Repository List Binding Ċ import Ġcom . max im erous sy . f iz zh ub . domain . models . Github Repository Ċ import Ġcom . max im erous sy . f iz zh ub . presentation . Base Fragment Ċ import Ġcom . max im erous sy . f iz zh ub . presentation . repository detail . Repository Detail Activity Ċ import Ġcom . max im erous sy . f iz zh ub . presentation . repository search . Repository Search Activity Ċ import Ġcom . max im erous sy . f iz zh ub . util . ViewModel Factory Ċ import Ġjp . was ab eef . recyclerview . adapters . Alpha In Animation Adapter Ċ import Ġjp . was ab eef . recyclerview . anim ators . Scale In Animator Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠRepository List Fragment Ġ: ĠBase Fragment < Fragment Repository List Binding >( R . layout . fragment _ repository _ list ) Ġ{ ĊĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Factory < Repository List ViewModel > ĊĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠRepository List ViewModel ĊĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠRepository Adapter ĊĠ Ġprivate Ġlateinit Ġvar Ġswipe Refresh Layout : ĠSw ipe Refresh Layout ĊĊĠ Ġprivate Ġvar Ġaction Mode : ĠAction Mode ? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Repository List ViewModel :: class . java ) ĊĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĠĠĠ Ġsetup Observer s () ĊĠĠĠ Ġsetup RecyclerView () ĊĠĠĠ Ġsetup Swipe Refresh () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ?) Ġ{ ĊĠĠĠ Ġ( context ?. application Context Ġas ĠMain Application ). component . inject ( this ) ĊĠĠĠ Ġsuper . on Attach ( context ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠ Ġsuper . on Resume () ĊĠĠĠ ĠviewModel . load Repositories () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup RecyclerView () Ġ{ ĊĠĠĠ Ġval Ġre cyclerView Ġ= Ġbinding . re cyclerView ĊĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠ Ġre cyclerView . item Animator Ġ= ĠScale In Animator () ĊĠĠĠ Ġadapter Ġ= ĠRepository Adapter ( G lide . with ( this ), ĠArrayList ()) ĊĠĠĠ Ġadapter . setOnClickListener Ġ{ Ġposition , Ġgithub Repository Ġ-> Ġon Repository Clicked ( position , Ġgithub Repository ) Ġ} ĊĠĠĠ Ġadapter . setOn Long ClickListener Ġ{ Ġon Repository Long Pressed ( it ) Ġ} ĊĠĠĠ Ġre cyclerView . adapter Ġ= ĠAlpha In Animation Adapter ( adapter ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup Observer s () Ġ{ ĊĠĠĠ ĠviewModel . get Add Repository Button Clicked . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠ Ġactivity ?. startActivity ( Intent ( activity , ĠRepository Search Activity :: class . java )) ĊĠĠĠ Ġ}) ĊĠĠĠ ĠviewModel . get Repositories . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠ Ġrepositories Ġ-> Ġrepositories ?. let Ġ{ Ġadapter . update Data ( it ) ĊĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠ Ġ} Ġ}) ĊĠĠĠ ĠviewModel . get Repositories Removed . observe ( this , ĠObserver Ġ{ Ġrepositories Ġ-> ĊĠĠĠĠĠ Ġrepositories ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis List Empty Ġ= Ġadapter . remove Items ( repositories ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is List Empty ) ĠviewModel . empt ied List () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ ĠviewModel . getRepository Load Error . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠ Ġshow Error Dialog ( R . string . repository _ loading _ error ) ĊĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠ Ġ}) ĊĠĠĠ ĠviewModel . getRepository Delete Error . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠ Ġshow Error Dialog ( R . string . repository _ delete _ error ) ĊĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup Swipe Refresh () Ġ{ ĊĠĠĠ Ġswipe Refresh Layout Ġ= Ġbinding . swipe Refresh Layout ĊĠĠĠ Ġswipe Refresh Layout . setColor Scheme Resources ( R . color . color Primary , ĠR . color . color Primary Dark ) ĊĠĠĠ Ġswipe Refresh Layout . setOn Refresh Listener Ġ{ ĠviewModel . load Repositories () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Repository Clicked ( position : ĠInt , Ġgithub Repository : ĠGithub Repository ) Ġ{ ĊĠĠĠ Ġif Ġ( adapter . getSelected ItemCount () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġselect ( position ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġactivity ?. let Ġ{ ĠstartActivity For Result ( Repository Detail Activity . newInstance ( it , Ġfalse , Ġgithub Repository ), Ġ 1 ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Repository Long Pressed ( position : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( action Mode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġaction Mode Ġ= Ġ( activity Ġas ĠAppCompatActivity ). start Support Action Mode ( Action Mode Callback ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġselect ( position ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġselect ( position : ĠInt ) Ġ{ ĊĠĠĠ Ġadapter . select ( position ) ĊĠĠĠ Ġval Ġcount Ġ= Ġadapter . getSelected ItemCount () ĊĠĠĠ Ġwhen Ġ( count ) Ġ{ ĊĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Mode ?. title Ġ= Ġcount . toString () ĊĠĠĠĠĠĠĠ Ġaction Mode ?. invalidate () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdelete Selected () Ġ{ ĊĠĠĠ ĠviewModel . delete Repositories ( adapter . getSelected Items ()) ĊĠĠĠ Ġadapter . clear Selections () ĊĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠ Ġaction Mode Ġ= Ġnull ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠ Ġif Ġ( request Code Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdata !!. getString Extra (" result ") ĊĠĠĠĠĠĠĠ Ġif Ġ( getString ( R . string . remove ) Ġ== Ġresult ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Short Snackbar ( R . string . repository _ removed _ confirmation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinner Ġclass ĠAction Mode Callback Ġ: ĠAction Mode . Callback Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate Action Mode ( mode : ĠAction Mode , Ġmenu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġmode . menu Inflater . inflate ( R . menu . repository _ action _ menu , Ġmenu ) ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Action Mode ( mode : ĠAction Mode , Ġmenu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Action Item Clicked ( mode : ĠAction Mode , Ġitem : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġwhen ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠ ĠR . id . action _ delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġdelete Selected () ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy Action Mode ( mode : ĠAction Mode ) Ġ{ ĊĠĠĠĠĠ Ġadapter . clear Selections () ĊĠĠĠĠĠ Ġaction Mode Ġ= Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ