package Ġcom . notes ync . notes . business . inter actors . note List Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work .* Ċ import Ġcom . notes ync . notes . business . data . cache . Cache Response Handler Ċ import Ġcom . notes ync . notes . business . data . cache . ab straction . Note Cache DataSource Ċ import Ġcom . notes ync . notes . business . data . network . ab straction . Note Network DataSource Ċ import Ġcom . notes ync . notes . business . data . util . Gson Helper Ċ import Ġcom . notes ync . notes . business . data . util . safe Api Call Ċ import Ġcom . notes ync . notes . business . data . util . safe Cache Call Ċ import Ġcom . notes ync . notes . business . domain . model . Note Ċ import Ġcom . notes ync . notes . business . domain . model . User Ċ import Ġcom . notes ync . notes . business . domain . state . Data State Ċ import Ġcom . notes ync . notes . business . domain . state .* Ċ import Ġcom . notes ync . notes . business . domain . state . State Event Ċ import Ġcom . notes ync . notes . framework . presentation . not elist . state . Note ListView State Ċ import Ġcom . notes ync . notes . framework . workers . Delete Note Worker Ċ import Ġcom . notes ync . notes . framework . workers . Delete Updated Note From Other Devices Worker Ċ import Ġcom . notes ync . notes . framework . workers . Insert Deleted Note Worker Ċ import Ġkotlinx . coroutines . Dispatch ers . IO Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ Ċ class ĠDelete Multiple Notes ( ĊĠĠĠ Ġprivate Ġval Ġnote Cache DataSource : ĠNote Cache DataSource , ĊĠĠĠ Ġprivate Ġval Ġnote Network DataSource : ĠNote Network DataSource , ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ċ ) Ġ{ ĊĊĠĠĠ Ġ// Ġset Ġtrue Ġif Ġan Ġerror Ġoccurs Ġwhen Ġdeleting Ġany Ġof Ġthe Ġnotes Ġfrom Ġcache ĊĠĠĠ Ġprivate Ġvar ĠonDelete Error : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLogic : ĊĠĠĠĠ Ġ* Ġ 1 . Ġexecute Ġall Ġthe Ġdeletes Ġand Ġsave Ġresult Ġinto Ġan ĠArrayList < Data State < Note ListView State >> ĊĠĠĠĠ Ġ* Ġ 2 a . ĠIf Ġone Ġof Ġthe Ġresults Ġis Ġa Ġfailure , Ġemit Ġan Ġ" error " Ġresponse ĊĠĠĠĠ Ġ* Ġ 2 b . ĠIf Ġall Ġsuccess , Ġemit Ġsuccess Ġresponse ĊĠĠĠĠ Ġ* Ġ 3 . ĠUpdate Ġnetwork Ġwith Ġnotes Ġthat Ġwere Ġsuccessfully Ġdeleted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdelete Notes ( ĊĠĠĠĠĠĠĠ Ġnotes : ĠList < Note >, ĊĠĠĠĠĠĠĠ Ġstate Event : ĠState Event , Ġuser : ĠUser ĊĠĠĠ Ġ): ĠFlow < Data State < Note ListView State > ?> Ġ= Ġflow Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsuccessful Deletes : ĠArrayList < Note > Ġ= ĠArrayList () Ġ// Ġnotes Ġthat Ġwere Ġsuccessfully Ġdeleted ĊĠĠĠĠĠĠĠ Ġfor Ġ( note Ġin Ġnotes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Result Ġ= Ġsafe Cache Call ( IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Cache DataSource . delete Note ( note . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġobject Ġ: ĠCache Response Handler < Note ListView State , ĠInt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġcache Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Event Ġ= Ġstate Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġhandle Success ( result Obj : ĠInt ): ĠData State < Note ListView State >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Obj Ġ< Ġ 0 ) Ġ{ Ġ// Ġif Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccessful Deletes . add ( note ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. getResult () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġfor Ġrandom Ġerrors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response ?. state Message ?. response ?. message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . contains ( state Event . error Info ()) Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( onDelete Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData State . data < Note ListView State >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠResponse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠDELETE _ NOTES _ ERRORS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui ComponentType Ġ= ĠUI ComponentType . Dialog (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type Ġ= ĠMessageType . Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Event Ġ= Ġstate Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData State . data < Note ListView State >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠResponse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠDELETE _ NOTES _ SUCCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui ComponentType Ġ= ĠUI ComponentType . Toast (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type Ġ= ĠMessageType . Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Event Ġ= Ġstate Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Network ( successful Deletes , Ġuser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupdate Network ( successful Deletes : ĠArrayList < Note >, Ġuser : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( note Ġin Ġsuccessful Deletes ) Ġ{ Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdelete Ġfrom Ġ" notes " Ġnode Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġsafe Api Call ( IO ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Network DataSource . delete Note ( note . id , Ġuser . id ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinsert Ġinto Ġ" de letes " Ġnode Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġsafe Api Call ( IO ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Network DataSource . insert Deleted Note ( note , Ġuser . id ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġsafe Api Call ( IO ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Network DataSource . delete Updated Note From Other Devices ( user , Ġnote ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġwork Data Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" new Note ", ĠGson Helper . serialize ToJson ( note )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" user ", ĠGson Helper . serialize ToJson ( user )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackground Constraints Ġ= ĠConstraints . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Network Type . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Requires Battery Not Low ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworker Ġ= ĠOne Time Work RequestBuilder < Delete Note Worker >(). set InputData ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( background Constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag (" Delete Note Worker "). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworker 1 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOne Time Work RequestBuilder < Insert Deleted Note Worker >(). set InputData ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( background Constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag (" Insert Deleted Note Worker "). build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworker 2 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOne Time Work RequestBuilder < Delete Updated Note From Other Devices Worker >(). set InputData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( background Constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag (" Delete Updated Note From Other Devices Worker "). build () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. begin Unique Work ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Delete Multiple Note ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExisting Work Policy . APPEND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( worker , Ġworker 1 , Ġworker 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDELETE _ NOTES _ SUCCESS Ġ= Ġ" Successfully Ġdeleted Ġnotes ." ĊĠĠĠĠĠĠĠ Ġval ĠDELETE _ NOTES _ ERRORS Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Not Ġall Ġthe Ġnotes Ġyou Ġselected Ġwere Ġdeleted . ĠThere Ġwas Ġsome Ġerrors ." ĊĠĠĠĠĠĠĠ Ġval ĠDELETE _ NOTES _ YO U _ MUST _ SELECT Ġ= Ġ" You Ġhaven 't Ġselected Ġany Ġnotes Ġto Ġdelete ." ĊĠĠĠĠĠĠĠ Ġval ĠDELETE _ NOTES _ ARE _ YO U _ S URE Ġ= Ġ" Are Ġyou Ġsure Ġyou Ġwant Ġto Ġdelete Ġthese ?" ĊĠĠĠ Ġ} Ċ }