package Ġcom . oz can al as al var . bit co int icker . ui . detail Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . oz can al as al var . bit co int icker . R Ċ import Ġcom . oz can al as al var . bit co int icker . databinding . Activity Detail Binding Ċ import Ġcom . oz can al as al var . bit co int icker . ui . base . Base Activity Ċ import Ġcom . oz can al as al var . bit co int icker . utils . down Load From Url Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠDetail Activity Ġ: ĊĠĠĠ ĠBase Activity < Activity Detail Binding , ĠDetail ViewModel >( Detail ViewModel :: class . java ), ĊĠĠĠ ĠDetail Navigator Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġprivate Ġvar Ġcoin Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Handler : ĠHandler ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Res (): ĠInt Ġ= ĠR . layout . activity _ detail ĊĊĠĠĠ Ġoverride Ġfun Ġget ViewModel (): ĠDetail ViewModel Ġ= ĊĠĠĠĠĠĠĠ ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Detail ViewModel :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding . navigator Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġintent . extras ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoin Id Ġ= Ġit . getString (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġit . getString (" imageUrl ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Transition Name : ĠString ? Ġ= Ġit . getString (" transition Image ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . image Coin . transition Name Ġ= Ġimage Transition Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . image Coin . down Load From Url ( url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! coin Id . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ViewModel (). coin Id Ġ= Ġcoin Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ViewModel (). fetch Coin Detail () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . m Handler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ Ġthis . m Handler . post Delayed ( m Runnable , Ġ 6 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġobserve LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve LiveData () Ġ{ ĊĠĠĠĠĠĠĠ Ġget ViewModel (). coin . observe ( this , ĠObserver Ġ{ Ġcoin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoin ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . model Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġget ViewModel (). network Error . observe ( this , ĠObserver Ġ{ Ġmsg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmsg ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġget ViewModel (). network Success . observe ( this , ĠObserver Ġ{ Ġmsg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmsg ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Suc ces ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġget ViewModel (). is F avour ite . observe ( this , ĠObserver Ġ{ Ġis Fav Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Fav ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . img Add Fav . setImage Resource ( if Ġ( it ) ĠR . drawable . like Ġelse ĠR . drawable . dis like ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Inject () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Application Component (). inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Runnable : ĠRunnable Ġ= Ġobject Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Detail Activity , Ġ" data Ġupdated ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ViewModel (). fetch Coin Detail (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post Delayed ( this , Ġ 6 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Add F avour ite () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoin Id ?. let Ġ{ Ġget ViewModel (). add F avour ite () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Press () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġm Handler . remove Callbacks ( m Runnable ); ĊĠĠĠ Ġ} ĊĊ Ċ }