package Ġru . har on code . aqu arius . core . base . str ategies Ċ Ċ import Ġandroidx . recyclerview . widget . Batch ing List Update Callback Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Diff Util . Diff Result Ċ import Ġru . har on code . aqu arius . core . observer . DataList Update Callback Ċ Ċ class ĠDiff Util Differ Strategy < T Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġval Ġitem Callback : ĠDiff Util . Item Callback < T >, ĊĠĠĠ Ġprivate Ġval Ġdetect Moves : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠD iffer Strategy < T >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Diff ( previous : ĠList < T >, Ġactual : ĠList < T >): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( previous . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠSimple Diff Callback ( item Callback , Ġprevious , Ġactual ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠDiff Util . calculate Diff ( callback , Ġdetect Moves ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Util Result ( result ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInsert Range Result ( 0 , Ġactual . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSimple Diff Callback < E >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġitem Diff Callback : ĠDiff Util . Item Callback < E >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprevious : ĠList < E >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġactual : ĠList < E > ĊĠĠĠ Ġ) Ġ: ĠDiff Util . Callback () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old List Size (): ĠInt Ġ= Ġprevious . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New List Size (): ĠInt Ġ= Ġactual . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item Position : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item Position : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ= Ġitem Diff Callback . are Items The Same ( previous [ old Item Position ], Ġactual [ new Item Position ]) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item Position : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item Position : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ= Ġitem Diff Callback . are Contents The Same ( previous [ old Item Position ], Ġactual [ new Item Position ]) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Change Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item Position : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item Position : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠAny ? Ġ= Ġitem Diff Callback . get Change Payload ( previous [ old Item Position ], Ġactual [ new Item Position ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDiff Util Result ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdiff Result : ĠDiff Result ĊĠĠĠ Ġ) Ġ: ĠResult Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispatch Updates To ( data List Update Callback : ĠData List Update Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbatch Update Callback Ġ= ĠBatch ing List Update Callback ( data List Update Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Result . dispatch Updates To ( batch Update Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠInsert Range Result ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġposition : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcount : ĠInt ĊĠĠĠ Ġ) Ġ: ĠResult Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispatch Updates To ( data List Update Callback : ĠData List Update Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata List Update Callback . on Inserted ( position , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ