package Ġka ist . ic lab . abc . foreground . adapter Ċ Ċ import Ġandroid . arch . lifecycle .* Ċ import Ġandroid . arch . paging .* Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 4 . view . View Compat Ċ import Ġandroid . support . v 7 . util . Diff Util Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġio . object box . query . Query Ċ import Ġio . object box . reactive . Data Observer Ċ import Ġka ist . ic lab . abc . App Ċ import Ġka ist . ic lab . abc . common . type . Load State Ċ import Ġka ist . ic lab . abc . common . Empty Entity Exception Ċ import Ġka ist . ic lab . abc . common . util . Format Utils Ċ import Ġka ist . ic lab . abc . data . entities . Part icipation Entity Ċ import Ġka ist . ic lab . abc . data . entities . Survey Entity Ċ import Ġka ist . ic lab . abc . data . entities . Survey Entity _ Ċ import Ġka ist . ic lab . abc . foreground . fragment . Survey List Fragment Ċ import Ġka ist . ic lab . abc . foreground . listener . Base ViewHolder Ċ import Ġka ist . ic lab . abc . foreground . listener . On RecyclerView ItemClickListener Ċ import Ġka ist . ic lab . abc . foreground . view . Survey Item View Ċ import Ġka ist . ic lab . abc . survey . Survey Timeout Policy Type Ċ import Ġjava . util . concurrent . Executors Ċ Ċ class ĠSurvey ListAdapter Ġ: ĠP aged ListAdapter < Survey Entity , ĠSurvey ListAdapter . ViewHolder >( DIFF _ CALLBACK ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDIFF _ CALLBACK Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Survey Entity >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠSurvey Entity , Ġnew Item : ĠSurvey Entity ) Ġ= Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠSurvey Entity , Ġnew Item : ĠSurvey Entity ) Ġ= Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Entity ViewModel ( fragment : ĠFragment , Ġshow Only Un read : ĠBoolean ) Ġ: ĠEntity ViewModel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠViewModel Providers . of ( fragment , Ġobject Ġ: ĠViewModel Provider . Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEntity ViewModel ( show Only Un read ) Ġas ? ĠT Ġ?: Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). get ( Entity ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠOn RecyclerView ItemClickListener < Survey Entity >? Ġ= Ġnull ĊĊĊĠĠĠ Ġfun Ġset On RecyclerView ItemClickListener ( on ItemClickListener : ĠOn RecyclerView ItemClickListener < Survey Entity > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener Ġ= Ġon ItemClickListener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetItem ( position )?. id Ġ?: Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠSurvey ListAdapter . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( Survey Item View ( parent . context )) Ġ{ Ġposition , Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Item Click ( position , ĠgetItem ( position ), Ġview ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġif ( entity Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . clear View () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind View ( entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Transition Name ( holder . view . getTitle View (), Ġ"${ Survey List Fragment . PREFIX _ TITLE _ VIEW }_${ entity . id }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Transition Name ( holder . view . getMessage View (), Ġ"${ Survey List Fragment . PREFIX _ MESSAGE _ VIEW }_${ entity . id }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Transition Name ( holder . view . get Deliver ed Time View (), Ġ"${ Survey List Fragment . PREFIX _ DE LI VER ED _ TIME _ VIEW }_${ entity . id }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠViewHolder ( survey Item View : ĠSurvey Item View , ĠonClick : Ġ( position : ĠInt , Ġview : ĠView ) Ġ-> ĠUnit ) Ġ: ĠBase ViewHolder < Survey Item View , ĠSurvey Entity >( survey Item View , ĠonClick ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind View ( data : ĠSurvey Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setTitle ( data . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setMessage ( data . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Deliver ed Time ( String . format ("% s Ġ% s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFormat Utils . format Same Day ( view . context , Ġdata . deliver ed Time , ĠSystem . currentTimeMillis ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFormat Utils . format Time Before ( data . deliver ed Time , ĠSystem . currentTimeMillis ()) ?. let Ġ{" ($ it ) "} Ġ?: Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Valid Item ( data . is Enable To Resp oned ( System . currentTimeMillis ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclear View () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . clear View () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠEntity DataSource ( private Ġval Ġshow Only Un read : ĠBoolean ) Ġ: ĠPosition al DataSource < Survey Entity >() Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġobserver Ġ= ĠData Observer < List < Survey Entity >> Ġ{ Ġinvalidate () Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġquery : ĠQuery < Survey Entity >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġload State Ġ= ĠMutable LiveData < Load State >() ĊĠĠĠĠĠĠĠ Ġval Ġinitial Load State Ġ= ĠMutable LiveData < Load State >() ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Query (): ĠQuery < Survey Entity > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= ĠPart icipation Entity . get Part icip ated Experiment From Local () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠApp . box For < Survey Entity >(). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Only Un read ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . query () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. less ( Survey Entity _. timestamp , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equal ( Survey Entity _. subject Email , Ġentity . subject Email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equal ( Survey Entity _. experiment Uuid , Ġentity . experiment Uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. greater ( Survey Entity _. deliver ed Time , Ġentity . part icip ate Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. order Desc ( Survey Entity _. deliver ed Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . query () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equal ( Survey Entity _. subject Email , Ġentity . subject Email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equal ( Survey Entity _. experiment Uuid , Ġentity . experiment Uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. greater ( Survey Entity _. deliver ed Time , Ġentity . part icip ate Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. order Desc ( Survey Entity _. deliver ed Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . subscribe (). only Changes (). weak (). observer ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġquery ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload Range ( params : ĠLoad Range Params , Ġcallback : ĠLoad Range Callback < Survey Entity >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload State . post Value ( Load State . LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery Ġ?: Ġbuild Query () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġit . find ( params . start Position . to Long (), Ġparams . load Size . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload State . post Value ( Load State . LOADED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload State . post Value ( Load State . ERROR ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload Initial ( params : ĠLoad Initial Params , Ġcallback : ĠLoad Initial Callback < Survey Entity >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Load State . post Value ( Load State . LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload State . post Value ( Load State . LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery Ġ?: Ġbuild Query () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Count Ġ= Ġit . count (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( listOf (), Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload State . post Value ( Load State . ERROR ( Empty Entity Exception ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġcompute Initial Load Position ( params , Ġtotal Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġload Size Ġ= Ġcompute Initial Load Size ( params , Ġposition , Ġtotal Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġit . find ( position . to Long (), Ġload Size . to Long ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . size Ġ== Ġload Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( list , Ġposition , Ġtotal Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Load State . post Value ( Load State . LOADED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload State . post Value ( Load State . LOADED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Load State . post Value ( Load State . ERROR ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload State . post Value ( Load State . ERROR ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclass ĠFactory ( private Ġval Ġshow Only Un read : ĠBoolean ) Ġ: ĠDataSource . Factory < Int , ĠSurvey Entity > Ġ() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource LiveData Ġ= ĠMutable LiveData < Entity DataSource >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate (): ĠDataSource < Int , ĠSurvey Entity > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠEntity DataSource ( show Only Un read ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource LiveData . post Value ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠEntity ViewModel ( show Only Un read : ĠBoolean ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfactory Ġ= ĠEntity DataSource . Factory ( show Only Un read ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpage d List Ġ= ĠLive Paged List Builder ( factory , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP aged List . Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInitial Load Size Hint ( 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set PageSize ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Pref etch Distance ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Fetch Executor ( Executors . new Cached ThreadPool ()). build () ĊĊĠĠĠĠĠĠĠ Ġfun Ġrefresh () Ġ= Ġfactory . source LiveData . value ?. invalidate () ĊĊĠĠĠĠĠĠĠ Ġval Ġload State Ġ: ĠLive Data < Load State > Ġ= ĠTransform ations . switch Map ( factory . source LiveData ) Ġ{ Ġit . load State Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinitial Load State Ġ: ĠLive Data < Load State > Ġ= ĠTransform ations . switch Map ( factory . source LiveData ) Ġ{ Ġit . initial Load State Ġ} ĊĠĠĠ Ġ} Ċ }