package Ġcom . k ok oc in ski . toolkit . red uk t Ċ Ċ import Ġandroid . arch . lifecycle . Lifecycle Ċ import Ġandroid . arch . lifecycle . Lifecycle Observer Ċ import Ġandroid . arch . lifecycle . On Lifecycle Event Ċ Ċ interface ĠStore < T > Ġ{ ĊĊĠĠĠ Ġval Ġsubscriptions : ĠMutable List <( T ) Ġ-> ĠUnit > ĊĊĠĠĠ Ġvar Ġstate : ĠT ĊĊĠĠĠ Ġfun Ġdispatch ( action : ĠAny ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġan Ġobserver Ġthat Ġhas Ġto Ġbe Ġcleaned Ġup Ġmanually . ĠYou Ġcan Ġdo Ġso Ġby Ġinvoking Ġthe Ġreturned Ġfunction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġobserve Fore ver ( observer : Ġ( T ) Ġ-> ĠUnit ): Ġ() Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscriptions . add ( observer ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġsubscriptions . remove ( observer ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġan Ġobserver Ġthat Ġis Ġautomatically Ġcleaned Ġup Ġif Ġthe Ġlifecycle Ġp ushes Ġan Ġon Destroy ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġobserve ( lifecycle : ĠLifecycle , Ġobserver : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle . add Observer ( Lifecycle Aware Subscription ( observer , Ġsubscriptions )) ĊĠĠĠĠĠĠĠ Ġsubscriptions . add ( observer ) ĊĠĠĠĠĠĠĠ Ġobserver ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify StateChanged ( state : ĠT ) Ġ= Ġsubscriptions . forEach Ġ{ Ġit ( state ) Ġ} Ċ } Ċ Ċ private Ġclass ĠLifecycle Aware Subscription < T >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġobserver : Ġ( T ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsubscriptions : ĠMutable List <( T ) Ġ-> ĠUnit > Ċ ) Ġ: ĠLifecycle Observer Ġ{ ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠ Ġfun Ġunsubscribe () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscriptions . remove ( observer ) ĊĠĠĠ Ġ} Ċ }