package Ġcom . kar h oo . samples . network sdk . planning Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . kar h oo . samples . network sdk . R Ċ import Ġcom . kar h oo . samples . network sdk . base . Base Fragment Ċ import Ġcom . kar h oo . sdk . api . Kar h oo Api Ċ import Ġcom . kar h oo . sdk . api . model . Location Info Ċ import Ġcom . kar h oo . sdk . api . model . Place Ċ import Ġcom . kar h oo . sdk . api . model . Places Ċ import Ġcom . kar h oo . sdk . api . model . Position Ċ import Ġcom . kar h oo . sdk . api . network . request . Location Info Request Ċ import Ġcom . kar h oo . sdk . api . network . request . Place Search Ċ import Ġcom . kar h oo . sdk . api . network . response . Resource Ċ import Ġkotlinx . android . synt hetic . main . fragment _ trip _ planning .* Ċ import Ġjava . util .* Ċ Ċ class ĠTrip Pl anning Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġsession Token : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġpick Up Location Info : ĠLocation Info ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdrop Off Location Info : ĠLocation Info ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbooking Pl anning State ViewModel : ĠBook ing Pl anning State ViewModel ĊĊĠĠĠ Ġprivate Ġfun Ġget Session Token (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( session Token . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Token Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsession Token ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ trip _ planning , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġpick up _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Search Ġ= Ġset Search Query ( origin _ text . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Addresses ( place Search , ĠBook ing Pl anning Contract . Address Type . ORIGIN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdro po ff _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Search Ġ= Ġset Search Query ( destination _ text . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Addresses ( place Search , ĠBook ing Pl anning Contract . Address Type . DEST INATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġloading ProgressBar ?. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġloading ProgressBar ?. hide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind To Address Bar Outputs (): ĠObserver < Booking Pl anning Contract . Address Bar Actions > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObserver Ġ{ Ġactions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( actions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBook ing Pl anning Contract . Address Bar Actions . Update Address Label Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( actions . address Type Ġ== ĠBook ing Pl anning Contract . Address Type . ORIGIN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected _ pickup . text Ġ= Ġactions . location Info ?. display Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected _ dro po ff . text Ġ= Ġactions . location Info ?. display Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Search Query ( search Query : ĠString ): ĠPlace Search Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPlace Search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= ĠPosition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġsearch Query , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Token Ġ= Ġget Session Token () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Location Info Request Query ( place Id : ĠString ): ĠLocation Info Request Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLocation Info Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Id Ġ= Ġplace Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Token Ġ= Ġget Session Token () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Addresses ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Search : ĠPlace Search , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠBook ing Pl anning Contract . Address Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( place Search . query . length Ġ> Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKar h oo Api . address Service . place Search ( place Search ). execute Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġupdate Places ( place Search , Ġresult . data , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Failure Ġ-> Ġtoast ErrorMessage ( result . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Location Info ( place : ĠPlace , Ġtype : ĠBook ing Pl anning Contract . Address Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Info Request Ġ= Ġset Location Info Request Query ( place . place Id ) ĊĠĠĠĠĠĠĠ Ġshow Loading () ĊĠĠĠĠĠĠĠ ĠKar h oo Api . address Service . location Info ( location Info Request ). execute Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġupdate Place ( result . data , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Failure Ġ-> Ġtoast ErrorMessage ( result . error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Place ( data : ĠLocation Info , Ġtype : ĠBook ing Pl anning Contract . Address Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠBook ing Pl anning Contract . Address Type . ORIGIN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbooking Pl anning State ViewModel . process ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook ing Pl anning Contract . Address Bar Event . Pick Up Address Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpick Up Location Info Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected _ pickup . text Ġ= Ġdata . display Address ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbooking Pl anning State ViewModel . process ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook ing Pl anning Contract . Address Bar Event . Destination Address Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrop Off Location Info Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected _ dro po ff . text Ġ= Ġdata . display Address ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Places ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Search : ĠPlace Search , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠPl aces , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠBook ing Pl anning Contract . Address Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Single : ĠAlertDialog . Builder Ġ= ĠAlertDialog . Builder ( context !! ) ĊĠĠĠĠĠĠĠ Ġbuilder Single . setIcon ( android . R . drawable . ic _ menu _ compass ) ĊĠĠĠĠĠĠĠ Ġbuilder Single . setTitle (" Select ĠOne ĠPlace : Ġ" Ġ+ Ġplace Search . query ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray Adapter < String >( context !! , Ġandroid . R . layout . select _ dialog _ item ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( place : ĠPlace Ġin Ġdata . locations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray Adapter . add ( place . display Address ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder Single . set Negative Button (" cancel ") Ġ{ Ġdialog , Ġ_ Ġ-> Ġdialog . dismiss () Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder Single . setAdapter ( array Adapter ) Ġ{ Ġ_, Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Ġ= Ġdata . locations [ which ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Info ( place , Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder Single . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner : ĠLifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbooking Pl anning State ViewModel : ĠBook ing Pl anning State ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠTrip Pl anning Fragment Ġ= ĠTrip Pl anning Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . booking Pl anning State ViewModel Ġ= Ġbooking Pl anning State ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbooking Pl anning State ViewModel . view Actions (). observe ( owner , Ġbind To Address Bar Outputs ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }