package Ġcom . j utt . m vi Ċ Ċ interface ĠView State Support < Intent Ġ: ĠM vi Intent , ĠView State Ġ: ĠM vi ViewState > Ġ: ĠM vi View < Intent , ĠView State > Ġ{ ĊĊĠĠĠ Ġvar Ġlatest ViewState : ĠMutable Map < Class < out ĠBase ViewState <* >>, ĠBase ViewState <* >> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġconsume Ġthe ĠView State Ġusing Ġthe Ġprovided Ġ[ block ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġit Ġcaches Ġthe ĠView State Ġand Ġwhen Ġa Ġnew Ġone Ġcomes Ġit Ġcomp ares Ġthe Ġcached Ġversion Ġwith Ġthe Ġnew Ġone ĊĠĠĠĠ Ġ* Ġif Ġ[ each Time ] Ġis Ġset , Ġit 's Ġreference Ġcomparison , Ġotherwise Ġit 's Ġvalue Ġcomparison ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġeach Time Ġwhen Ġset Ġto Ġ` true ` Ġthe ĠView State Ġis Ġcompared Ġby Ġreference Ġwith Ġthe Ġcached Ġone , ĊĠĠĠĠ Ġ* Ġotherwise Ġit 's Ġcompared Ġby Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< Payload > ĠBase ViewState < Payload >. consume ( each Time : ĠBoolean Ġ= Ġfalse , Ġblock : ĠView State Consumer Scope < Payload >. () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclazz : ĠClass < out ĠBase ViewState <* >> Ġ= Ġthis :: class . java Ġas ĠClass < out ĠBase ViewState < Any >> ĊĠĠĠĠĠĠĠ Ġval Ġold State Ġ= Ġlatest ViewState [ clazz ] Ġas ĠBase ViewState < Payload >? ĊĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ/* Ġtodo Ġnot Ġthis Ġis Ġvalue Ġcomparison Ġnot Ġreference , Ġso Ġa Ġnew Ġview state Ġwith Ġdifferent ĊĠĠĠĠĠĠĠĠ Ġ* Ġreference Ġbut Ġwith Ġthe Ġsame Ġvalue Ġwill Ġbe Ġignored Ġand Ġit Ġwon 't Ġbe Ġcached Ġinto Ġthe Ġmap ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġstate Changed Ġ= Ġif Ġ( each Time ) Ġold State Ġ!== ĠnewState Ġelse Ġold State Ġ!= ĠnewState ĊĠĠĠĠĠĠĠ Ġ// Ġignore Ġif Ġstate Ġnot Ġchanged ĊĠĠĠĠĠĠĠ Ġif Ġ( state Changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( object Ġ: ĠView State Consumer Scope < Payload > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo On Loading Change ( block : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Is Loading Ġ= Ġold State ?. status Ġ== ĠBase ViewState . Status . LOADING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Is Loading Ġ= ĠnewState . status Ġ== ĠBase ViewState . Status . LOADING ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Is Loading Ġ!= Ġnew Is Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( new Is Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo On Success ( block : Ġ( Payload ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState . status Ġ== ĠBase ViewState . Status . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( newState . payload !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo OnError ( block : Ġ( String ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState . status Ġ== ĠBase ViewState . Status . FAILURE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( newState . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlatest ViewState [ clazz ] Ġ= Ġthis Ġas ĠBase ViewState < *> ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠView State Consumer Scope < V > Ġ{ ĊĠĠĠ Ġfun Ġdo On Loading Change ( block : Ġ( Boolean ) Ġ-> ĠUnit ) ĊĠĠĠ Ġfun Ġdo On Success ( block : Ġ( V ) Ġ-> ĠUnit ) ĊĠĠĠ Ġfun Ġdo OnError ( block : Ġ( String ?) Ġ-> ĠUnit ) Ċ }