package Ġch . bf h . mad . e azy time . util Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġch . bf h . mad . e azy time . data . entity . Project Ċ import Ġch . bf h . mad . e azy time . data . entity . Time Slot Ċ import Ġch . bf h . mad . e azy time . data . repo . Project Repo Ċ import Ġch . bf h . mad . e azy time . data . repo . Time Slot Repo Ċ import Ġch . bf h . mad . e azy time . projects . Project ListItem Ċ import Ġorg . joda . time . Seconds Ċ Ċ class ĠProject Provider Service ( project Repo : ĠProject Repo , Ġtime Slot Repo : ĠTime Slot Repo ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ projects : ĠList < Project >? Ġ= Ġempty List () ĊĠĠĠ Ġprivate Ġvar Ġ_ time Slots : ĠList < Time Slot >? Ġ= Ġempty List () ĊĊĠĠĠ Ġprivate Ġval Ġproject ItemList : ĠMed iator LiveData < List < Project ListItem >> ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprojects Ld : ĠLive Data < List < Project >> Ġ= Ġproject Repo . all Projects ĊĠĠĠĠĠĠĠ Ġval Ġtime Slots Ld : ĠLive Data < List < Time Slot >> Ġ= Ġtime Slot Repo . tod ays Time Slots () ĊĊĠĠĠĠĠĠĠ Ġproject ItemList Ġ= ĠMed iator LiveData () ĊĠĠĠĠĠĠĠ Ġproject ItemList . add Source ( projects Ld ) Ġ{ projects Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ projects Ġ= Ġprojects ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject ItemList . value Ġ= Ġmerge LiveData ( projects , Ġ_ time Slots ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject ItemList . add Source ( time Slots Ld ) Ġ{ times lots Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ time Slots Ġ= Ġtimes lots ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject ItemList . value Ġ= Ġmerge LiveData (_ projects , Ġtimes lots ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Project List items (): ĠLive Data < List < Project ListItem >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproject ItemList ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmerge LiveData ( projects : ĠList < Project > ?, Ġtimes lots : ĠList < Time Slot >? ): ĠList < Project ListItem >? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprojects ?. map Ġ{ project Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠisActive Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapped Time Slot Seconds Ġ= Ġtimes lots ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġit . projectId Ġ== Ġproject . id Ġ&& Ġit . endDate Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĠSecond s . seconds Between ( it . startDate , Ġit . endDate ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . fold ( Seconds . seconds ( 0 )) Ġ{ Ġacc , Ġminutes Ġ-> Ġacc . plus ( minutes )} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactive Time slot Ġ= Ġtimes lots ?. first OrNull Ġ{ Ġit . projectId Ġ== Ġproject . id Ġ&& Ġit . endDate Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . also Ġ{ ĠisActive Ġ= Ġtrue Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject ListItem ( project . id , Ġproject . name , Ġproject . short Code , Ġmapped Time Slot Seconds ?. seconds , Ġactive Time slot ?. startDate , Ġproject . color , Ġproject . is Default , Ġproject . on Widget , ĠisActive , Ġproject . is Deleted ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }