package Ġcom . k art se v . d mit ry . github see ker . view . ui . activity Ċ Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 4 . app . FragmentManager Ċ import Ġandroid . support . v 4 . app . Fragment Transaction .* Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġcom . k art se v . d mit ry . github see ker . R Ċ import Ġcom . k art se v . d mit ry . github see ker . presenter . impl . Main Presenter Ċ import Ġcom . k art se v . d mit ry . github see ker . presenter . interfaces . IP res enter Ċ import Ġcom . k art se v . d mit ry . github see ker . presenter . vo . Repository VO Ċ import Ġcom . k art se v . d mit ry . github see ker . utils . Check Connection Ċ import Ġcom . k art se v . d mit ry . github see ker . utils . Hide Keyboard Ċ import Ġcom . k art se v . d mit ry . github see ker . utils . Log Utils Ċ import Ġcom . k art se v . d mit ry . github see ker . utils . Simple Text Watcher Ċ import Ġcom . k art se v . d mit ry . github see ker . view . interfaces . I View Ċ import Ġcom . k art se v . d mit ry . github see ker . view . listeners . I ItemClickListener Ċ import Ġcom . k art se v . d mit ry . github see ker . view . listeners . IL o ad More Listener Ċ import Ġcom . k art se v . d mit ry . github see ker . view . ui . fragments . Repo Details Fragment Ċ import Ġcom . k art se v . d mit ry . github see ker . view . ui . fragments . Repo List Fragment Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠI View , ĠI ItemClickListener , ĠI Load More Listener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Presenter : ĠIP res enter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm FragmentManager : ĠFragment Manager ĊĊĠĠĠ Ġ// Ġfragments ĊĠĠĠ Ġprivate Ġvar Ġm Repo List Fragment : ĠRepo List Fragment ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Repo Details Fragment : ĠRepo Details Fragment ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Fragment : ĠFragment ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval ĠRE PO _ LIST Ġ= Ġ" REPO _ LIST " ĊĠĠĠ Ġprivate Ġval ĠRE PO _ DETAILS Ġ= Ġ" DETAILS _ VIEW " ĊĠĠĠ Ġprivate Ġval ĠBACK _ STACK _ OPERATION Ġ= Ġ" Repo Back Stack " ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġattach Presenter () ĊĠĠĠĠĠĠĠ Ġm FragmentManager Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Repo List Fragment Ġ= Ġsupport FragmentManager . find Fragment By Tag ( REPO _ LIST ) Ġas ĠRepo List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Repo Details Fragment Ġ= Ġsupport FragmentManager . find Fragment By Tag ( REPO _ DETAILS ) Ġas ĠRepo Details Fragment ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Repo List Fragment Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Repo List Fragment Ġ= ĠRepo List Fragment . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Repo Details Fragment Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Repo Details Fragment Ġ= ĠRepo Details Fragment . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Fragments () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog Utils . set As Allowed Tag ( this . java Class . simple Name ) ĊĊĠĠĠĠĠĠĠ Ġinit Click Listeners () ĊĠĠĠĠĠĠĠ Ġinit Type Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġattach Presenter () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Presenter Ġ= Ġlast Custom Non Configuration Instance Ġas ? ĠIP res enter ĊĠĠĠĠĠĠĠ Ġif Ġ( m Presenter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter Ġ= ĠMain Presenter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Presenter !!. attach View ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Presenter !!. detach View () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Ret ain Custom Non Configuration Instance (): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Presenter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Type Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Search Query . add TextChanged Listener ( Simple Text Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . toString (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Clear Search Query . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Clear Search Query . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Click Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbtn Search . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Check Connection . is Internet Available ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( application Context . getString ( R . string . error _ no __ internet _ connection )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edit Search Query . text . toString (). isNotBlank () Ġ&& Ġedit Search Query . text . toString (). length Ġ> Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . LOG D ( this . java Class . simple Name , Ġ" Click ĠGO ! Ġ(${ edit Search Query . text }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHide Keyboard . hide Keyboard ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Progress . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Nothing Found . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter ?. on Search Click ( edit Search Query . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( application Context . getString ( R . string . error _ search _ string )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbtn Clear Search Query . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Search Query . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Empty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow List ( repo List : ĠMutable List < Repository VO > ?, Ġtotal Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Utils . LOG D ( this . java Class . simple Name , Ġ"$ m Repo List Fragment , ĠGot Ġrepo Ġlist ($ total Count ): Ġ$ repo List ") ĊĠĠĠĠĠĠĠ Ġswitch Fragment ( m Repo List Fragment ) ĊĠĠĠĠĠĠĠ Ġlayout Progress . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġm Repo List Fragment !!. show Repo List ( repo List , Ġtotal Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ToList ( repo List : ĠMutable List < Repository VO > ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Utils . LOG D ( this . java Class . simple Name , Ġ"$ m Repo List Fragment , ĠAdd Ġto Ġlist (): Ġ$ repo List ") ĊĠĠĠĠĠĠĠ Ġm Repo List Fragment !!. add ToList ( repo List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot Correct Server Answer () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Repo List Fragment !!. cancel Load More () ĊĠĠĠĠĠĠĠ Ġshow Error ( application Context . getString ( R . string . error _ not _ correct _ server _ answer )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġm Presenter ?. on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Error ( error : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake Toast ( error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Toast ( message : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Empty List () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Utils . LOG D ( this . java Class . simple Name , Ġ" Nothing Ġgot ") ĊĠĠĠĠĠĠĠ Ġswitch Fragment ( m Repo List Fragment ) ĊĠĠĠĠĠĠĠ Ġm Repo List Fragment ?. clear List () ĊĠĠĠĠĠĠĠ Ġlayout Progress . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġtext Nothing Found . visibility Ġ= ĠVIS IBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Fragments () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġm FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Manager . find Fragment By Tag ( REPO _ LIST ) Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . add ( R . id . container , Ġm Repo List Fragment , ĠRE PO _ LIST ) ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Manager . find Fragment By Tag ( REPO _ DETAILS ) Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . add ( R . id . container , Ġm Repo Details Fragment , ĠRE PO _ DETAILS ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . hide ( m Repo Details Fragment ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . commit () ĊĠĠĠĠĠĠĠ ĠmCurrent Fragment Ġ= Ġm Repo List Fragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSwitch ing Ġto Ġrequired Ġfragment Ġfrom Ġcurrent ĊĠĠĠĠ Ġ* Ġ@ param ĠFragment Ġfragment To Ġ- Ġfragment Ġto Ġswitch ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġswitch Fragment ( fragment To : ĠFragment ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Utils . LOG D ( this :: class . java . simple Name , Ġ" switch Fragment (): Ġ$ fragment To ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fragment To Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġm FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Transition ( TRANS IT _ FRAGMENT _ OPEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Back Stack ( BACK _ STACK _ OPERATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment To Ġ== Ġm Repo List Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . hide ( m Repo Details Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . hide ( m Repo List Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . show ( fragment To ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . commit Allow ing State Loss () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Fragment Ġ= Ġfragment To ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Control Clicked ( position : ĠInt , Ġrepository : ĠRepository VO ?, Ġcon rol : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( repository Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . LOG D ( this :: class . java . simple Name , Ġ" Clicked Ġ$ repository ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter ?. on Repo Ch osen ( repository ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( con rol ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġm Presenter ?. onClose Details Screen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonLoad More ( page : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Presenter ?. on Load More ( edit Search Query . text . toString (), Ġpage ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġshow Repo Details ( repo : ĠRepository VO ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Utils . LOG D ( this :: class . java . simple Name , Ġ" show Repo Details ($ repo )") ĊĠĠĠĠĠĠĠ Ġm Repo Details Fragment ?. set Repo To Show ( repo Ġ?: Ġreturn ) ĊĠĠĠĠĠĠĠ Ġswitch Fragment ( m Repo Details Fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose Details Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠ Ġ} Ċ Ċ } Ċ