package Ġcom . we h by . github star red repos . view models Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . android . vol ley . toolbox . Vol ley Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . we h by . github star red repos . Build Config Ċ import Ġcom . we h by . github star red repos . model . Contributor Ċ import Ġcom . we h by . github star red repos . model . GitHub Repository Ċ import Ġorg . json . JSONObject Ċ import Ġjava . net . URL Ċ Ċ private Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" Repo ViewModel " Ċ Ċ class ĠRepo ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrepos LiveData : ĠMutable LiveData < List < GitHub Repository >> Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < List < GitHub Repository >> (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Repos () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Repos (): ĠLive Data < List < GitHub Repository >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepos LiveData ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Repos () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( LOG _ TAG , Ġ" loading Ġrepos ") ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= ĠVol ley . new Request Queue ( getApplication ()) ĊĠĠĠĠĠĠĠ Ġ// need Ġto Ġfind Ġst arg az ers _ count ĊĠĠĠĠĠĠĠ Ġval ĠpageSize Ġ= Ġif Ġ( Build Config . GITHUB _ TOKEN Ġ== Ġ"") Ġ 5 Ġelse Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" https :// api . github . com / search / repositories ? q = stars % 3 A % 3 E 0 & per _ page =$ pageSize " ĊĠĠĠĠĠĠĠ Ġval Ġstring Request Ġ= ĠGitHub Object Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl , Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= Ġresponse . get JSONArray (" items ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepo List Ġ= ĠArrayList < GitHub Repository >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġjson Array . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem : ĠJSONObject Ġ= Ġresponse . get JSONArray (" items "). get ( i ) Ġas ĠJSONObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrepo Ġ= Ġgson . fromJson ( item . toString (), ĠGitHub Repository :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo List . add ( gson . fromJson ( item . toString (), ĠGitHub Repository :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL (" https ", Ġ" api . github . com ", Ġ"/ repos /${ repo . owner . login }/${ repo . name }/ contributors ? per _ page = 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontributor Request Ġ= ĠGitHub Array Request ( url . toString (), Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse String Ġ= Ġresponse . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontributor List Ġ= Ġmutable ListOf < Contributor >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġresponse . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontributor Item : ĠJSONObject Ġ= Ġresponse [ x ] Ġas ĠJSONObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontributor List . add ( gson . fromJson ( contributor Item . toString (), ĠContributor :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . contributors Ġ= Ġcontributor List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo List [ i ] Ġ= Ġrepo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepos LiveData . value Ġ= Ġrepo List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( LOG _ TAG , Ġresponse String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" error Ġgetting Ġcontributors Ġ${ it . localized Message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( contributor Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( LOG _ TAG , Ġ" got Ġthe Ġdata Ġ${ repo List . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠLog . e ( LOG _ TAG , Ġ" error ") Ġ}) ĊĠĠĠĠĠĠĠ Ġqueue . add ( string Request ) ĊĠĠĠ Ġ} Ċ }