package Ġcom . go je ck . feature . view Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . go je ck . R Ċ import Ġcom . go je ck . base . Base Activity Ċ import Ġcom . go je ck . databinding . Activity Main Binding Ċ import Ġcom . go je ck . feature . model . Trend ing Repository Main ViewModel Ċ import Ġcom . go je ck . feature . viewModel . Repository ViewModel Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ Ċ class ĠMainActivity Ġ: ĠBase Activity (), ĠSw ipe Refresh Layout . On Refresh Listener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrepo ViewModel : ĠRepository ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġoverride Ġval Ġlayout Id : ĠInt Ġ= ĠR . layout . activity _ main ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Menu ( R . menu . menu _ sort _ home ) Ġ{ Ġitem : ĠMenuItem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== ĠR . id . menu _ sort _ by _ starts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsortBy St ars () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . itemId Ġ== ĠR . id . menu _ sort _ by _ name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort ByName () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ( binding Ġas ĠActivity Main Binding ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Ġ= Ġrepo ViewModel ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ViewModel Setup () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġobserve Trend ing Repositories ( binding Ġas ĠActivity Main Binding ) ĊĊĠĠĠĠĠĠĠ Ġ( binding Ġas ĠActivity Main Binding ). swipe Container . setOn Refresh Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġrepo ViewModel . repository Item Click LiveData . observe Event ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo ViewModel . trend ing Repository Bind LiveData . value ?. forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . name Ġ!= Ġit . name Ġ&& Ġit . item Clicked LiveData . get (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . item Clicked LiveData . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . item Clicked LiveData . set (! it . item Clicked LiveData . get ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Trend ing Repositories ( activity Main Binding : ĠActivity Main Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo ViewModel . trend ing Repository LiveData . observe ( Observer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Success ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. get ()?. let Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Data ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Main Binding . swipe Container . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Data ( data : ĠList < Trend ing Repository Main ViewModel >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo ViewModel . trend ing Repository Bind LiveData . value Ġ= Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo ViewModel . get Trend ing Repositories ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort ByName () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo ViewModel . trend ing Repository Bind LiveData . value ?. sorted With (( compare By ( String . CASE _ INS ENS ITIVE _ ORDER ) Ġ{ Ġit . name Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġit 1 Ġ-> Ġbind Data ( it 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsortBy St ars () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo ViewModel . trend ing Repository Bind LiveData . value ?. sorted By Descending Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . stars ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġit 1 Ġ-> Ġbind Data ( it 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ