package Ġk g . ram . b anners . utils Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear Snap Helper Ċ import Ġandroidx . recyclerview . widget . Orientation Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ /** Ċ Ġ* ĠLinear Ġhorizontal Ġstart Ġsnap Ġhelper . Ċ Ġ*/ Ċ class ĠLinear Start Snap Helper Ġ: ĠLinear Snap Helper () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Horizontal Helper : ĠOrientation Helper ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġfind Snap View ( layout Manager : ĠRecyclerView . LayoutManager ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind First View ( layout Manager , Ġget Horizontal Helper ( layout Manager )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Distance To Final Snap ( ĊĠĠĠĠĠĠĠ Ġlayout Manager : ĠRecyclerView . LayoutManager , ĊĠĠĠĠĠĠĠ Ġtarget View : ĠView ĊĠĠĠ Ġ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠ Ġout [ 0 ] Ġ= Ġdistance To Start ( target View , Ġget Horizontal Helper ( layout Manager )) ĊĠĠĠĠĠĠĠ Ġreturn Ġout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdistance To Start ( target View : ĠView , Ġhelper : ĠOrientation Helper ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Start Ġ= Ġhelper !!. get Decorated Start ( target View ) ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Start Ġ= Ġhelper . start After Padding ĊĊĠĠĠĠĠĠĠ Ġreturn Ġchild Start Ġ- Ġcontainer Start ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IllegalStateException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġattach To RecyclerView ( re cyclerView : ĠRecyclerView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( re cyclerView Ġ!= Ġnull Ġ&& Ġre cyclerView . layout Manager Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! re cyclerView . layout Manager !!. can Scroll H orizontally () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" This Ġonly Ġworks Ġwith Ġlinear Ġlayout Ġmanager Ġwith Ġhorizontal Ġscroll !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . attach To RecyclerView ( re cyclerView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind First View ( ĊĠĠĠĠĠĠĠ Ġlayout Manager : ĠRecyclerView . LayoutManager ?, ĊĠĠĠĠĠĠĠ Ġhelper : ĠOrientation Helper ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Manager Ġ== Ġnull Ġ|| Ġhelper Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġlayout Manager . child Count ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( layout Manager Ġis ĠLinearLayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Visible Child Ġ= Ġlayout Manager . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Visible Child Ġ= Ġlayout Manager . find Last Comp let ely Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Last Item Ġ= Ġ( last Visible Child Ġ== Ġlayout Manager . getItem Count () Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Visible Child Ġ== ĠRecyclerView . NO _ POSITION Ġ|| Ġis Last Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġlayout Manager . find View By Position ( first Visible Child ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( helper . get Decorated End ( child ) Ġ>= Ġhelper . get Decorated Measurement ( child ) Ġ/ Ġ 2 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . get Decorated End ( child ) Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Visible Child Ġ== Ġlayout Manager . getItem Count () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . find View By Position ( first Visible Child Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . find Snap View ( layout Manager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Horizontal Helper ( layout Manager : ĠRecyclerView . LayoutManager ): ĠOrientation Helper ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Horizontal Helper Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Horizontal Helper Ġ= ĠOrientation Helper . create Horizontal Helper ( layout Manager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Horizontal Helper ĊĠĠĠ Ġ} Ċ } Ċ