/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . example . android . architecture . blueprint s . todo app . data Ċ Ċ import Ġandroid . support . annotation . Visible ForTesting Ċ Ċ import Ġcom . example . android . architecture . blueprint s . todo app . data . source . Tasks DataSource Ċ import Ġcom . google . common . collect . Lists Ċ import Ġjava . util . Linked HashMap Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof Ġa Ġremote Ġdata Ġsource Ġwith Ġstatic Ġaccess Ġto Ġthe Ġdata Ġfor Ġeasy Ġtesting . Ċ Ġ*/ Ċ object ĠFake Tasks Remote DataSource Ġ: ĠTasks DataSource Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠTASK S _ SERVICE _ DATA : ĠLinkedHashMap < String , ĠTask > Ġ= ĠLinkedHashMap () ĊĊĠĠĠ Ġoverride Ġfun Ġget Tasks ( callback : ĠTasks DataSource . Load Tasks Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback . on Tasks Loaded ( Lists . newArrayList ( TASK S _ SERVICE _ DATA . values )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Task ( taskId : ĠString , Ġcallback : ĠTasks DataSource . Get Task Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠTASK S _ SERVICE _ DATA [ taskId ] ĊĠĠĠĠĠĠĠ Ġtask ?. let Ġ{ Ġcallback . on Task Loaded ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Task ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTASK S _ SERVICE _ DATA . put ( task . id , Ġtask ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcomplete Task ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompleted Task Ġ= ĠTask ( task . title , Ġtask . description , Ġtask . id ) ĊĠĠĠĠĠĠĠ Ġcompleted Task . is Completed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠTASK S _ SERVICE _ DATA . put ( task . id , Ġcompleted Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcomplete Task ( taskId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNot Ġrequired Ġfor Ġthe Ġremote Ġdata Ġsource . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġactivate Task ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactive Task Ġ= ĠTask ( task . title , Ġtask . description , Ġtask . id ) ĊĠĠĠĠĠĠĠ ĠTASK S _ SERVICE _ DATA . put ( task . id , Ġactive Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġactivate Task ( taskId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNot Ġrequired Ġfor Ġthe Ġremote Ġdata Ġsource . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Completed Tasks () Ġ{ ĊĠĠĠĠĠĠĠ ĠTASK S _ SERVICE _ DATA Ġ= ĠTASK S _ SERVICE _ DATA . filter Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . is Completed ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠLinkedHashMap < String , ĠTask > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrefresh Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNot Ġrequired Ġbecause Ġthe Ġ{@ link ĠTasks Repository } Ġhandles Ġthe Ġlogic Ġof Ġrefresh ing Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġtasks Ġfrom Ġall Ġthe Ġavailable Ġdata Ġsources . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Task ( taskId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTASK S _ SERVICE _ DATA . remove ( taskId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete All Tasks () Ġ{ ĊĠĠĠĠĠĠĠ ĠTASK S _ SERVICE _ DATA . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġfun Ġadd Tasks ( var arg Ġtasks : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( task Ġin Ġtasks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTASK S _ SERVICE _ DATA . put ( task . id , Ġtask ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ