package Ġcom . f ak h ry . github users ub mission . ui Ċ Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . f ak h ry . github users ub mission . R Ċ import Ġcom . f ak h ry . github users ub mission . adapter . Sections Pager Adapter Ċ import Ġcom . f ak h ry . github users ub mission . db . Database Contract . Fav User Columns . Companion . AV AT AR Ċ import Ġcom . f ak h ry . github users ub mission . db . Database Contract . Fav User Columns . Companion . NAME Ċ import Ġcom . f ak h ry . github users ub mission . db . Database Contract . Fav User Columns . Companion . URL Ċ import Ġcom . f ak h ry . github users ub mission . db . Database Contract . Fav User Columns . Companion . USERNAME Ċ import Ġcom . f ak h ry . github users ub mission . db . Fav User Helper Ċ import Ġcom . f ak h ry . github users ub mission . helper . Mapping Helper Ċ import Ġcom . f ak h ry . github users ub mission . model . User Model Ċ import Ġcom . f ak h ry . github users ub mission . view model . Detail ViewModel Ċ import Ġkotlinx . android . synt hetic . main . activity _ detail _ user .* Ċ Ċ class ĠDetail Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdetail ViewModel : ĠDetail ViewModel ĊĊĠĠĠ Ġprivate Ġvar Ġis Favorite Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġuser : ĠUser Model ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġposition : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfav User Helper : ĠF av User Helper ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠTAG Ġ= ĠDetail Activity :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ STATE Ġ= Ġ" EXTRA _ STATE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ FA V OR ITE Ġ= Ġ" extra _ favorite " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ POSITION Ġ= Ġ" extra _ position " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ ADD Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESULT _ ADD Ġ= Ġ 1 0 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ DELETE Ġ= Ġ 2 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESULT _ DELETE Ġ= Ġ 2 0 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ detail _ user ) ĊĊĠĠĠĠĠĠĠ Ġuser Ġ= Ġintent . get Parcelable Extra ( EXTRA _ STATE ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= Ġuser ?. username ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġfav User Helper Ġ= ĠF av User Helper . getInstance ( application Context ) ĊĠĠĠĠĠĠĠ Ġfav User Helper . open () ĊĊĠĠĠĠĠĠĠ ĠsetData Detail ( user ) ĊĠĠĠĠĠĠĠ Ġset Follow ers Following ( user ) ĊĊĠĠĠĠĠĠĠ ĠsetIs Favorite () ĊĠĠĠĠĠĠĠ Ġfab _ favorite . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġuser ?. username ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Url Ġ= Ġuser ?. user Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġtv _ name . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavatar Ġ= Ġuser ?. avatar Url ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ FA V OR ITE , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ POSITION , Ġposition ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( USERNAME , Ġusername ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( URL , Ġuser Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( NAME , Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( AV AT AR , Ġavatar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġfav User Helper . delete By Username ( user ?. username . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ DELETE , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( user ?. username Ġ+ Ġ" Ġ" Ġ+ ĠgetString ( R . string . removed _ from _ favorite )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġdelete Ġuser ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġfav User Helper . insert ( values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser ?. id Ġ= Ġresult . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ ADD , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( user ?. username Ġ+ Ġ" Ġ" Ġ+ ĠgetString ( R . string . added _ to _ favorite )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġadd Ġnew Ġuser ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetIs Favorite () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠsetData Detail ( user Model : ĠUser Model ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdetail ViewModel Ġ= ĠViewModel Provider ( this , ĠViewModel Provider . New Instance Factory ()). get ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDetail ViewModel :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdetail ViewModel . setData User ( user Model ?. username ) ĊĠĠĠĠĠĠĠ Ġdetail ViewModel . get Detail User (). observe ( this , Ġ{ Ġdata User Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data User Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ name . text Ġ= Ġdata User . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ company . text Ġ= Ġif Ġ( data User . company Ġ== Ġ" null ") Ġ"-" Ġelse Ġdata User . company ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ location . text Ġ= Ġif Ġ( data User . location Ġ== Ġ" null ") Ġ"-" Ġelse Ġdata User . location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ repo . text Ġ= Ġdata User . repository . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ followers . text Ġ= Ġdata User . followers . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ following . text Ġ= Ġdata User . following . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ bio . text Ġ= Ġif Ġ( data User . bio Ġ== Ġ" null ") Ġ" Github ĠUser " Ġelse Ġdata User . bio ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( data User . avatar Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . placeholder Of ( R . drawable . ic _ refresh _ 2 4 dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . ic _ broken _ image _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( iv _ avatar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetIs Favorite () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġfav User Helper . query All () ĊĠĠĠĠĠĠĠ Ġval Ġlist Data Ġ= ĠMapping Helper . map Cursor To ArrayList ( cursor ) ĊĠĠĠĠĠĠĠ Ġif Ġ( list Data . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( data Ġin Ġlist Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user ?. username Ġ== Ġdata . username ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Icon Favorite () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Icon Favorite () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ favorite . setImage Resource ( R . drawable . ic _ fav _ fill _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ favorite . setImage Resource ( R . drawable . ic _ fav _ border _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Follow ers Following ( user Model : ĠUser Model ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsections Pager Adapter Ġ= ĠSe ctions Pager Adapter ( this , Ġsupport FragmentManager ) ĊĠĠĠĠĠĠĠ Ġsections Pager Adapter . username Ġ= Ġuser Model ?. username ĊĠĠĠĠĠĠĠ Ġview _ pager . adapter Ġ= Ġsections Pager Adapter ĊĠĠĠĠĠĠĠ Ġtabs . setup With ViewPager ( view _ pager ) ĊĠĠĠĠĠĠĠ Ġshow Loading ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading ( state : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Toast ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} Ċ } ĊĊ