package Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . sections . github User Information Ob tain ment . view Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View .* Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . core . widget . do On TextChanged Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . R Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . sections . github User Information Ob tain ment . model . adapter . Github Profile Adapter Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . sections . github User Information Ob tain ment . model . repository . Github Profile Information Repository Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . sections . github User Information Ob tain ment . viewModel . Github Profile Info Ob tain ment ViewModel Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . sections . github User Information Ob tain ment . viewModel . Github Profile Info Ob tain ment ViewModel Factory Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . sections . show Repository Info . view . Show Repository Info Activity Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . base . Activity Flow Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . constants . Constants Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . constants . Constants . cell ular Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . constants . Constants . disconnected Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . constants . Constants . github Profile Cell Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . constants . Constants . pagination Loading Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . constants . Constants . retry Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . constants . Constants . unknown Host Exception Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . constants . Constants . wifi Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . custom Views . sn ackBar . Custom Sn ackBar Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . delay . Delay . delay Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . extensions .* Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . interfaces . On Item Clicked Ċ import Ġgithub profile search er . ca i ode v . com . br . github profile search er . sections . utils . network . Network Checking Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . offline _ layout . view .* Ċ import Ġkotlinx . serialization . Un stable Default Ċ Ċ class ĠGithub Profile Info Ob tain ment Activity Ġ: ĊĠĠĠ ĠAppCompatActivity ( R . layout . activity _ main ), ĊĠĠĠ ĠActivity Flow Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgithub User Adapter Ġ= ĠGithub Profile Adapter () ĊĠĠĠ Ġprivate Ġvar Ġcustom Sn ackBar : ĠCustom Sn ackBar ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhas User Requested Another Result Page Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġshould RecyclerView Animation Be Executed Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġhas Back To Top Button Been Clicked Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠGithub Profile Info Ob tain ment ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠGithub Profile Info Ob tain ment ViewModel Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGithub Profile Information Repository () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). get ( Github Profile Info Ob tain ment ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Un stable Default ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Theme ( R . style . App Theme ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup View () ĊĠĠĠĠĠĠĠ Ġhandle ViewModel () ĊĠĠĠĠĠĠĠ Ġsetup Extras () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Un stable Default ĊĠĠĠ Ġoverride Ġfun Ġsetup View () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Condition Ġwhen Ġusers Ġrotate Ġthe Ġscreen Ġand Ġthe Ġactivity Ġgets Ġdestroyed ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is There An O ngo ing Call ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( repository Loading ProgressBar , ĠVIS IBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Upper Views Interaction ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . should A Search Be Performed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Drawable ( action Icon ImageView , ĠR . drawable . ic _ close ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . has First Successful Call Been Made Ġ&& Ġ! viewModel . is There Any Profile ToBe Se ar ched ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Icon ImageView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ close ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . have Users H ad Any Tro uble During The First Call ) Ġapply View Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVIS IBLE ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . last Visible ListItem Ġ>= Ġ 1 0 ) Ġapply View Visibility ( back To Top Button , ĠVIS IBLE ) ĊĊĠĠĠĠĠĠĠ Ġ// Setting Ġtrue Ġblack Ġbecause Ġin Ġmy Ġcase Ġwhat Ġwas Ġapplied Ġway Ġactually Ġa Ġdark Ġgrey Ġsh ade ĊĠĠĠĠĠĠĠ Ġwhen Ġ( resources . configuration . ui Mode Ġand ĠConfiguration . UI _ MODE _ N IGHT _ MASK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . UI _ MODE _ N IGHT _ YES Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply BackgroundColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Constraint Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . black ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcustom Sn ackBar Ġ= ĠCustom Sn ackBar . make ( this . findViewById ( android . R . id . content )) ĊĠĠĠĠĠĠĠ Ġback To Top Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( back To Top Button . visibility Ġ!= ĠG ONE ) Ġapply View Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback To Top Button , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Back To Top Button Been Clicked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll To Position ( 0 , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup TextInput EditText () ĊĊĠĠĠĠĠĠĠ Ġaction Icon ImageView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Action Icon Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgithub Profile List Swipe Refresh Layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas User Requested Another Result Page Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . has Any User Requested Updated Data Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . has User Triggered AN ew Request Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile ( null , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprofile Info RecyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġgithub User Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup RecyclerView Add On Scroll Listener () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgithub User Adapter . setOn Item Clicked ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn Item Clicked Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Click ( adapter Position : ĠInt , Ġid : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( id ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgithub Profile Cell Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( Network Checking . check If Internet Connection Is Available ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell ular , Ġwifi Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShow Repository Info Activity :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . github Profile Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . provide Profile Url Through ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisconnected Ġ-> Ġshow Internet Connection Status Sn ackBar ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Generic Item State ( pagination Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Retry ListItem Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Pagination Loading ListItem Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Field Empty Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould List Items Be Removed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġoffline Layout . retry Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offline Layout . visibility Ġ== ĠVIS IBLE ) Ġapply View Visibility ( offline Layout , ĠG ONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Field Empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile ( is Field Empty Ġ= Ġfalse , Ġshould List Items Be Removed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile ( is Field Empty Ġ= Ġtrue , Ġshould List Items Be Removed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ViewModel () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Success ĠLive Data ĊĠĠĠĠĠĠĠ ĠviewModel . success LiveData . observe ( this , ĠObserver Ġ{ Ġgithub Users List Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Upper Views Interaction ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . should A Search Be Performed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( github Profile List Swipe Refresh Layout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offline Layout . visibility Ġ!= ĠG ONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( offline Layout , ĠG ONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . have Users H ad Any Tro uble During The First Call Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould RecyclerView Animation Be Executed Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . has First Successful Call Been Made Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Retry ListItem Visible Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . has User Triggered AN ew Request ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgithub User Adapter . update DataSource ( github Users List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgithub User Adapter . update DataSource ( github Users List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Info RecyclerView . adapter ?. notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is Pagination Loading ListItem Visible ) Ġscroll To Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . provide Last ListItem Index (), Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( repository Loading ProgressBar , ĠG ONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . has User Triggered AN ew Request ) ĠviewModel . has User Triggered AN ew Request Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . has Any User Requested Updated Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( github Profile List Swipe Refresh Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgithub User Adapter . update DataSource ( github Users List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould RecyclerView Animation Be Executed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . has Any User Requested Updated Data Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should RecyclerView Animation Be Executed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Layout Animation ( profile Info RecyclerView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould RecyclerView Animation Be Executed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Error ĠLive Data ĊĠĠĠĠĠĠĠ ĠviewModel . error Single Immutable LiveData Event . observe ( this , ĠObserver Ġ{ Ġstate Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . has User Triggered AN ew Request ) ĠviewModel . has User Triggered AN ew Request Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! should RecyclerView Animation Be Executed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould RecyclerView Animation Be Executed Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Upper Views Interaction ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is The NumberOf Items Of The Last Call LessThan Tw enty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is Pagination Loading ListItem Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Generic Item State ( retry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Retry ListItem Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Pagination Loading ListItem Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . insert Generic Item Into The Results List ( retry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Retry ListItem Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Pagination Loading ListItem Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is Retry ListItem Visible Ġ&& Ġ! viewModel . is EndOf Results ListItem Visible ) Ġscroll To Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . provide Last ListItem Index (), Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . should A Search Be Performed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Drawable ( action Icon ImageView , ĠR . drawable . ic _ search ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state . first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunknown Host Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// It Ġneeds Ġto Ġbe Ġchecked Ġotherwise , Ġthe Ġapp Ġcould Ġend Ġup Ġreplacing Ġa Ġlist Ġfull Ġof Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwith Ġthe Ġoffline Ġlayout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . has First Successful Call Been Made ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Messages ( state . second , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Messages ( state . second , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġshow Error Messages ( state . second , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Extras () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( Network Checking . check If Internet Connection Is Available ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisconnected Ġ-> Ġshow Internet Connection Status Sn ackBar ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup Internet Connection Observer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Un stable Default ĊĠĠĠ Ġprivate Ġfun Ġsearch Profile ( ĊĠĠĠĠĠĠĠ Ġis Field Empty : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġshould List Items Be Removed : ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġhide Keyboard ( search Profile TextInput EditText ) ĊĊĠĠĠĠĠĠĠ Ġ// Since Ġthe ĠSw ipe Refresh Layout Ġis Ġonly Ġvisible Ġwhen Ġat Ġleast Ġone Ġcall Ġhas Ġalready Ġbeen Ġmade , Ġeven Ġif Ġusers Ġdelete Ġthe Ġtext Ġfrom Ġthe ĊĠĠĠĠĠĠĠ Ġ// TextInput EditText , Ġusers Ġwill Ġalready Ġhave Ġtyped Ġsomething Ġonto Ġit Ġand Ġthis Ġstring Ġwill Ġbe Ġstored Ġin Ġthe ĠViewModel Ġas Ġsoon Ġas Ġthey Ġsearch Ġfor Ġit , Ġso , ĊĠĠĠĠĠĠĠ Ġ// it Ġcan Ġbe Ġused Ġto Ġeither Ġrefresh Ġthe Ġlist Ġor Ġto Ġkeep Ġgetting Ġmore Ġpages Ġfrom Ġthe ĠGithub ĠAPI . ĠIt Ġdoes Ġnot Ġapply Ġto Ġthe Ġ" Action Icon " Ġwhen Ġit Ġis Ġa ĠM agn ifying Ġg lass Ġicon ĊĠĠĠĠĠĠĠ Ġ// Ġor Ġwhen Ġusers Ġsearch Ġusing Ġthe ĠKeyboard ĠM agn ifying ĠG lass Ġicon , Ġin Ġthis Ġcase , Ġthere Ġhas Ġto Ġbe Ġsome Ġtext Ġon Ġthe ĠText Input EditText ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . has Any User Requested Updated Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Api Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Github Profile List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould List Items Be Removed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( has User Requested Another Result Page Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! viewModel . is The NumberOf Items Of The Last Call LessThan Tw enty ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġ${ viewModel . is The NumberOf Items Of The Last Call LessThan Tw enty } Ġbeing Ġfalse Ġbasically Ġmeans Ġit 's Ġthe Ġlast ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġpage Ġand Ġthere 's Ġno Ġneed Ġto Ġperform Ġanother Ġcall Ġbecause Ġone Ġhas Ġreached Ġthe Ġend Ġof Ġthe Ġlist Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Api Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Github Profile List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould List Items Be Removed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Field Empty ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it ) Ġcall Api Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Github Profile List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile TextInput EditText . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould List Items Be Removed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . empty _ field _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . has Any User Requested Updated Data Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Layout Animation ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( re cyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Animation Ġ= ĠAnimation Utils . load Layout Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . layout _ animation _ fall _ down ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġsome Ġreason , Ġwhen Ġa Ġcall Ġthat Ġremoves Ġall Ġprevious Ġitems Ġfrom Ġthe Ġresult Ġlist Ġis Ġmade ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( e . g : ĠPull - to - refresh Ġor Ġby Ġclicking Ġon Ġthe Ġsearch Ġicon ), Ġif Ġone Ġsc rolled Ġtill Ġsome Ġpoint Ġof Ġthe Ġlist , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen Ġthe Ġcall Ġis Ġfinished , Ġthe Ġtop Ġof Ġthe Ġlist Ġis Ġnot Ġshown , Ġwhich Ġshould Ġhappen . ĠSo Ġa Ġtemporary Ġsolution ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuntil Ġi Ġfigure Ġout Ġwhat Ġis Ġgoing Ġon Ġis Ġto Ġgo Ġback Ġto Ġthe Ġtop Ġafter Ġany Ġsuccessful Ġcall Ġthat Ġis Ġrequired Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremove Ġall Ġprevious Ġlist Ġitems Ġso Ġpagination Ġcall Ġwill Ġnot Ġbe Ġaffected Ġby Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll To Position ( 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Layout Animation () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . successful Calls Count Ġ== Ġ 1 ) ĠviewModel . has First Successful Call Been Made Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( github Profile List Swipe Refresh Layout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( repository Loading ProgressBar . visibility Ġ== ĠVIS IBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( repository Loading ProgressBar , ĠG ONE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcall Api ( generic Function : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( Network Checking . check If Internet Connection Is Available ( application Context )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell ular , Ġwifi Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! github Profile List Swipe Refresh Layout . is Refresh ing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has User Requested Another Result Page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( repository Loading ProgressBar , ĠVIS IBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Upper Views Interaction ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . should A Search Be Performed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Drawable ( action Icon ImageView , ĠR . drawable . ic _ close ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Function . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is There An O ngo ing Call Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisconnected Ġ-> Ġshow Internet Connection Status Sn ackBar ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error Messages ( message : ĠInt , Ġshould Offline Layout Be Shown : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( should Offline Layout Be Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offline Layout . visibility Ġ!= ĠVIS IBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( offline Layout , ĠVIS IBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . successful Calls Count Ġ== Ġ 0 Ġ&& ĠviewModel . un successful Calls Count Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . have Users H ad Any Tro uble During The First Call Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapply View Visibility ( repository Loading ProgressBar , ĠG ONE ) ĊĠĠĠĠĠĠĠ Ġapply View Visibility ( github Profile List Swipe Refresh Layout ) ĊĠĠĠĠĠĠĠ Ġshow Sn ackBar ( this , ĠgetString ( message )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Field Empty () Ġ= Ġsearch Profile TextInput EditText . text . toString (). isEmpty () ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Internet Connection Observer () Ġ{ ĊĠĠĠĠĠĠĠ ĠNetwork Checking . internet Connection Availability Observable ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , ĠObserver Ġ{ Ġis Internet Available Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( is Internet Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġshow Internet Connection Status Sn ackBar ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġshow Internet Connection Status Sn ackBar ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Internet Connection Status Sn ackBar ( is Internet Connection Available : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( custom Sn ackBar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Internet Connection Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( getString ( R . string . back _ online _ success _ message )). set BackgroundColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . color . green _ 7 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 3 0 0 0 , Ġaction Ġ= Ġ{ Ġthis . dismiss () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( getString ( R . string . no _ connection _ error )). set BackgroundColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . color . red _ 7 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Un stable Default ĊĠĠĠ Ġprivate Ġfun Ġhandle Action Icon Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġhas User Requested Another Result Page Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( offline Layout . visibility Ġ== ĠVIS IBLE ) Ġapply View Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG ONE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is There An O ngo ing Call ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . should A Search Be Performed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Field Empty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile ( is Field Empty Ġ= Ġfalse , Ġshould List Items Be Removed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . has User Triggered AN ew Request Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile ( is Field Empty Ġ= Ġtrue , Ġshould List Items Be Removed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile TextInput EditText . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Drawable ( action Icon ImageView , ĠR . drawable . ic _ search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . should A Search Be Performed ) ĠviewModel . should A Search Be Performed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Un stable Default ĊĠĠĠ Ġprivate Ġfun Ġsetup TextInput EditText () Ġ{ ĊĠĠĠĠĠĠĠ Ġhas User Requested Another Result Page Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwith ( search Profile TextInput EditText ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Editor ActionListener ( TextView . On Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Field Empty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . has User Triggered AN ew Request Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile ( is Field Empty Ġ= Ġfalse , Ġshould List Items Be Removed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Editor ActionListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo On TextChanged Ġ{ Ġ_, Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . should A Search Be Performed ) ĠviewModel . should A Search Be Performed Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Icon ImageView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ search ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Un stable Default ĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView Add On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġprofile Info RecyclerView . add On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= Ġre cyclerView . layout Manager ?. item Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Last Item Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( viewModel . cast Attribute Through ViewModel < Linear LayoutManager >( re cyclerView . layout Manager )). find Last Visible Item Position () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . last Visible ListItem Ġ= Ġcurrent Last Item ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Last Item Ġin Ġ 4 .. 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( back To Top Button . visibility Ġ!= ĠG ONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( back To Top Button , ĠG ONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Back To Top Button Been Clicked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Last Item Ġ>= Ġ 1 0 Ġ&& Ġback To Top Button . visibility Ġ!= ĠVIS IBLE Ġ&& Ġ! has Back To Top Button Been Clicked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply View Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback To Top Button , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Last Item Ġ== Ġtotal ?. minus ( 1 ) Ġ&& Ġ! viewModel . is The NumberOf Items Of The Last Call LessThan Tw enty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠThis Ġattribute Ġwas Ġcreated Ġto Ġavoid Ġ Ġmaking Ġan ĠAPI Ġcall Ġtwice Ġor Ġmore Ġbecause Ġsometimes Ġthis Ġcallback Ġis Ġcalled Ġmore Ġthan Ġonce , Ġso , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe ĠAPI Ġcall Ġmethod Ġwon 't Ġbe Ġcalled Ġuntil Ġthe Ġprevious ĠAPI Ġcall Ġfinishes Ġcombining Ġit Ġwith Ġthe Ġ' is There An O ngo ing Call ' Ġattribute Ġlocated Ġin Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGithub Profile Info Ob tain ment ViewModel Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas User Requested Another Result Page Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould RecyclerView Animation Be Executed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has User Requested Another Result Page Ġ&& Ġ! viewModel . is There An O ngo ing Call Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! viewModel . has Any User Requested Updated Data Ġ&& Ġ! viewModel . is Retry ListItem Visible ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Field Empty Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould List Items Be Removed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is Pagination Loading ListItem Visible Ġ&& Ġ! viewModel . is Retry ListItem Visible Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! viewModel . is EndOf Results ListItem Visible ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . insert Generic Item Into The Results List ( pagination Loading , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Pagination Loading ListItem Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Upper Views Interaction ( should Users Be Ab le To Interact With The Upper Views : ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġaction Icon ImageView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Clickable Ġ= Ġshould Users Be Ab le To Interact With The Upper Views ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġshould Users Be Ab le To Interact With The Upper Views ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith ( search Profile TextInput EditText ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Clickable Ġ= Ġshould Users Be Ab le To Interact With The Upper Views ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Cursor Visible Ġ= Ġshould Users Be Ab le To Interact With The Upper Views ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġshould Users Be Ab le To Interact With The Upper Views ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able In Touch Mode Ġ= Ġshould Users Be Ab le To Interact With The Upper Views ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Long Clickable Ġ= Ġshould Users Be Ab le To Interact With The Upper Views ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Users Be Ab le To Interact With The Upper Views ) Ġrequest Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Generic Item State ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgithub User Adapter . change Generic State ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġscroll To Position ( position : ĠInt , Ġshould Scroll Be Smooth : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( should Scroll Be Smooth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Info RecyclerView . smooth Scroll To Position ( position ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Info RecyclerView . scrollTo Position ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreplace Last RecyclerView Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is Pagination Loading ListItem Visible Ġ&& Ġ! viewModel . is There An O ngo ing Call Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! viewModel . is The NumberOf Items Of The Last Call LessThan Tw enty ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove Last Item () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . insert Generic Item Into The Results List ( retry ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Retry ListItem Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . is There Any Profile ToBe Se ar ched Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Profile TextInput EditText . text . toString (). isEmpty () ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is Retry ListItem Visible ) Ġreplace Last RecyclerView Item () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ }