/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 dev challenge . data . pup p ies Ċ Ċ import Ġcom . example . android dev challenge . data . Result Ċ import Ġcom . example . android dev challenge . data . model . P up py Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠFake P up py Repository Ġ: ĠP up py Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġadopt ed Ġ= ĠMutable State Flow < Set < String >>( set Of ()) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget P up py ( pup py Id : ĠString ): ĠResult < P up py > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSim ulate Ġloading ĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp up py Ġ= Ġp up p ies . find Ġ{ Ġit . id Ġ== Ġp up py Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pup py Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . Error ( IllegalArgumentException (" Unable Ġto Ġfind Ġpost ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . Success ( pup py ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget P up p ies (): ĠResult < List < P up py >> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSim ulate Ġloading ĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResult . Success ( pup p ies ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve A dopt ed (): ĠFlow < Set < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadopt ed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġadopt P up py ( pup py Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadopt ed Set Ġ= Ġadopt ed . value . to Mutable Set () ĊĠĠĠĠĠĠĠ Ġadopt ed Set . add ( pup py Id ) ĊĠĠĠĠĠĠĠ Ġadopt ed . value Ġ= Ġadopt ed Set ĊĠĠĠ Ġ} Ċ } Ċ