package Ġnl . ent re co . dart ss core card . beta Ċ Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġnl . ent re co . dart ss core card . R Ċ import Ġnl . ent re co . dart ss core card . base . Test able Adapter Ċ import Ġnl . ent re co . dart ss core card . databinding . Beta View Binding Ċ import Ġnl . ent re co . domain . beta . Feature Ċ import Ġnl . ent re co . lib core . threading . Background Ċ import Ġnl . ent re co . lib core . threading . Foreground Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġentre co Ġon Ġ 3 0 / 0 1 / 2 0 1 8 . Ċ Ġ*/ Ċ class ĠBeta Adapter Ġ@ Inject Ġconstructor ( private Ġval Ġbg : ĠBackground , Ġprivate Ġval Ġfg : ĠFore ground ) Ġ: ĠTest able Adapter < Beta View >(), ĠObserver < List < Feature >> Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġitems : ĠMutable List < Feature > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġval Ġqueue : ĠQueue < List < Feature >> Ġ= ĠArray Deque () ĊĠĠĠ Ġvar Ġbeta Animator : ĠBeta Animator ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBeta View Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . inflate < Beta View Binding >( in flater , ĠR . layout . beta _ view , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠBeta View ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBeta View , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( items [ position ], Ġbeta Animator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonChanged ( features : ĠList < Feature > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( features Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( features ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( queue . size Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Diff ( features ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Diff ( features : ĠList < Feature >) Ġ{ ĊĠĠĠĠĠĠĠ Ġbg . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff Util . calculate Diff ( Beta Diff Calculator ( items , Ġfeatures ), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfg . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( features , Ġdiff ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( queue . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Diff ( queue . peek () Ġ?: Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Items ( features : ĠList < Feature >, Ġdiff : ĠDiff Util . Diff Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġitems . addAll ( features ) ĊĠĠĠĠĠĠĠ Ġdiff . dispatch Updates To ( this ) ĊĠĠĠ Ġ} Ċ } Ċ