package Ġcom . dic od ing . pic od ip lo ma . bfa as ub mission 3 . activities Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . dic od ing . pic od ip lo ma . bfa as ub mission 3 . ret rofit . Data Repository Ċ import Ġcom . dic od ing . pic od ip lo ma . bfa as ub mission 3 . R Ċ import Ġcom . dic od ing . pic od ip lo ma . bfa as ub mission 3 . fragment view pager . Section Pager Adapter Ċ import Ġcom . dic od ing . pic od ip lo ma . bfa as ub mission 3 . util . Extension Fun . load Ċ import Ġcom . dic od ing . pic od ip lo ma . bfa as ub mission 3 . model . User Ċ import Ġcom . dic od ing . pic od ip lo ma . bfa as ub mission 3 . room . App Database Ċ import Ġcom . dic od ing . pic od ip lo ma . bfa as ub mission 3 . util . Extension Fun . show Toast Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ Ċ class ĠDetail Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġimg Avatar : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Username : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Name : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Company : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Location : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Repository : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Follower following : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfloating Fav : ĠFloating ActionButton ĊĠĠĠ Ġprivate Ġvar Ġdb : ĠApp Database ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ String Res ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAB _ TIT LES Ġ= Ġint ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . tab _ follow er , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . tab _ following ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ detail ) ĊĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Detail " ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Show Home Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġdb Ġ= ĠApp Database . getInstance ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Extra Ġ= Ġintent . get Parcelable Extra < User >(" user ") ĊĠĠĠĠĠĠĠ Ġif ( user Extra Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg Avatar Ġ= ĠfindViewById ( R . id . c iv _ user _ detail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloating Fav Ġ= ĠfindViewById ( R . id . floating _ fav ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Username Ġ= ĠfindViewById ( R . id . tv _ user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Name Ġ= ĠfindViewById ( R . id . tv _ user _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Company Ġ= ĠfindViewById ( R . id . tv _ user _ company ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Location Ġ= ĠfindViewById ( R . id . tv _ user _ location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Repository Ġ= ĠfindViewById ( R . id . tv _ user _ repos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Follower following Ġ= ĠfindViewById ( R . id . tv _ follow er following ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= Ġdb ?. favorite Dao ()?. findById ( user Extra . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user ?. login Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload View WithData ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠData Repository . client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Extra . login ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . get Detail ( it ). enqueue ( object Ġ: ĠCallback < User > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < User >, Ġresponse : ĠResponse < User >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġresponse . body () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user ?. login Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload View WithData ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < User >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . show Toast ( t . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Support Navigate Up () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFloating ActionButton . set Favorite State ( state : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setImage Resource ( R . drawable . ic _ baseline _ favorite _ 2 4 ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setImage Resource ( R . drawable . ic _ baseline _ favorite _ border _ 2 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġprivate Ġfun Ġload View WithData ( user : ĠUser ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġimg Avatar . load ( user ?. avatar _ url ) ĊĠĠĠĠĠĠĠ Ġfloating Fav . set Favorite State ( user !!. favorite ) ĊĠĠĠĠĠĠĠ Ġfloating Fav . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . favorite Ġ= Ġ! user . favorite ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . favorite State ( user . favorite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user . favorite ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . show Toast (" Added Ġto Ġfavorite !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . show Toast (" Removed Ġfrom Ġfavorite ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtv Name . text Ġ= Ġuser . name ĊĠĠĠĠĠĠĠ Ġtv Username . text Ġ= Ġuser . login ĊĠĠĠĠĠĠĠ Ġtv Company . text Ġ= Ġuser . company Ġ?: Ġ"-" ĊĠĠĠĠĠĠĠ Ġtv Location . text Ġ= Ġuser . location Ġ?: Ġ"-" ĊĠĠĠĠĠĠĠ Ġtv Repository . text Ġ= Ġ" https :// github . com /${ user . login }? tab = repositories " ĊĠĠĠĠĠĠĠ Ġif Ġ(! tv Repository . text . equals ("- ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Repository . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . data Ġ= ĠUri . parse ( tv Repository . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtv Follower following . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStringBuilder (" Follower Ġ${ user . followers } Ġ- ĠFollowing Ġ${ user . following }") ĊĊĠĠĠĠĠĠĠ Ġval Ġsections Pager Adapter Ġ= ĠSection Pager Adapter ( this @ Detail Activity ) ĊĠĠĠĠĠĠĠ Ġsections Pager Adapter . model Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġview Pager : ĠView Pager 2 Ġ= ĠfindViewById ( R . id . view pager ) ĊĠĠĠĠĠĠĠ Ġview Pager . adapter Ġ= Ġsections Pager Adapter ĊĠĠĠĠĠĠĠ Ġval Ġtabs : ĠTab Layout Ġ= ĠfindViewById ( R . id . tabs ) ĊĠĠĠĠĠĠĠ ĠTab Layout Mediator ( tabs , Ġview Pager ) Ġ{ Ġtab , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab . text Ġ= Ġresources . getString ( TAB _ TIT LES [ position ]) ĊĠĠĠĠĠĠĠ Ġ}. attach () ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. elevation Ġ= Ġ 0 f ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun ĠUser . favorite State ( state : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb ?. favorite Dao ()?. insert ( this ) ĊĠĠĠĠĠĠĠ Ġfloating Fav . set Favorite State ( state ) ĊĠĠĠ Ġ} Ċ }