package Ġde . se em oo . at _ tracking _ detection . ui . devices Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġde . se em oo . at _ tracking _ detection . database . repository . Beacon Repository Ċ import Ġde . se em oo . at _ tracking _ detection . database . repository . Device Repository Ċ import Ġde . se em oo . at _ tracking _ detection . database . models . Beacon Ċ import Ġde . se em oo . at _ tracking _ detection . database . models . device . Base Device Ċ import Ġde . se em oo . at _ tracking _ detection . ui . devices . filter . models . Filter Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠDevices ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġbe acon Repository : ĠBe acon Repository , ĊĠĠĠ Ġprivate Ġval Ġdevice Repository : ĠDevice Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġfun Ġset Ignore Flag ( device Address : ĠString , Ġstate : ĠBoolean ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġdevice Repository . set Ignore Flag ( device Address , Ġstate ) ĊĠĠĠĠĠĠĠ Ġupdate Device List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Device Be ac ons Count ( device Address : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġbe acon Repository . getDevice Be ac ons Count ( device Address ). toString () ĊĊĠĠĠ Ġfun Ġget Device ( device Address : ĠString ): ĠBase Device Ġ= Ġdevice Repository . getDevice ( device Address ) !! ĊĊĠĠĠ Ġfun Ġget Marker Locations ( device Address : ĠString ): ĠList < Beacon > Ġ= ĊĠĠĠĠĠĠĠ Ġbe acon Repository . getDevice Be ac ons ( device Address ) ĊĊĠĠĠ Ġfun Ġupdate ( base Device : ĠBase Device ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġdevice Repository . update ( base Device ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Or Remove Filter ( filter : ĠFilter , Ġremove : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilter Name Ġ= Ġfilter :: class . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( remove ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Filter . remove ( filter Name ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Filter [ filter Name ] Ġ= Ġfilter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Device List () ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Active ĠFilter : Ġ$ active Filter ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Device List () Ġ{ ĊĠĠĠĠĠĠĠ Ġdevices . add Source ( device Repository . devices . as LiveData ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfiltered Devices Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Filter . forEach Ġ{ Ġ(_, Ġfilter ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Devices Ġ= Ġfilter . apply ( filtered Devices ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevices . value Ġ= Ġfiltered Devices ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdevices Ġ= ĠMed iator LiveData < List < Base Device >>() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdevices . add Source ( device Repository . devices . as LiveData ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( active Filter . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevices . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġactive Filter : ĠMutable Map < String , ĠFilter > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġval Ġdevice List Empty : ĠLive Data < Boolean > Ġ= Ġdevices . map Ġ{ Ġit . isEmpty () Ġ} ĊĊĠĠĠ Ġvar Ġempty List Text : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġinfo Text : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () Ċ Ċ }