/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠLoop ing ĠLayout Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ ĊĊ Ċ package Ġcom . be k aw est berg . loop ing layout . library Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . PointF Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . accessibility . Accessibility Event Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . recyclerview . widget . Linear Smooth Scroller Ċ import Ġandroidx . recyclerview . widget . Orientation Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . RecyclerView . LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView . LayoutParams Ċ import Ġjava . lang . Math . min Ċ import Ġkotlin . math . abs Ċ Ċ class ĠLoop ing LayoutManager Ġ: ĠLayout Manager , ĠRecyclerView . Smooth Scroller . Scroll Vector Provider Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDescri bes Ġthe Ġway Ġthe Ġlayout Ġshould Ġbe ... Ġla id Ġout . ĠAnchor Ġindex , Ġanchor Ġedge , Ġand Ġscroll ĊĠĠĠĠ Ġ* Ġoffset . ĠUsed Ġfor Ġtriggering Ġscroll To , Ġupdating Ġafter Ġan Ġadapter Ġchange , Ġand Ġorientation ĊĠĠĠĠ Ġ* Ġchanges . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġlayout Request Ġ= ĠLayout Request ( anchor Index Ġ= Ġ 0 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġamount Ġof Ġextra Ġ( i . e . Ġnot Ġvisible ) Ġspace Ġto Ġfill Ġup Ġwith Ġviews Ġafter Ġwe Ġhave Ġfilled Ġup ĊĠĠĠĠ Ġ* Ġthe Ġvisible Ġspace . ĠThis Ġis Ġused Ġduring Ġsmooth Ġscrolling , Ġso Ġthat Ġthe Ġtarget Ġview Ġcan Ġbe Ġfound ĊĠĠĠĠ Ġ* Ġbefore Ġit Ġbecomes Ġvisible Ġ( hel ps Ġwith Ġsmooth Ġde cel eration ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġextra Layout Space Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĠHel ps Ġwith Ġsome Ġlayout Ġcalculations . ĠMain ly Ġgetting Ġthe Ġnon - scroll ing Ġedges Ġof Ġeach Ġview . Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġorientation Helper : ĠOrientation Helper ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġwidth Ġof Ġthe Ġlayout Ġ- Ġnot Ġthe Ġre cycler . ĊĠĠĠĠ Ġ* ĠA KA Ġthe Ġwidth Ġof Ġthe Ġre cycler , Ġminus Ġthe Ġpadding Ġon Ġthe Ġleft Ġand Ġright . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġlayout Width : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwidth Ġ- Ġpadding Left Ġ- Ġpadding Right ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġheight Ġof Ġthe Ġlayout Ġ- Ġnot Ġthe Ġre cycler . ĊĠĠĠĠ Ġ* ĠA KA Ġthe Ġheight Ġof Ġthe Ġre cycler , Ġminus Ġthe Ġpadding Ġon Ġthe Ġtop Ġand Ġbottom . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġlayout Height : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġheight Ġ- Ġpadding Top Ġ- Ġpadding Bottom ĊĠĠĠĠĊĠĠĠ Ġ/** ĠDescri bes Ġthe Ġadapter Ġindex Ġof Ġthe Ġview Ġin Ġthe Ġtop / left Ġ- most Ġposition . Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġtop Left Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġ/** ĠDescri bes Ġthe Ġadapter Ġindex Ġof Ġthe Ġview Ġin Ġthe Ġbottom / right Ġ- most Ġposition . Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġbottom Right Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġadapter Ġindex Ġof Ġthe Ġview Ġat Ġthe Ġedge Ġof Ġthe Ġlayout Ġwhere Ġthe Ġ 0 th Ġitem Ġwas ĊĠĠĠĠ Ġ* Ġoriginally Ġla id Ġout . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġanchor Index ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Initial Index ( get Movement Direction From Adapter Direction ( TO WAR DS _ LOWER _ IND ICES )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġadapter Ġindex Ġof Ġthe Ġview Ġat Ġthe Ġedge Ġof Ġthe Ġlayout Ġ* op pos ite * Ġthe Ġedge Ġwhere Ġthe Ġ 0 th ĊĠĠĠĠ Ġ* Ġitem Ġwas Ġoriginally Ġla id Ġout . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġopt Anchor Index ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Initial Index ( get Movement Direction From Adapter Direction ( TO WAR DS _ HIG HER _ IND ICES )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġthe Ġlayout Ġmanager Ġneeds Ġto Ġscroll Ġto Ġa Ġposition Ġ( via Ġsmooth Ġscrolling ) Ġit Ġneeds Ġsome ĊĠĠĠĠ Ġ* Ġmethod Ġto Ġdecide Ġwhich Ġmovement Ġdirection Ġto Ġscroll Ġin . ĠThis Ġvariable Ġstores Ġthat Ġmethod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġsmooth Scroll Direction Dec ider : Ġ( Int , ĠLoop ing LayoutManager , ĠInt ) Ġ-> ĠInt Ġ= Ġ:: default Dec ider ĊĠĠĠĠĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa ĠLoop ing Layout Ġmanager Ġwith Ġthe Ġgiven Ġorientation Ġand Ġreverse Ġlayout Ġoption . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠCurrent Ġcontext , Ġwill Ġbe Ġused Ġto Ġaccess Ġresources . ĊĠĠĠĠ Ġ* Ġ@ param Ġorientation ĠLayout Ġorientation . ĠShould Ġbe Ġ[ HORIZONTAL ] Ġor Ġ[ VERTICAL ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġreverse Layout ĠWhen Ġset Ġto Ġtrue , Ġl ays Ġout Ġitems Ġin Ġthe Ġopposite Ġdirection Ġfrom Ġdefault . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġpublic Ġconstructor ( context : ĠContext , Ġorientation : ĠInt Ġ= ĠV ERT ICAL , Ġreverse Layout : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . orientation Ġ= Ġorientation ĊĠĠĠĠĠĠĠ Ġthis . reverse Layout Ġ= Ġreverse Layout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor Ġused Ġwhen Ġlayout Ġmanager Ġis Ġset Ġin ĠXML Ġby ĠRecyclerView Ġattribute ĊĠĠĠĠ Ġ* Ġ" layout Manager ". ĠDefaults Ġto Ġvertical Ġorientation Ġand Ġnot Ġreversed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt , Ġdef Style Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= Ġget Properties ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) ĊĠĠĠĠĠĠĠ Ġorientation Ġ= Ġproperties . orientation ĊĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġproperties . reverse Layout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDescri bes Ġthe Ġcurrent Ġorientation Ġof Ġthis Ġlayout Ġmanager . ĠEither Ġ[ HORIZONTAL ] Ġor Ġ[ VERTICAL ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġorientation : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( orientation Ġ== ĠH ORIZONTAL Ġ|| Ġorientation Ġ== ĠV ERT ICAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" invalid Ġorientation :$ orientation " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ!= Ġthis . orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Helper Ġ= ĠOrientation Helper . create Orientation Helper ( this , Ġorientation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert NotIn Layout Or Scroll ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġorientation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! :: orientation Helper . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Helper Ġ= ĠOrientation Helper . create Orientation Helper ( this , Ġorientation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDescri bes Ġwhether Ġthe Ġviews Ġare Ġla id Ġout Ġin Ġthe Ġopposite Ġorder Ġthey Ġwould Ġnormally Ġbe Ġla id ĊĠĠĠĠ Ġ* Ġout Ġin . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġ" normal Ġorder " Ġis Ġbased Ġon Ġthe Ġorientation Ġand ĠRTL / LTR Ġstate . ĠFor Ġexample Ġif Ġthis ĊĠĠĠĠ Ġ* Ġwas Ġin Ġa ĠRTL ĠHorizontal Ġstate , Ġand Ġthis Ġproperty Ġwere Ġtrue , Ġthe Ġviews Ġwould Ġbe Ġla id Ġout ĊĠĠĠĠ Ġ* Ġfrom Ġleft Ġto Ġright . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġreverse Layout Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reverse Layout Ġ== Ġthis . reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert NotIn Layout Or Scroll ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġreverse Layout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġwe Ġare Ġin ĠRTL Ġmode , Ġfalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġis Layout RTL : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlayout Direction Ġ== ĠView Compat . LAYOUT _ DIRECTION _ RTL ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġis Auto Measure Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġgenerate Default LayoutParams (): ĠLayout Params Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLayout Params ( ViewGroup . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAll Ġof Ġthis Ġinformation Ġis Ġbased Ġon Ġkeeping Ġthe Ġitem Ġcurrently Ġat Ġthe Ġanchor Ġedge ĊĠĠĠĠĠĠĠ Ġ// Ġat Ġthe Ġanchor Ġedge . ĊĠĠĠĠĠĠĠ Ġval Ġdirection Ġ= Ġget Movement Direction From Adapter Direction ( TO WAR DS _ LOWER _ IND ICES ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( child Count Ġ== Ġ 0 ) Ġ{ Ġ Ġ// ĠOcc urs Ġif Ġthe Ġscreen Ġis Ġoff Ġon Ġstartup . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Index Ġ= Ġget Initial Index ( direction ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Offset Ġ= Ġget Initial Item ( direction ). hidden Size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġis ĠLayout Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Request Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Layout Children ( recycler : ĠRecyclerView . Recycler , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Request . initialize ( this , Ġstate ) ĊĊĠĠĠĠĠĠĠ Ġdetach And Sc rap Attached Views ( recycler ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠA ) ĠWe Ġwant Ġto Ġlayout Ġthe Ġitem Ġat Ġthe Ġadapter Ġindex Ġfirst , Ġso Ġthat Ġwe Ġcan Ġset Ġthe Ġscroll Ġoffset . ĊĠĠĠĠĠĠĠ Ġ// ĠB ) ĠWe Ġwant Ġthe Ġitem Ġto Ġbe Ġla id Ġout Ġ/ at / Ġthe Ġedge Ġassociated Ġwith Ġthe Ġadapter Ġdirection . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġmeans Ġafter Ġit Ġgets Ġla id Ġout Ġwe Ġneed Ġto Ġmove Ġ/ away / Ġfrom Ġthat Ġedge . ĊĠĠĠĠĠĠĠ Ġ// ĠHence Ġthe Ġdirection Ġis Ġinverted . ĊĠĠĠĠĠĠĠ Ġval Ġmovement Dir Ġ= Ġget Movement Direction From Adapter Direction (- layout Request . adapter Direction ) ĊĠĠĠĠĠĠĠ Ġvar Ġprev Item : ĠListItem ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġif Ġ( orientation Ġ== ĠH ORIZONTAL ) Ġlayout Width Ġelse Ġlayout Height ĊĠĠĠĠĠĠĠ Ġvar Ġsize Filled Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġmin ( layout Request . anchor Index , Ġstate . item Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( size Filled Ġ< Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġcreate View For Index ( index , Ġmovement Dir , Ġre cycler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem For View ( movement Dir , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlayout Rect Ġ= Ġget Non Scrolling Edges ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect Ġ= Ġprev Item ?. getPosition Of Item Following Self ( item , Ġlayout Rect ) Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . getPosition Of Self As First ( layout Rect , Ġlayout Request . scroll Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Decorated ( view , Ġlayout Rect . left , Ġlayout Rect . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect . right , Ġlayout Rect . bottom ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġstep Index ( index , Ġmovement Dir , Ġstate , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Filled Ġ+= Ġitem . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Item Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( movement Dir Ġ== ĠTO WAR DS _ TOP _ LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Right Index Ġ= Ġlayout Request . anchor Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Index Ġ= Ġstep Index ( index , Ġ- movement Dir , Ġstate , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Index Ġ= Ġlayout Request . anchor Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Right Index Ġ= Ġstep Index ( index , Ġ- movement Dir , Ġstate , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Layout Completed ( state : ĠRecyclerView . State ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout Completed ( state ) ĊĠĠĠĠĠĠĠ Ġlayout Request . finish Processing (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcan Scroll Vert ically (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġorientation Ġ== ĠV ERT ICAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġscroll Vert ically By ( ĊĠĠĠĠĠĠĠ Ġdy : ĠInt , ĊĠĠĠĠĠĠĠ Ġre cycler : ĠRecyclerView . Recycler , ĊĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscroll By ( dy , Ġre cycler , Ġstate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcan Scroll H orizontally (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġorientation Ġ== ĠH ORIZONTAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġscroll H orizontally By ( ĊĠĠĠĠĠĠĠ Ġdx : ĠInt , ĊĠĠĠĠĠĠĠ Ġre cycler : ĠRecyclerView . Recycler , ĊĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscroll By ( dx , Ġre cycler , Ġstate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScroll s Ġthe Ġlist Ġof Ġviews Ġby Ġthe Ġgiven Ġ[ delta ]. ĠCreates Ġand Ġbind s Ġnew Ġviews Ġif Ġnecessary . ĊĠĠĠĠ Ġ* ĠWhether Ġto Ġscroll Ġh orizontally Ġor Ġvert ically Ġis Ġdetermined Ġby Ġthe Ġorientation . ĊĠĠĠ Ġ* Ġ@ return ĠThe Ġactually Ġdistance Ġsc rolled . ĠThis Ġwill Ġequal Ġto Ġdelta Ġunless Ġthe Ġlayout Ġmanager ĊĠĠĠĠ Ġ* Ġdoes Ġnot Ġhave Ġchildren , Ġin Ġwhich Ġcase Ġit Ġwill Ġbe Ġzero . ĠOther Ġlayout Ġmanagers Ġmay ĊĠĠĠĠ Ġ* Ġreturn Ġless Ġthan Ġthe Ġdelta Ġif Ġthey Ġhit Ġa Ġbound , Ġbut Ġthe ĠLoop ing LayoutManager Ġhas Ġno ĊĠĠĠĠ Ġ* Ġbounds . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġscroll By ( ĊĠĠĠĠĠĠĠ Ġdelta : ĠInt , ĊĠĠĠĠĠĠĠ Ġre cycler : ĠRecyclerView . Recycler , ĊĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 Ġ|| Ġdelta Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmovement Dir Ġ= ĠInteger . sign um ( delta ) ĊĠĠĠĠĠĠĠ Ġscrap Non Visible Views ( recycler ) ĊĠĠĠĠĠĠĠ Ġval Ġabs Delta Ġ= Ġabs ( delta ) ĊĠĠĠĠĠĠĠ Ġvar Ġamount Sc rolled Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġget Initial Index ( movement Dir ) ĊĠĠĠĠĠĠĠ Ġvar Ġselected Item Ġ= Ġget Initial Item ( movement Dir ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( amount Sc rolled Ġ< Ġabs Delta ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhidden Size Ġ= Ġselected Item . hidden Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠScroll Ġjust Ġenough Ġto Ġcomplete Ġthe Ġscroll , Ġor Ġbring Ġthe Ġview Ġfully Ġinto Ġview . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount To Scroll Ġ= Ġhidden Size . coerce At Most ( abs Delta Ġ- Ġamount Sc rolled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Sc rolled Ġ+= Ġamount To Scroll ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Children ( amount To Scroll Ġ* Ġ- movement Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Sc rolled Ġ< Ġabs Delta ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġstep Index ( index , Ġmovement Dir , Ġstate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew View Ġ= Ġcreate View For Index ( index , Ġmovement Dir , Ġre cycler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĠgetItem For View ( movement Dir , Ġnew View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlayout Rect Ġ= Ġget Non Scrolling Edges ( new View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect Ġ= Ġselected Item . getPosition Of Item Following Self ( new Item , Ġlayout Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Decorated ( new View , Ġlayout Rect . left , Ġlayout Rect . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect . right , Ġlayout Rect . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Ġ= Ġnew Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġamount Ġof Ġextra Ġ( i . e Ġnot Ġvisible ) Ġspace Ġcurrently Ġcovered Ġby Ġviews . ĊĠĠĠĠĠĠĠ Ġvar Ġview Space Ġ= Ġselected Item . hidden Size ĊĠĠĠĠĠĠĠ Ġwhile ( view Space Ġ< Ġextra Layout Space ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġdon 't Ġwant Ġthe Ġtop Left Index Ġor Ġbottom Right Index Ġto Ġreflect Ġnon - visible Ġviews . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġstep Index ( index , Ġmovement Dir , Ġstate , Ġupdate Index Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew View Ġ= Ġcreate View For Index ( index , Ġmovement Dir , Ġre cycler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĠgetItem For View ( movement Dir , Ġnew View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlayout Rect Ġ= Ġget Non Scrolling Edges ( new View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect Ġ= Ġselected Item . getPosition Of Item Following Self ( new Item , Ġlayout Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Decorated ( new View , Ġlayout Rect . left , Ġlayout Rect . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect . right , Ġlayout Rect . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Ġ= Ġnew Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Space Ġ+= Ġselected Item . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġre cycle Views ( movement Dir , Ġre cycler , Ġstate ) ĊĠĠĠĠĠĠĠ Ġreturn Ġamount Sc rolled Ġ* Ġmovement Dir ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġrect Ġpopulated Ġwith Ġthe Ġpositions Ġof Ġthe Ġstatic Ġedges Ġof Ġthe Ġview . ĠI . e . Ġright Ġand ĊĠĠĠĠ Ġ* Ġleft Ġin Ġhorizontal Ġmode , Ġtop Ġand Ġbottom Ġin Ġvertical Ġmode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Non Scrolling Edges ( view : ĠView ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Rect Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġval Ġis Vertical Ġ= Ġorientation Ġ== ĠV ERT ICAL ĊĠĠĠĠĠĠĠ Ġ// ĠIn ĠL TR Ġwe Ġalign Ġvertical Ġlayouts Ġwith Ġthe Ġleft Ġedge , Ġand Ġin ĠRTL Ġthe Ġright Ġedge . ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Layout RTL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect . right Ġ= Ġwidth Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect . left Ġ= Ġlayout Rect . right Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Helper . get Decorated Measurement In Other ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġ! is Layout RTL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect . left Ġ= Ġpadding Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect . right Ġ= Ġlayout Rect . left Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Helper . get Decorated Measurement In Other ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġ Ġ// ĠHorizontal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect . top Ġ= Ġpadding Top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Rect . bottom Ġ= Ġlayout Rect . top Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Helper . get Decorated Measurement In Other ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlayout Rect ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates , Ġmeasures , Ġand Ġinserts Ġa Ġview Ġinto Ġthe Ġre cycler Ġat Ġthe Ġgiven Ġ[ adapter Index ]. ĊĠĠĠĠ Ġ* ĠThe Ġview Ġis Ġthen Ġreturned Ġso Ġit Ġcan Ġbe Ġproperly Ġposition ed . ĊĠĠĠĠ Ġ* Ġ@ param Ġmovement Dir ĠThe Ġcurrent Ġdirection Ġthe Ġviews Ġare Ġbeing Ġsc rolled Ġin . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate View For Index ( ĊĠĠĠĠĠĠĠ Ġadapter Index : ĠInt , ĊĠĠĠĠĠĠĠ Ġmovement Dir : ĠInt , ĊĠĠĠĠĠĠĠ Ġre cycler : ĠRecyclerView . Recycler ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew View Ġ= Ġre cycler . getView For Position ( adapter Index ) ĊĠĠĠĠĠĠĠ Ġif Ġ( movement Dir Ġ== ĠTO WAR DS _ LOWER _ IND ICES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( new View , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( new View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmeasure Child With Margins ( new View , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnew View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMov es Ġall Ġchild Ġviews Ġby Ġthe Ġgiven Ġ[ amount ] Ġ( can Ġbe Ġpositive Ġor Ġnegative ). ĠDetermines Ġwhether ĊĠĠĠĠ Ġ* Ġthey Ġare Ġmoved Ġh orizontally Ġor Ġvert ically Ġbased Ġon Ġthe Ġorientation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġoffset Children ( amount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠH ORIZONTAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Children Horizontal ( amount ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Children Vertical ( amount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġadapter Ġindex Ġof Ġthe Ġview Ġclosest Ġto Ġwhere Ġnew Ġviews Ġwill Ġbe Ġshown . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġdetermined Ġbased Ġon Ġthe Ġ[ movement Dir ] Ġviews Ġare Ġbeing Ġsc rolled Ġin . ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġif Ġthe Ġuser Ġis Ġtrying Ġto Ġsee Ġnew Ġviews Ġat Ġthe Ġtop , Ġthis Ġwill Ġreturn Ġthe Ġadapter ĊĠĠĠĠ Ġ* Ġindex Ġof Ġthe Ġtop - most Ġview . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Initial Index ( movement Dir : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( movement Dir Ġ== ĠTO WAR DS _ TOP _ LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Index ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Right Index ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġview Ġ( wrapped Ġin Ġa ĠListItem ) Ġclosest Ġto Ġwhere Ġnew Ġviews Ġwill Ġbe Ġshown . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġdetermined Ġbased Ġon Ġthe Ġ[ movement Dir ] Ġviews Ġare Ġbeing Ġsc rolled Ġin . ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġif Ġthe Ġuser Ġis Ġtrying Ġto Ġsee Ġnew Ġviews Ġat Ġthe Ġtop , Ġthis Ġwill Ġreturn Ġthe ĊĠĠĠĠ Ġ* Ġtop - most Ġview . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Initial Item ( movement Dir : ĠInt ): ĠListItem Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitial View Ġ= Ġif Ġ( movement Dir Ġ== ĠTO WAR DS _ LOWER _ IND ICES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( child Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġinitial View Ġshould Ġnever Ġbe Ġnull , Ġso Ġwe 'll Ġjust Ġask Ġfor Ġan Ġexception . ĊĠĠĠĠĠĠĠ Ġreturn ĠgetItem For View ( movement Dir , Ġinitial View !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn crements / de crements Ġand Ġreturns Ġthe Ġprovided Ġ[ index ] Ġbased Ġon Ġthe Ġ[ movement Dir ] Ġthe Ġlist Ġis ĊĠĠĠĠ Ġ* Ġbeing Ġmoved Ġin . ĠFor Ġexample , Ġif Ġthe Ġlist Ġis Ġbeing Ġsc rolled Ġtowards Ġitems Ġwith Ġhigher Ġadapter ĊĠĠĠĠ Ġ* Ġindices Ġthe Ġindex Ġwill Ġbe Ġincrement ed . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAlso Ġ( by Ġdefault ) Ġhandles Ġupdating Ġ[ top Left Index ] Ġor Ġ[ bottom Right Index ] Ġto Ġreflect Ġthe ĊĠĠĠĠ Ġ* Ġnewest Ġview . ĠThis Ġfunctionality Ġcan Ġbe Ġdisabled Ġby Ġpassing Ġ" false " Ġto Ġthe Ġ[ update Index ] Ġparameter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstep Index ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovement Dir : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Index : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Direction Ġ= Ġget Adapter Direction From Movement Direction ( movement Dir ) ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġstate . item Count ĊĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards Top Left Ġ= Ġmovement Dir Ġ== ĠTO WAR DS _ TOP _ LEFT ĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards Bottom Right Ġ= Ġmovement Dir Ġ== ĠTO WAR DS _ BOTTOM _ RIGHT ĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards High er Indices Ġ= Ġadapter Direction Ġ== ĠTO WAR DS _ HIG HER _ IND ICES ĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards Lower Indices Ġ= Ġadapter Direction Ġ== ĠTO WAR DS _ LOWER _ IND ICES ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Index : ĠInt ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Tow ards Top Left Ġ&& Ġis Tow ards High er Indices Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Index Ġ= Ġindex . loop ed Increment ( count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Index ) Ġtop Left Index Ġ= Ġnew Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Tow ards Top Left Ġ&& Ġis Tow ards Lower Indices Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Index Ġ= Ġindex . loop ed De crement ( count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Index ) Ġ Ġtop Left Index Ġ= Ġnew Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Tow ards Bottom Right Ġ&& Ġis Tow ards High er Indices Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Index Ġ= Ġindex . loop ed Increment ( count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Index ) Ġbottom Right Index Ġ= Ġnew Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Tow ards Bottom Right Ġ&& Ġis Tow ards Lower Indices Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Index Ġ= Ġindex . loop ed De crement ( count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Index ) Ġbottom Right Index Ġ= Ġnew Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Invalid Ġmove Ġ& Ġadapter Ġdirection Ġcombination .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Index ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ view ] Ġwrapped Ġin Ġthe Ġcorrect ĠListItem Ġbased Ġon Ġthe Ġ[ movement Dir ] Ġand ĊĠĠĠĠ Ġ* Ġconfiguration Ġof Ġthe ĠLayout Manager . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠList Items Ġgive Ġthe Ġview Ġan Ġinterface Ġthat 's Ġmore Ġusable Ġwhen Ġwriting Ġa ĠLayout Manager . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetItem For View ( movement Dir : ĠInt , Ġview : ĠView ): ĠListItem Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Vertical Ġ= Ġorientation Ġ== ĠV ERT ICAL ĊĠĠĠĠĠĠĠ Ġval Ġis Horizontal Ġ= Ġ! is Vertical ĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards Top Left Ġ= Ġmovement Dir Ġ== ĠTO WAR DS _ TOP _ LEFT ĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards Bottom Right Ġ= Ġ! is Tow ards Top Left ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards Top Left Ġ-> ĠLead ing Bottom ListItem ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards Bottom Right Ġ-> ĠLead ing Top ListItem ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Top Left Ġ-> ĠLead ing Right ListItem ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Bottom Right Ġ-> ĠLead ing Left ListItem ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Invalid Ġmovement Ġstate .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġany Ġcurrently Ġnon - visible Ġ( i . e . Ġviews Ġcompletely Ġoutside Ġthe Ġvisible Ġbounds Ġof Ġthe ĊĠĠĠĠ Ġ* Ġre cycler ) Ġviews Ġto Ġthe Ġscrap Ġheap . ĠUsed Ġby Ġscroll By Ġto Ġmake Ġsure Ġwe 're Ġonly Ġdealing Ġwith ĊĠĠĠĠ Ġ* Ġvisible Ġviews Ġbefore Ġadding Ġnew Ġones . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġscrap Non Visible Views ( recycler : ĠRecyclerView . Recycler ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ( child Count Ġ- Ġ 1 ) Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġget Child At ( i ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! view Is Visible ( view )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetach And Sc rap View ( view , Ġre cycler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe cycles Ġviews Ġthat Ġare Ġno Ġlonger Ġvisible Ġgiven Ġthe Ġ[ movement Dir ] Ġof Ġthe Ġscroll Ġthat Ġwas Ġjust ĊĠĠĠĠ Ġ* Ġcompleted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġre cycle Views ( ĊĠĠĠĠĠĠĠ Ġmovement Dir : ĠInt , ĊĠĠĠĠĠĠĠ Ġre cycler : ĠRecyclerView . Recycler , ĊĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitial Index Ġ= Ġget Initial Index ( movement Dir ) ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġfirst Ġvisible Ġitem Ġwill Ġbump Ġus Ġto Ġzero . ĊĠĠĠĠĠĠĠ Ġvar Ġdistance From Start Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġfound Visible View Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġviews ToRemove Ġ= Ġmutable ListOf < Int >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġwant Ġto Ġloop Ġthrough Ġthe Ġviews Ġin Ġthe Ġorder Ġopposite Ġthe Ġdirection Ġof Ġmovement Ġso Ġthat ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġremove Ġviews Ġthat Ġhave Ġbecome Ġhidden Ġbecause Ġof Ġscrolling . ĊĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġif Ġ( movement Dir Ġ== ĠTO WAR DS _ TOP _ LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġuntil Ġchild Count ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Count - 1 Ġdown To Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġhidden Ġviews Ġat Ġthe Ġstart Ġof Ġthe Ġrange . ĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġre cycle Ġhidden Ġviews Ġat Ġthe Ġend Ġof Ġthe Ġrange . ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġrange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġget Child At ( i ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Is Visible ( view )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! found Visible View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Visible View Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance From Start ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( found Visible View ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews ToRemove . add ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemoving Ġthe Ġviews Ġafter Ġcollecting Ġthem Ġand Ġputting Ġthem Ġin Ġorder Ġfrom Ġgreatest Ġ-> Ġleast ĊĠĠĠĠĠĠĠ Ġ// Ġmakes Ġsure Ġwe Ġdon 't Ġget Ġnull Ġerrors . ĠSee Ġ# 1 9 . ĊĠĠĠĠĠĠĠ Ġviews ToRemove . sorted Descending (). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove And Re cycle View At ( i , Ġre cycler ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( views ToRemove . count () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġdidn 't Ġfind Ġanything Ġthat Ġneeded Ġto Ġbe Ġdisposed , Ġno Ġindices Ġneed Ġto Ġbe Ġupdated . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġto Ġflip Ġthe Ġdirection , Ġsince Ġwe Ġloop ed Ġthrough Ġviews Ġin Ġthe Ġopposite Ġorder . ĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġwe Ġflip Ġthe Ġmovement Ġdirection , Ġthe Ġadapter Ġdirection Ġwill Ġbe Ġf lipped Ġas Ġwell . ĊĠĠĠĠĠĠĠ Ġval Ġadapter Direction Ġ= Ġget Adapter Direction From Movement Direction ( movement Dir Ġ* Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġchange In Position Ġ= Ġadapter Direction Ġ* Ġdistance From Start ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġstate . item Count ĊĠĠĠĠĠĠĠ Ġif Ġ( movement Dir Ġ== ĠTO WAR DS _ TOP _ LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Right Index Ġ= Ġinitial Index . loop ( change In Position , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Index Ġ= Ġinitial Index . loop ( change In Position , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġany Ġpart Ġof Ġthe Ġ[ view ] Ġis Ġwithin Ġthe Ġvisible Ġbounds Ġof Ġthe Ġre cycler . ĊĠĠĠĠ Ġ* ĠFalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġview Is Visible ( view : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġfor Ġfuture : ĠMaking Ġthese Ġchecks Ġor = Ġbreaks Ġextra Layout Spacing Ġbecause Ġ( I Ġthink ) Ġif ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġhidden Ġview 's Ġedge Ġis Ġaligned Ġwith Ġthe Ġre cycler Ġedge , Ġit Ġisn 't Ġscr apped Ġwhen Ġit ĊĠĠĠĠĠĠĠ Ġ// Ġshould Ġbe . ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( orientation Ġ== ĠH ORIZONTAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Decorated Right ( view ) Ġ> Ġpadding Left Ġ&& Ġget Decorated Left ( view ) Ġ< Ġwidth Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Decorated Bottom ( view ) Ġ> Ġpadding Top Ġ&& Ġget Decorated Top ( view ) Ġ< Ġheight Ġ- Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthe Ġ[ view ] Ġis Ġfully Ġwithin Ġthe Ġvisible Ġbounds Ġof Ġthe Ġre cycler Ġalong Ġthe ĊĠĠĠĠ Ġ* Ġlayout Ġaxis . ĠThis Ġmeans Ġfully Ġvisible Ġh orizontally Ġin Ġhorizontal Ġmode , Ġand Ġfully Ġvisible ĊĠĠĠĠ Ġ* Ġvert ically Ġin Ġvertical Ġmode . ĠFalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġview Is Fully Visible ( view : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( orientation Ġ== ĠH ORIZONTAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Decorated Left ( view ) Ġ>= Ġpadding Left Ġ&& Ġget Decorated Right ( view ) Ġ<= Ġwidth Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Decorated Top ( view ) Ġ>= Ġpadding Top Ġ&& Ġget Decorated Bottom ( view ) Ġ<= Ġheight Ġ- Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġthe Ġ[ movement Dir ] Ġ([ TO WAR DS _ TOP _ LEFT ] Ġor Ġ[ TO WAR DS _ BOTTOM _ RIGHT ]) Ġto Ġan Ġadapter ĊĠĠĠĠ Ġ* Ġdirection Ġ([ TO WAR DS _ HIG HER _ IND ICES ] ĠOR Ġ[ TO WAR DS _ LOWER _ IND ICES ]). ĠThe Ġadapter Ġdirection ĊĠĠĠĠ Ġ* Ġtells Ġus Ġwhich Ġdirection Ġwe Ġwould Ġbe Ġtra ver sing Ġthe Ġviews Ġin Ġif Ġwe Ġmoved Ġin Ġthe Ġgiven ĊĠĠĠĠ Ġ* Ġmovement Ġdirection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġconvert Movement Dir To Adapter Dir ( movement Dir : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Movement Direction From Adapter Direction ( movement Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġthe Ġ[ movement Dir ] Ġ([ TO WAR DS _ TOP _ LEFT ] Ġor Ġ[ TO WAR DS _ BOTTOM _ RIGHT ]) Ġto Ġan Ġadapter ĊĠĠĠĠ Ġ* Ġdirection Ġ([ TO WAR DS _ HIG HER _ IND ICES ] ĠOR Ġ[ TO WAR DS _ LOWER _ IND ICES ]). ĠThe Ġadapter Ġdirection ĊĠĠĠĠ Ġ* Ġtells Ġus Ġwhich Ġdirection Ġwe Ġwould Ġbe Ġtra ver sing Ġthe Ġviews Ġin Ġif Ġwe Ġmoved Ġin Ġthe Ġgiven ĊĠĠĠĠ Ġ* Ġmovement Ġdirection . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġare Ġworking Ġinside Ġthe Ġlayout Ġmanager Ġthis Ġis Ġwhat Ġyou Ġshould Ġcall ! ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Adapter Direction From Movement Direction ( movement Dir : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Vertical Ġ= Ġorientation Ġ== ĠV ERT ICAL ĊĠĠĠĠĠĠĠ Ġval Ġis Horizontal Ġ= Ġ! is Vertical ĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards Top Left Ġ= Ġmovement Dir Ġ== ĠTO WAR DS _ TOP _ LEFT ĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards Bottom Right Ġ= Ġ! is Tow ards Top Left ĊĠĠĠĠĠĠĠ Ġval Ġis RTL Ġ= Ġis Layout RTL ĊĠĠĠĠĠĠĠ Ġval Ġis LTR Ġ= Ġ! is RTL ĊĠĠĠĠĠĠĠ Ġval Ġis Re versed Ġ= Ġreverse Layout ĊĠĠĠĠĠĠĠ Ġval Ġis Not Re versed Ġ= Ġ! is Re versed ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards Top Left Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ LOWER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards Top Left Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ HIG HER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards Bottom Right Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ HIG HER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards Bottom Right Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ LOWER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Top Left Ġ&& Ġis LTR Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ LOWER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Top Left Ġ&& Ġis LTR Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ HIG HER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Top Left Ġ&& Ġis RTL Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ HIG HER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Top Left Ġ&& Ġis RTL Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ LOWER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Bottom Right Ġ&& Ġis LTR Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ HIG HER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Bottom Right Ġ&& Ġis LTR Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ LOWER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Bottom Right Ġ&& Ġis RTL Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ LOWER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Bottom Right Ġ&& Ġis RTL Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ HIG HER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Invalid Ġmovement Ġstate .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġthe Ġ[ adapter Dir ] Ġ([ TO WAR DS _ HIG HER _ IND ICES ] ĠOR Ġ[ TO WAR DS _ LOWER _ IND ICES ]) Ġto Ġa Ġmovement ĊĠĠĠĠ Ġ* Ġdirection Ġ([ TO WAR DS _ TOP _ LEFT ] Ġor Ġ[ TO WAR DS _ BOTTOM _ RIGHT ]). ĠThe Ġmovement Ġdirection Ġtells Ġus ĊĠĠĠĠ Ġ* Ġwhich Ġdirection Ġwe Ġneed Ġto Ġscroll Ġthe Ġviews Ġin Ġto Ġmove Ġtowards Ġthe Ġgiven Ġadapter Ġdirection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġconvert Adapter Dir To Movement Dir ( adapter Dir : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Movement Direction From Adapter Direction ( adapter Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġthe Ġ[ adapter Dir ] Ġ([ TO WAR DS _ HIG HER _ IND ICES ] ĠOR Ġ[ TO WAR DS _ LOWER _ IND ICES ]) Ġto Ġa Ġmovement ĊĠĠĠĠ Ġ* Ġdirection Ġ([ TO WAR DS _ TOP _ LEFT ] Ġor Ġ[ TO WAR DS _ BOTTOM _ RIGHT ]). ĠThe Ġmovement Ġdirection Ġtells Ġus ĊĠĠĠĠ Ġ* Ġwhich Ġdirection Ġwe Ġneed Ġto Ġscroll Ġthe Ġviews Ġin Ġto Ġmove Ġtowards Ġthe Ġgiven Ġadapter Ġdirection . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġare Ġworking Ġinside Ġthe Ġlayout Ġmanager Ġthis Ġis Ġwhat Ġyou Ġshould Ġcall ! ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Movement Direction From Adapter Direction ( movement Dir : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Vertical Ġ= Ġorientation Ġ== ĠV ERT ICAL ĊĠĠĠĠĠĠĠ Ġval Ġis Horizontal Ġ= Ġ! is Vertical ĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards High er Ġ= Ġmovement Dir Ġ== ĠTO WAR DS _ HIG HER _ IND ICES ĊĠĠĠĠĠĠĠ Ġval Ġis Tow ards Lower Ġ= Ġ! is Tow ards High er ĊĠĠĠĠĠĠĠ Ġval Ġis RTL Ġ= Ġis Layout RTL ĊĠĠĠĠĠĠĠ Ġval Ġis LTR Ġ= Ġ! is RTL ĊĠĠĠĠĠĠĠ Ġval Ġis Re versed Ġ= Ġreverse Layout ĊĠĠĠĠĠĠĠ Ġval Ġis Not Re versed Ġ= Ġ! is Re versed ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards High er Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ BOTTOM _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards High er Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ TOP _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards Lower Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ TOP _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vertical Ġ&& Ġis Tow ards Lower Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ BOTTOM _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards High er Ġ&& Ġis LTR Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ BOTTOM _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards High er Ġ&& Ġis LTR Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ TOP _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards High er Ġ&& Ġis RTL Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ TOP _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards High er Ġ&& Ġis RTL Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ BOTTOM _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Lower Ġ&& Ġis LTR Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ TOP _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Lower Ġ&& Ġis LTR Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ BOTTOM _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Lower Ġ&& Ġis RTL Ġ&& Ġis Not Re versed Ġ-> ĠTO WAR DS _ BOTTOM _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Horizontal Ġ&& Ġis Tow ards Lower Ġ&& Ġis RTL Ġ&& Ġis Re versed Ġ-> ĠTO WAR DS _ TOP _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Invalid Ġadapter Ġstate .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcompute Vertical Scroll Offset ( state : ĠRecyclerView . State ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcompute Scroll Offset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcompute Vertical Scroll Range ( state : ĠRecyclerView . State ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcompute Scroll Range () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcompute Vertical Scroll Extent ( state : ĠRecyclerView . State ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcompute Scroll Extent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcompute Horizontal Scroll Offset ( state : ĠRecyclerView . State ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcompute Scroll Offset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcompute Horizontal Scroll Range ( state : ĠRecyclerView . State ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcompute Scroll Range () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcompute Horizontal Scroll Extent ( state : ĠRecyclerView . State ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcompute Scroll Extent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ" offset " Ġthe Ġview Ġis Ġfrom Ġthe Ġtop . ĠThis Ġis Ġdocumented Ġas Ġneeded Ġto Ġsupport ĊĠĠĠĠ Ġ* Ġscroll bars Ġ( which Ġthe ĠLoop ing LayoutManager Ġdoes Ġnot Ġsupport ), Ġbut Ġit Ġis Ġalso Ġneeded Ġto ĊĠĠĠĠ Ġ* Ġsupport ĠTalk Back Ġaccessibility Ġgest ures . ĠThis Ġfunction Ġreturns Ġa Ġconstant Ġto Ġensure Ġthat ĊĠĠĠĠ Ġ* Ġthe Ġlayout Ġis Ġalways Ġscroll able . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcompute Scroll Offset (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠSC ROLL _ OFFSET ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ" range " Ġof Ġscrolling Ġthe Ġview Ġsupports . ĠThis Ġis Ġdocumented Ġas Ġneeded Ġto Ġsupport ĊĠĠĠĠ Ġ* Ġscroll bars Ġ( which Ġthe ĠLoop ing LayoutManager Ġdoes Ġnot Ġsupport ), Ġbut Ġit Ġis Ġalso Ġneeded Ġto ĊĠĠĠĠ Ġ* Ġsupport ĠTalk Back Ġaccessibility Ġgest ures . ĠThis Ġfunction Ġreturns Ġa Ġconstant Ġto Ġensure Ġthat ĊĠĠĠĠ Ġ* Ġthe Ġlayout Ġis Ġalways Ġscroll able . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcompute Scroll Range (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠSC ROLL _ RANGE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ" extent " Ġof Ġthe Ġview . ĠThis Ġis Ġdocumented Ġas Ġneeded Ġto Ġsupport Ġscroll bars Ġ( which ĊĠĠĠĠ Ġ* Ġthe ĠLoop ing LayoutManager Ġdoes Ġnot Ġsupport ), Ġbut Ġit Ġis Ġalso Ġneeded Ġto Ġsupport ĠTalk Back ĊĠĠĠĠ Ġ* Ġaccessibility Ġgest ures . ĠThis Ġfunction Ġreturns Ġa Ġconstant Ġto Ġensure Ġthat Ġthe Ġlayout Ġis Ġalways ĊĠĠĠĠ Ġ* Ġscroll able . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcompute Scroll Extent (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġdetails Ġto Ġthe Ġaccessibility Ġ[ event ] Ġabout Ġthe Ġrange Ġof Ġviews Ġthat Ġare Ġbeing Ġshown ĊĠĠĠĠ Ġ* Ġso Ġthat Ġit Ġcan Ġbe Ġtold Ġto Ġthe Ġuser . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Initialize Accessibility Event ( ĊĠĠĠĠĠĠĠ Ġre cycler : ĠRecyclerView . Recycler , ĊĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State , ĊĠĠĠĠĠĠĠ Ġevent : ĠAccessibility Event ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Initialize Accessibility Event ( recycler , Ġstate , Ġevent ) ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . from Index Ġ= Ġtop Left Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . to Index Ġ= Ġbottom Right Index ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvector Ġthat Ġpoints Ġto Ġwhere Ġthe Ġ[ target Position ] Ġcan Ġbe Ġfound . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠBy Ġdefault Ġit Ġtries Ġto Ġreturn Ġthe Ġdirection Ġthat Ġwill Ġrequire Ġthe Ġleast Ġamount Ġof Ġscrolling ĊĠĠĠĠ Ġ* Ġto Ġget Ġto , Ġbut Ġif Ġsome Ġviews Ġare Ġlarger Ġor Ġsmaller Ġthan Ġother Ġviews Ġthis Ġmay Ġbe Ġincorrect . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠA Ġdifferent Ġfunction Ġmay Ġbe Ġprovided Ġby Ġassigning Ġit Ġto Ġthe Ġ[ smooth Scroll Direction Dec ider ] ĊĠĠĠĠ Ġ* Ġproperty Ġof Ġthe Ġ[ Loop ing LayoutManager ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġused Ġby Ġthe Ġ[ RecyclerView . Smooth Scroller ] Ġto Ġinitiate Ġa Ġscroll Ġtowards Ġthe ĊĠĠĠĠ Ġ* Ġtarget Ġposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcompute Scroll Vector For Position ( target Position : ĠInt ): ĠPoint F Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcompute Scroll Vector For Position ( target Position , Ġitem Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompute Scroll Vector For Position ( target Position : ĠInt , Ġcount : ĠInt ): ĠPoint F Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmovement Dir Ġ= Ġsmooth Scroll Direction Dec ider ( target Position , Ġthis , Ġcount ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( orientation Ġ== ĠH ORIZONTAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPoint F ( movement Dir . toFloat (), Ġ 0 F ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPoint F ( 0 F , Ġmovement Dir . toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġview Ġwith Ġthe Ġgiven Ġ[ adapter Index ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthere Ġare Ġmultiple Ġviews Ġrepresenting Ġthe Ġsame Ġadapter Ġposition , Ġby Ġdefault Ġthis Ġreturns ĊĠĠĠĠ Ġ* Ġthe Ġview Ġwhose Ġmiddle Ġis Ġclosest Ġto Ġthe Ġmiddle Ġof Ġthe Ġre cycler . ĠIf Ġyou Ġwould Ġlike Ġto Ġuse Ġa ĊĠĠĠĠ Ġ* Ġdifferent Ġtie - break er Ġyou Ġmay Ġpass Ġa Ġfunction Ġto Ġdo Ġso . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġfind View By Position ( adapter Index : ĠInt ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind View By Position ( adapter Index , Ġ:: default Picker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġview Ġwith Ġthe Ġgiven Ġ[ adapter Index ]. ĠYou Ġmust Ġprovide Ġa Ġ[ strategy ] Ġto Ġdecide Ġwhich ĊĠĠĠĠ Ġ* Ġview Ġto Ġreturn Ġin Ġthe Ġcase Ġthat Ġthere Ġare Ġmultiple Ġviews Ġassociated Ġwith Ġthe Ġsame Ġadapter ĊĠĠĠĠ Ġ* Ġposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġfind View By Position ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Index : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy : Ġ( target Index : ĠInt , Ġlayout Manager : ĠLoop ing LayoutManager ) Ġ-> ĠView ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstrategy ( adapter Index , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġall Ġla id Ġout Ġviews Ġthat Ġare Ġassociated Ġwith Ġthe Ġgiven Ġ[ adapter Index ]. Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠfindAll View sWith Position ( adapter Index : ĠInt ): ĠIterable < View > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġcould Ġbe Ġoptimized Ġusing Ġthe Ġstate . item Count Ġto Ġjump Ġover Ġviews Ġwe Ġknow Ġare Ġnot ĊĠĠĠĠĠĠĠ Ġ// Ġassociated Ġwith Ġthe Ġindex . ĠBut Ġgiven Ġthe Ġnumber Ġof Ġviews Ġthat Ġwill Ġbe Ġvisible Ġat Ġonce , ĊĠĠĠĠĠĠĠ Ġ// Ġthat 's Ġan Ġover - optimization Ġat Ġthis Ġtime . ĊĠĠĠĠĠĠĠ Ġval Ġviews Ġ= Ġmutable ListOf < View >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġget Position ( view ) Ġ== Ġadapter Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews Ġ+= Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġviews ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġadapter Ġindex Ġof Ġthe Ġview Ġwith Ġthe Ġ* lowest * Ġadapter Ġindex Ġthat Ġis Ġeven Ġslightly ĊĠĠĠĠ Ġ* Ġvisible . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġfind First Visible Item Position (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlowest Index Ġ= ĠInt . MAX _ VALUE ; ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġget Child At ( i ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġget Position ( view ) Ġ< Ġlowest Index Ġ&& Ġview Is Visible ( view )) Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlowest Index Ġ= Ġget Position ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlowest Index ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġadapter Ġindex Ġof Ġthe Ġview Ġwith Ġthe Ġ* lowest * Ġadapter Ġindex Ġthat Ġis Ġfully Ġvisible . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġfind First Comp let ely Visible Item Position (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlowest Index Ġ= ĠInt . MAX _ VALUE ; ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġget Child At ( i ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġget Position ( view ) Ġ< Ġlowest Index Ġ&& Ġview Is Fully Visible ( view )) Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlowest Index Ġ= Ġget Position ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlowest Index ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġadapter Ġindex Ġof Ġthe Ġview Ġwith Ġthe Ġ* highest * Ġadapter Ġindex Ġthat Ġis Ġeven Ġslightly ĊĠĠĠĠ Ġ* Ġvisible . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġfind Last Visible Item Position (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhighest Index Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġget Position ( view ) Ġ> Ġhighest Index Ġ&& Ġview Is Visible ( view )) Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighest Index Ġ= Ġget Position ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhighest Index ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġadapter Ġindex Ġof Ġthe Ġview Ġwith Ġthe Ġ* highest * Ġadapter Ġindex Ġthat Ġis Ġfully Ġvisible . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġfind Last Comp let ely Visible Item Position (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhighest Index Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġget Position ( view ) Ġ> Ġhighest Index Ġ&& Ġview Is Fully Visible ( view )) Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighest Index Ġ= Ġget Position ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhighest Index ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScroll s Ġthe Ġlayout Ġto Ġmake Ġthe Ġgiven Ġ[ adapter Index ] Ġvisible . ĠIf Ġa Ġview Ġassociated Ġwith Ġthe ĊĠĠĠĠ Ġ* Ġindex Ġis Ġalready Ġentirely Ġvisible , Ġnothing Ġwill Ġchange . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠBy Ġdefault Ġthis Ġwill Ġestimate Ġthe Ġshortest Ġdistance Ġneeded Ġto Ġmake Ġthe Ġview Ġvisible . ĠBut Ġif ĊĠĠĠĠ Ġ* Ġsome Ġviews Ġare Ġsmaller Ġor Ġlarger Ġthan Ġothers , Ġthe Ġestimation Ġmay Ġbe Ġincorrect . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġchange Ġwill Ġnot Ġbe Ġreflected Ġuntil Ġthe Ġnext Ġlayout Ġcall . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġscroll To Position ( adapter Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscroll To Position ( adapter Index , Ġ:: default Dec ider ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScroll s Ġthe Ġlayout Ġto Ġmake Ġthe Ġgiven Ġ[ adapter Index ] Ġvisible . ĠIf Ġa Ġview Ġassociated Ġwith Ġthe ĊĠĠĠĠ Ġ* Ġindex Ġis Ġalready Ġentirely Ġvisible , Ġnothing Ġwill Ġchange . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġviews Ġcould Ġbe Ġsc rolled Ġin Ġeither Ġdirection Ġto Ġmake Ġthe Ġtarget Ġvisible , Ġso Ġyou Ġmust Ġpass ĊĠĠĠĠ Ġ* Ġa Ġ[ strategy ] Ġto Ġdetermine Ġwhich Ġdirection Ġthe Ġre cycler Ġshould Ġbe Ġmoved Ġin . ĠIt Ġshould Ġreturn ĊĠĠĠĠ Ġ* Ġeither Ġ[ TO WARD _ TOP _ LEFT ] Ġor Ġ[ TO WARD _ BOTTOM _ RIGHT ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġchange Ġwill Ġnot Ġbe Ġreflected Ġuntil Ġthe Ġnext Ġlayout Ġcall . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġscroll To Position ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Index : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy : Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Index : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager : ĠLoop ing LayoutManager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Count : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ-> ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view With Index Is Fully Visible ( adapter Index )) Ġreturn ĊĠĠĠĠĠĠĠ Ġlayout Request Ġ= ĠLayout Request ( anchor Index Ġ= Ġadapter Index , Ġscroll Strategy Ġ= Ġstrategy ) ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthere Ġis Ġat Ġleast Ġone Ġview Ġassociated Ġwith Ġte h Ġgiven Ġadapter Ġindex Ġthat Ġis ĊĠĠĠĠ Ġ* Ġfull Ġvisible . ĠFalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġview With Index Is Fully Visible ( adapter Index : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġviews Ġ= ĠfindAll View sWith Position ( adapter Index ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( view Ġin Ġviews ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Is Fully Visible ( view )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġsmooth Scroll To Position ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlooping Smooth Scroller Ġ= ĠLoop ing Smooth Scroller ( re cyclerView . context , Ġstate ) ĊĠĠĠĠĠĠĠ Ġlooping Smooth Scroller . target Position Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġstart Smooth Scroll ( loop ing Smooth Scroller ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠDefines Ġa Ġbetter Ġinterface Ġfor Ġinteracting Ġwith Ġviews Ġin Ġthe Ġcontext Ġof Ġthe ĠLayout Manager . Ġ*/ ĊĠĠĠ Ġprivate Ġabstract Ġinner Ġclass ĠListItem ( protected Ġval Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġ" leading Ġedge " Ġrefers Ġto Ġthe Ġedge Ġthat Ġappears Ġfirst Ġwhen Ġscrolling . ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġthe Ġcase Ġof Ġa Ġvertical Ġlist Ġwhere Ġyou Ġare Ġtrying Ġto Ġsee Ġitems Ġ/ lower / Ġin Ġthe Ġlist , ĊĠĠĠĠĠĠĠ Ġ// Ġit Ġwould Ġbe Ġthe Ġtop Ġedge Ġof Ġthe Ġbottom - most Ġview . ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġ" following Ġedge " Ġis Ġthe Ġopposite , Ġin Ġthe Ġcase Ġabove Ġthat Ġwould Ġbe Ġthe Ġbottom Ġedge . ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġsize Ġof Ġthe Ġpart Ġof Ġthe Ġview Ġthat Ġis Ġhidden Ġ( sc rolled Ġoff Ġscreen ). ĠShould ĊĠĠĠĠĠĠĠĠ Ġ* Ġnever Ġbe Ġnegative . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġabstract Ġval Ġhidden Size : ĠInt ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġlocation Ġof Ġthe Ġedge Ġof Ġthe Ġview Ġthat Ġis Ġcoming Ġinto Ġview Ġfirst . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġabstract Ġval Ġleading Edge : ĠInt ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġlocation Ġof Ġthe Ġedge Ġof Ġthe Ġview Ġthat Ġis Ġcoming Ġinto Ġview Ġlast . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġabstract Ġval Ġfollowing Edge : ĠInt ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġsize Ġof Ġthe Ġview Ġalong Ġthe Ġlayout Ġaxis Ġ( i . e . Ġthe Ġwidth Ġin Ġhorizontal ĊĠĠĠĠĠĠĠĠ Ġ* Ġmode , Ġthe Ġheight Ġin Ġvertical Ġmode ). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġabstract Ġval Ġsize : ĠInt ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġrect Ġdefining Ġthe Ġposition Ġthe Ġprovided Ġ[ item ] Ġwould Ġhave Ġif Ġit Ġwas ĊĠĠĠĠĠĠĠĠ Ġ* Ġposition Ġ" after " Ġthis Ġitem . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠAfter Ġis Ġdefined Ġas Ġtowards Ġthe Ġtop Ġfor Ġa Ġbottom Ġleading Ġitem , Ġtowards Ġthe Ġleft Ġfor Ġa ĊĠĠĠĠĠĠĠĠ Ġ* Ġright Ġleading Ġitem , Ġetc . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrect ĠA Ġrect Ġdefining Ġthe Ġstatic Ġedges Ġof Ġthe Ġlayout Ġ( i . e . Ġleft Ġand Ġright Ġfor Ġa ĊĠĠĠĠĠĠĠĠ Ġ* Ġvertical Ġlayout , Ġtop Ġand Ġbottom Ġfor Ġa Ġhorizontal Ġone ). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġabstract Ġfun Ġget Position Of Item Following Self ( item : ĠListItem , Ġrect : ĠRect ): ĠRect ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġrect Ġdefining Ġthe Ġposition Ġthis Ġitem Ġwould Ġhave Ġif Ġit Ġwas Ġposition ed Ġat ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġ" start " Ġof Ġthe Ġlayout . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠStart Ġis Ġdefined Ġas Ġthe ĠLead ing Ġedge Ġaligned Ġwith Ġthe Ġsame Ġedge Ġof Ġthe Ġre cycler . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġmeans Ġthe Ġtop Ġaligned Ġwith Ġthe Ġtop Ġfor Ġa Ġtop Ġleading Ġitem , Ġor Ġthe Ġleft Ġaligned ĊĠĠĠĠĠĠĠĠ Ġ* Ġwith Ġthe Ġleft Ġfor Ġa Ġleft Ġleading Ġitem . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrect ĠA Ġrect Ġdefining Ġthe Ġstatic Ġedges Ġof Ġthe Ġlayout Ġ( i . e . Ġleft Ġand Ġright Ġfor Ġa ĊĠĠĠĠĠĠĠĠ Ġ* Ġvertical Ġlayout , Ġtop Ġand Ġbottom Ġfor Ġa Ġhorizontal Ġone ). ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġhidden Amount ĠThe Ġamount Ġof Ġthe Ġview Ġthat Ġshould Ġbe Ġhidden Ġbeyond Ġthe Ġedge Ġit ĊĠĠĠĠĠĠĠĠ Ġ* Ġis Ġbeing Ġaligned Ġwith . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġabstract Ġfun Ġget Position Of Self As First ( rect : ĠRect , Ġhidden Amount : ĠInt ): ĠRect ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠLead ing Left ListItem ( ĊĠĠĠĠĠĠĠ Ġview : ĠView ĊĠĠĠ Ġ) Ġ: ĠListItem ( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġhidden Size : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( get Decorated Right ( view ) Ġ- Ġ( width Ġ- Ġpadding Right )). coerce At Least ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġleading Edge : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Left ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġfollowing Edge : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Right ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Measured Width ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġget Position Of Item Following Self ( item : ĠListItem , Ġrect : ĠRect ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . left Ġ= Ġfollowing Edge ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . right Ġ= Ġrect . left Ġ+ Ġitem . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġget Position Of Self As First ( rect : ĠRect , Ġhidden Amount : ĠInt ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . left Ġ= Ġpadding Left Ġ- Ġhidden Amount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . right Ġ= Ġrect . left Ġ+ Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠLead ing Top ListItem ( ĊĠĠĠĠĠĠĠ Ġview : ĠView ĊĠĠĠ Ġ) Ġ: ĠListItem ( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġhidden Size : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( get Decorated Bottom ( view ) Ġ- Ġ( height Ġ- Ġpadding Bottom )). coerce At Least ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġleading Edge : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Top ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġfollowing Edge : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Bottom ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Measured Height ( view ) ĊĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġget Position Of Item Following Self ( item : ĠListItem , Ġrect : ĠRect ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . top Ġ= Ġfollowing Edge ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . bottom Ġ= Ġrect . top Ġ+ Ġitem . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġget Position Of Self As First ( rect : ĠRect , Ġhidden Amount : ĠInt ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . top Ġ= Ġpadding Top Ġ- Ġhidden Amount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . bottom Ġ= Ġrect . top Ġ+ Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠLead ing Right ListItem ( view : ĠView ) Ġ: ĠListItem ( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġhidden Size : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( padding Left Ġ- Ġget Decorated Left ( view )). coerce At Least ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġleading Edge : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Right ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġfollowing Edge : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Left ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Measured Width ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġget Position Of Item Following Self ( item : ĠListItem , Ġrect : ĠRect ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . right Ġ= Ġfollowing Edge ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . left Ġ= Ġrect . right Ġ- Ġitem . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġget Position Of Self As First ( rect : ĠRect , Ġhidden Amount : ĠInt ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . right Ġ= Ġ( width Ġ- Ġpadding Right ) Ġ+ Ġhidden Amount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . left Ġ= Ġrect . right Ġ- Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠLead ing Bottom ListItem ( view : ĠView ) Ġ: ĠListItem ( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġhidden Size : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( padding Top Ġ- Ġget Decorated Top ( view )). coerce At Least ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġleading Edge : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Bottom ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġfollowing Edge : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Top ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Decorated Measured Height ( view ) ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġget Position Of Item Following Self ( item : ĠListItem , Ġrect : ĠRect ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . bottom Ġ= Ġfollowing Edge ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . top Ġ= Ġrect . bottom Ġ- Ġitem . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġget Position Of Self As First ( rect : ĠRect , Ġhidden Amount : ĠInt ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . bottom Ġ= Ġ( height Ġ- Ġpadding Bottom ) Ġ+ Ġhidden Amount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . top Ġ= Ġrect . bottom Ġ- Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġsmooth Ġsc roller Ġthat Ġsupports Ġthe ĠLoop ing LayoutManager 's Ġtwo Ġ( at Ġthe Ġtime Ġof Ġwriting ) Ġqu ir ks : ĊĠĠĠĠ Ġ* ĠĠĠĠ 1 ) ĠBy Ġdefault Ġthe Ġlayout Ġmanager Ġonly Ġl ays Ġout Ġvisible Ġviews . ĊĠĠĠĠ Ġ* ĠĠĠĠ 2 ) ĠThe Ġlayout Ġmanager Ġmust Ġbe Ġgiven Ġthe Ġstate . item Count Ġto Ġproperly Ġcalculate ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠ Ġa Ġscroll Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠLoop ing Smooth Scroller ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate : ĠRecyclerView . State ĊĠĠĠ Ġ) Ġ: ĠLinear Smooth Scroller ( context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTell s Ġthe ĠLoop ing LayoutManager Ġto Ġstart Ġlay ing Ġout Ġextra Ġ( i . e . Ġnot Ġvisible ) Ġviews . ĠThis ĊĠĠĠĠĠĠĠĠ Ġ* Ġallows Ġthe Ġtarget Ġview Ġto Ġbe Ġfound Ġbefore Ġit Ġbecomes Ġvisible , Ġwhich Ġhelps Ġwith Ġsmooth ĊĠĠĠĠĠĠĠĠ Ġ* Ġde cel eration . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBased Ġon Ġthe ĠMaterial ĠDesign ĠGuidelines , Ġ 5 0 0 Ġms Ġshould Ġbe Ġpl enty Ġof Ġtime Ġto Ġde cel erate . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrate Ġ= Ġcalculate Speed Per Pixel ( context . resources . display Metrics ) Ġ Ġ// ĠMS / Pixel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġ 5 0 0 Ġ Ġ// ĠMS . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( layout Manager Ġas ĠLoop ing LayoutManager ). extra Layout Space Ġ= Ġ( rate Ġ* Ġtime ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTell s Ġthe ĠLoop ing LayoutManager Ġto Ġstop Ġlay ing Ġout Ġextra Ġviews , Ġb / c Ġthere 's Ġno Ġneed ĊĠĠĠĠĠĠĠĠ Ġ* Ġto Ġlay Ġout Ġviews Ġthe Ġuser Ġcan 't Ġsee . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( layout Manager Ġas ĠLoop ing LayoutManager ). extra Layout Space Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġcompute Scroll Vector For Position ( target Position : ĠInt ): ĠPoint F ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġlayout Manager Ġ Ġ// ĠEnables Ġsmart Ġcast . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Manager Ġis ĠLoop ing LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlayout Manager . compute Scroll Vector For Position ( target Position , Ġstate . item Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" A ĠLoop ing Smooth Scroller Ġshould Ġonly Ġbe Ġattached Ġto Ġa ĠLoop ing LayoutManager .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHold s Ġthe Ġdata Ġnecessary Ġto Ġre - layout Ġthe Ġre cycler . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġclass ĠLayout Request () Ġ: ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġtarget Ġadapter Ġindex Ġwe Ġwant Ġto Ġlayout Ġat Ġthe Ġedge Ġassociated Ġwith Ġthe Ġadapter Direction ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġvar Ġanchor Index : ĠInt Ġ= ĠRecyclerView . NO _ POSITION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Been Initialized ) Ġthrow ĠException (" Layout Request Ġhas Ġnot Ġbeen Ġinitialized .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġamount Ġ( in Ġpixels ) Ġof Ġthe Ġview Ġassociated Ġwith Ġthe Ġanchor Index Ġthat Ġshould Ġbe Ġhidden . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġvar Ġscroll Offset : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Been Initialized ) Ġthrow ĠException (" Layout Request Ġhas Ġnot Ġbeen Ġinitialized .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTell s Ġus Ġwhich Ġedge Ġthe Ġview Ġassociated Ġwith Ġthe Ġ[ anchor Index ] Ġshould Ġbe Ġla id Ġout Ġat . ĠIf ĊĠĠĠĠĠĠĠĠ Ġ* Ġit Ġis Ġ[ TO WAR DS _ LOWER _ IND ICES ] Ġthe Ġview Ġwill Ġbe Ġla id Ġout Ġat Ġthe Ġedge Ġwhere Ġthe Ġview ĊĠĠĠĠĠĠĠĠ Ġ* Ġassociated Ġwith Ġthe Ġzero Ġadapter Ġindex Ġwas Ġoriginally Ġla id Ġout Ġat . ĠIf Ġit Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ TO WAR DS _ HIG HER _ IND ICES ] Ġit Ġwill Ġbe Ġthe Ġopposite Ġedge . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġvar Ġadapter Direction : ĠInt Ġ= ĠTO WAR DS _ LOWER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Been Initialized ) Ġthrow ĠException (" Layout Request Ġhas Ġnot Ġbeen Ġinitialized .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġdirection al Ġdec ider Ġused Ġto Ġpick Ġa Ġdirection Ġto Ġ" move " Ġin Ġif Ġone Ġwas Ġnot Ġprovided ĊĠĠĠĠĠĠĠĠ Ġ* Ġexplicitly . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġvalue Ġcannot Ġbe Ġpar ce led . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġscroll Strategy : Ġ(( Int , ĠLoop ing LayoutManager , ĠInt ) Ġ-> ĠInt )? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠHas Ġthe Ġlayout Ġrequest Ġbeen Ġinitialized Ġto Ġmake Ġsure Ġall Ġof Ġits Ġpublic Ġvars Ġare Ġvalid ? ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġhas Been Initialized Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġpublic Ġconstructor ( parcel : ĠParcel ) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Index Ġ= Ġparcel . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Offset Ġ= Ġparcel . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Direction Ġ= Ġparcel . readInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Index : ĠInt Ġ= ĠRecyclerView . NO _ POSITION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Offset : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Direction : ĠInt Ġ= ĠTO WAR DS _ LOWER _ IND ICES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Strategy : Ġ(( Int , ĠLoop ing LayoutManager , ĠInt ) Ġ-> ĠInt )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager : ĠLoop ing LayoutManager ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . anchor Index Ġ= Ġanchor Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . scroll Offset Ġ= Ġscroll Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . adapter Direction Ġ= Ġadapter Direction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . scroll Strategy Ġ= Ġscroll Strategy ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Manager Ġ!= Ġnull Ġ&& Ġstate Ġ!= Ġnull ) Ġinitialize ( layout Manager , Ġstate ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Been Initialized ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġanchor Index Ġ!= ĠRecyclerView . NO _ POSITION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġscroll Strategy Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Been Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMakes Ġsure Ġthat Ġall Ġof Ġthis ĠLayout Requests Ġpublic Ġvariables Ġare Ġvalid . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġinitialize ( layout Manager : ĠLoop ing LayoutManager , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Been Initialized ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Been Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthis Ġis Ġexecuting Ġa Ġscroll To , Ġthe Ġanchor Index Ġwill Ġbe Ġset , Ġbut Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadapter Direction Ġstill Ġneeds Ġto Ġbe Ġdecided . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Direction Ġ= Ġscroll Strategy ?. invoke ( anchor Index , Ġlayout Manager , Ġstate . item Count )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . get Adapter Direction From Movement Direction ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġadapter Direction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthis Ġis Ġan Ġadapter Ġdata Ġupdate , Ġthe Ġadapter Direction Ġwill Ġbe Ġset Ġbut Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġanchor Index Ġand Ġscroll Offset Ġstill Ġneed Ġto Ġbe Ġdecided . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anchor Index Ġ== ĠRecyclerView . NO _ POSITION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Manager . child Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirection Ġ= Ġlayout Manager . get Movement Direction From Adapter Direction ( adapter Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Index Ġ= Ġlayout Manager . get Initial Index ( direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Offset Ġ= Ġlayout Manager . get Initial Item ( direction ). hidden Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRe sets Ġthis Ġlayout Ġrequest Ġto Ġa Ġdefault Ġlayout Ġrequest Ġso Ġthat Ġthe Ġinformation Ġcan Ġbe ĊĠĠĠĠĠĠĠĠ Ġ* Ġre - initialized Ġif Ġon Layout Children Ġgets Ġcalled . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġfinish Processing () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Index Ġ= ĠRecyclerView . NO _ POSITION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Offset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Direction Ġ= ĠTO WAR DS _ LOWER _ IND ICES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Strategy Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Been Initialized Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun ĠwriteTo Parcel ( parcel : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel . writeInt ( anchor Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel . writeInt ( scroll Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel . writeInt ( adapter Direction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject ĠCRE ATOR Ġ: ĠParcel able . Creator < Layout Request > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġcreate From Parcel ( parcel : ĠParcel ): ĠLayout Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLayout Request ( parcel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Layout Request ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArray ( size ) Ġ{ ĠLayout Request () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Loop ing LayoutManager " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEBUG Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠH ORIZONTAL Ġ= ĠOrientation Helper . HORIZONTAL ĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠV ERT ICAL Ġ= ĠOrientation Helper . VERTICAL ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDescri bes Ġthe Ġuser Ġscrolling Ġtowards Ġthe Ġtop / left Ġof Ġthe Ġscreen . ĠNOTE : Ġthis Ġdoes Ġ* not * ĊĠĠĠĠĠĠĠĠ Ġ* Ġdescribe Ġthe Ġdirection Ġviews Ġare Ġmoving Ġin . ĠThe Ġuser Ġis Ġtrying Ġto Ġsee Ġnew Ġviews Ġat Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġtop / left . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠTO WAR DS _ TOP _ LEFT Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDescri bes Ġthe Ġuser Ġscrolling Ġtowards Ġthe Ġbottom / right Ġof Ġthe Ġscreen . ĠNOTE : Ġthis Ġdoes ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* not * Ġdescribe Ġthe Ġdirection Ġviews Ġare Ġmoving Ġin . ĠThe Ġuser Ġis Ġtrying Ġto Ġsee Ġnew Ġviews ĊĠĠĠĠĠĠĠĠ Ġ* Ġat Ġthe Ġbottom / right . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠTO WAR DS _ BOTTOM _ RIGHT Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDescri bes Ġthe Ġdirection Ġwe Ġneed Ġto Ġtraverse Ġview Ġindices Ġin Ġto Ġget Ġto Ġlarger Ġadapter Ġindices . ĊĠĠĠĠĠĠĠĠ Ġ* ĠIn Ġthis Ġcase Ġwe Ġneed Ġto Ġtraverse Ġthe Ġviews Ġbackwards Ġ( Max Ġ-> Ġ 0 ) Ġto Ġget Ġto Ġhigher Ġadapter ĊĠĠĠĠĠĠĠĠ Ġ* Ġindices . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠTO WAR DS _ LOWER _ IND ICES Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDescri bes Ġthe Ġdirection Ġwe Ġneed Ġto Ġtraverse Ġview Ġindices Ġin Ġto Ġget Ġto Ġlarger Ġadapter Ġindices . ĊĠĠĠĠĠĠĠĠ Ġ* ĠIn Ġthis Ġcase Ġwe Ġneed Ġto Ġtraverse Ġthe Ġviews Ġforwards Ġ( 0 Ġ-> ĠMax ) Ġto Ġget Ġto Ġhigher Ġadapter ĊĠĠĠĠĠĠĠĠ Ġ* Ġindices . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠTO WAR DS _ HIG HER _ IND ICES Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġconstant Ġreturned Ġby Ġthe Ġ[ compute Scroll Offset ] Ġfunction Ġso Ġthat Ġaccessibility Ġknows ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġlayout Ġis Ġalways Ġscroll able . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSC ROLL _ OFFSET Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġconstant Ġreturned Ġby Ġthe Ġ[ compute Scroll Range ] Ġfunction Ġso Ġthat Ġaccessibility Ġknows ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġlayout Ġis Ġalways Ġscroll able . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSC ROLL _ RANGE Ġ= Ġ 2 0 0 ĊĠĠĠ Ġ} Ċ Ċ } Ċ