package Ġee . tal tech . k il pk on n . sport s app . activity Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġee . tal tech . k il pk on n . sport s app . R Ċ import Ġee . tal tech . k il pk on n . sport s app . component . image view . Track Type Icons Ċ import Ġee . tal tech . k il pk on n . sport s app . component . spinner . Overview Mode Ċ import Ġee . tal tech . k il pk on n . sport s app . component . spinner . adapter . Overview Type Spinner Adapter Ċ import Ġee . tal tech . k il pk on n . sport s app . db . domain . User Ċ import Ġee . tal tech . k il pk on n . sport s app . db . repository . Track Summary Repository Ċ import Ġee . tal tech . k il pk on n . sport s app . db . repository . UserRepository Ċ import Ġee . tal tech . k il pk on n . sport s app . detector . Fl ing Detector Ċ import Ġee . tal tech . k il pk on n . sport s app . track . Track Type Ċ import Ġee . tal tech . k il pk on n . sport s app . track . converters . Converter Ċ Ċ class ĠOverview Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġthis :: class . java . decl aring Class !!. simple Name ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinline Ġfun Ġ< T > ĠIterable < T >. sum By Long ( selector : Ġ( T ) Ġ-> ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġselector ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsum ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtrack Summary Repository Ġ= ĠTrack Summary Repository . open ( this ) ĊĠĠĠ Ġprivate Ġval Ġuser Repository Ġ= ĠUser Repository . open ( this ) ĊĊĠĠĠ Ġprivate Ġvar Ġuser : ĠUser ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfl ing Detector : ĠF ling Detector ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġoverview Type Spinner : ĠSp inner ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlinear Layout Scroll Content : ĠLinearLayout ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ overview ) ĊĊĠĠĠĠĠĠĠ Ġoverview Type Spinner Ġ= ĠfindViewById ( R . id . spinner _ overview _ type ) ĊĠĠĠĠĠĠĠ Ġlinear Layout Scroll Content Ġ= ĠfindViewById ( R . id . linear _ scroll ) ĊĊĠĠĠĠĠĠĠ Ġfl ing Detector Ġ= ĠF ling Detector ( this ) ĊĊĠĠĠĠĠĠĠ Ġfl ing Detector . on Fl ing Up Ġ= ĠRunnable Ġ{ Ġon Fl ing Up () Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetUp Spin ners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġuser Ġ= Ġuser Repository . read User () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġtrack Summary Repository . close () ĊĠĠĠĠĠĠĠ Ġuser Repository . close () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġ================================= ======= ĠFL ING ĠDET E CTION Ġ================================= ====== ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Touch Event ( ev : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfl ing Detector . update ( ev ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch Touch Event ( ev ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Fl ing Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġmove Task To Back ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ================================= ============ ĠHEL PER ĠFUNCTIONS Ġ================================================= == ĊĊĠĠĠ Ġprivate Ġfun Ġshow Overview ( period : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlinear Layout Scroll Content . removeAll Views () ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġtrack Summary Repository . read Track Sum maries During Period ( System . currentTimeMillis () Ġ- Ġperiod , ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġdata . groupBy Ġ{ Ġtrack Ġ-> Ġtrack . type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( type Int , Ġtracks ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverview View Ġ= Ġlayout Inflater . inflate ( R . layout . overview _ item , Ġlinear Layout Scroll Content , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview View . findViewById < TextView >( R . id . activity _ name ). text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrack Type Icons . getString ( Track Type . from Int ( type Int ) Ġ?: ĠTrack Type . UNKNOWN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview View . findViewById < ImageView >( R . id . track _ type _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setImage Resource ( Track Type Icons . get Icon ( Track Type . from Int ( type Int ) !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Distance Ġ= Ġtracks . sum By Double Ġ{ Ġt Ġ-> Ġt . distance Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Duration Moving Ġ= Ġtracks . sum By Long Ġ{ Ġt Ġ-> Ġt . duration Moving } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview View . findViewById < TextView >( R . id . distance ). text Ġ= ĠConverter . dist ToString ( total Distance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview View . findViewById < TextView >( R . id . duration ). text Ġ= ĠConverter . long To Hh Mm Ss ( total Duration Moving ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview View . findViewById < TextView >( R . id . elevation _ g ained ). text Ġ= ĠConverter . dist ToString ( tracks . sum By Double Ġ{ Ġt Ġ-> Ġt . elevation G ained Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview View . findViewById < TextView >( R . id . avg _ speed ). text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConverter . speed ToString ( total Distance Ġ/ Ġtotal Duration Moving Ġ* Ġ 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 Ġ* Ġ 3 . 6 , Ġuser ?. speed Mode Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview View . findViewById < TextView >( R . id . max _ speed ). text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConverter . speed ToString ( tracks . max By Ġ{ Ġt Ġ-> Ġt . max Speed Ġ} !!. max Speed , Ġuser ?. speed Mode Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview View . findViewById < TextView >( R . id . train _ count ). text Ġ= Ġtracks . size . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Layout Scroll Content . addView ( overview View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Spin ners () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Option Adapter Ġ= ĠOverview Type Spinner Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġoverview Type Spinner . adapter Ġ= Ġdisplay Option Adapter ĊĠĠĠĠĠĠĠ Ġoverview Type Spinner . setSelection ( 0 ) ĊĠĠĠĠĠĠĠ Ġoverview Type Spinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View <* >, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Overview ( Overview Mode . get Duration Millis ( Overview Mode . OPTIONS [ position ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View <* >) Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }