package Ġru . app kode . cli pping demo . ui Ċ Ċ import Ġandroid . support . design . widget . AppBar Layout Ċ Ċ enum Ġclass ĠApp Bar State Ġ{ ĊĠ ĠEX PAN DED , ĊĠ ĠCOL LAP SED , ĊĠ ĠID LE Ċ } Ċ Ċ class ĠApp Bar State ChangeListener ( private Ġval Ġon StateChanged : Ġ(( AppBar Layout , ĠApp Bar State ) Ġ-> ĠUnit )? Ġ= Ġnull ) ĊĠ Ġ: ĠApp Bar Layout . On Offset Changed Listener Ġ{ ĊĠ Ġprivate Ġvar Ġcurrent State Ġ= ĠApp Bar State . IDLE ĊĊĠ Ġoverride Ġfun Ġon Offset Changed ( app Bar Layout : ĠApp Bar Layout , Ġvertical Offset : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġprev State Ġ= Ġcurrent State ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠ Ġvertical Offset Ġ== Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠApp Bar State . EXP AN DED ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠMath . abs ( vertical Offset ) Ġ>= Ġapp Bar Layout . total Scroll Range Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠApp Bar State . COLL AP SED ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠApp Bar State . IDLE ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( currentState Ġ!== Ġprev State ) Ġ{ ĊĠĠĠĠĠ Ġon StateChanged ( app Bar Layout , Ġcurrent State ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon StateChanged ( app Bar Layout : ĠApp Bar Layout , Ġstate : ĠApp Bar State ) Ġ{ ĊĠĠĠ Ġon StateChanged ?. invoke ( app Bar Layout , Ġstate ) ĊĠ Ġ} Ċ }