package Ġcom . dev man ish pat ole . github users . paging Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . dev man ish pat ole . github users . base . Base DataSource Ċ import Ġcom . dev man ish pat ole . github users . exception . Network Exception Ċ import Ġcom . dev man ish pat ole . github users . model . GitHub User Ċ import Ġcom . dev man ish pat ole . github users . service . GitHub Service Ċ Ċ class ĠUser Source ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠGitHub Service , ĊĠĠĠ Ġprivate Ġval Ġname : ĠString , ĊĠĠĠ Ġcontext : ĠContext , Ċ ) Ġ: ĠBase DataSource < GitHub User >( context ) Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload From LocalStorage (): ĠList < GitHub User >? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġcase Ġlocal Ġcache Ġimplemented ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload From Network (): ĠList < GitHub User >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresults : ĠList < GitHub User >? ĊĊĠĠĠĠĠĠĠ Ġif Ġ( connectivity LiveData . value Ġ!= Ġnull Ġ&& Ġconnectivity LiveData . value Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNetwork Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġservice . search Users ( name , Ġpage Ġ= Ġposition ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġ= Ġresponse . body ()?. users ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Previous Key () Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== ĠSTART ING _ PAGE _ INDEX ) Ġnull Ġelse Ġposition Ġ- Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun ĠgetNext Key ( results : ĠList < GitHub User >) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( results . isEmpty () Ġ|| Ġresults . size Ġ< ĠTH RESH OLD ) Ġnull Ġelse Ġposition Ġ+ Ġ 1 Ċ }