package Ġnet . v on for st . ev map . view model Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle .* Ċ import Ġkotlinx . coroutines . launch Ċ import Ġnet . v on for st . ev map . api . Charge point Api Ċ import Ġnet . v on for st . ev map . api . create Api Ċ import Ġnet . v on for st . ev map . api . string Provider Ċ import Ġnet . v on for st . ev map . model .* Ċ import Ġnet . v on for st . ev map . storage . App Database Ċ import Ġnet . v on for st . ev map . storage . Filter Profile Ċ import Ġnet . v on for st . ev map . storage . Preference DataSource ĊĊ Ċ class ĠFilter ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdb Ġ= ĠApp Database . getInstance ( application ) ĊĠĠĠ Ġprivate Ġvar Ġprefs Ġ= ĠPreference DataSource ( application ) ĊĠĠĠ Ġprivate Ġvar Ġapi : ĠCharge point Api < Reference Data > Ġ= Ġcreate Api ( prefs . dataSource , Ġapplication ) ĊĊĠĠĠ Ġprivate Ġval Ġreference Data Ġ= Ġapi . getReference Data ( viewModel Scope , Ġapplication ) ĊĠĠĠ Ġprivate Ġval Ġfilters Ġ= ĠMed iator LiveData < List < Filter < Filter Value >>> (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Source ( reference Data ) Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġapi . get Filters ( data , Ġapplication . string Provider ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfilter Values : ĠLive Data < List < Filter Value >> Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . filter Value Dao (). get Filter Values ( FILTER S _ CUSTOM , Ġprefs . dataSource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfilter sWith Value : ĠLive Data < Filter Values > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter sWith Value ( filters , Ġfilter Values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfilter Status : ĠLive Data < Long > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Long >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġprefs . filter Status ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfilter Profile : ĠLive Data < Filter Profile > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMed iator LiveData < Filter Profile >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Source ( filter Status ) Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFILTER S _ CUSTOM , ĠFILTER S _ DISABLED Ġ-> Ġvalue Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġdb . filter Profile Dao (). get Profile ById ( id , Ġprefs . dataSource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsave Filter Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter sWith Value . value ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . profile Ġ= ĠFILTER S _ CUSTOM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . dataSource Ġ= Ġprefs . dataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . filter Value Dao (). insert (* it . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġselected Ġprofile ĊĠĠĠĠĠĠĠ Ġprefs . filter Status Ġ= ĠFILTER S _ CUSTOM ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsave As Profile ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġor Ġcreate Ġprofile ĊĠĠĠĠĠĠĠ Ġvar Ġprofile Id Ġ= Ġdb . filter Profile Dao (). get Profile ByName ( name , Ġprefs . dataSource )?. id ĊĠĠĠĠĠĠĠ Ġif Ġ( profile Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Id Ġ= Ġdb . filter Profile Dao (). getNew Id ( prefs . dataSource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . filter Profile Dao (). insert ( Filter Profile ( name , Ġprefs . dataSource , Ġprofile Id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġsave Ġfilter Ġvalues ĊĠĠĠĠĠĠĠ Ġfilter sWith Value . value ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . profile Ġ= Ġprofile Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . dataSource Ġ= Ġprefs . dataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . filter Value Dao (). insert (* it . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġselected Ġprofile ĊĠĠĠĠĠĠĠ Ġprefs . filter Status Ġ= Ġprofile Id ĊĠĠĠ Ġ} Ċ }