package Ġio . pl ast ique . notifications Ċ Ċ import Ġandroidx . work . Constraints Ċ import Ġandroidx . work . Existing Work Policy Ċ import Ġandroidx . work . Network Type Ċ import Ġandroidx . work . One Time Work RequestBuilder Ċ import Ġandroidx . work . Work Manager Ċ import Ġio . pl ast ique . core . lists . Items Data Ċ import Ġio . pl ast ique . core . lists . ListItem Ċ import Ġio . pl ast ique . core . paging . String Cursor Ċ import Ġio . pl ast ique . core . work . Common Work Tags Ċ import Ġio . pl ast ique . core . work . setInitial Delay Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Observable Ċ import Ġorg . th reet en . bp . Duration Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠNotifications Model Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmessage Repository : ĠMessage Repository , ĊĠĠĠ Ġprivate Ġval Ġwork Manager : ĠWork Manager Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġnext Cursor Ġ= ĠAtomic Reference < String Cursor >() ĊĊĠĠĠ Ġfun Ġitems (): ĠObservable < Items Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage Repository . get Messages () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġpage d Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Cursor . set ( page d Data . next Cursor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġpage d Data . value . map Ġ{ Ġcreate Item ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItems Data ( items , Ġhas More Ġ= Ġpage d Data . hasMore ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload More (): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage Repository . fetch ( next Cursor . get () !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġcursor Ġ-> Ġnext Cursor . set ( cursor . to Nullable ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ignore Element () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh (): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage Repository . fetch ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġcursor Ġ-> Ġnext Cursor . set ( cursor . to Nullable ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ignore Element () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Message ById ( message Id : ĠString ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage Repository . mark As Deleted ( message Id , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ Ġschedule Deletion () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġundo Delete Message ById ( message Id : ĠString ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage Repository . mark As Deleted ( message Id , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġschedule Deletion () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwork Request Ġ= ĠOne Time Work RequestBuilder < Delete Messages Worker >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( Constraints . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Network Type . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInitial Delay ( DELETE _ MESSAGE _ DELAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( Common Work Tags . CANCEL _ ON _ LOG OUT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġwork Manager . enqueue Unique Work ( WORK _ DELETE _ MESSAGES , ĠExisting Work Policy . REPLACE , Ġwork Request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Item ( message : ĠMessage ): ĠListItem Ġ= Ġwhen Ġ( message . data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠMessage . Data . AddTo Collection Ġ-> ĠAdd To Collection Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId Ġ= Ġmessage . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġmessage . time , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġmessage . user , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeviation Id Ġ= Ġmessage . data . dev iation Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeviation Title Ġ= Ġmessage . data . dev iation Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfolder Id Ġ= Ġmessage . data . folder . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfolder Name Ġ= Ġmessage . data . folder . name ) ĊĊĠĠĠĠĠĠĠ Ġis ĠMessage . Data . Badge Given Ġ-> ĠBadge Given Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId Ġ= Ġmessage . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġmessage . time , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġmessage . user , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġmessage . data . text ) ĊĊĠĠĠĠĠĠĠ Ġis ĠMessage . Data . Favorite Ġ-> ĠF avorite Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId Ġ= Ġmessage . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġmessage . time , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġmessage . user , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeviation Id Ġ= Ġmessage . data . dev iation Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeviation Title Ġ= Ġmessage . data . dev iation Title ) ĊĊĠĠĠĠĠĠĠ ĠMessage . Data . Watch Ġ-> ĠWatch Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId Ġ= Ġmessage . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġmessage . time , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġmessage . user ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠWORK _ DELETE _ MESSAGES Ġ= Ġ" notifications . delete _ messages " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDELETE _ MESSAGE _ DELAY Ġ= ĠDuration . of Seconds ( 1 5 ) ĊĠĠĠ Ġ} Ċ } Ċ