package Ġcom . v ish ale cho . android . d ine out . ui . venue Ċ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . v ish ale cho . android . core . network . Response Ċ import Ġcom . v ish ale cho . android . core . ui . base . Base Activity Ċ import Ġcom . v ish ale cho . android . d ine out . R Ċ import Ġcom . v ish ale cho . android . d ine out . data . model . Ven ues Response Ċ import Ġcom . v ish ale cho . android . d ine out . di . D ine out DH Ċ import Ġcom . v ish ale cho . android . d ine out . view model . Venue List ViewModel Ċ import Ġcom . v ish ale cho . android . d ine out . view model . Venue List ViewModel Factory Ċ import Ġkotlinx . android . synt hetic . main . activity _ ven ues .* Ċ import Ġjava . io . IOException Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠV en ue List Activity Ġ: ĠBase Activity (), ĠV en ue ListAdapter . Interaction Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcomponent Ġby Ġlazy Ġ{ ĠD ine out DH . venue List Component () Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠV en ue List ViewModel Factory ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠV en ue ListAdapter ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠV en ue List ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Venue List ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ġby Ġlazy Ġ{ Ġthis Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Venue List Activity " ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ ven ues ) ĊĠĠĠĠĠĠĠ Ġapp _ toolbar . title Ġ= ĠgetString ( R . string . app _ bar _ title ) ĊĠĠĠĠĠĠĠ Ġcomponent . inject ( this ) ĊĊĠĠĠĠĠĠĠ Ġadapter . interaction Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġrv Ven ues . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġs rl Ven ues . setOn Refresh Listener Ġ{ ĠviewModel . refresh Rest aurants () Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Rest aurants () ĊĠĠĠĠĠĠĠ Ġinitiate Data Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitiate Data Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ob serve Ġthe Ġresponse Ġand Ġupdate Ġstate Ġof Ġthe Ġscreen Ġaccordingly ĊĠĠĠĠĠĠĠ ĠviewModel . ven ues Response . observe ( this , ĠObserver < Response < List < Ven ues Response . Response . Venue >>> Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" init iate Data Listener : Ġ$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Progress Ġ-> Ġs rl Ven ues . is Refresh ing Ġ= Ġresponse . loading ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Success Ġ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" init iate Data Listener : ĠSuccessfully Ġloaded Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . swap Data ( response . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Failure Ġ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . e Ġis ĠIOException ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠR . string . need _ internet _ ven ues , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠR . string . failed _ ven ues _ try _ again , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Custom Dialog ( title : ĠString , Ġmsg : ĠString , Ġlat : ĠString , Ġlng : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġbuilder . setIcon ( R . drawable . ic _ directions ) ĊĠĠĠĠĠĠĠ Ġbuilder . setTitle ( title ) ĊĠĠĠĠĠĠĠ Ġbuilder . setMessage ( msg ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Positive Button ( R . string . open _ google _ map ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg mm Intent Uri : ĠUri Ġ= ĠUri . parse (" geo :$ lat ,$ lng ? q =$ lat ,$ lng ($ title )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , Ġg mm Intent Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Intent . set Package (" com . google . android . apps . maps ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( map Intent . resolve Activity ( package Manager ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( map Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrestaurant Clicked ( ĊĠĠĠĠĠĠĠ Ġven ue : ĠV en ues Response . Response . Venue , ĊĠĠĠĠĠĠĠ Ġtv Restaurant Name : ĠTextView , ĊĠĠĠĠĠĠĠ Ġtv Categories Name : ĠTextView ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Custom Dialog ( venue . name , Ġven ue . location . city , Ġven ue . location . lat . toString (), Ġven ue . location . lng . toString ()) ĊĠĠĠ Ġ} Ċ } Ċ