package Ġcom . mo eg irl viewer . screen . b rowsing History Ċ Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . mo eg irl viewer . R Ċ import Ġcom . mo eg irl viewer . component . common Dialog . Button Config Ċ import Ġcom . mo eg irl viewer . component . common Dialog . Common AlertDialog Props Ċ import Ġcom . mo eg irl viewer . component . styled . Styled Text Ċ import Ġcom . mo eg irl viewer . room . b rowsing Record . B rowsing Record Ċ import Ġcom . mo eg irl viewer . util . Globals Ċ import Ġcom . mo eg irl viewer . util . Load Status Ċ import Ġcom . mo eg irl viewer . util . toast Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . time . LocalDateTime Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠB rowsing History Screen Model Ġ@ Inject Ġconstructor () Ġ: ĠViewModel () Ġ{ ĊĠ Ġval Ġcoroutine Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main ) ĊĠ Ġvar Ġstatus Ġby Ġmutable State Of ( Load Status . INITIAL ) ĊĠ Ġvar Ġlists Ġby Ġmutable State Of ( B rowsing Record Lists ()) ĊĊĠ Ġsuspend Ġfun Ġrefresh List () Ġ{ ĊĠĠĠ Ġstatus Ġ= ĠLoad Status . LOADING ĊĠĠĠ Ġval Ġroom Ġ= ĠGlobals . room . b rowsing Record () ĊĠĠĠ Ġval Ġall List Ġ= Ġroom . getAll (). first () ĊĠĠĠ Ġif Ġ( all List . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġstatus Ġ= ĠLoad Status . EMPTY ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġyesterday Date Ġ= ĠLocalDateTime . now (). minus Days ( 1 ) ĊĠĠĠ Ġval Ġyesterday Begin Date Ġ= Ġyesterday Date ĊĠĠĠĠĠ Ġ. with Hour ( 0 ) ĊĠĠĠĠĠ Ġ. with Minute ( 0 ) ĊĠĠĠĠĠ Ġ. with Second ( 0 ) ĊĠĠĠ Ġval Ġyesterday EndDate Ġ= Ġyesterday Date ĊĠĠĠĠĠ Ġ. with Hour ( 2 3 ) ĊĠĠĠĠĠ Ġ. with Minute ( 5 9 ) ĊĠĠĠĠĠ Ġ. with Second ( 5 9 ) ĊĠĠĠ Ġval Ġtoday List Ġ= Ġmutable ListOf < B rowsing Record >() ĊĠĠĠ Ġval Ġyesterday List Ġ= Ġmutable ListOf < B rowsing Record >() ĊĠĠĠ Ġval Ġearlier List Ġ= Ġmutable ListOf < B rowsing Record >() ĊĊĠĠĠ Ġfor Ġ( item Ġin Ġall List . reversed ()) Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġitem . date . is After ( y esterday EndDate ) Ġ-> Ġtoday List . add ( item ) ĊĠĠĠĠĠĠĠ Ġitem . date . is Before ( y esterday Begin Date ) Ġ-> Ġearlier List . add ( item ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġyesterday List . add ( item ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlists Ġ= ĠB rowsing Record Lists ( today List , Ġyesterday List , Ġearlier List ) ĊĠĠĠ Ġstatus Ġ= ĠLoad Status . ALL _ LOADED ĊĠ Ġ} ĊĊĠ Ġfun Ġdelete Record ( record : ĠB rowsing Record ) Ġ{ ĊĠĠĠ ĠGlobals . common AlertDialog . show ( Common AlertDialog Props ( ĊĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠStyled Text ( ĊĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠGlobals . context . getString ( R . string . delete B rowsing Record Hint ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġsecondary Button Ġ= ĠButton Config . cancel Button (), ĊĠĠĠĠĠ Ġon Primary Button Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠGlobals . room . b rowsing Record (). delete Item ( record ) ĊĠĠĠĠĠĠĠĠĠ Ġtoast ( Globals . context . getString ( R . string . deleted )) ĊĠĠĠĠĠĠĠĠĠ Ġlists Ġ= ĠB rowsing Record Lists ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoday List Ġ= Ġlists . today List . filter Ġ{ Ġit Ġ!= Ġrecord Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyesterday List Ġ= Ġlists . y esterday List . filter Ġ{ Ġit Ġ!= Ġrecord Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġearlier List Ġ= Ġlists . ear lier List . filter Ġ{ Ġit Ġ!= Ġrecord Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ)) ĊĠ Ġ} ĊĊĠ Ġfun Ġdelete All Records () Ġ{ ĊĠĠĠ ĠGlobals . common AlertDialog . show ( Common AlertDialog Props ( ĊĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠStyled Text ( ĊĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠGlobals . context . getString ( R . string . clean All Browse History Hint ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġsecondary Button Ġ= ĠButton Config . cancel Button (), ĊĠĠĠĠĠ Ġon Primary Button Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠGlobals . room . b rowsing Record (). clear () ĊĠĠĠĠĠĠĠĠĠ Ġtoast ( Globals . context . getString ( R . string . deleted )) ĊĠĠĠĠĠĠĠĠĠ Ġlists Ġ= ĠB rowsing Record Lists () ĊĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠLoad Status . EMPTY ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ)) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠ Ġcoroutine Scope . cancel () ĊĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠB rowsing Record Lists ( ĊĠ Ġval Ġtoday List : ĠList < B rowsing Record > Ġ= Ġempty List (), ĊĠ Ġval Ġyesterday List : ĠList < B rowsing Record > Ġ= Ġempty List (), ĊĠ Ġval Ġearlier List : ĠList < B rowsing Record > Ġ= Ġempty List (), Ċ )