/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . google . android . samples . in sets animation Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . View Parent Ċ import Ġandroid . view . Window Insets Animation Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . core . view . Nested Scrolling Parent 3 Ċ import Ġandroidx . core . view . Nested Scrolling Parent Helper Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . core . view . Window Insets Animation Controller Compat Ċ import Ġandroidx . core . view . Window Insets Compat Ċ Ċ /** Ċ Ġ* ĠA Ġ[ LinearLayout ] Ġwhich Ġacts Ġas Ġa Ġ[ nested Ġscroll Ġparent ][ Nested Scrolling Parent 3 ] Ġto Ġautomatically Ċ Ġ* Ġcontrol Ġthe ĠI ME Ġinset Ġand Ġvisibility Ġwhen Ġrunning Ġon Ġdevices Ġwith ĠAPI Ġlevel Ġ 3 0 +. Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġtracks Ġscrolling , Ġover scroll ing , Ġand Ġfl ing ing Ġgest ures Ġon Ġchild Ġscrolling Ġviews , Ċ Ġ* Ġsuch Ġas Ġa Ġ[ android x . recyclerview . widget . RecyclerView ]. Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġtriggers Ġa Ġrequest Ġto Ġcontrol Ġthe ĠI ME Ġin sets Ġvia Ċ Ġ* Ġ[ Simple I me Animation Controller . start Control Request ] Ġonce Ġit Ġdetect s Ġa Ġscroll Ġin Ġan Ġappropriate Ċ Ġ* Ġdirection Ġto Ġ[ on Nested Pre Scroll ] Ġand Ġ[ on Nested Scroll ]. ĠOnce Ġin Ġcontrol , Ġthe Ġclass Ġwill Ġinset Ċ Ġ* Ġ( move ) Ġthe ĠI ME Ġin / off Ġscreen Ġbased Ġon Ġthe Ġuser 's Ġscroll Ġposition , Ġusing Ċ Ġ* Ġ[ Simple I me Animation Controller . in set By ]. Ċ Ġ* Ċ Ġ* ĠThe Ġclass Ġsupports Ġboth Ġanim ating Ġthe ĠI ME Ġonto Ġscreen Ġ( from Ġnot Ġvisible ), Ġand Ġanim ating Ġit Ċ Ġ* Ġoff - screen Ġ( from Ġvisible ). ĠThis Ġcan Ġbe Ġcustomized Ġthrough Ġthe Ġ[ scroll I me On Screen When Not Visible ] Ċ Ġ* Ġand Ġ[ scroll I me Off Screen When Visible ] Ġproperties . Ċ Ġ* Ċ Ġ* ĠNote : Ġall Ġof Ġthe Ġnested Ġscrolling Ġlogic Ġcould Ġbe Ġextracted Ġto Ġa Ġ` Coordinator Layout . Behavior ` Ċ Ġ* Ġif Ġdesired . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcontext ĠThe ĠContext Ġthe Ġview Ġis Ġrunning Ġin , Ġthrough Ġwhich Ġit Ġcan Ċ Ġ* Ġaccess Ġthe Ġcurrent Ġtheme , Ġresources , Ġetc . Ċ Ġ* Ġ@ param Ġattrs ĠThe Ġattributes Ġof Ġthe ĠXML Ġtag Ġthat Ġis Ġinfl ating Ġthe Ġview . Ċ Ġ* Ġ@ param Ġdef Style Attr ĠAn Ġattribute Ġin Ġthe Ġcurrent Ġtheme Ġthat Ġcontains Ġa Ċ Ġ* Ġreference Ġto Ġa Ġstyle Ġresource Ġthat Ġsupp lies Ġdefault Ġvalues Ġfor Ġthe Ġview . Ċ Ġ* ĠCan Ġbe Ġ 0 Ġto Ġnot Ġlook Ġfor Ġdefaults . Ċ Ġ*/ Ċ @ Requires Api ( Build . VERSION _ CODES . R ) Ċ class ĠIn sets Animation LinearLayout Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠLinearLayout ( context , Ġattrs , Ġdef Style Attr ), ĠNested Scrolling Parent 3 Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOur Ġ[ Nested Scrolling Parent Helper ] Ġhelper Ġclass Ġfor Ġimplementing Ġnested Ġscrolling Ġparent Ġviews ĊĠĠĠĠ Ġ* Ġcompatible Ġwith ĠAndroid Ġplatform Ġversions Ġearlier Ġthan ĠAndroid Ġ 5 . 0 ĠL ol lip op Ġ( API Ġ 2 1 ). ĊĠĠĠĠ Ġ* Ġ[ ViewGroup ] Ġsubclasses Ġshould Ġinstantiate Ġa Ġfinal Ġinstance Ġof Ġthis Ġclass Ġas Ġa Ġfield Ġat ĊĠĠĠĠ Ġ* Ġconstruction . ĠFor Ġeach Ġ[ ViewGroup ] Ġmethod Ġthat Ġhas Ġa Ġmatching Ġmethod Ġsignature Ġin Ġthis Ġclass , ĊĠĠĠĠ Ġ* Ġdelegate Ġthe Ġoperation Ġto Ġthe Ġhelper Ġinstance Ġin Ġan Ġoverridden Ġmethod Ġimplementation . ĠThis ĊĠĠĠĠ Ġ* Ġimplements Ġthe Ġstandard Ġframework Ġpolicy Ġfor Ġnested Ġscrolling . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġnested Scrolling Parent Helper Ġ= ĠNested Scrolling Parent Helper ( this ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOur Ġnested Ġscrolling Ġ[ View ]. ĠIt Ġis Ġa ĠDirect Ġchild Ġof Ġthis ĠView Parent Ġwhich Ġcontains Ġthe Ġtarget ĊĠĠĠĠ Ġ* Ġwhich Ġhas Ġsuccessfully Ġclaimed Ġa Ġnested Ġscroll Ġoperation . ĠIt Ġis Ġset Ġin Ġour Ġoverride Ġof Ġthe ĊĠĠĠĠ Ġ* Ġ[ on Nested Scroll Accepted ] Ġto Ġthe Ġ` child ` Ġ[ View ] Ġpassed Ġto Ġthe Ġmethod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġcurrent Nested Scrolling Child : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Simple I me Animation Controller ] Ġwhich Ġwraps Ġa Ġ[ Window Insets Animation Controller Compat ] Ġto ĊĠĠĠĠ Ġ* Ġsimplify Ġthe Ġimplementation Ġof Ġcommon Ġuse - cases Ġaround Ġthe Ġapp - driven Ġanimation Ġof Ġthe ĠI ME . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġ ime Anim Controller Ġ= ĠSimple I me Animation Controller () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġchange Ġin Ġlocation Ġof Ġthe Ġnested Ġscrolling Ġview . ĠTODO : Ġexpand Ġonce Ġyou Ġunderstand Ġbetter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġdrop Next Y : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcurrent Ġlocation Ġof Ġthe Ġnested Ġscrolling Ġview Ġ[ current Nested Scrolling Child ] Ġwhen Ġour ĊĠĠĠĠ Ġ* Ġ[ start Control Request ] Ġmethod Ġis Ġcalled Ġto Ġstart Ġan ĠI ME Ġcontrol Ġrequest . ĠIt Ġis Ġused Ġin Ġour ĊĠĠĠĠ Ġ* Ġ[ on Controller Ready ] Ġmethod Ġto Ġcalculate Ġ[ drop Next Y ] Ġ( the Ġdifference Ġin Ġthe Ġview 's ĠY Ġin Ġthe ĊĠĠĠĠ Ġ* Ġwindow . ĠWe Ġstore Ġthat Ġto Ġfind Ġthe Ġoffset Ġat Ġthe Ġnext Ġnested Ġscroll ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġstart View Location Ġ= ĠInt Array ( 2 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġto Ġtrue Ġto Ġallow Ġscrolling Ġthe ĠI ME Ġoff Ġscreen Ġ( from Ġbeing Ġvisible ), ĊĠĠĠĠ Ġ* Ġby Ġan Ġdown wards Ġscroll . ĠDefaults Ġto Ġ` true `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġvar Ġscroll I me Off Screen When Visible Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġto Ġtrue Ġto Ġallow Ġscrolling Ġthe ĠI ME Ġon Ġscreen Ġ( from Ġnot Ġbeing Ġvisible ), ĊĠĠĠĠ Ġ* Ġby Ġan Ġup wards Ġscroll . ĠDefaults Ġto Ġ` true `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġvar Ġscroll I me On Screen When Not Visible Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReact Ġto Ġa Ġdesc endant Ġview Ġiniti ating Ġa Ġnest able Ġscroll Ġoperation , Ġclaim ing Ġthe Ġnested Ġscroll ĊĠĠĠĠ Ġ* Ġoperation Ġif Ġappropriate . ĠThis Ġmethod Ġwill Ġbe Ġcalled Ġin Ġresponse Ġto Ġa Ġdesc endant Ġview Ġinvoking ĊĠĠĠĠ Ġ* Ġ` View Compat . start Nested Scroll ( View , Ġint )`. ĠEach Ġparent Ġup Ġthe Ġview Ġhierarchy Ġwill Ġbe Ġgiven Ġan ĊĠĠĠĠ Ġ* Ġopportunity Ġto Ġrespond Ġand Ġclaim Ġthe Ġnested Ġscrolling Ġoperation Ġby Ġreturning Ġ` true `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġmay Ġbe Ġoverridden Ġby Ġ` View Parent ` Ġimplementations Ġto Ġindicate Ġwhen Ġthe Ġview ĊĠĠĠĠ Ġ* Ġis Ġwilling Ġto Ġsupport Ġa Ġnested Ġscrolling Ġoperation Ġthat Ġis Ġabout Ġto Ġbegin . ĠIf Ġit Ġreturns ĊĠĠĠĠ Ġ* Ġ` true `, Ġthis Ġ` View Parent ` Ġwill Ġbecome Ġthe Ġtarget Ġview 's Ġnested Ġscrolling Ġparent Ġfor Ġthe ĊĠĠĠĠ Ġ* Ġduration Ġof Ġthe Ġscroll Ġoperation Ġin Ġprogress . ĠWhen Ġthe Ġnested Ġscroll Ġis Ġfinished Ġthis ĊĠĠĠĠ Ġ* Ġ` View Parent ` Ġwill Ġreceive Ġa Ġcall Ġto Ġ` on Stop Nested Scroll ( View , Ġint )`. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWe Ġreturn Ġ` true ` Ġif Ġthe Ġ[ View Compat . SCROLL _ AXIS _ VERTICAL ] Ġbit Ġin Ġour Ġ[ axes ] Ġparameter Ġis Ġset , ĊĠĠĠĠ Ġ* Ġand Ġour Ġ[ type ] Ġparameter Ġis Ġ[ View Compat . TYPE _ TO UCH ], Ġotherwise Ġwe Ġreturn Ġ` false `. Ġ( ie . ĠWe ĊĠĠĠĠ Ġ* Ġonly Ġwant Ġto Ġtrack Ġvertical Ġscroll s , Ġwhich Ġare Ġdriven Ġfrom Ġa Ġdirect Ġtouch Ġevent ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġchild ĠDirect Ġchild Ġof Ġthis Ġ` View Parent ` Ġcontaining Ġtarget ĊĠĠĠĠ Ġ* Ġ@ param Ġtarget ĠView Ġthat Ġinitiated Ġthe Ġnested Ġscroll ĊĠĠĠĠ Ġ* Ġ@ param Ġaxes ĠFlags Ġconsisting Ġof Ġ[ View Compat . SCROLL _ AXIS _ HORIZONTAL ], ĊĠĠĠĠ Ġ* Ġ[ View Compat . SCROLL _ AXIS _ VERTICAL ] Ġor Ġboth ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Ġthe Ġtype Ġof Ġinput Ġwhich Ġcaused Ġthis Ġscroll Ġevent ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthis Ġ` View Parent ` Ġaccepts Ġthe Ġnested Ġscroll Ġoperation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonStart Nested Scroll ( child : ĠView , Ġtarget : ĠView , Ġaxes : ĠInt , Ġtype : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġonly Ġwant Ġto Ġtrack Ġvertical Ġscroll s , Ġwhich Ġare Ġdriven Ġfrom Ġa Ġdirect Ġtouch Ġevent . ĊĠĠĠĠĠĠĠ Ġreturn Ġ( axes Ġand ĠView Compat . SCROLL _ AXIS _ VERTICAL ) Ġ!= Ġ 0 Ġ&& Ġtype Ġ== ĠView Compat . TYPE _ TO UCH ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReact Ġto Ġthe Ġsuccessful Ġclaim ing Ġof Ġa Ġnested Ġscroll Ġoperation . ĠThis Ġmethod Ġwill Ġbe Ġcalled ĊĠĠĠĠ Ġ* Ġafter Ġ[ onStart Nested Scroll ] Ġreturns Ġ` true `. ĠIt Ġoffers Ġan Ġopportunity Ġfor Ġthe Ġview Ġand Ġits ĊĠĠĠĠ Ġ* Ġsuper classes Ġto Ġperform Ġinitial Ġconfiguration Ġfor Ġthe Ġnested Ġscroll . ĠImplement ations Ġof Ġthis ĊĠĠĠĠ Ġ* Ġmethod Ġshould Ġalways Ġcall Ġtheir Ġsuperclass 's Ġimplementation Ġof Ġthis Ġmethod Ġif Ġone Ġis Ġpresent . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWe Ġcall Ġthe Ġ` on Nested Scroll Accepted ` Ġmethod Ġof Ġour Ġ[ Nested Scrolling Parent Helper ] Ġfield ĊĠĠĠĠ Ġ* Ġ[ nested Scrolling Parent Helper ], Ġthen Ġset Ġour Ġ[ View ] Ġfield Ġ[ current Nested Scrolling Child ] Ġto ĊĠĠĠĠ Ġ* Ġour Ġparameter Ġ[ child ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġchild ĠDirect Ġchild Ġof Ġthis Ġ[ View Parent ] Ġcontaining Ġtarget ĊĠĠĠĠ Ġ* Ġ@ param Ġtarget ĠView Ġthat Ġinitiated Ġthe Ġnested Ġscroll ĊĠĠĠĠ Ġ* Ġ@ param Ġaxes ĠFlags Ġconsisting Ġof Ġ[ View Compat . SCROLL _ AXIS _ HORIZONTAL ], ĊĠĠĠĠ Ġ* Ġ[ View Compat . SCROLL _ AXIS _ VERTICAL ] Ġor Ġboth . ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Ġthe Ġtype Ġof Ġinput Ġwhich Ġcaused Ġthis Ġscroll Ġevent . ĠThis Ġwill Ġbe ĊĠĠĠĠ Ġ* Ġ[ View Compat . TYPE _ TO UCH ] Ġsince Ġthat Ġis Ġthe Ġonly Ġtype Ġour Ġ[ onStart Nested Scroll ] ĊĠĠĠĠ Ġ* Ġoverride Ġreturns Ġ` true ` Ġfor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Nested Scroll Accepted ( child : ĠView , Ġtarget : ĠView , Ġaxes : ĠInt , Ġtype : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnested Scrolling Parent Helper . on Nested Scroll Accepted ( child , Ġtarget , Ġaxes , Ġtype ) ĊĠĠĠĠĠĠĠ Ġcurrent Nested Scrolling Child Ġ= Ġchild ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReact Ġto Ġa Ġnested Ġscroll Ġin Ġprogress Ġbefore Ġthe Ġtarget Ġview Ġconsume s Ġa Ġportion Ġof Ġthe Ġscroll . ĊĠĠĠĠ Ġ* ĠWhen Ġworking Ġwith Ġnested Ġscrolling Ġoften Ġthe Ġparent Ġview Ġmay Ġwant Ġan Ġopportunity Ġto Ġconsume ĊĠĠĠĠ Ġ* Ġthe Ġscroll Ġbefore Ġthe Ġnested Ġscrolling Ġchild Ġdoes . ĠAn Ġexample Ġof Ġthis Ġis Ġa Ġdrawer Ġthat ĊĠĠĠĠ Ġ* Ġcontains Ġa Ġscroll able Ġlist . ĠThe Ġuser Ġwill Ġwant Ġto Ġbe Ġable Ġto Ġscroll Ġthe Ġlist Ġfully Ġinto Ġview ĊĠĠĠĠ Ġ* Ġbefore Ġthe Ġlist Ġitself Ġbegins Ġscrolling . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ on Nested Pre Scroll ] Ġis Ġcalled Ġwhen Ġa Ġnested Ġscrolling Ġchild Ġinvokes Ġ[ View . dispatch Nested Pre Scroll ]. ĊĠĠĠĠ Ġ* ĠThe Ġimplementation Ġshould Ġreport Ġhow Ġany Ġpixels Ġof Ġthe Ġscroll Ġreported Ġby Ġdx , Ġdy Ġwere Ġconsumed ĊĠĠĠĠ Ġ* Ġin Ġthe Ġ[ consumed ] Ġarray . ĠIndex Ġ 0 Ġcorresponds Ġto Ġdx Ġand Ġindex Ġ 1 Ġcorresponds Ġto Ġdy . ĠThis Ġparameter ĊĠĠĠĠ Ġ* Ġwill Ġnever Ġbe Ġnull . ĠInitial Ġvalues Ġfor Ġ` consumed [ 0 ]` Ġand Ġ` consumed [ 1 ]` Ġwill Ġalways Ġbe Ġ 0 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġ[ Simple I me Animation Controller . isIn set Animation Request Pending ] Ġmethod Ġof Ġour Ġfield ĊĠĠĠĠ Ġ* Ġ[ ime Anim Controller ] Ġreturns Ġ` true ` ĠWe 're Ġwaiting Ġfor Ġa Ġcontroller Ġto Ġbecome Ġready Ġso Ġwe ĊĠĠĠĠ Ġ* Ġconsume Ġand Ġno - op Ġthe Ġscroll Ġby Ġsetting Ġ` consumed [ 0 ]` Ġto Ġ[ dx ] Ġand Ġ` consumed [ 1 ]` Ġto Ġ[ dy ] ĊĠĠĠĠ Ġ* Ġand Ġreturn . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠOtherwise Ġwe Ġinitialize Ġour Ġ[ Int ] Ġvariable Ġ` var Ġdelta Y ` Ġto Ġ[ dy ], Ġthen Ġif Ġour Ġ[ Int ] Ġfield ĊĠĠĠĠ Ġ* Ġ[ drop Next Y ] Ġis Ġnot Ġ 0 Ġwe Ġset Ġ` consumed [ 1 ]` Ġto Ġ[ drop Next Y ], Ġsubtract Ġ[ drop Next Y ] Ġfrom Ġ` delta Y ` ĊĠĠĠĠ Ġ* Ġand Ġset Ġ[ drop Next Y ] Ġto Ġ 0 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġ` delta Y ` Ġis Ġless Ġthan Ġ 0 Ġthe Ġuser Ġis Ġscrolling Ġdown , Ġso Ġwe Ġcheck Ġif Ġwe Ġcurrently Ġhave ĊĠĠĠĠ Ġ* Ġcontrol Ġby Ġcalling Ġthe Ġ[ Simple I me Animation Controller . isIn set Animation InProgress ] Ġmethod Ġof ĊĠĠĠĠ Ġ* Ġour Ġfield Ġ[ ime Anim Controller ] Ġ( it Ġreturns Ġtrue Ġif Ġan Ġinset Ġanimation Ġis Ġin Ġprogress ) Ġand Ġif ĊĠĠĠĠ Ġ* Ġso Ġwe Ġcan Ġupdate Ġthe ĠI ME Ġin sets Ġusing Ġthe Ġ[ Simple I me Animation Controller . in set By ] Ġmethod Ġof ĊĠĠĠĠ Ġ* Ġ[ ime Anim Controller ] Ġwhich Ġwe Ġcall Ġwith Ġminus Ġ` delta Y `, Ġand Ġsubtract Ġthe Ġamount Ġof Ġdy Ġconsumed ĊĠĠĠĠ Ġ* Ġby Ġthe Ġinset Ġanimation Ġin Ġpixels Ġfrom Ġ` consumed [ 1 ] `. ĠIf Ġan Ġinset Ġanimation Ġis ĠNOT Ġin Ġprogress ĊĠĠĠĠ Ġ* Ġwe Ġcheck Ġif : ĊĠĠĠĠ Ġ* Ġ Ġ- Ġscroll ĠI ME Ġaway Ġwhen Ġvisible ' Ġis Ġenabled Ġ([ scroll I me Off Screen When Visible ] Ġis Ġ` true ` ĊĠĠĠĠ Ġ* Ġ Ġ- Ġwe 're Ġnot Ġin Ġcontrol Ġ( the Ġ[ Simple I me Animation Controller . isIn set Animation Request Pending ] ĊĠĠĠĠ Ġ* Ġ Ġmethod Ġof Ġ[ ime Anim Controller ] Ġreturns Ġ` false `) ĊĠĠĠĠ Ġ* Ġ Ġ- ĠAND Ġthe ĠI ME Ġis Ġcurrently Ġopen Ġ( the Ġ[ Window Insets Compat ] Ġfrom Ġthe Ġtop Ġof Ġthe Ġview Ġhierarchy ĊĠĠĠĠ Ġ* Ġ Ġreports Ġthat Ġthe ĠBit Ġmask Ġof Ġ` Window Insets Compat . Types . ime ` Ġis Ġvisible ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġall Ġof Ġthe Ġabove Ġare Ġ` true ` Ġwe Ġstart Ġa Ġcontrol Ġrequest Ġby Ġcalling Ġour Ġ[ start Control Request ] ĊĠĠĠĠ Ġ* Ġmethod , Ġand Ġconsume Ġthe Ġscroll Ġto Ġstop Ġthe Ġlist Ġscrolling Ġwhile Ġwe Ġwait Ġfor Ġa Ġcontroller Ġby ĊĠĠĠĠ Ġ* Ġsetting Ġ` consumed [ 1 ]` Ġto Ġ` delta Y `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtarget Ġ[ View ] Ġthat Ġinitiated Ġthe Ġnested Ġscroll ĊĠĠĠĠ Ġ* Ġ@ param Ġdx ĠHorizontal Ġscroll Ġdistance Ġin Ġpixels ĊĠĠĠĠ Ġ* Ġ@ param Ġdy ĠVertical Ġscroll Ġdistance Ġin Ġpixels ĊĠĠĠĠ Ġ* Ġ@ param Ġconsumed ĠOutput . ĠThe Ġhorizontal Ġand Ġvertical Ġscroll Ġdistance Ġconsumed Ġby Ġthis Ġparent ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Ġthe Ġtype Ġof Ġinput Ġwhich Ġcaused Ġthis Ġscroll Ġevent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Nested Pre Scroll ( target : ĠView , Ġdx : ĠInt , Ġdy : ĠInt , Ġconsumed : ĠInt Array , Ġtype : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ime Anim Controller . isIn set Animation Request Pending ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 're Ġwaiting Ġfor Ġa Ġcontroller Ġto Ġbecome Ġready . ĠCons ume Ġand Ġno - op Ġthe Ġscroll ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 0 ] Ġ= Ġdx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 1 ] Ġ= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġdelta Y : ĠInt Ġ= Ġdy ĊĠĠĠĠĠĠĠ Ġif Ġ( drop Next Y Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 1 ] Ġ= Ġdrop Next Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Y Ġ-= Ġdrop Next Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrop Next Y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( delta Y Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġuser Ġis Ġscrolling Ġdown ... ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ime Anim Controller . isIn set Animation InProgress ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġcurrently Ġhave Ġcontrol , Ġwe Ġcan Ġupdate Ġthe ĠI ME Ġin sets Ġusing Ġinset By (). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġneg ation Ġon Ġthe Ġdelta Y Ġand Ġthe Ġreturn Ġvalue Ġis Ġnecessary Ġsince Ġnested ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġscrolling Ġuses Ġdy Ġvalues , Ġfrom Ġ 0 Ġ( top ) Ġto Ġinfinity Ġ( bottom ), Ġmeaning Ġthat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpositive Ġvalues Ġindicate Ġa Ġdown wards Ġmotion . ĠI ME Ġin sets Ġare Ġdifferent , Ġas Ġthey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtreat Ġvalues Ġfrom Ġfrom Ġ 0 Ġ( bottom ) Ġto ĠI ME - height Ġ( top ). ĠSince Ġwe 're Ġusing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinset By () Ġwith Ġdelta Ġvalues , Ġwe Ġcan Ġjust Ġpass Ġin Ġa Ġsimple Ġneg ation Ġand Ġlet Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġthe Ġmin / max Ġpositions . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 1 ] Ġ-= Ġ ime Anim Controller . in set By (- delta Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( scroll I me Off Screen When Visible Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! ime Anim Controller . isIn set Animation Request Pending () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . getRoot Window Insets ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . isVisible ( Window Insets Compat . Type . ime ()) Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe 're Ġnot Ġin Ġcontrol , Ġthe ĠI ME Ġis Ġcurrently Ġopen , Ġand , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ' scroll ĠI ME Ġaway Ġwhen Ġvisible ' Ġis Ġenabled , Ġwe Ġstart Ġa Ġcontrol Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Control Request () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġconsume Ġthe Ġscroll Ġto Ġstop Ġthe Ġlist Ġscrolling Ġwhile Ġwe Ġwait Ġfor Ġa Ġcontroller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 1 ] Ġ= Ġdelta Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReact Ġto Ġa Ġnested Ġscroll Ġin Ġprogress . ĠThis Ġmethod Ġwill Ġbe Ġcalled Ġwhen Ġthe Ġ[ View Parent ]' s ĊĠĠĠĠ Ġ* Ġcurrent Ġnested Ġscrolling Ġchild Ġview Ġdis patches Ġa Ġnested Ġscroll Ġevent . ĠTo Ġreceive Ġcalls Ġto ĊĠĠĠĠ Ġ* Ġthis Ġmethod Ġthe Ġ[ View Parent ] Ġmust Ġhave Ġpreviously Ġreturned Ġ` true ` Ġfor Ġa Ġcall Ġto ĊĠĠĠĠ Ġ* Ġ[ onStart Nested Scroll ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠBoth Ġthe Ġconsumed Ġand Ġun consumed Ġportions Ġof Ġthe Ġscroll Ġdistance Ġare Ġreported Ġto Ġthe ĊĠĠĠĠ Ġ* Ġ[ View Parent ]. ĠAn Ġimplementation Ġmay Ġchoose Ġto Ġuse Ġthe Ġconsumed Ġportion Ġto Ġmatch Ġor Ġch ase ĊĠĠĠĠ Ġ* Ġscroll Ġposition Ġof Ġmultiple Ġchild Ġelements , Ġfor Ġexample . ĠThe Ġun consumed Ġportion Ġmay Ġbe Ġused ĊĠĠĠĠ Ġ* Ġto Ġallow Ġcontinuous Ġdragging Ġof Ġmultiple Ġscrolling Ġor Ġdraggable Ġelements , Ġsuch Ġas Ġscrolling ĊĠĠĠĠ Ġ* Ġa Ġlist Ġwithin Ġa Ġvertical Ġdrawer Ġwhere Ġthe Ġdrawer Ġbegins Ġdragging Ġonce Ġthe Ġedge Ġof Ġinner ĊĠĠĠĠ Ġ* Ġscrolling Ġcontent Ġis Ġreached . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġcalled Ġwhen Ġa Ġnested Ġscrolling Ġchild Ġinvokes ĊĠĠĠĠ Ġ* Ġ` Nested Scrolling Child 3 . dispatch Nested Scroll ` Ġor Ġone Ġof Ġmethods Ġit Ġover loads . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġimplementation Ġmust Ġreport Ġhow Ġmany Ġpixels Ġof Ġthe Ġthe Ġx Ġand Ġy Ġscroll Ġdistances Ġwere ĊĠĠĠĠ Ġ* Ġconsumed Ġby Ġthis Ġnested Ġscrolling Ġparent Ġby Ġadding Ġthe Ġconsumed Ġdistances Ġto Ġthe Ġ[ consumed ] ĊĠĠĠĠ Ġ* Ġparameter . ĠIf Ġthis Ġ[ View ] Ġalso Ġimplements Ġ` Nested Scrolling Child 3 `, Ġ[ consumed ] Ġshould Ġalso Ġbe ĊĠĠĠĠ Ġ* Ġpassed Ġup Ġto Ġit 's Ġnested Ġscrolling Ġparent Ġso Ġthat Ġthe Ġparent Ġmay Ġalso Ġadd Ġany Ġscroll Ġdistance ĊĠĠĠĠ Ġ* Ġit Ġconsume s . ĠIndex Ġ 0 Ġcorresponds Ġto Ġdx Ġand Ġindex Ġ 1 Ġcorresponds Ġto Ġdy . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġour Ġ[ Int ] Ġparameter Ġ[ dy Un consumed ] Ġis Ġgreater Ġthan Ġ 0 Ġthen Ġthe Ġuser Ġis Ġscrolling Ġup , Ġand ĊĠĠĠĠ Ġ* Ġthe Ġscrolling Ġview Ġisn 't Ġconsuming Ġthe Ġscroll Ġso Ġwe Ġcheck Ġwhether Ġwe Ġcurrently Ġhave Ġcontrol ĊĠĠĠĠ Ġ* Ġby Ġcalling Ġthe Ġ[ Simple I me Animation Controller . isIn set Animation InProgress ] Ġmethod Ġof ĊĠĠĠĠ Ġ* Ġ[ ime Anim Controller ] Ġand Ġif Ġit Ġreturns Ġ` true ` Ġwe Ġset Ġ` consumed [ 1 ]` Ġto Ġminus Ġthe Ġvalue Ġreturned ĊĠĠĠĠ Ġ* Ġby Ġthe Ġ[ Simple I me Animation Controller . in set By ] Ġwhen Ġit Ġis Ġpassed Ġminus Ġ[ dy Un consumed ] Ġas Ġthe ĊĠĠĠĠ Ġ* Ġvalue Ġto Ġupdate Ġthe Ġinset Ġposition Ġof Ġthe ĠI ME Ġto Ġ( it Ġreturns Ġthe Ġamount Ġof Ġ[ dy Un consumed ] ĊĠĠĠĠ Ġ* Ġconsumed Ġby Ġthe Ġinset Ġanimation ). ĠIf Ġan Ġinset Ġanimation Ġis ĠNOT Ġin Ġprogress Ġwe Ġcheck Ġif : ĊĠĠĠĠ Ġ* Ġ Ġ- Ġscroll ĠI ME Ġaway Ġwhen Ġvisible ' Ġis Ġenabled Ġ([ scroll I me Off Screen When Visible ] Ġis Ġ` true ` ĊĠĠĠĠ Ġ* Ġ Ġ- Ġwe 're Ġnot Ġin Ġcontrol Ġ( the Ġ[ Simple I me Animation Controller . isIn set Animation Request Pending ] ĊĠĠĠĠ Ġ* Ġ Ġmethod Ġof Ġ[ ime Anim Controller ] Ġreturns Ġ` false `) ĊĠĠĠĠ Ġ* Ġ Ġ- ĠAND Ġthe ĠI ME Ġis Ġcurrently Ġopen Ġ( the Ġ[ Window Insets Compat ] Ġfrom Ġthe Ġtop Ġof Ġthe Ġview Ġhierarchy ĊĠĠĠĠ Ġ* Ġ Ġreports Ġthat Ġthe ĠBit Ġmask Ġof Ġ` Window Insets Compat . Types . ime ` Ġis Ġvisible ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġall Ġthe Ġabove Ġ Ġare Ġ` true ` Ġwe Ġstart Ġa Ġcontrol Ġrequest Ġby Ġcalling Ġour Ġ[ start Control Request ] ĊĠĠĠĠ Ġ* Ġmethod , Ġand Ġconsume Ġthe Ġscroll Ġto Ġstop Ġthe Ġlist Ġscrolling Ġwhile Ġwe Ġwait Ġfor Ġa Ġcontroller Ġby ĊĠĠĠĠ Ġ* Ġsetting Ġ` consumed [ 1 ]` Ġto Ġ` dy Un consumed `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtarget ĠThe Ġdesc endant Ġview Ġcontrolling Ġthe Ġnested Ġscroll ĊĠĠĠĠ Ġ* Ġ@ param Ġdx Cons umed ĠHorizontal Ġscroll Ġdistance Ġin Ġpixels Ġalready Ġconsumed Ġby Ġtarget ĊĠĠĠĠ Ġ* Ġ@ param Ġdy Cons umed ĠVertical Ġscroll Ġdistance Ġin Ġpixels Ġalready Ġconsumed Ġby Ġtarget ĊĠĠĠĠ Ġ* Ġ@ param Ġdx Un consumed ĠHorizontal Ġscroll Ġdistance Ġin Ġpixels Ġnot Ġconsumed Ġby Ġtarget ĊĠĠĠĠ Ġ* Ġ@ param Ġdy Un consumed ĠVertical Ġscroll Ġdistance Ġin Ġpixels Ġnot Ġconsumed Ġby Ġtarget ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Ġthe Ġtype Ġof Ġinput Ġwhich Ġcaused Ġthis Ġscroll Ġevent ĊĠĠĠĠ Ġ* Ġ@ param Ġconsumed ĠOutput . ĠUp on Ġthis Ġmethod Ġreturning , Ġwill Ġcontain Ġthe Ġscroll Ġdistances ĊĠĠĠĠ Ġ* Ġconsumed Ġby Ġthis Ġnested Ġscrolling Ġparent Ġand Ġthe Ġscroll Ġdistances Ġconsumed Ġby Ġany Ġother ĊĠĠĠĠ Ġ* Ġparent Ġup Ġthe Ġview Ġhierarchy ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Wrong Constant ") ĊĠĠĠ Ġoverride Ġfun Ġon Nested Scroll ( ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġdx Cons umed : ĠInt , ĊĠĠĠĠĠĠĠ Ġdy Cons umed : ĠInt , ĊĠĠĠĠĠĠĠ Ġdx Un consumed : ĠInt , ĊĠĠĠĠĠĠĠ Ġdy Un consumed : ĠInt , ĊĠĠĠĠĠĠĠ Ġtype : ĠInt , ĊĠĠĠĠĠĠĠ Ġconsumed : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dy Un consumed Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġuser Ġis Ġscrolling Ġup , Ġand Ġthe Ġscrolling Ġview Ġisn 't Ġconsuming Ġthe Ġscroll ... ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ime Anim Controller . isIn set Animation InProgress ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġcurrently Ġhave Ġcontrol , Ġwe Ġcan Ġupdate Ġthe ĠI ME Ġin sets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 1 ] Ġ= Ġ- ime Anim Controller . in set By (- dy Un consumed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( scroll I me On Screen When Not Visible Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! ime Anim Controller . isIn set Animation Request Pending () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . getRoot Window Insets ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . isVisible ( 1 Ġshl Ġ 3 ) Ġ== Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġdon 't Ġcurrently Ġhave Ġcontrol , Ġthe ĠI ME Ġis Ġnot Ġshown , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġuser Ġis Ġscrolling Ġup , Ġand Ġthe Ġview Ġcan 't Ġscroll Ġup Ġany Ġmore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( i . e . Ġover - scroll ing ), Ġwe Ġcan Ġstart Ġto Ġcontrol Ġthe ĠI ME Ġin sets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Control Request () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġconsume Ġthe Ġscroll Ġto Ġstop Ġthe Ġlist Ġscrolling Ġwhile Ġwe Ġwait Ġfor Ġa Ġcontroller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 1 ] Ġ= Ġdy Un consumed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequest Ġa Ġfl ing Ġfrom Ġa Ġnested Ġscroll . ĠThis Ġmethod Ġsign ifies Ġthat Ġa Ġnested Ġscrolling Ġchild Ġhas ĊĠĠĠĠ Ġ* Ġdetected Ġsuitable Ġconditions Ġfor Ġa Ġfl ing . ĠGener ally Ġthis Ġmeans Ġthat Ġa Ġtouch Ġscroll Ġhas Ġended ĊĠĠĠĠ Ġ* Ġwith Ġa Ġ` Velocity Tracker Ġvelocity ` Ġin Ġthe Ġdirection Ġof Ġscrolling Ġthat Ġme ets Ġor Ġexceeds Ġthe ĊĠĠĠĠ Ġ* Ġ` View Configuration . getS ca led Minimum Fl ing Velocity ` Ġminimum Ġfl ing Ġvelocity Ġalong Ġa Ġscroll able ĊĠĠĠĠ Ġ* Ġaxis . ĠIf Ġa Ġnested Ġscrolling Ġchild Ġview Ġwould Ġnormally Ġfl ing Ġbut Ġit Ġis Ġat Ġthe Ġedge Ġof Ġits Ġown ĊĠĠĠĠ Ġ* Ġcontent , Ġit Ġcan Ġuse Ġthis Ġmethod Ġto Ġdelegate Ġthe Ġfl ing Ġto Ġits Ġnested Ġscrolling Ġparent Ġinstead . ĊĠĠĠĠ Ġ* ĠThe Ġparent Ġmay Ġoptionally Ġconsume Ġthe Ġfl ing Ġor Ġobserve Ġa Ġchild Ġfl ing . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġ[ Simple I me Animation Controller . isIn set Animation InProgress ] Ġmethod Ġof Ġ[ ime Anim Controller ] ĊĠĠĠĠ Ġ* Ġreturns Ġ` true ` Ġwe Ġhave Ġan ĠI ME Ġanimation Ġin Ġprogress Ġfrom Ġthe Ġuser Ġscrolling , Ġso Ġwe Ġcan Ġanimate ĊĠĠĠĠ Ġ* Ġto Ġthe Ġend Ġstate Ġusing Ġthe Ġvelocity Ġby Ġcalling Ġthe Ġ` animate To Finish ` Ġmethod Ġof Ġ[ ime Anim Controller ] ĊĠĠĠĠ Ġ* Ġwith Ġthe ĠVertical Ġvelocity Ġin Ġpixels Ġper Ġsecond Ġargument Ġ[ velocity Y ] Ġand Ġreturn Ġ` true ` Ġto ĊĠĠĠĠ Ġ* Ġindicate Ġthat Ġwe Ġreact ed Ġto Ġthe Ġfl ing . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠOtherwise Ġwe Ġmay Ġneed Ġto Ġstart Ġa Ġcontrol Ġrequest Ġand Ġimmediately Ġfl ing Ġusing Ġ[ velocity Y ], Ġso ĊĠĠĠĠ Ġ* Ġwe Ġinitialize Ġour Ġ[ Boolean ] Ġvariable Ġ` val Ġ ime Visible ` Ġto Ġ` true ` Ġif Ġthe Ġ[ Window Insets Compat ] ĊĠĠĠĠ Ġ* Ġreturned Ġby Ġthe Ġ[ getRoot Window Insets ] Ġmethod Ġof Ġ` this ` Ġ[ View ] Ġreports Ġthat Ġthe ĠI ME Ġwindow ĊĠĠĠĠ Ġ* Ġinset Ġis Ġvisible . ĠThen Ġwhen Ġ[ velocity Y ] Ġis Ġgreater Ġthan Ġ 0 Ġ( the Ġfl ing Ġis Ġin Ġa Ġup wards Ġdirection ) ĊĠĠĠĠ Ġ* Ġand Ġ[ scroll I me On Screen When Not Visible ] Ġis Ġ` true ` Ġ( allows Ġscrolling Ġthe ĠI ME Ġon Ġscreen Ġby Ġan ĊĠĠĠĠ Ġ* Ġup wards Ġscroll ), Ġand Ġ` ime Visible ` Ġis Ġ` false ` Ġ( the ĠI ME Ġis Ġnot Ġvisible Ġyet ) Ġwe Ġstart Ġa Ġcontrol ĊĠĠĠĠ Ġ* Ġrequest Ġby Ġcalling Ġthe Ġ[ Simple I me Animation Controller . start And Fl ing ] Ġmethod Ġof Ġ[ ime Anim Controller ] ĊĠĠĠĠ Ġ* Ġto Ġhave Ġit Ġstart Ġa Ġcontrol Ġrequest Ġfor Ġ` this ` Ġ[ View ] Ġand Ġimmediately Ġfl ing Ġto Ġa Ġfinish Ġusing ĊĠĠĠĠ Ġ* Ġ[ velocity Y ] Ġonce Ġready , Ġthen Ġwe Ġreturn Ġ` true ` Ġto Ġindicate Ġthat Ġwe Ġreact ed Ġto Ġthe Ġfl ing . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġ[ velocity Y ] Ġis Ġless Ġthan Ġ 0 Ġ( the Ġfl ing Ġis Ġin Ġa Ġdown wards Ġdirection ), Ġand ĊĠĠĠĠ Ġ* Ġ[ scroll I me On Screen When Not Visible ] Ġis Ġ` true ` Ġ( allows Ġscrolling Ġthe ĠI ME Ġon Ġscreen Ġby Ġan Ġup wards ĊĠĠĠĠ Ġ* Ġscroll ), Ġand Ġ` ime Visible ` Ġis Ġ` true ` Ġ( the ĠI ME Ġis Ġvisible ) Ġwe Ġalso Ġstart Ġa Ġcontrol Ġrequest Ġby ĊĠĠĠĠ Ġ* Ġcalling Ġthe Ġ[ Simple I me Animation Controller . start And Fl ing ] Ġmethod Ġof Ġ[ ime Anim Controller ] ĊĠĠĠĠ Ġ* Ġto Ġhave Ġit Ġstart Ġa Ġcontrol Ġrequest Ġfor Ġ` this ` Ġ[ View ] Ġand Ġimmediately Ġfl ing Ġto Ġa Ġfinish Ġusing ĊĠĠĠĠ Ġ* Ġ[ velocity Y ] Ġonce Ġready , Ġthen Ġwe Ġreturn Ġ` true ` Ġto Ġindicate Ġthat Ġwe Ġreact ed Ġto Ġthe Ġfl ing . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġnone Ġof Ġthe Ġabove Ġsituations Ġare Ġin Ġeffect Ġwe Ġreturn Ġ` false ` Ġto Ġindicate Ġthat Ġwe Ġdid Ġnot ĊĠĠĠĠ Ġ* Ġreact Ġto Ġthe Ġfl ing . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtarget ĠView Ġthat Ġinitiated Ġthe Ġnested Ġscroll ĊĠĠĠĠ Ġ* Ġ@ param Ġvelocity X ĠHorizontal Ġvelocity Ġin Ġpixels Ġper Ġsecond ĊĠĠĠĠ Ġ* Ġ@ param Ġvelocity Y ĠVertical Ġvelocity Ġin Ġpixels Ġper Ġsecond ĊĠĠĠĠ Ġ* Ġ@ param Ġconsumed Ġtrue Ġif Ġthe Ġchild Ġconsumed Ġthe Ġfl ing , Ġfalse Ġotherwise ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthis Ġparent Ġconsumed Ġor Ġotherwise Ġreact ed Ġto Ġthe Ġfl ing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Wrong Constant ") ĊĠĠĠ Ġoverride Ġfun Ġon Nested Fl ing ( ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġvelocity X : ĠFloat , ĊĠĠĠĠĠĠĠ Ġvelocity Y : ĠFloat , ĊĠĠĠĠĠĠĠ Ġconsumed : ĠBoolean ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ime Anim Controller . isIn set Animation InProgress ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġhave Ġan ĠI ME Ġanimation Ġin Ġprogress , Ġfrom Ġthe Ġuser Ġscrolling , Ġwe Ġcan ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġanimate Ġto Ġthe Ġend Ġstate Ġusing Ġthe Ġvelocity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Anim Controller . animate To Finish ( velocity Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIndic ate Ġthat Ġwe Ġreact ed Ġto Ġthe Ġfl ing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise Ġwe Ġmay Ġneed Ġto Ġstart Ġa Ġcontrol Ġrequest Ġand Ġimmediately Ġfl ing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġusing Ġthe Ġvelocity Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ ime Visible : ĠBoolean Ġ= ĠView Compat . getRoot Window Insets ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . isVisible ( 1 Ġshl Ġ 3 ) Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Y Ġ> Ġ 0 Ġ&& Ġscroll I me On Screen When Not Visible Ġ&& Ġ! ime Visible Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġfl ing Ġis Ġin Ġa Ġup wards Ġdirection , Ġand Ġthe ĠI ME Ġis Ġnot Ġvisible , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġan Ġcontrol Ġrequest Ġwith Ġan Ġimmediate Ġfl ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Anim Controller . start And Fl ing ( this , Ġvelocity Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIndic ate Ġthat Ġwe Ġreact ed Ġto Ġthe Ġfl ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Y Ġ< Ġ 0 Ġ&& Ġscroll I me Off Screen When Visible Ġ&& Ġ ime Visible Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġfl ing Ġis Ġin Ġa Ġdown wards Ġdirection , Ġand Ġthe ĠI ME Ġis Ġvisible , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġan Ġcontrol Ġrequest Ġwith Ġan Ġimmediate Ġfl ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Anim Controller . start And Fl ing ( this , Ġvelocity Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIndic ate Ġthat Ġwe Ġreact ed Ġto Ġthe Ġfl ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠOtherwise , Ġreturn Ġfalse Ġto Ġindicate Ġthat Ġwe Ġdid Ġnot ĊĠĠĠĠĠĠĠ Ġ// Ġreact Ġto Ġthe Ġfl ing ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReact Ġto Ġa Ġnested Ġscroll Ġoperation Ġending . ĠPerform Ġcleanup Ġafter Ġa Ġnested Ġscrolling Ġoperation . ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġwill Ġbe Ġcalled Ġwhen Ġa Ġnested Ġscroll Ġstops , Ġfor Ġexample Ġwhen Ġa Ġnested Ġtouch Ġscroll ĊĠĠĠĠ Ġ* Ġends Ġwith Ġa Ġ[ Motion Event . ACTION _ UP ] Ġor Ġ[ Motion Event . ACTION _ CANCEL ] Ġevent . ĠImplement ations Ġof ĊĠĠĠĠ Ġ* Ġthis Ġmethod Ġshould Ġalways Ġcall Ġtheir Ġsuperclass 's Ġimplementation Ġof Ġthis Ġmethod Ġif Ġone Ġis ĊĠĠĠĠ Ġ* Ġpresent . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFirst Ġwe Ġcall Ġthe Ġ` on Stop Nested Scroll ` Ġmethod Ġof Ġour Ġ[ Nested Scrolling Parent Helper ] Ġfield ĊĠĠĠĠ Ġ* Ġ[ nested Scrolling Parent Helper ]. ĠThen Ġif Ġthe Ġ[ Simple I me Animation Controller . isIn set Animation InProgress ] ĊĠĠĠĠ Ġ* Ġmethod Ġof Ġ[ ime Anim Controller ] Ġindicates Ġthat Ġan Ġinset Ġanimation Ġis Ġin Ġprogress Ġand Ġits ĊĠĠĠĠ Ġ* Ġ[ Simple I me Animation Controller . isIn set Animation Finish ing ] Ġmethod Ġindicates Ġthat Ġan Ġinset ĊĠĠĠĠ Ġ* Ġanimation Ġis ĠNOT Ġcurrently Ġfinish ing , Ġwe Ġcall Ġits Ġ[ Simple I me Animation Controller . animate To Finish ] ĊĠĠĠĠ Ġ* Ġmethod Ġto Ġfinish Ġthe Ġanimation , Ġanim ating Ġto Ġthe Ġend Ġstate Ġif Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFinally Ġwe Ġcall Ġour Ġ[ reset ] Ġmethod Ġto Ġhave Ġit Ġclear Ġall Ġof Ġour Ġinternal Ġstate . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtarget Ġ[ View ] Ġthat Ġinitiated Ġthe Ġnested Ġscroll ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Ġthe Ġtype Ġof Ġinput Ġwhich Ġcaused Ġthis Ġscroll Ġevent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Stop Nested Scroll ( target : ĠView , Ġtype : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnested Scrolling Parent Helper . on Stop Nested Scroll ( target , Ġtype ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ime Anim Controller . isIn set Animation InProgress () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! ime Anim Controller . isIn set Animation Finish ing () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Anim Controller . animate To Finish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis patches Ġ[ Window Insets Animation . Callback . on Prepare ] Ġwhen ĠWindow ĠIn sets Ġanimation Ġis Ġbeing ĊĠĠĠĠ Ġ* Ġprepared Ġ( which Ġis Ġcalled Ġwhen Ġan Ġin sets Ġanimation Ġis Ġabout Ġto Ġstart Ġand Ġbefore Ġthe Ġviews ĊĠĠĠĠ Ġ* Ġhave Ġbeen Ġla id Ġout Ġin Ġthe Ġend Ġstate Ġof Ġthe Ġanimation ). ĠFirst Ġwe Ġcall Ġour Ġsuper 's Ġimplementation ĊĠĠĠĠ Ġ* Ġof Ġ` dispatch Window Insets Animation Prepare `, Ġthen Ġsince Ġwe Ġsupp ressed Ġlayout Ġin Ġ[ start Control Request ] ĊĠĠĠĠ Ġ* Ġwe Ġneed Ġto Ġun - suppress Ġit Ġnow Ġby Ġcalling Ġ[ suppress Layout Compat ] Ġwith Ġ` false `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimation Ġcurrent Ġanimation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdispatch Window Insets Animation Prepare ( animation : ĠWindow Insets Animation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . dispatch Window Insets Animation Prepare ( animation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġsupp ressed Ġlayout Ġin Ġstart Control Request (), Ġso Ġwe Ġneed Ġto Ġun - suppress Ġit Ġnow ĊĠĠĠĠĠĠĠ Ġsuppress Layout Compat ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġstarts Ġa Ġcontrol Ġrequest . ĠFirst Ġwe Ġcall Ġthe Ġ[ suppress Layout Compat ] Ġmethod Ġwith Ġ` true ` ĊĠĠĠĠ Ġ* Ġto Ġsuppress Ġlayout Ġso Ġthat Ġnothing Ġinterrupts Ġor Ġis Ġre - la id Ġout Ġwhile Ġthe ĠI ME Ġanimation ĊĠĠĠĠ Ġ* Ġstarts . ĠThen Ġwe Ġcall Ġthe Ġ[ getLocation In Window ] Ġmethod Ġof Ġour Ġnested Ġscrolling Ġ[ View ] Ġfield ĊĠĠĠĠ Ġ* Ġ[ current Nested Scrolling Child ] Ġto Ġhave Ġit Ġcompute Ġthe Ġcoordinates Ġof Ġthat Ġview Ġin Ġits Ġwindow ĊĠĠĠĠ Ġ* Ġand Ġstore Ġthem Ġin Ġour Ġ[ IntArray ] Ġfield Ġ[ start View Location ] Ġ( this Ġallows Ġus Ġto Ġtrack Ġany ĊĠĠĠĠ Ġ* Ġchanges Ġin Ġits Ġlocation Ġas Ġthe Ġanimation Ġpre pa res Ġand Ġstarts ). ĠThen Ġwe Ġcall Ġthe ĊĠĠĠĠ Ġ* Ġ[ Simple I me Animation Controller . start Control Request ] Ġmethod Ġof Ġ[ ime Anim Controller ] Ġusing Ġ` this ` ĊĠĠĠĠ Ġ* Ġ[ View ] Ġas Ġthe Ġview Ġwhich Ġis Ġtriggering Ġthis Ġrequest , Ġand Ġa Ġlambda Ġthat Ġcalls Ġour Ġ[ on Controller Ready ] ĊĠĠĠĠ Ġ* Ġmethod Ġas Ġits Ġ` on Request Ready ` Ġlistener Ġthat Ġwill Ġbe Ġcalled Ġwhen Ġthe Ġrequest Ġis Ġready Ġand Ġthe ĊĠĠĠĠ Ġ* Ġanimation Ġcan Ġproceed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Control Request () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSup press Ġlayout , Ġso Ġthat Ġnothing Ġinterrupts Ġor Ġis Ġre - la id Ġout Ġwhile Ġthe ĠI ME ĊĠĠĠĠĠĠĠ Ġ// Ġanimation Ġstarts . ĠThis Ġneeds Ġto Ġbe Ġdone Ġbefore Ġcontrol Window Insets Animation () ĊĠĠĠĠĠĠĠ Ġsuppress Layout Compat ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNow Ġrecord Ġthe Ġcurrent Ġlocation Ġof Ġthe Ġnested Ġscrolling Ġview . ĠThis Ġallows ĊĠĠĠĠĠĠĠ Ġ// Ġus Ġto Ġtrack Ġany Ġchanges Ġin Ġthe Ġlocation Ġas Ġthe Ġanimation Ġpre pa res Ġand Ġstarts ĊĠĠĠĠĠĠĠ Ġcurrent Nested Scrolling Child ?. getLocation In Window ( start View Location ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNow Ġwe Ġcan Ġstart Ġthe Ġcontrol Ġrequest ĊĠĠĠĠĠĠĠ Ġ ime Anim Controller . start Control Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Request Ready Ġ= Ġ{ Ġon Controller Ready () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġthe Ġcallback Ġthat Ġthe Ġ[ Simple I me Animation Controller . start Control Request ] Ġmethod Ġcalls ĊĠĠĠĠ Ġ* Ġwhen Ġthe Ġrequest Ġit Ġstarts Ġis Ġready Ġand Ġthe Ġanimation Ġcan Ġproceed . ĠFirst Ġwe Ġinitialize Ġour ĊĠĠĠĠ Ġ* Ġvar ible Ġ` val Ġscrolling Child ` Ġto Ġour Ġnested Ġscrolling Ġ[ View ] Ġfield Ġ[ current Nested Scrolling Child ]. ĊĠĠĠĠ Ġ* ĠThen Ġif Ġ` scroll ing Child ` Ġis Ġnot Ġ` null ` Ġwe Ġcall Ġthe Ġ[ Simple I me Animation Controller . in set By ] Ġmethod ĊĠĠĠĠ Ġ* Ġof Ġ[ ime Anim Controller ] Ġwith Ġ 0 Ġin Ġorder Ġto Ġhave Ġit Ġdispatch Ġan ĠI ME Ġin sets Ġupdate Ġnow , Ġto Ġtrigger ĊĠĠĠĠ Ġ* Ġany Ġ[ Window Insets Animation . Callback ] s Ġin Ġthe Ġhierarchy , Ġallowing Ġthem Ġto Ġsetup Ġfor Ġthe Ġanimation . ĊĠĠĠĠ Ġ* ĠWe Ġinitialize Ġour Ġ[ IntArray ] Ġvariable Ġ` val Ġlocation ` Ġto Ġour Ġfield Ġ[ temp IntArray 2 ] Ġthen Ġcall Ġthe ĊĠĠĠĠ Ġ* Ġ[ getLocation In Window ] Ġmethod Ġof Ġ` scroll ing Child ` Ġto Ġhave Ġit Ġcompute Ġthe Ġcoordinates Ġof Ġthat ĊĠĠĠĠ Ġ* Ġview Ġin Ġits Ġwindow Ġand Ġstore Ġthem Ġin Ġ` location `. ĠWe Ġthen Ġset Ġour Ġ[ Int ] Ġfield Ġ[ drop Next Y ] Ġto ĊĠĠĠĠ Ġ* Ġ` location [ 1 ]` Ġ( the Ġcurrent ĠY Ġcoordinate ) Ġminus Ġthe ĠY Ġcoordinate Ġin Ġour Ġfield Ġ[ start View Location ] ĊĠĠĠĠ Ġ* Ġ( this Ġis Ġthe Ġdifference Ġin Ġthe Ġview 's ĠY Ġin Ġthe Ġwindow Ġsince Ġ[ start Control Request ] Ġwas Ġcalled ). ĊĠĠĠĠ Ġ* ĠThis Ġis Ġthen Ġused Ġin Ġour Ġ[ on Nested Pre Scroll ] Ġoverride Ġto Ġcalculate Ġhow Ġmuch Ġof Ġthe Ġscroll Ġto ĊĠĠĠĠ Ġ* Ġconsume Ġbefore Ġthe Ġnested Ġscrolling Ġchild Ġsees Ġthe Ġscroll . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Controller Ready () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscrolling Child Ġ= Ġcurrent Nested Scrolling Child ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll ing Child Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDispatch Ġan ĠI ME Ġin sets Ġupdate Ġnow , Ġto Ġtrigger Ġany ĠWindow Insets Animation . Callbacks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġthe Ġhierarchy , Ġallowing Ġthem Ġto Ġsetup Ġfor Ġthe Ġanimation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Anim Controller . in set By ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow Ġcalculate Ġthe Ġdifference Ġin Ġthe Ġview 's ĠY Ġin Ġthe Ġwindow . ĠWe Ġstore Ġthat Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfind Ġthe Ġoffset Ġat Ġthe Ġnext Ġnested Ġscroll ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġtemp IntArray 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscrolling Child . getLocation In Window ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrop Next Y Ġ= Ġlocation [ 1 ] Ġ- Ġstart View Location [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe sets Ġall Ġof Ġour Ġinternal Ġstate . ĠWe Ġset Ġour Ġ[ Int ] Ġfield Ġ[ drop Next Y ] Ġto Ġ 0 , Ġfill Ġour Ġ[ IntArray ] ĊĠĠĠĠ Ġ* Ġfield Ġ[ start View Location ] Ġwith Ġtwo Ġ 0 's , Ġthen Ġcall Ġthe Ġ[ suppress Layout Compat ] Ġmethod Ġwith Ġ` false ` ĊĠĠĠĠ Ġ* Ġto Ġun - suppress Ġlayout Ġjust Ġto Ġmake Ġsure Ġwe Ġdo Ġnot Ġsuppress Ġlayout Ġforever . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġall Ġof Ġour Ġinternal Ġstate ĊĠĠĠĠĠĠĠ Ġdrop Next Y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġstart View Location . fill ( 0 ) ĊĠĠĠĠĠĠĠ Ġ// ĠJust Ġto Ġmake Ġsure Ġwe Ġdo Ġnot Ġsuppress Ġlayout Ġforever ĊĠĠĠĠĠĠĠ Ġsuppress Layout Compat ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOverrides Ġof Ġnecessary Ġnested Ġscroll ĠAPIs . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġnested Ġscrolling ĠAPIs Ġhave Ġhad Ġa Ġnumber Ġof Ġrevisions , Ġwith Ġeach Ġrevision Ġextending Ġthe ĊĠĠĠĠ Ġ* Ġprevious Ġrevision . ĠThe Ġlatest , ĊĠĠĠĠ Ġ* Ġ[ android x . core . view . Nested Scrolling Parent 3 ], Ġextends ĊĠĠĠĠ Ġ* Ġ[ android x . core . view . Nested Scrolling Parent 2 ], Ġwhich Ġextends ĊĠĠĠĠ Ġ* Ġ[ android x . core . view . Nested Scrolling Parent ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThese Ġclasses Ġare Ġall ĠJava Ġinterfaces Ġcontaining Ġvarious Ġmethod Ġover loads , Ġusually Ġto Ġadd ĊĠĠĠĠ Ġ* Ġextra Ġparameters . ĠAndroid X ĠCore , Ġthe Ġlibrary Ġwhich Ġbundles Ġthe Ġinterfaces , Ġis Ġbuilt Ġwith ĊĠĠĠĠ Ġ* ĠJDK Ġ 7 , Ġmeaning Ġit Ġcan Ġnot Ġuse Ġdefault Ġmethods Ġto Ġautomatically Ġproxy Ġthe Ġmethods Ġfrom Ġthe ĊĠĠĠĠ Ġ* Ġolder Ġrevisions Ġto Ġthe Ġnew Ġversions . ĠThis Ġmeans Ġthat Ġwe Ġneed Ġto Ġdo Ġthat Ġproxy ing ĊĠĠĠĠ Ġ* Ġourselves , Ġas Ġbelow . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Scroll Accepted ( child : ĠView , Ġtarget : ĠView , Ġaxes : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Nested Scroll Accepted ( child , Ġtarget , Ġaxes , ĠView Compat . TYPE _ TO UCH ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Scroll ( ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġdx Cons umed : ĠInt , ĊĠĠĠĠĠĠĠ Ġdy Cons umed : ĠInt , ĊĠĠĠĠĠĠĠ Ġdx Un consumed : ĠInt , ĊĠĠĠĠĠĠĠ Ġdy Un consumed : ĠInt , ĊĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Nested Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx Cons umed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy Cons umed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx Un consumed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy Un consumed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp IntArray 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop Nested Scroll ( target : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Stop Nested Scroll ( target , ĠView Compat . TYPE _ TO UCH ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġtemporary Ġ[ IntArray ] Ġwe Ġuse Ġto Ġstore Ġthe Ġlocation Ġof Ġour Ġnested Ġscrolling Ġchild . Ċ Ġ*/ Ċ private Ġval Ġtemp IntArray 2 Ġ= ĠInt Array ( 2 ) Ċ