package Ġcom . k vl . cy clo track Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle .* Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . math . abs Ċ Ċ @ H ilt ViewModel Ċ class ĠTrip Details ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġtri ps Repository : ĠTri ps Repository , ĊĠĠĠ Ġprivate Ġval Ġmeasurements Repository : ĠMeasure ments Repository , ĊĠĠĠ Ġprivate Ġval Ġtime State Repository : ĠTime State Repository , ĊĠĠĠ Ġprivate Ġval Ġsplit Repository : ĠSplit Repository , ĊĠĠĠ Ġprivate Ġval Ġon board Sensors Repository : ĠOn board Sensors Repository , ĊĠĠĠ Ġprivate Ġval Ġshared Preferences : ĠSharedPreferences , ĊĠĠĠ Ġprivate Ġval Ġgoogle Fit ApiService : ĠGoogle Fit ApiService , Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġlog Tag Ġ= Ġ" TR IP _ DETAILS _ VIEW _ MODEL " ĊĠĠĠ Ġvar Ġtrip Id : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Overview Ġ= Ġtri ps Repository . observe ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime State Ġ= Ġtime State Repository . observe Time States ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplits Ġ= Ġsplit Repository . observe Trip Spl its ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasurements Ġ= Ġmeasurements Repository . observe Critical ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexport Measure ments Ġ= Ġmeasurements Repository . observe ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon board Sensors Ġ= Ġon board Sensors Repository . observe Dec imated ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġtrip Overview : ĠLive Data < Trip > Ġprivate Ġset ĊĠĠĠ Ġlateinit Ġvar Ġtime State : ĠLive Data < Array < Time State >> Ġprivate Ġset ĊĠĠĠ Ġlateinit Ġvar Ġsplits : ĠLive Data < Array < Split >> Ġprivate Ġset ĊĠĠĠ Ġlateinit Ġvar Ġmeasurements : ĠLive Data < Array < Critical Measure ments >> Ġprivate Ġset ĊĠĠĠ Ġlateinit Ġvar Ġon board Sensors : ĠLive Data < Array < On board Sensors >> Ġprivate Ġset ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġexport Measure ments : ĠLive Data < Array < Measure ments >> ĊĊĠĠĠ Ġfun Ġupdate Spl its () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsplits Ġ= Ġsplit Repository . get Trip Spl its ( trip Id ) ĊĠĠĠĠĠĠĠ Ġvar Ġare Spl its In System Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( splits . isNotEmpty ()) Ġare Spl its In System Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( get Split Threshold ( shared Preferences ) Ġ- Ġsplits [ 0 ]. total Distance ) Ġ> Ġ 5 0 . 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( true Ġ|| Ġsplits . isEmpty () Ġ|| Ġ! are Spl its In System ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠForce Ġtrue . ĠTrip InProgress Service Ġdoesn 't Ġadd Ġthe Ġlast Ġpartial Ġsplit ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( log Tag , Ġ" Re computing Ġsplits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Spl its () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Spl its () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Spl its () Ġ= ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Repository . remove Trip Spl its ( trip Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Trip () Ġ= ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ Ġtri ps Repository . remove Trip ( trip Id ) Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Combined Bio metrics ( timestamp : ĠLong , Ġcontext : ĠContext ): ĠBio metrics Ġ= ĊĠĠĠĠĠĠĠ Ġget Combined Bio metrics ( trip Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtri ps Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Fit ApiService ) ĊĊĠĠĠ Ġdata Ġclass ĠExport Data ( ĊĠĠĠĠĠĠĠ Ġvar Ġsummary : ĠTrip ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġmeasurements : ĠArray < Measure ments >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġtime States : ĠArray < Time State >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġsplits : ĠArray < Split >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġon board Sensors : ĠArray < On board Sensors >? Ġ= Ġnull , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġexport Data () Ġ= ĠMed iator LiveData < Export Data >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= ĠExport Data () ĊĠĠĠĠĠĠĠ Ġadd Source ( trip Overview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TR IP _ DETAILS _ VIEW _ MODEL ", Ġ" Updating Ġexport Ġtrip ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ?. copy ( summary Ġ= Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( export Measure ments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TR IP _ DETAILS _ VIEW _ MODEL ", Ġ" Updating Ġexport Ġmeasurements ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ?. copy ( measure ments Ġ= Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( time State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TR IP _ DETAILS _ VIEW _ MODEL ", Ġ" Updating Ġexport Ġtime States ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ?. copy ( time States Ġ= Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( splits ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TR IP _ DETAILS _ VIEW _ MODEL ", Ġ" Updating Ġexport Ġsplits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ?. copy ( splits Ġ= Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( on board Sensors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TR IP _ DETAILS _ VIEW _ MODEL ", Ġ" Updating Ġexport Ġon board Sensors ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ?. copy ( on board Sensors Ġ= Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Spl its () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcombined Ġ= Ġzip LiveData ( measure ments , Ġtime State ) ĊĠĠĠĠĠĠĠ Ġcombined . observe Fore ver ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver < Pair < Array < Critical Measure ments >, ĠArray < Time State >>> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( pair : ĠPair < Array < Critical Measure ments >, ĠArray < Time State >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeasurements Ġ= Ġpair . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime States Ġ= Ġpair . second ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( measure ments . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrip Spl its Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Spl its ( trip Id , Ġmeasurements , Ġtime States , Ġshared Preferences ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TR IP _ DETAILS _ VIEW _ MODEL ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Inser ting Ġpost - trip Ġcomputed Ġsplits Ġin Ġdatabase ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Repository . add Spl its ( trip Spl its . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcombined . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ Ċ }