/* Ċ Ġ* Ġ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 Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . example . android dev challenge . model . P up py Ċ import Ġcom . example . android dev challenge . model . Sex Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . as State Flow Ċ import Ġkotlinx . coroutines . flow . distinct Until Changed Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġjava . time . LocalDate Ċ Ċ val Ġp up py List Ġ= ĠlistOf ( ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Char lie ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" Ger man ĠShe ph erd ", ĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 2 1 , Ġ 1 , Ġ 1 ), ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Male , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ), ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Max ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" B ull dog ", ĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 2 , Ġ 3 ), ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Male , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ), ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Bu ddy ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" Po od le ", ĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 1 9 , Ġ 3 , Ġ 6 ), ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Male , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ), ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Osc ar ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" Lab rad or ĠRetrie ver ", ĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 1 8 , Ġ 4 , Ġ 9 ), ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Male , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ), ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" M ilo ", ĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 1 7 , Ġ 5 , Ġ 1 2 ), ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" Rot t we iler ", ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Male , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ), ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" B ella ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" Rot t we iler ", ĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 1 6 , Ġ 6 , Ġ 1 5 ), ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Female , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ), ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Mol ly ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" Lab rad or ĠRetrie ver ", ĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 1 5 , Ġ 7 , Ġ 1 8 ), ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Female , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ), ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Co co ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" Po od le ", ĊĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 1 4 , Ġ 8 , Ġ 2 1 ), ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Female , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ), ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Ruby ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" B ull dog ", ĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 1 3 , Ġ 9 , Ġ 2 4 ), ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Female , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ), ĊĠĠĠ ĠP up py ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Luc y ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= Ġ" Ger man ĠShe ph erd ", ĊĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 2 0 1 2 , Ġ 1 0 , Ġ 2 7 ), ĊĠĠĠĠĠĠĠ Ġsex Ġ= ĠS ex . Female , ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 0 . 6 f , ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġnull ĊĠĠĠ Ġ) Ċ ) Ċ Ċ class ĠP up py ViewModel Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ title Ġ= ĠMutable State Flow < String >(" P up p ies ") ĊĠĠĠ Ġval Ġtitle : ĠState Flow < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ title . as State Flow () ĊĊĠĠĠ Ġfun Ġcurrent Title ( title : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ title . value Ġ= Ġtitle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ pup p ies Ġ= ĠMutable State Flow < List < P up py >>( pup py List . sh uffled ()) ĊĠĠĠ Ġval Ġp up p ies : ĠState Flow < List < P up py >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ pup p ies . as State Flow () ĊĊĠĠĠ Ġfun Ġp up py ( id : ĠString ): ĠFlow < P up py ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġp up p ies . map Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . first OrNull Ġ{ Ġp up py Ġ-> Ġp up py . id Ġ== Ġid Ġ} ĊĠĠĠĠĠĠĠ Ġ}. distinct Until Changed () ĊĠĠĠ Ġ} Ċ } Ċ