package Ġbr . com . al ak sion . qr coder e ader . home Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġbr . com . al ak sion . core _ db . domain . model . Scan Ċ import Ġbr . com . al ak sion . core _ db . domain . repository . Database Repository Ċ import Ġbr . com . al ak sion . core _ platform _ utils . dispatch ers module . Io Dispatcher Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . as State Flow Ċ import Ġkotlinx . coroutines . flow . collect Latest Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ internal Ġclass ĠHome ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠDatabase Repository , ĊĠĠĠ Ġ@ Io Dispatcher Ġprivate Ġval Ġio Dispatcher : ĠCor outine Dispatcher Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ home State Ġ= ĠMutable State Flow < Home Screen State >( Home Screen State . Loading ) ĊĠĠĠ Ġval Ġhome State Ġ= Ġ_ home State . as State Flow () ĊĊĠĠĠ Ġprivate Ġval Ġscans Ġ= ĠMutable State Flow < Mutable List < Scan >>( mutable ListOf ()) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġget Sc ans () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Sc ans () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( io Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . list Sc ans (). collect Latest Ġ{ Ġscans List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ home State . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sc ans List . isEmpty ()) ĠHome Screen State . Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscans . value . addAll ( sc ans List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Screen State . Ready ( sc ans . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify Scan Registered ( scan : ĠScan ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġscans . value . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( scan ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ home State . value Ġ= ĠHome Screen State . Ready ( new List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify Scan Deleted ( scan : ĠScan ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġscans . value . filter Ġ{ Ġitem Ġ-> Ġitem Ġ!= Ġscan Ġ} ĊĠĠĠĠĠĠĠ Ġ_ home State . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new List . isEmpty ()) ĠHome Screen State . Empty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠHome Screen State . Ready ( new List ) ĊĠĠĠ Ġ} Ċ Ċ }