package Ġcom . my apps . github repos Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Adapter View . On ItemClickListener Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . my apps . github repos . databinding . Activity Main Binding Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory ĊĊ Ċ private Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding Ċ Ċ private Ġconst Ġval Ġgithub URL Ġ Ġ= Ġ Ġ" https :// api . github . com /" Ċ Ċ private Ġlateinit Ġvar Ġgithub Client Ġ: ĠGithub Client Ċ Ċ private Ġlateinit Ġvar Ġrequest Adapter Ġ: ĠArray Adapter < String > Ġ// ĠContains ĠJSON Ġobject Ċ private Ġvar Ġhtml URL List Ġ: ĠArrayList < String > Ġ= Ġarray ListOf () Ġ// ĠContains ĠHTML ĠURL Ġfor Ġeach Ġrepository Ġ( indexes Ġare Ġthe Ġsame Ġas Ġthe ĠlistView ) Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġaction Bar ?. hide () ĊĊĠĠĠĠĠĠĠ Ġ// ĠInitialize ĠlistView Ġadapter ĊĠĠĠĠĠĠĠ Ġval Ġinitial List Ġ: ĠList < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= Ġ ĠArray Adapter ( this , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġinitial List ) ĊĠĠĠĠĠĠĠ Ġbinding . lv Repositories . adapter Ġ= Ġrequest Adapter ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġclicking Ġon Ġlist Ġitem / repository , Ġredirect Ġto Ġthat Ġrepository Ġurl ĊĠĠĠĠĠĠĠ Ġbinding . lv Repositories . on ItemClickListener Ġ= ĠOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Intent Ġ= ĠIntent (" android . intent . action . VIEW ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( html URL List [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( view Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSearch Ġfor Ġall Ġrepositories Ġof Ġuser Ġtyped ĊĠĠĠĠĠĠĠ Ġbinding . b Search . setOnClickListener { ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhtml URL List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Repositories ( binding . et Username . text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Repositories ( username Ġ: ĠString ){ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder : ĠRet rofit . Builder Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( github URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġretrofit : ĠRet rofit Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgithub Client Ġ= Ġretrofit . create ( Github Client :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Ġ: ĠCall < List < Github Repos >> Ġ= Ġgithub Client . repos Details From User ( username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . enqueue ( object Ġ: ĠCallback < List < Github Repos >> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < List < Github Repos >>, Ġresponse : ĠResponse < List < Github Repos >>) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Request ", Ġresponse . code (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( findViewById ( android . R . id . content ), Ġ" Error Ġcode : Ġ${ response . code () }", ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠElse Ġif Ġrequest Ġis Ġa Ġsuccess ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepos Ġ: ĠList < Github Repos > Ġ= Ġresponse . body () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( repo Ġin Ġrepos ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// var Ġrepos Data Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" ID : Ġ" Ġ+ Ġrepo . getId () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" NODE ĠID : Ġ" Ġ+ Ġrepo . getNode Id () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" NAME : Ġ" Ġ+ Ġrepo . getName () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" PRIVATE : Ġ" Ġ+ Ġrepo . get Private () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" OWNER ĠNAME : Ġ" Ġ+ Ġrepo . getOwner (). get Login () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" OWNER ĠID : Ġ" Ġ+ Ġrepo . getOwner (). getUser ID () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" HTML ĠURL : Ġ" Ġ+ Ġrepo . get Html URL () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" DESCRIPTION : Ġ" Ġ+ Ġrepo . getDescription () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" SIZE : Ġ" Ġ+ Ġrepo . getSize () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// repos Data Ġ+= Ġ" LANGUAGE : Ġ" Ġ+ Ġrepo . get Language () Ġ+ Ġ"\ n \ n " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// my Adapter . add ( repos Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhtml URL List . add ( repo . get Html URL ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter . add ( repo . getName ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < List < Github Repos >>, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Request ", Ġt . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( findViewById ( android . R . id . content ), Ġ" O ops , Ġsomething Ġwent Ġwrong .", ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Request ", Ġe . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( findViewById ( android . R . id . content ), Ġ" O ops , Ġsomething Ġwent Ġwrong .", ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊĊĊĊĊĊĊĊĊĊĊĊĊĊ ĊĊĊĊ ĊĊĊĊĊ