package Ġcom . d anny j ung . github api . presenter . ui . star Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . air bnb . mv rx . Loading Ċ import Ġcom . air bnb . mv rx . Unique Only Ċ import Ġcom . air bnb . mv rx . activity ViewModel Ċ import Ġcom . d anny j ung . github api . domain . mapper . Repo Item Mapper Ċ import Ġcom . d anny j ung . github api . domain . mapper . Star red Repo Item Mapper Ċ import Ġcom . d anny j ung . github api . presenter . R Ċ import Ġcom . d anny j ung . github api . presenter . databinding . Fragment Star Binding Ċ import Ġcom . d anny j ung . github api . presenter . ui . base . Base Fragment Ċ import Ġcom . d anny j ung . github api . presenter . ui . component . loading ProgressBar Ċ import Ġcom . d anny j ung . github api . presenter . ui . component . repo ListItem Ċ import Ġcom . d anny j ung . github api . presenter . ui . component . space Ċ import Ġcom . d anny j ung . github api . presenter . ui . e po xy . simple E po xy Controller Ċ import Ġcom . d anny j ung . github api . presenter . ui . listener . add Load More Scroll Listener Ċ import Ġcom . d anny j ung . github api . presenter . ui . login . Login State Ċ import Ġcom . d anny j ung . github api . presenter . ui . login . Login ViewModel Ċ import Ġcom . d anny j ung . github api . presenter . ui . utils . dp To Px Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ @ Android EntryPoint Ċ class ĠStar Fragment Ġ: ĠBase Fragment < Fragment Star Binding >( Fragment Star Binding :: inflate ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġstar ViewModel : ĠStar ViewModel Ġby Ġactivity ViewModel () ĊĠĠĠ Ġprivate Ġval Ġlogin ViewModel : ĠLogin ViewModel Ġby Ġactivity ViewModel () ĊĊĠĠĠ Ġprivate Ġval Ġe po xy Controller Ġby Ġlazy Ġ{ Ġcreate E po xy Controller () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġinit View () ĊĊĠĠĠĠĠĠĠ Ġstar ViewModel . on Each ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStar State :: get Repos Async , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnique Only (" get _ repos _ async ") ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġget Repos Async Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . isVisible Ġ= Ġget Repos Async Ġis ĠLoading ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogin ViewModel . on Each ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin State :: accessToken , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnique Only (" star _ access _ token ") ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĠaccessToken Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . login Button . isVisible Ġ= ĠaccessToken Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . e po xy RecyclerView . isVisible Ġ= ĠaccessToken Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accessToken Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstar ViewModel . invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . login Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ VIEW ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . parse ( login ViewModel . get Authorize Url ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . e po xy RecyclerView . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear On Scroll Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Load More Scroll Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstar ViewModel . get Star red Repo Next Page () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Controller ( e po xy Controller ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvalidate () Ġ= Ġe po xy Controller . request Model Build () ĊĊĠĠĠ Ġprivate Ġfun Ġcreate E po xy Controller () Ġ= Ġsimple E po xy Controller ( star ViewModel ) Ġ{ Ġstar State Ġ-> ĊĠĠĠĠĠĠĠ Ġstar State . repos ?. forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo ListItem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" repo _ list _ item ", Ġitem . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Item ( Repo Item Mapper . mapper To Repo Item ( item )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Url ( item . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name ( item . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription ( item . description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstar ( star State . all Star Counts ?. contains ( item . id ) Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst arg az ers Count ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstar State . all Star Counts ?. get ( item . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġitem . st arg az ers Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch ers Count ( item . watch ers Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Avatar Url ( item . owner . avatar Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Name ( item . owner . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Star Click Ġ{ Ġrepo Item , Ġis Star Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstar red Repo Item Ġ= ĠStar red Repo Item Mapper . mapper To Star red Repo Item ( repo Item ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Star ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstar ViewModel . delete Repo ( star red Repo Item . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstar ViewModel . add Repo ( star red Repo Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ Ġrepo Url Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ VIEW ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . parse ( repo Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġspace Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" space ", Ġitem . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor ( R . color . gray _ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight ( require Context (). dp To Px ( 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( star State . get Repos Next Page Async Ġis ĠLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading ProgressBar Ġ{ Ġid (" loading _ progress _ bar ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠStar Fragment () ĊĠĠĠ Ġ} Ċ } Ċ