/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠA run k umar Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġdev . ar unk umar . android . tasks . data Ċ Ċ import Ġandroidx . paging . Paging Data Ċ import Ġdagger . Bind s Ċ import Ġdagger . Module Ċ import Ġdev . ar unk umar . android . rx . comp letable Ċ import Ġdev . ar unk umar . android . rx . create Single Ċ import Ġdev . ar unk umar . compass . Realm Query Ċ import Ġdev . ar unk umar . compass . Realm QueryBuilder Ċ import Ġdev . ar unk umar . compass . Realm Transaction Ċ import Ġdev . ar unk umar . compass . paging . as Paging Items Ċ import Ġdev . ar unk umar . compass . to Realm List Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Single Ċ import Ġio . realm . kotlin . where Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . random . Random . Default Ġas ĠRandom Ċ Ċ interface ĠTask Repository Ġ{ ĊĠ Ġ// Ġ@ Deprecated ( level Ġ= ĠDeprec ation Level . ERROR , Ġmessage Ġ= Ġ" No Ġlonger Ġsupported ") ĊĠ Ġfun Ġadd Items If Empty (): ĠComp letable ĊĊĠ Ġfun Ġadd Task ( task Name : ĠString ): ĠSingle < Task > ĊĊĠ Ġfun Ġdelete Tasks ( taskId : ĠUUID ): ĠComp letable ĊĊĠ Ġfun Ġcomplete Task ( taskId : ĠUUID , Ġcompleted : ĠBoolean ): ĠComp letable ĊĊĠ Ġfun Ġclear (): ĠComp letable ĊĊĠ Ġfun Ġpage d Items ( realm QueryBuilder : ĠRealm QueryBuilder < Task >): ĠFlow < Paging Data < Task >> Ċ } Ċ Ċ @ Module Ċ interface ĠTasks Module Ġ{ ĊĠ Ġ@ Bind s ĊĠ Ġfun ĠDefault Task Repository . task Repository (): ĠTask Repository Ċ } Ċ Ċ class ĠDefault Task Repository Ċ @ Inject Ċ constructor () Ġ: ĠTask Repository Ġ{ ĊĊĠ Ġprivate Ġval Ġchar Pool : ĠList < Char > Ġ= Ġ(' a ' .. ' z ') Ġ+ Ġ(' A ' .. ' Z ') Ġ+ Ġ(' 0 ' .. ' 9 ') ĊĊĠ Ġprivate Ġfun Ġrandom String () Ġ= Ġ( 1 .. 1 0 ) ĊĠĠĠ Ġ. map Ġ{ ĠRandom . nextInt ( 0 , Ġchar Pool . size ) Ġ} ĊĠĠĠ Ġ. map ( char Pool :: get ) ĊĠĠĠ Ġ. join ToString ("") ĊĊĠ Ġprivate Ġval Ġtags Ġ= ĠlistOf (" work ", Ġ" projects ", Ġ" personal ") ĊĠ Ġprivate Ġval Ġprogress Ġ= ĠlistOf ( 0 , Ġ 1 0 , Ġ 4 0 , Ġ 6 0 , Ġ 9 0 ) ĊĊĠ Ġoverride Ġfun Ġadd Items If Empty () Ġ= Ġcomplet able Ġ{ ĊĠĠĠ ĠRealm Transaction Ġ{ ĊĠĠĠĠĠ Ġif Ġ( where < Task >(). findAll (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild List Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( id Ġin Ġ 0 .. MAX _ ITEMS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġif Ġ( Random . next Boolean ()) Ġrandom String () Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġtags . take ( Random . nextInt ( tags . size )). map (:: Tag ). to Realm List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted Ġ= ĠRandom . next Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġestimate Ġ= Ġ( Random . nextInt ( 1 0 0 ) Ġ/ Ġ 1 0 ) Ġ* Ġ 1 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġ( Random . nextInt ( 1 0 0 ) Ġ/ Ġ 1 0 ) Ġ* Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTask ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . randomUUID (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ"$ id : Ġ" Ġ+ Ġrandom String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġtags , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Ġ= Ġcompleted , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= ĠDate (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġestimate Ġ= Ġestimate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). let ( this :: add ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġitems Ġ-> Ġcopy To Realm OrUpdate ( items ) Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġadd Task ( task Name : ĠString ): ĠSingle < Task > Ġ= Ġcreate Single Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠRealm Transaction Ġ{ ĊĠĠĠĠĠĠĠ ĠonSuccess ( copy To Realm ( Task ( name Ġ= Ġtask Name ))) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġtry OnError ( e ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdelete Tasks ( taskId : ĠUUID ) Ġ= Ġcomplet able Ġ{ ĊĠĠĠ ĠRealm Transaction Ġ{ ĊĠĠĠĠĠ Ġwhere < Task >() ĊĠĠĠĠĠĠĠ Ġ. equalTo (" id ", ĠtaskId ) ĊĠĠĠĠĠĠĠ Ġ. findAll () ĊĠĠĠĠĠĠĠ Ġ. delete All From Realm () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcomplete Task ( taskId : ĠUUID , Ġcompleted : ĠBoolean ) Ġ= Ġcomplet able Ġ{ ĊĠĠĠ ĠRealm Transaction Ġ{ ĊĠĠĠĠĠ Ġwhere < Task >() ĊĠĠĠĠĠĠĠ Ġ. equalTo (" id ", ĠtaskId ) ĊĠĠĠĠĠĠĠ Ġ. findFirst () ĊĠĠĠĠĠĠĠ Ġ? . completed Ġ= Ġcompleted ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclear () Ġ= Ġcomplet able Ġ{ ĊĠĠĠ ĠRealm Transaction Ġ{ ĊĠĠĠĠĠ Ġwhere < Task >(). findAll (). delete All From Realm () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpage d Items ( ĊĠĠĠ Ġrealm QueryBuilder : ĠRealm QueryBuilder < Task > ĊĠ Ġ): ĠFlow < Paging Data < Task >> Ġ= ĠRealm Query ( realm QueryBuilder ). as Paging Items () ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ ITEMS Ġ= Ġ 3 0 0 0 ĊĠ Ġ} Ċ } Ċ