package Ġns . fa j net . android . ge ob readcrumb s . activities . main . current _ track Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Has Default ViewModel Provider Factory Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . observe Ċ import Ġcom . google . android . gms . location . Location Services Ċ import Ġkotlinx . android . synt hetic . main . fragment _ current _ track .* Ċ import Ġns . fa j net . android . ge ob readcrumb s . R Ċ import Ġns . fa j net . android . ge ob readcrumb s . common . Constants Ċ import Ġns . fa j net . android . ge ob readcrumb s . common . Log Ex Ċ import Ġns . fa j net . android . ge ob readcrumb s . common . Utils Ċ import Ġns . fa j net . android . ge ob readcrumb s . common . dialogs . New Place Dialog Ċ import Ġns . fa j net . android . ge ob readcrumb s . common . display Transform ations .* Ċ import Ġns . fa j net . android . ge ob readcrumb s . repositories . Service Repository Ċ Ċ class ĠCurrent Track Fragment Ġ: ĠFragment (), ĠHas Default ViewModel Provider Factory Ġ{ ĊĊĠĠĠ Ġ// Ġmembers Ġ-------------------------------------------------------------------------------- ----- ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠCurrent Track Fragment ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġduration Transformation : ĠDuration Transformation ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdistance Transformation : ĠDistance Transformation ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġspeed Transformation : ĠSpeed Transformation ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġheading Transformation : ĠHeading Transformation ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsignal Quality Transformation : ĠSignal Quality Transformation ĊĊĠĠĠ Ġ// Ġoverrides Ġ-------------------------------------------------------------------------------- --- ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ current _ track , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbind () ĊĠĠĠĠĠĠĠ Ġbind LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . REQUEST _ CODE _ REQUEST _ LOCATION _ PERMISSION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ 0 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetLast Location And ShowDialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ ĠLog Ex . d ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" on Destroy ") ĊĠĠĠĠĠĠĠ Ġdispose Display Transform ations () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHas Default ViewModel Provider Factory Ġ------------------------------------------------ ---------- ĊĊĠĠĠ Ġoverride Ġfun ĠgetDefault ViewModel Provider Factory (): ĠViewModel Provider . Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCurrent Track Fragment ViewModel . FACTORY ( require Activity (). application ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġprivate Ġmethods Ġ----------------------------------------------------------------------------- ĊĊĠĠĠ Ġprivate Ġfun Ġbind () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Track . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Track Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstop Track . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Track Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Place . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Place Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġduration Transformation Ġ= ĠDuration Transformation () ĊĠĠĠĠĠĠĠ Ġdistance Transformation Ġ= ĠDistance Transformation ( require Context ()) ĊĠĠĠĠĠĠĠ Ġspeed Transformation Ġ= ĠSpeed Transformation ( require Context ()) ĊĠĠĠĠĠĠĠ Ġheading Transformation Ġ= ĠHeading Transformation () ĊĠĠĠĠĠĠĠ Ġsignal Quality Transformation Ġ= ĠSignal Quality Transformation ( require Context ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind LiveData () Ġ{ ĊĠĠĠĠĠĠĠ ĠService Repository . geo Track Service Reference . observe ( view Lifecycle Owner ) Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Ex . d ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" service Reference Ġupdated ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . recording Active . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Track . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Track . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Track Data . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Track . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Track . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Track Data . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . live Update . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Ex . d ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" live Update Ġreceived ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Layout . edit Text ?. setText ( duration Transformation . transform ( it . duration )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Layout . edit Text ?. setText ( distance Transformation . transform ( it . distance )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Speed Layout . edit Text ?. setText ( speed Transformation . transform ( it . current Speed )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaverage Speed Layout . edit Text ?. setText ( speed Transformation . transform ( it . average Speed )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Speed Layout . edit Text ?. setText ( speed Transformation . transform ( it . max Speed )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Be aring Layout . edit Text ?. setText ( heading Transformation . transform ( it . current Be aring )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverall Be aring Layout . edit Text ?. setText ( heading Transformation . transform ( it . overall Be aring )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Of Places Layout . edit Text ?. setText ( it . no Of Places . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Of Points Layout . edit Text ?. setText ( it . no Of Points . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . no Of S atell ites . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs atell ites Layout . edit Text ?. setText ( it . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs atell ites Layout . edit Text ?. setTextColor ( signal Quality Transformation . transform ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun bind LiveData () Ġ{ ĊĠĠĠĠĠĠĠ ĠService Repository . geo Track Service Reference . remove Observer s ( view Lifecycle Owner ) ĊĠĠĠĠĠĠĠ ĠService Repository . geo Track Service Reference . value ?. live Update ?. remove Observer s ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Track Click () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Ex . i ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" tracking Ġstarted ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . is Permission Granted ( this . require Context ()) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . is Location Enabled ( this . require Context ()) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetLast Location And ShowDialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Utils . show GPS Not Enabled Dialog ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . request Location Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . REQUEST _ CODE _ REQUEST _ LOCATION _ PERMISSION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun ĠgetLast Location And ShowDialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġin determinate ProgressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ ĠLocation Services . getF used Location Provider Client ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. last Location ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Ex . i ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" received Ġlast Ġlocation : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNew Place Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġplace Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Ex . i ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" dialog ĠOK : Ġ$ place Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . start Track ( place Name , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Ex . i ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" dialog ĠCancel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show ( child FragmentManager , Ġ" new Point ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun bind LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin determinate ProgressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Track Click () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Ex . i ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" tracking Ġstopped ") ĊĠĠĠĠĠĠĠ Ġun bind LiveData () ĊĠĠĠĠĠĠĠ ĠviewModel . stop Track ( Service Repository . geo Track Service Reference ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġadd Place Click () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Ex . i ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" add Ġplace Ġto Ġcurrent Ġtrack ") ĊĠĠĠĠĠĠĠ Ġin determinate ProgressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ ĠLocation Services . getF used Location Provider Client ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. last Location ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Ex . i ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" received Ġlast Ġlocation : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNew Place Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġplace Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Ex . i ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" dialog ĠOK : Ġ$ place Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add Place ( place Name , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Ex . i ( Constants . TAG _ CURRENT _ TRACK _ FRAGMENT , Ġ" dialog ĠCancel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show ( child FragmentManager , Ġ" new Point ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun bind LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin determinate ProgressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdispose Display Transform ations () Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Transformation . dispose () ĊĠĠĠĠĠĠĠ Ġdistance Transformation . dispose () ĊĠĠĠĠĠĠĠ Ġspeed Transformation . dispose () ĊĠĠĠĠĠĠĠ Ġheading Transformation . dispose () ĊĠĠĠĠĠĠĠ Ġsignal Quality Transformation . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġcompanion Ġ-------------------------------------------------------------------------------- --- ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠCurrent Track Fragment () ĊĠĠĠ Ġ} Ċ } Ċ