package Ġseg ura . countries . app . ui Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġorg . k oin . android . view model . ext . android . viewModel Ċ import Ġseg ura . countries . app . R Ċ import Ġseg ura . countries . app . common . set Dark Or Day Mode Ċ import Ġseg ura . countries . app . model . Country Ċ import Ġseg ura . countries . app . model . network Handler . Resource Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠCountry Adapter . On Country ClickListener Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" MainActivity Debug " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcountries ViewModel : ĠCount ries ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġlateinit Ġvar Ġcountry Adapter : ĠCountry Adapter ĊĠĠĠ Ġprivate Ġvar Ġshort Animation Duration Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Dark Or Day Mode () ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġsetup Recycler () ĊĠĠĠĠĠĠĠ Ġcountries ViewModel . countries List . observe ( this , Ġcountries Observer ) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcountries Observer Ġ= ĠObserver < Resource < List < Country >>> Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( response . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Adapter . swap Data ( response . data Ġas ĠMutable List < Country >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Recycler () Ġ{ ĊĠĠĠĠĠĠĠ Ġcountry Adapter Ġ= ĠCountry Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġrv Countries . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĠLinearLayoutManager . VERTICAL , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġcountry Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow View With Cross Fade () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Country ClickListener ( position : ĠInt , Ġitem : ĠCountry ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġitem . native Name , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġshow View With Cross Fade () Ġ{ ĊĠĠĠĠĠĠĠ Ġrv Countries . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate (). alpha ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( short Animation Duration . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġloading ProgressBar . animate (). alpha ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( short Animation Duration . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading ProgressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} Ċ } Ċ