package Ġcom . ti par o . trip way . views . ui Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . observe Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . Google Map Ċ import Ġcom . google . android . gms . maps . Support Map Fragment Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . Marker Options Ċ import Ġcom . google . android . material . app bar . AppBar Layout Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . ti par o . trip way . Base Application Ċ import Ġcom . ti par o . trip way . R Ċ import Ġcom . ti par o . trip way . databinding . Fragment Detail Trip Binding Ċ import Ġcom . ti par o . trip way . utils . setup Snackbar Ċ import Ġcom . ti par o . trip way . view models . Trip Detail ViewModel Ċ import Ġcom . ti par o . trip way . views . adapters . Trip Detail Point Pager Adapter Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠTrip Detail Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠTrip Detail ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Factory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġargs : ĠTrip Detail Fragment Args Ġby Ġnav Args () ĊĊĠĠĠ Ġprivate Ġvar Ġm Map : ĠGoogle Map ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ ZO OM : ĠFloat Ġ= Ġ 1 2 F ĊĠĠĠ Ġprivate Ġval ĠW ORLD _ ZO OM : ĠFloat Ġ= Ġ 2 F ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Detail Trip Binding ĊĠĠĠ Ġ// ĠThis Ġproperty Ġis Ġonly Ġvalid Ġbetween ĠonCreate View Ġand ĊĠĠĠ Ġ// Ġon Destroy View . ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . load Trip With Points ( args . trip Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . fragment _ detail _ trip , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĊĠĠĠĠĠĠĠ Ġsetup Title () ĊĠĠĠĠĠĠĠ Ġsetup ViewPager () ĊĠĠĠĠĠĠĠ Ġsetup MapView () ĊĠĠĠĠĠĠĠ Ġsetup Snackbar () ĊĠĠĠĠĠĠĠ Ġsetup Navigation () ĊĠĠĠĠĠĠĠ Ġsetup Step ProgressBar () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . trip _ detail _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . delete Trip Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Trip () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . delete Point Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Position Ġ= Ġbinding . point Pager . currentItem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Point ( point Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĊĠĠĠĠĠĠĠ Ġ( require Activity (). application Context Ġas ĠBase Application ). app Component . inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Step ProgressBar () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . points List . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . step ProgressBar . set Step Count ( it . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . step ProgressBar . setOn Step Changed Listener Ġ{ Ġstep Index -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . point Pager . currentItem Ġ= Ġstep Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Title () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . trip Route . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). toolbar . title Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup MapView () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Fragment Ġ= Ġchild FragmentManager . find Fragment ById ( R . id . map ) Ġas ĠSupport Map Fragment ĊĠĠĠĠĠĠĠ Ġmap Fragment . getMap Async Ġ{ Ġmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Map Ġ= Ġmap ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . locations Items . observe ( view Lifecycle Owner ) Ġ{ Ġlocations Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Camera ( locations . first (), ĠW ORLD _ ZO OM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocations . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Marker On Map ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġbinding . map View Toolbar . layout Params Ġas ĠCoord inator Layout . LayoutParams ĊĠĠĠĠĠĠĠ Ġval Ġbehavior Ġ= ĠApp Bar Layout . Behavior () ĊĠĠĠĠĠĠĠ Ġbehavior . set Drag Callback ( object Ġ: ĠApp Bar Layout . Behavior . Drag Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcan Drag ( app Bar Layout : ĠApp Bar Layout ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġlayout Params . behavior Ġ= Ġbehavior ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewPager () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . points List . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . point Pager . adapter Ġ= ĠTrip Detail Point Pager Adapter ( this , Ġit . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . point Pager . register On Page Change Callback ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Pager 2 . On Page Change Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Selected ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO ĠÑģÐ¾ Ñħ ÑĢÐ°Ð½ Ñı ÑĤÑĮ ĠÑĤÐµÐº ÑĥÑī ÑĥÑİ ĠÐ¿Ð¾Ð· Ð¸ ÑĨÐ¸ Ñİ Ġview pager ĠÐ´Ð»Ñı ĠsavedInstanceState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= ĠviewModel . points List . value ! ![ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Camera ( point . location . position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . step ProgressBar . update Step ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" ViewPager : Ġposition Ġ= Ġ$ position ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Snackbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. setup Snackbar ( view Lifecycle Owner , ĠviewModel . sn ackbar Text , ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Navigation () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . deleted Event . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove Camera ( new Position : ĠLat Lng , Ġzoom : ĠFloat Ġ= ĠDEFAULT _ ZO OM ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Map ?. animate Camera ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera Update Factory . new LatLng Zoom ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Position , Ġzoom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Marker On Map ( new Position : ĠLat Lng ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Map ?. add Marker ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMarker Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. position ( new Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. draggable ( false ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ