package Ġcom . lo o peer . coder e ader kt . ui . view Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . support . annotation . Color Int Ċ import Ġandroid . support . annotation . Drawable Res Ċ import Ġandroid . support . annotation . Int Def Ċ import Ġandroid . support . annotation . Requires Api Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 4 . graphics . drawable . Drawable Compat Ċ import Ġandroid . support . v 4 . os . Parcelable Compat Ċ import Ġandroid . support . v 4 . os . Parcelable Compat Creator Callbacks Ċ import Ġandroid . support . v 4 . view .* Ċ import Ġandroid . support . v 4 . view . Abs Saved State Ċ import Ġandroid . support . v 4 . view . accessibility . Accessibility NodeInfo Compat Ċ import Ġandroid . support . v 4 . widget . View Drag Helper Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view .* Ċ import Ġandroid . view . accessibility . Accessibility Event Ċ import Ġjava . lang . annotation . Retention Ċ import Ġjava . lang . annotation . RetentionPolicy Ċ import Ġjava . util .* Ċ Ċ class ĠDraw er Layout Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style : ĠInt Ġ= Ġ 0 ) Ġ: ĠViewGroup ( context , Ġattrs , Ġdef Style ), ĠDraw er Layout Impl Ġ{ ĊĊĠĠĠ Ġ@ Int Def ( STATE _ IDLE . to Long (), ĠSTATE _ DR AG GING . to Long (), ĠSTATE _ SET TL ING . to Long ()) ĊĠĠĠ Ġ@ Retention ( RetentionPolicy . SOURCE ) ĊĠĠĠ Ġprivate Ġannotation Ġclass ĠState ĊĊĠĠĠ Ġ/** Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Int Def ( LOCK _ MODE _ UNLOCK ED . to Long (), ĠLOCK _ MODE _ LOCK ED _ CLOSED . to Long (), ĠLOCK _ MODE _ LOCK ED _ OPEN . to Long (), ĠLOCK _ MODE _ UNDEFINED . to Long ()) ĊĠĠĠ Ġ@ Retention ( RetentionPolicy . SOURCE ) ĊĠĠĠ Ġprivate Ġannotation Ġclass ĠLock Mode ĊĊĠĠĠ Ġ/** Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Int Def ( Gravity . LEFT . to Long (), ĠGr avity . RIGHT . to Long (), ĠGr avity Compat . START . to Long (), ĠGr avity Compat . END . to Long ()) ĊĠĠĠ Ġ@ Retention ( RetentionPolicy . SOURCE ) ĊĠĠĠ Ġprivate Ġannotation Ġclass ĠEdge Gravity ĊĊĠĠĠ Ġprivate Ġval Ġm Child Accessibility Delegate Ġ= ĠChild Accessibility Delegate () ĊĠĠĠ Ġprivate Ġvar Ġm Drawer Elevation : ĠFloat Ġ= Ġ 0 . toFloat () ĊĊĠĠĠ Ġprivate Ġval Ġm Min Drawer Margin : ĠInt ĊĊĠĠĠ Ġprivate Ġvar Ġm S cri m Color Ġ= ĠDEFAULT _ SCR IM _ COLOR ĊĠĠĠ Ġprivate Ġvar Ġm S cri m Opacity : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġval Ġm S cri m Paint Ġ= ĠPaint () ĊĊĠĠĠ Ġprivate Ġval Ġm Left Drag ger : ĠView Drag Helper ĊĠĠĠ Ġprivate Ġval Ġm Right Drag ger : ĠView Drag Helper ĊĠĠĠ Ġprivate Ġval Ġm Left Callback : ĠView Drag Callback ĊĠĠĠ Ġprivate Ġval Ġm Right Callback : ĠView Drag Callback ĊĠĠĠ Ġprivate Ġvar Ġm Drawer State : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm In Layout : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm First Layout Ġ= Ġtrue ĊĊĠĠĠ Ġ@ Lock Mode Ġprivate Ġvar Ġm Lock Mode Left Ġ= ĠLOCK _ MODE _ UNDEFINED ĊĠĠĠ Ġ@ Lock Mode Ġprivate Ġvar Ġm Lock Mode Right Ġ= ĠLOCK _ MODE _ UNDEFINED ĊĠĠĠ Ġ@ Lock Mode Ġprivate Ġvar Ġm Lock Mode Start Ġ= ĠLOCK _ MODE _ UNDEFINED ĊĠĠĠ Ġ@ Lock Mode Ġprivate Ġvar Ġm Lock Mode End Ġ= ĠLOCK _ MODE _ UNDEFINED ĊĊĠĠĠ Ġprivate Ġvar Ġm Dis allow Intercept Requested : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Children Canceled Touch : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġm Listener : ĠDraw er Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Listeners : ĠMutable List < Drawer Listener >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Initial Motion X : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġm Initial Motion Y : ĠFloat Ġ= Ġ 0 . toFloat () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġdrawable Ġused Ġto Ġdraw Ġin Ġthe Ġin sets Ġarea Ġfor Ġthe Ġstatus Ġbar . ĊĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġstatus Ġbar Ġbackground Ġdrawable , Ġor Ġnull Ġif Ġnone Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġstatus Bar Background Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġm Shadow Left Resolved : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Shadow Right Resolved : ĠDrawable ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Title Left : ĠCharSequence ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Title Right : ĠCharSequence ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Last Insets : ĠAny ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Draw StatusBar Background : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĠShadow Ġdraw ables Ġfor Ġdifferent Ġgravity Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Shadow Start : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Shadow End : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Shadow Left : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Shadow Right : ĠDrawable ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġm Non Drawer Views : ĠArrayList < View > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġfor Ġmonitoring Ġevents Ġabout Ġdraw ers . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠDraw er Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġa Ġdrawer 's Ġposition Ġchanges . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdrawer View ĠThe Ġchild Ġview Ġthat Ġwas Ġmoved ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġslide Offset ĠThe Ġnew Ġoffset Ġof Ġthis Ġdrawer Ġwithin Ġits Ġrange , Ġfrom Ġ 0 - 1 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Drawer Slide ( drawer View : ĠView , Ġslide Offset : ĠFloat ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġa Ġdrawer Ġhas Ġset tled Ġin Ġa Ġcompletely Ġopen Ġstate . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdrawer Ġis Ġinteractive Ġat Ġthis Ġpoint . ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdrawer View ĠDraw er Ġview Ġthat Ġis Ġnow Ġopen ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Drawer Opened ( drawer View : ĠView ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġa Ġdrawer Ġhas Ġset tled Ġin Ġa Ġcompletely Ġclosed Ġstate . ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdrawer View ĠDraw er Ġview Ġthat Ġis Ġnow Ġclosed ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Drawer Closed ( drawer View : ĠView ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġdrawer Ġmotion Ġstate Ġchanges . ĠThe Ġnew Ġstate Ġwill ĊĠĠĠĠĠĠĠĠ Ġ* Ġbe Ġone Ġof Ġ[. STATE _ IDLE ], Ġ[. STATE _ DR AG GING ] Ġor Ġ[. STATE _ SET TL ING ]. ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠnewState ĠThe Ġnew Ġdrawer Ġmotion Ġstate ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Drawer StateChanged (@ State ĠnewState : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStub / no - op Ġimplementations Ġof Ġall Ġmethods Ġof Ġ[ Drawer Listener ]. ĊĠĠĠĠ Ġ* ĠOverride Ġthis Ġif Ġyou Ġonly Ġcare Ġabout Ġa Ġfew Ġof Ġthe Ġavailable Ġcallback Ġmethods . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġclass ĠSimple Drawer Listener Ġ: ĠDraw er Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Slide ( drawer View : ĠView , Ġslide Offset : ĠFloat ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Opened ( drawer View : ĠView ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Closed ( drawer View : ĠView ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer StateChanged ( newState : ĠInt ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinterface ĠDraw er Layout Compat Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġconfigure Apply Insets ( drawer Layout : ĠView ) ĊĠĠĠĠĠĠĠ Ġfun Ġdispatch Child Insets ( child : ĠView , Ġin sets : ĠAny ?, Ġdrawer Gravity : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġapply Margin Insets ( lp : ĠViewGroup . Margin LayoutParams , Ġin sets : ĠAny ?, Ġdrawer Gravity : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġget Top Inset ( last Insets : ĠAny ?): ĠInt ĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault StatusBar Background ( context : ĠContext ): ĠDrawable ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠDraw er Layout Compat Impl Base Ġ: ĠDraw er Layout Compat Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfigure Apply Insets ( drawer Layout : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġspace Ġfor Ġrent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispatch Child Insets ( child : ĠView , Ġin sets : ĠAny ?, Ġdrawer Gravity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġspace Ġfor Ġrent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply Margin Insets ( lp : ĠViewGroup . Margin LayoutParams , Ġin sets : ĠAny ?, Ġdrawer Gravity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġspace Ġfor Ġrent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Top Inset ( in sets : ĠAny ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetDefault StatusBar Background ( context : ĠContext ): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠDraw er Layout Compat Impl Api 2 1 Ġ: ĠDraw er Layout Compat Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfigure Apply Insets ( drawer Layout : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT _ WATCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDraw er Layout Compat Api 2 1 . configure Apply Insets ( drawer Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispatch Child Insets ( child : ĠView , Ġin sets : ĠAny ?, Ġdrawer Gravity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT _ WATCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDraw er Layout Compat Api 2 1 . dispatch Child Insets ( child , Ġin sets !! , Ġdrawer Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply Margin Insets ( lp : ĠViewGroup . Margin LayoutParams , Ġin sets : ĠAny ?, Ġdrawer Gravity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT _ WATCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDraw er Layout Compat Api 2 1 . apply Margin Insets ( lp , Ġin sets !! , Ġdrawer Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . KIT K AT _ WATCH ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Top Inset ( in sets : ĠAny ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDraw er Layout Compat Api 2 1 . get Top Inset ( in sets ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetDefault StatusBar Background ( context : ĠContext ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDraw er Layout Compat Api 2 1 . getDefault StatusBar Background ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdesc endant Focus ability Ġ= ĠViewGroup . FOCUS _ AFTER _ DESC END ANT S ĊĠĠĠĠĠĠĠ Ġval Ġdensity Ġ= Ġresources . display Metrics . density ĊĠĠĠĠĠĠĠ Ġm Min Drawer Margin Ġ= Ġ( MIN _ DRAW ER _ M ARGIN Ġ* Ġdensity Ġ+ Ġ 0 . 5 f ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġmin Vel Ġ= ĠMIN _ FL ING _ VE LOC ITY Ġ* Ġdensity ĊĊĠĠĠĠĠĠĠ Ġm Left Callback Ġ= ĠView Drag Callback ( Gravity . LEFT ) ĊĠĠĠĠĠĠĠ Ġm Right Callback Ġ= ĠView Drag Callback ( Gravity . RIGHT ) ĊĊĠĠĠĠĠĠĠ Ġm Left Drag ger Ġ= ĠView Drag Helper . create ( this , ĠTO UCH _ S LO P _ S ENS IT IVITY , Ġm Left Callback ) ĊĠĠĠĠĠĠĠ Ġm Left Drag ger . set Edge Tracking Enabled ( View Drag Helper . EDGE _ LEFT ) ĊĠĠĠĠĠĠĠ Ġm Left Drag ger . min Velocity Ġ= Ġmin Vel ĊĠĠĠĠĠĠĠ Ġm Left Callback . set Drag ger ( m Left Drag ger ) ĊĊĠĠĠĠĠĠĠ Ġm Right Drag ger Ġ= ĠView Drag Helper . create ( this , ĠTO UCH _ S LO P _ S ENS IT IVITY , Ġm Right Callback ) ĊĠĠĠĠĠĠĠ Ġm Right Drag ger . set Edge Tracking Enabled ( View Drag Helper . EDGE _ RIGHT ) ĊĠĠĠĠĠĠĠ Ġm Right Drag ger . min Velocity Ġ= Ġmin Vel ĊĠĠĠĠĠĠĠ Ġm Right Callback . set Drag ger ( m Right Drag ger ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSo Ġthat Ġwe Ġcan Ġcatch Ġthe Ġback Ġbutton ĊĠĠĠĠĠĠĠ Ġis Focus able In Touch Mode Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠView Compat . set Important For Accessibility ( this , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . IMPORTANT _ FOR _ ACC ES SI B ILITY _ YES ) ĊĊĠĠĠĠĠĠĠ ĠView Compat . set Accessibility Delegate ( this , ĠAccessibility Delegate ()) ĊĠĠĠĠĠĠĠ ĠViewGroup Compat . set Motion Event Split ting Enabled ( this , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ( View Compat . getF its System Windows ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIMP L . configure Apply Insets ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Bar Background Drawable Ġ= ĠIMP L . getDefault StatusBar Background ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Drawer Elevation Ġ= ĠD RAW ER _ E LE V ATION Ġ* Ġdensity ĊĊĠĠĠĠĠĠĠ Ġm Non Drawer Views Ġ= ĠArrayList < View >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġbase Ġelevation Ġof Ġthe Ġdrawer ( s ) Ġrelative Ġto Ġthe Ġparent , Ġin Ġpixels . ĠNote Ġthat Ġthe ĊĠĠĠĠ Ġ* Ġelevation Ġchange Ġis Ġonly Ġsupported Ġin ĠAPI Ġ 2 1 Ġand Ġabove . ĠFor Ġunsupported ĠAPI Ġlevels , Ġ 0 Ġwill ĊĠĠĠĠ Ġ* Ġbe Ġreturned Ġas Ġthe Ġelevation . ĊĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġbase Ġdepth Ġposition Ġof Ġthe Ġview , Ġin Ġpixels . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġbase Ġelevation Ġof Ġthe Ġdrawer ( s ) Ġrelative Ġto Ġthe Ġparent , Ġin Ġpixels . ĠNote Ġthat Ġthe ĊĠĠĠĠ Ġ* Ġelevation Ġchange Ġis Ġonly Ġsupported Ġin ĠAPI Ġ 2 1 Ġand Ġabove . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġelevation ĠThe Ġbase Ġdepth Ġposition Ġof Ġthe Ġview , Ġin Ġpixels . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġdrawer Elevation : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( SET _ DRAW ER _ SH ADOW _ FROM _ E LE V ATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Drawer Elevation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( elevation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drawer Elevation Ġ= Ġelevation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Drawer View ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Elevation ( child , Ġm Drawer Elevation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ hide ĠInternal Ġuse Ġonly ; Ġcalled Ġto Ġapply Ġwindow Ġin sets Ġwhen Ġconfigured ĊĠĠĠĠ Ġ* Ġ* Ġwith Ġfits System Windows =" true " ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġset Child Insets ( in sets : ĠAny , Ġdraw : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Last Insets Ġ= Ġin sets ĊĠĠĠĠĠĠĠ Ġm Draw StatusBar Background Ġ= Ġdraw ĊĠĠĠĠĠĠĠ Ġset Will Not Draw (! draw Ġ&& Ġbackground Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġsimple Ġdrawable Ġused Ġfor Ġthe Ġleft Ġor Ġright Ġshadow . ĠThe Ġdrawable Ġprovided Ġmust Ġhave Ġa ĊĠĠĠĠ Ġ* Ġnon zero Ġintr insic Ġwidth . ĠFor ĠAPI Ġ 2 1 Ġand Ġabove , Ġan Ġelevation Ġwill Ġbe Ġset Ġon Ġthe Ġdrawer ĊĠĠĠĠ Ġ* Ġinstead Ġof Ġthe Ġdrawable Ġprovided . ĊĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġfor Ġbetter Ġsupport Ġfor Ġboth Ġleft - to - right Ġand Ġright - to - left Ġlayout ĊĠĠĠĠ Ġ* Ġdirections , Ġa Ġdrawable Ġfor ĠRTL Ġlayout Ġ( in Ġadditional Ġto Ġthe Ġone Ġin ĠL TR Ġlayout ) Ġcan Ġbe ĊĠĠĠĠ Ġ* Ġdefined Ġwith Ġa Ġresource Ġqualifier Ġ" ld rtl " Ġfor ĠAPI Ġ 1 7 Ġand Ġabove Ġwith Ġthe Ġgravity ĊĠĠĠĠ Ġ* Ġ[ Gravity Compat . START ]. ĠAlternatively , Ġfor ĠAPI Ġ 2 3 Ġand Ġabove , Ġthe Ġdrawable Ġcan ĊĠĠĠĠ Ġ* Ġauto - mir rored Ġsuch Ġthat Ġthe Ġdrawable Ġwill Ġbe Ġmir rored Ġin ĠRTL Ġlayout . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġshadow Drawable ĠShadow Ġdrawable Ġto Ġuse Ġat Ġthe Ġedge Ġof Ġa Ġdrawer ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġgravity ĠWhich Ġdrawer Ġthe Ġshadow Ġshould Ġapply Ġto ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Drawer Shadow ( shadow Drawable : ĠDrawable , Ġ@ Edge Gravity Ġgravity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠTODO ĠSome one Ġsome day Ġmight Ġwant Ġto Ġset Ġmore Ġcomplex Ġdraw ables Ġhere . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThey 're Ġprobably Ġn uts , Ġbut Ġwe Ġmight Ġwant Ġto Ġconsider Ġregistering Ġcallbacks , ĊĠĠĠĠĠĠĠĠ Ġ* Ġsetting Ġstates , Ġetc . Ġproperly . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( SET _ DRAW ER _ SH ADOW _ FROM _ E LE V ATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġop . ĠDraw er Ġshadow Ġwill Ġcome Ġfrom Ġsetting Ġan Ġelevation Ġon Ġthe Ġdrawer . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( gravity Ġand ĠGr avity Compat . START Ġ== ĠGr avity Compat . START ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Start Ġ= Ġshadow Drawable ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( gravity Ġand ĠGr avity Compat . END Ġ== ĠGr avity Compat . END ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow End Ġ= Ġshadow Drawable ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( gravity Ġand ĠGr avity . LEFT Ġ== ĠGr avity . LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Left Ġ= Ġshadow Drawable ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( gravity Ġand ĠGr avity . RIGHT Ġ== ĠGr avity . RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Right Ġ= Ġshadow Drawable ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresolve Shadow Draw ables () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġsimple Ġdrawable Ġused Ġfor Ġthe Ġleft Ġor Ġright Ġshadow . ĠThe Ġdrawable Ġprovided Ġmust Ġhave Ġa ĊĠĠĠĠ Ġ* Ġnon zero Ġintr insic Ġwidth . ĠFor ĠAPI Ġ 2 1 Ġand Ġabove , Ġan Ġelevation Ġwill Ġbe Ġset Ġon Ġthe Ġdrawer ĊĠĠĠĠ Ġ* Ġinstead Ġof Ġthe Ġdrawable Ġprovided . ĊĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġfor Ġbetter Ġsupport Ġfor Ġboth Ġleft - to - right Ġand Ġright - to - left Ġlayout ĊĠĠĠĠ Ġ* Ġdirections , Ġa Ġdrawable Ġfor ĠRTL Ġlayout Ġ( in Ġadditional Ġto Ġthe Ġone Ġin ĠL TR Ġlayout ) Ġcan Ġbe ĊĠĠĠĠ Ġ* Ġdefined Ġwith Ġa Ġresource Ġqualifier Ġ" ld rtl " Ġfor ĠAPI Ġ 1 7 Ġand Ġabove Ġwith Ġthe Ġgravity ĊĠĠĠĠ Ġ* Ġ[ Gravity Compat . START ]. ĠAlternatively , Ġfor ĠAPI Ġ 2 3 Ġand Ġabove , Ġthe Ġdrawable Ġcan ĊĠĠĠĠ Ġ* Ġauto - mir rored Ġsuch Ġthat Ġthe Ġdrawable Ġwill Ġbe Ġmir rored Ġin ĠRTL Ġlayout . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġres Id ĠResource Ġid Ġof Ġa Ġshadow Ġdrawable Ġto Ġuse Ġat Ġthe Ġedge Ġof Ġa Ġdrawer ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġgravity ĠWhich Ġdrawer Ġthe Ġshadow Ġshould Ġapply Ġto ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Drawer Shadow (@ Drawable Res Ġres Id : ĠInt , Ġ@ Edge Gravity Ġgravity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Drawer Shadow ( resources . get Drawable ( res Id ), Ġgravity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġcolor Ġto Ġuse Ġfor Ġthe Ġs cri m Ġthat Ġob sc ures Ġprimary Ġcontent Ġwhile Ġa Ġdrawer Ġis Ġopen . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠColor Ġto Ġuse Ġin Ġ 0 xA ARR G GB B Ġformat . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset S cri m Color (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm S cri m Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġlistener Ġto Ġbe Ġnotified Ġof Ġdrawer Ġevents . ĠNote Ġthat Ġthis Ġmethod Ġis Ġdeprecated ĊĠĠĠĠ Ġ* Ġand Ġyou Ġshould Ġuse Ġ[. add Drawer Listener ] Ġto Ġadd Ġa Ġlistener Ġand ĊĠĠĠĠ Ġ* Ġ[. remove Drawer Listener ] Ġto Ġremove Ġa Ġregistered Ġlistener . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġlistener ĠListener Ġto Ġnotify Ġwhen Ġdrawer Ġevents Ġoccur ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠDraw er Listener ĊĊĠĠĠĠ Ġ* Ġ@ see Ġ. add Drawer Listener ĊĠĠĠĠ Ġ* Ġ@ see Ġ. remove Drawer Listener ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ@ Deprecated (" Use Ġ{@ link Ġ# add Drawer Listener ( Drawer Listener )}\ n ĠĠĠĠĠ Ġ") ĊĠĠĠ Ġfun Ġset Drawer Listener ( listener : ĠDraw er Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġlogic Ġin Ġthis Ġmethod Ġem ulates Ġwhat Ġwe Ġhad Ġbefore Ġsupport Ġfor Ġmultiple ĊĠĠĠĠĠĠĠ Ġ// Ġregistered Ġlisteners . ĊĠĠĠĠĠĠĠ Ġif Ġ( m Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Drawer Listener ( m Listener !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Drawer Listener ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġdeprecated Ġfield Ġso Ġthat Ġwe Ġcan Ġremove Ġthe Ġpassed Ġlistener Ġthe Ġnext ĊĠĠĠĠĠĠĠ Ġ// Ġtime Ġwe 're Ġcalled ĊĠĠĠĠĠĠĠ Ġm Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġthe Ġspecified Ġlistener Ġto Ġthe Ġlist Ġof Ġlisteners Ġthat Ġwill Ġbe Ġnotified Ġof Ġdrawer Ġevents . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġlistener ĠListener Ġto Ġnotify Ġwhen Ġdrawer Ġevents Ġoccur . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. remove Drawer Listener ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Drawer Listener ( listener : ĠDraw er Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Listeners Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Listeners Ġ= ĠArrayList < Drawer Listener >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Listeners !!. add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġthe Ġspecified Ġlistener Ġfrom Ġthe Ġlist Ġof Ġlisteners Ġthat Ġwill Ġbe Ġnotified Ġof Ġdrawer ĊĠĠĠĠ Ġ* Ġevents . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġlistener ĠListener Ġto Ġremove Ġfrom Ġbeing Ġnotified Ġof Ġdrawer Ġevents ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. add Drawer Listener ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Drawer Listener ( listener : ĠDraw er Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Listeners Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġcan Ġhappen Ġif Ġthis Ġmethod Ġis Ġcalled Ġbefore Ġthe Ġfirst Ġcall Ġto Ġadd Drawer Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Listeners !!. remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable Ġor Ġdisable Ġinteraction Ġwith Ġall Ġdraw ers . ĊĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġallows Ġthe Ġapplication Ġto Ġrestrict Ġthe Ġuser 's Ġability Ġto Ġopen Ġor Ġclose ĊĠĠĠĠ Ġ* Ġany Ġdrawer Ġwithin Ġthis Ġlayout . ĠDraw er Layout Ġwill Ġstill Ġrespond Ġto Ġcalls Ġto ĊĠĠĠĠ Ġ* Ġ[. open Drawer ], Ġ[. close Drawer ] Ġand Ġfriends Ġif Ġa Ġdrawer Ġis Ġlocked . ĊĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠLock ing Ġdraw ers Ġopen Ġor Ġclosed Ġwill Ġimplicitly Ġopen Ġor Ġclose ĊĠĠĠĠ Ġ* Ġany Ġdraw ers Ġas Ġappropriate . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġlock Mode ĠThe Ġnew Ġlock Ġmode Ġfor Ġthe Ġgiven Ġdrawer . ĠOne Ġof Ġ[. LOCK _ MODE _ UNLOCK ED ], ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[. LOCK _ MODE _ LOCK ED _ CLOSED ] Ġor Ġ[. LOCK _ MODE _ LOCK ED _ OPEN ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Drawer Lock Mode (@ Lock Mode Ġlock Mode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Drawer Lock Mode ( lock Mode , ĠGr avity . LEFT ) ĊĠĠĠĠĠĠĠ Ġset Drawer Lock Mode ( lock Mode , ĠGr avity . RIGHT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable Ġor Ġdisable Ġinteraction Ġwith Ġthe Ġgiven Ġdrawer . ĊĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġallows Ġthe Ġapplication Ġto Ġrestrict Ġthe Ġuser 's Ġability Ġto Ġopen Ġor Ġclose ĊĠĠĠĠ Ġ* Ġthe Ġgiven Ġdrawer . ĠDraw er Layout Ġwill Ġstill Ġrespond Ġto Ġcalls Ġto Ġ[. open Drawer ], ĊĠĠĠĠ Ġ* Ġ[. close Drawer ] Ġand Ġfriends Ġif Ġa Ġdrawer Ġis Ġlocked . ĊĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠLock ing Ġa Ġdrawer Ġopen Ġor Ġclosed Ġwill Ġimplicitly Ġopen Ġor Ġclose ĊĠĠĠĠ Ġ* Ġthat Ġdrawer Ġas Ġappropriate . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġlock Mode ĠThe Ġnew Ġlock Ġmode Ġfor Ġthe Ġgiven Ġdrawer . ĠOne Ġof Ġ[. LOCK _ MODE _ UNLOCK ED ], ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[. LOCK _ MODE _ LOCK ED _ CLOSED ] Ġor Ġ[. LOCK _ MODE _ LOCK ED _ OPEN ]. ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġedge Gravity ĠGr avity . LEFT , ĠRIGHT , ĠSTART Ġor ĠEND . ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExp resses Ġwhich Ġdrawer Ġto Ġchange Ġthe Ġmode Ġfor . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. LOCK _ MODE _ UNLOCK ED ĊĊĠĠĠĠ Ġ* Ġ@ see Ġ. LOCK _ MODE _ LOCK ED _ CLOSED ĊĊĠĠĠĠ Ġ* Ġ@ see Ġ. LOCK _ MODE _ LOCK ED _ OPEN ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Drawer Lock Mode (@ Lock Mode Ġlock Mode : ĠInt , Ġ@ Edge Gravity Ġedge Gravity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġabs Gravity Ġ= ĠGr avity Compat . get Absolute Gravity ( edge Gravity , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . get Layout Direction ( this )) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( edge Gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . LEFT Ġ-> Ġm Lock Mode Left Ġ= Ġlock Mode ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . RIGHT Ġ-> Ġm Lock Mode Right Ġ= Ġlock Mode ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity Compat . START Ġ-> Ġm Lock Mode Start Ġ= Ġlock Mode ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity Compat . END Ġ-> Ġm Lock Mode End Ġ= Ġlock Mode ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( lock Mode Ġ!= ĠLOCK _ MODE _ UNLOCK ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCancel Ġinteraction Ġin Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhelper Ġ= Ġif Ġ( abs Gravity Ġ== ĠGr avity . LEFT ) Ġm Left Drag ger Ġelse Ġm Right Drag ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( lock Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOCK _ MODE _ LOCK ED _ OPEN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Open Ġ= Ġfind Drawer With Gravity ( abs Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Open Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Drawer ( to Open ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOCK _ MODE _ LOCK ED _ CLOSED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Close Ġ= Ġfind Drawer With Gravity ( abs Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Close Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Drawer ( to Close ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}// Ġdefault : Ġdo Ġnothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable Ġor Ġdisable Ġinteraction Ġwith Ġthe Ġgiven Ġdrawer . ĊĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġallows Ġthe Ġapplication Ġto Ġrestrict Ġthe Ġuser 's Ġability Ġto Ġopen Ġor Ġclose ĊĠĠĠĠ Ġ* Ġthe Ġgiven Ġdrawer . ĠDraw er Layout Ġwill Ġstill Ġrespond Ġto Ġcalls Ġto Ġ[. open Drawer ], ĊĠĠĠĠ Ġ* Ġ[. close Drawer ] Ġand Ġfriends Ġif Ġa Ġdrawer Ġis Ġlocked . ĊĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠLock ing Ġa Ġdrawer Ġopen Ġor Ġclosed Ġwill Ġimplicitly Ġopen Ġor Ġclose ĊĠĠĠĠ Ġ* Ġthat Ġdrawer Ġas Ġappropriate . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġlock Mode ĠThe Ġnew Ġlock Ġmode Ġfor Ġthe Ġgiven Ġdrawer . ĠOne Ġof Ġ[. LOCK _ MODE _ UNLOCK ED ], ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[. LOCK _ MODE _ LOCK ED _ CLOSED ] Ġor Ġ[. LOCK _ MODE _ LOCK ED _ OPEN ]. ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdrawer View ĠThe Ġdrawer Ġview Ġto Ġchange Ġthe Ġlock Ġmode Ġfor ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. LOCK _ MODE _ UNLOCK ED ĊĊĠĠĠĠ Ġ* Ġ@ see Ġ. LOCK _ MODE _ LOCK ED _ CLOSED ĊĊĠĠĠĠ Ġ* Ġ@ see Ġ. LOCK _ MODE _ LOCK ED _ OPEN ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Drawer Lock Mode (@ Lock Mode Ġlock Mode : ĠInt , Ġdrawer View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Drawer View ( drawer View )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" View Ġ" Ġ+ Ġdrawer View Ġ+ Ġ" Ġis Ġnot Ġa Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" drawer Ġwith Ġappropriate Ġlayout _ gravity ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġgravity Ġ= Ġ( drawer View . layout Params Ġas ĠLayout Params ). gravity ĊĠĠĠĠĠĠĠ Ġset Drawer Lock Mode ( lock Mode , Ġgravity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġthe Ġlock Ġmode Ġof Ġthe Ġdrawer Ġwith Ġthe Ġgiven Ġgravity . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġedge Gravity ĠGr avity Ġof Ġthe Ġdrawer Ġto Ġcheck ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġone Ġof Ġ[. LOCK _ MODE _ UNLOCK ED ], Ġ[. LOCK _ MODE _ LOCK ED _ CLOSED ] Ġor ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠ Ġ[. LOCK _ MODE _ LOCK ED _ OPEN ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Lock Mode ĊĠĠĠ Ġfun Ġget Drawer Lock Mode (@ Edge Gravity Ġedge Gravity : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Direction Ġ= ĠView Compat . get Layout Direction ( this ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( edge Gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . LEFT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Lock Mode Left Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Lock Mode Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Lock Mode Ġ= Ġif Ġ( layout Direction Ġ== ĠView Compat . LAYOUT _ DIRECTION _ LTR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock Mode Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock Mode End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Lock Mode Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġleft Lock Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . RIGHT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Lock Mode Right Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Lock Mode Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Lock Mode Ġ= Ġif Ġ( layout Direction Ġ== ĠView Compat . LAYOUT _ DIRECTION _ LTR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock Mode End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock Mode Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Lock Mode Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġright Lock Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity Compat . START Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Lock Mode Start Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Lock Mode Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Lock Mode Ġ= Ġif Ġ( layout Direction Ġ== ĠView Compat . LAYOUT _ DIRECTION _ LTR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock Mode Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock Mode Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Lock Mode Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstart Lock Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity Compat . END Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Lock Mode End Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Lock Mode End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Lock Mode Ġ= Ġif Ġ( layout Direction Ġ== ĠView Compat . LAYOUT _ DIRECTION _ LTR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock Mode Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock Mode Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Lock Mode Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġend Lock Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLOCK _ MODE _ UNLOCK ED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġthe Ġlock Ġmode Ġof Ġthe Ġgiven Ġdrawer Ġview . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġdrawer View ĠDraw er Ġview Ġto Ġcheck Ġlock Ġmode ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġone Ġof Ġ[. LOCK _ MODE _ UNLOCK ED ], Ġ[. LOCK _ MODE _ LOCK ED _ CLOSED ] Ġor ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠ Ġ[. LOCK _ MODE _ LOCK ED _ OPEN ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Lock Mode ĊĠĠĠ Ġfun Ġget Drawer Lock Mode ( drawer View : ĠView ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Drawer View ( drawer View )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" View Ġ$ drawer View Ġis Ġnot Ġa Ġdrawer ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdrawer Gravity Ġ= Ġ( drawer View . layout Params Ġas ĠLayout Params ). gravity ĊĠĠĠĠĠĠĠ Ġreturn Ġget Drawer Lock Mode ( drawer Gravity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġtitle Ġof Ġthe Ġdrawer Ġwith Ġthe Ġgiven Ġgravity . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWhen Ġaccessibility Ġis Ġturned Ġon , Ġthis Ġis Ġthe Ġtitle Ġthat Ġwill Ġbe Ġused Ġto ĊĠĠĠĠ Ġ* Ġidentify Ġthe Ġdrawer Ġto Ġthe Ġactive Ġaccessibility Ġservice . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġedge Gravity ĠGr avity . LEFT , ĠRIGHT , ĠSTART Ġor ĠEND . ĠExp resses Ġwhich ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Ġto Ġset Ġthe Ġtitle Ġfor . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtitle ĠThe Ġtitle Ġfor Ġthe Ġdrawer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Drawer Title (@ Edge Gravity Ġedge Gravity : ĠInt , Ġtitle : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġabs Gravity Ġ= ĠGr avity Compat . get Absolute Gravity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedge Gravity , ĠView Compat . get Layout Direction ( this )) ĊĠĠĠĠĠĠĠ Ġif Ġ( abs Gravity Ġ== ĠGr avity . LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Title Left Ġ= Ġtitle ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( abs Gravity Ġ== ĠGr avity . RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Title Right Ġ= Ġtitle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtitle Ġof Ġthe Ġdrawer Ġwith Ġthe Ġgiven Ġgravity . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġedge Gravity ĠGr avity . LEFT , ĠRIGHT , ĠSTART Ġor ĠEND . ĠExp resses Ġwhich ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Ġto Ġreturn Ġthe Ġtitle Ġfor . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġtitle Ġof Ġthe Ġdrawer , Ġor Ġnull Ġif Ġnone Ġset . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. set Drawer Title ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Drawer Title (@ Edge Gravity Ġedge Gravity : ĠInt ): ĠCharSequence ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġabs Gravity Ġ= ĠGr avity Compat . get Absolute Gravity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedge Gravity , ĠView Compat . get Layout Direction ( this )) ĊĠĠĠĠĠĠĠ Ġif Ġ( abs Gravity Ġ== ĠGr avity . LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Title Left ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( abs Gravity Ġ== ĠGr avity . RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Title Right ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠResolve Ġthe Ġshared Ġstate Ġof Ġall Ġdraw ers Ġfrom Ġthe Ġcomponent ĠView Drag Helpers . ĊĠĠĠĠ Ġ* ĠShould Ġbe Ġcalled Ġwhenever Ġa ĠView Drag Helper 's Ġstate Ġchanges . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġupdate Drawer State ( for Gravity : ĠInt , Ġ@ State Ġactive State : ĠInt , Ġactive Drawer : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġleft State Ġ= Ġm Left Drag ger . view Drag State ĊĠĠĠĠĠĠĠ Ġval Ġright State Ġ= Ġm Right Drag ger . view Drag State ĊĊĠĠĠĠĠĠĠ Ġval Ġstate : ĠInt ĊĠĠĠĠĠĠĠ Ġif Ġ( left State Ġ== ĠSTATE _ DR AG GING Ġ|| Ġright State Ġ== ĠSTATE _ DR AG GING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ DR AG GING ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( left State Ġ== ĠSTATE _ SET TL ING Ġ|| Ġright State Ġ== ĠSTATE _ SET TL ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ SET TL ING ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ IDLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( active Drawer Ġ!= Ġnull Ġ&& Ġactive State Ġ== ĠSTATE _ IDLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġactive Drawer . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lp . on Screen Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch On Drawer Closed ( active Drawer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( lp . on Screen Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch On Drawer Opened ( active Drawer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= Ġm Drawer State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drawer State Ġ= Ġstate ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Listeners Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġthe Ġlisteners . ĠDo Ġthat Ġfrom Ġthe Ġend Ġof Ġthe Ġlist Ġso Ġthat Ġif Ġa Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremoves Ġitself Ġas Ġthe Ġresult Ġof Ġbeing Ġcalled , Ġit Ġwon 't Ġmess Ġup Ġwith Ġour Ġiteration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Count Ġ= Ġm Listeners !!. size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlistener Count Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Listeners ! ![ i ]. on Drawer StateChanged ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdispatch On Drawer Closed ( drawer View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġdrawer View . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠ Ġif Ġ( lp . open State Ġand ĠLayout Params . FLAG _ IS _ OPEN ED Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . open State Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Listeners Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġthe Ġlisteners . ĠDo Ġthat Ġfrom Ġthe Ġend Ġof Ġthe Ġlist Ġso Ġthat Ġif Ġa Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremoves Ġitself Ġas Ġthe Ġresult Ġof Ġbeing Ġcalled , Ġit Ġwon 't Ġmess Ġup Ġwith Ġour Ġiteration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Count Ġ= Ġm Listeners !!. size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlistener Count Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Listeners ! ![ i ]. on Drawer Closed ( drawer View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Children Important For Accessibility ( drawer View , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġsend ĠWINDO W _ STATE _ CHANGE Ġif Ġthe Ġhost Ġhas Ġwindow Ġfocus . ĠThis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmay Ġchange Ġif Ġsupport Ġfor Ġmultiple Ġforeground Ġwindows Ġ( e . g . ĠI ME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġimproves . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Window Focus ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġroot View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View ?. send Accessibility Event ( Accessibility Event . TYPE _ WINDOW _ STATE _ CHANGED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdispatch On Drawer Opened ( drawer View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġdrawer View . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠ Ġif Ġ( lp . open State Ġand ĠLayout Params . FLAG _ IS _ OPEN ED Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . open State Ġ= ĠLayout Params . FLAG _ IS _ OPEN ED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Listeners Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġthe Ġlisteners . ĠDo Ġthat Ġfrom Ġthe Ġend Ġof Ġthe Ġlist Ġso Ġthat Ġif Ġa Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremoves Ġitself Ġas Ġthe Ġresult Ġof Ġbeing Ġcalled , Ġit Ġwon 't Ġmess Ġup Ġwith Ġour Ġiteration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Count Ġ= Ġm Listeners !!. size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlistener Count Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Listeners ! ![ i ]. on Drawer Opened ( drawer View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Children Important For Accessibility ( drawer View , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġsend ĠWINDO W _ STATE _ CHANGE Ġif Ġthe Ġhost Ġhas Ġwindow Ġfocus . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Window Focus ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Accessibility Event ( Accessibility Event . TYPE _ WINDOW _ STATE _ CHANGED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer View . request Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Children Important For Accessibility ( drawer View : ĠView , Ġis Drawer Open : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Drawer Open Ġ&& Ġ! is Drawer View ( child ) Ġ|| Ġis Drawer Open Ġ&& Ġchild Ġ=== Ġdrawer View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDraw er Ġis Ġclosed Ġand Ġthis Ġis Ġa Ġcontent Ġview Ġor Ġthis Ġis Ġan ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġopen Ġdrawer Ġview , Ġso Ġit Ġshould Ġbe Ġvisible . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Important For Accessibility ( child , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . IMPORTANT _ FOR _ ACC ES SI B ILITY _ YES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Important For Accessibility ( child , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . IMPORTANT _ FOR _ ACC ES SI B ILITY _ NO _ HIDE _ DESC END ANT S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdispatch On Drawer Slide ( drawer View : ĠView , Ġslide Offset : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Listeners Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġthe Ġlisteners . ĠDo Ġthat Ġfrom Ġthe Ġend Ġof Ġthe Ġlist Ġso Ġthat Ġif Ġa Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremoves Ġitself Ġas Ġthe Ġresult Ġof Ġbeing Ġcalled , Ġit Ġwon 't Ġmess Ġup Ġwith Ġour Ġiteration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Count Ġ= Ġm Listeners !!. size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlistener Count Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Listeners ! ![ i ]. on Drawer Slide ( drawer View , Ġslide Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġset Drawer View Offset ( drawer View : ĠView , Ġslide Offset : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġdrawer View . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠ Ġif Ġ( slide Offset Ġ== Ġlp . on Screen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlp . on Screen Ġ= Ġslide Offset ĊĠĠĠĠĠĠĠ Ġdispatch On Drawer Slide ( drawer View , Ġslide Offset ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Drawer View Offset ( drawer View : ĠView ?): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( drawer View ?. layout Params Ġas ĠLayout Params ). on Screen ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġabsolute Ġgravity Ġof Ġthe Ġchild Ġdrawer View , Ġresolved Ġaccording ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠ Ġto Ġthe Ġcurrent Ġlayout Ġdirection ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġget Drawer View Absolute Gravity ( drawer View : ĠView ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgravity Ġ= Ġ( drawer View . layout Params Ġas ĠLayout Params ). gravity ĊĠĠĠĠĠĠĠ Ġreturn ĠGr avity Compat . get Absolute Gravity ( gravity , ĠView Compat . get Layout Direction ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcheck Drawer View Absolute Gravity ( drawer View : ĠView , Ġcheck For : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġabs Gravity Ġ= Ġget Drawer View Absolute Gravity ( drawer View ) ĊĠĠĠĠĠĠĠ Ġreturn Ġabs Gravity Ġand Ġcheck For Ġ== Ġcheck For ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġfind Open Drawer (): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Lp Ġ= Ġchild . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Lp . open State Ġand ĠLayout Params . FLAG _ IS _ OPEN ED Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġmove Drawer To Offset ( drawer View : ĠView , Ġslide Offset : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Offset Ġ= Ġget Drawer View Offset ( drawer View ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġdrawer View . width ĊĠĠĠĠĠĠĠ Ġval Ġold Pos Ġ= Ġ( width Ġ* Ġold Offset ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġnew Pos Ġ= Ġ( width Ġ* Ġslide Offset ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġnew Pos Ġ- Ġold Pos ĊĊĠĠĠĠĠĠĠ Ġdrawer View . offset Left And Right ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Drawer View Absolute Gravity ( drawer View , ĠGr avity . LEFT )) Ġdx Ġelse Ġ- dx ) ĊĠĠĠĠĠĠĠ Ġset Drawer View Offset ( drawer View , Ġslide Offset ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġgravity Ġthe Ġgravity Ġof Ġthe Ġchild Ġto Ġreturn . ĠIf Ġspecified Ġas Ġa ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Ġvalue , Ġit Ġwill Ġbe Ġresolved Ġaccording Ġto Ġthe Ġcurrent ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Ġdirection . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġdrawer Ġwith Ġthe Ġspecified Ġgravity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġfind Drawer With Gravity ( gravity : ĠInt ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġabs H oriz Gravity Ġ= ĠGr avity Compat . get Absolute Gravity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity , ĠView Compat . get Layout Direction ( this )) Ġand ĠGr avity . HORIZONTAL _ GR AV ITY _ MASK ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Abs Gravity Ġ= Ġget Drawer View Absolute Gravity ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Abs Gravity Ġand ĠGr avity . HORIZONTAL _ GR AV ITY _ MASK Ġ== Ġabs H oriz Gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġm First Layout Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġm First Layout Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Mode Ġ= ĠView . Measure Spec . get Mode ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġvar Ġheight Mode Ġ= ĠView . Measure Spec . get Mode ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Size Ġ= ĠView . Measure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġvar Ġheight Size Ġ= ĠView . Measure Spec . getSize ( height Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( width Mode Ġ!= ĠView . Measure Spec . EX ACT LY Ġ|| Ġheight Mode Ġ!= ĠView . Measure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġcrash Ġthe Ġlayout Ġeditor . ĠCons ume Ġall Ġof Ġthe Ġspace Ġif Ġspecified ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġor Ġpick Ġa Ġmagic Ġnumber Ġfrom Ġthin Ġair Ġotherwise . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠBetter Ġcommunication Ġwith Ġtools Ġof Ġthis Ġb og us Ġstate . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIt Ġwill Ġcrash Ġon Ġa Ġreal Ġdevice . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Mode Ġ== ĠView . Measure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Mode Ġ= ĠView . Measure Spec . EX ACT LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( width Mode Ġ== ĠView . Measure Spec . UNSPECIFIED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Mode Ġ= ĠView . Measure Spec . EX ACT LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Size Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( height Mode Ġ== ĠView . Measure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Mode Ġ= ĠView . Measure Spec . EX ACT LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( height Mode Ġ== ĠView . Measure Spec . UNSPECIFIED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Mode Ġ= ĠView . Measure Spec . EX ACT LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Size Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Drawer Layout Ġmust Ġbe Ġmeasured Ġwith ĠMeasure Spec . EX ACT LY .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width Size , Ġheight Size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġapply Insets Ġ= Ġm Last Insets Ġ!= Ġnull Ġ&& ĠView Compat . getF its System Windows ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġlayout Direction Ġ= ĠView Compat . get Layout Direction ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġone Ġdrawer Ġis Ġpermitted Ġalong Ġeach Ġvertical Ġedge Ġ( left Ġ/ Ġright ). ĠThese Ġtwo Ġb ooleans ĊĠĠĠĠĠĠĠ Ġ// Ġare Ġtracking Ġthe Ġpresence Ġof Ġthe Ġedge Ġdraw ers . ĊĠĠĠĠĠĠĠ Ġvar Ġhas Drawer On Left Edge Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġhas Drawer On Right Edge Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . visibility Ġ== ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġchild . layout Params Ġas ĠLayout Params ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( apply Insets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc grav Ġ= ĠGr avity Compat . get Absolute Gravity ( lp . gravity , Ġlayout Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( View Compat . getF its System Windows ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIMP L . dispatch Child Insets ( child , Ġm Last Insets , Ġc grav ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIMP L . apply Margin Insets ( lp , Ġm Last Insets , Ġc grav ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is ContentView ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠContent Ġviews Ġget Ġmeasured Ġat Ġexactly Ġthe Ġlayout 's Ġsize . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Width Spec Ġ= ĠView . Measure Spec . make Measure Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Size Ġ- Ġlp . left Margin Ġ- Ġlp . right Margin , ĠView . Measure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Height Spec Ġ= ĠView . Measure Spec . make Measure Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Size Ġ- Ġlp . top Margin Ġ- Ġlp . bottom Margin , ĠView . Measure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . measure ( content Width Spec , Ġcontent Height Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Drawer View ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( SET _ DRAW ER _ SH ADOW _ FROM _ E LE V ATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( View Compat . get Elevation ( child ) Ġ!= Ġm Drawer Elevation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Elevation ( child , Ġm Drawer Elevation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Edge Gravity Ġval Ġchild Gravity Ġ= Ġget Drawer View Absolute Gravity ( child ) Ġand ĠGr avity . HORIZONTAL _ GR AV ITY _ MASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġthe Ġis Drawer View Ġcheck Ġguarantees Ġthat Ġchild Gravity Ġhere Ġis Ġeither ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLEFT Ġor ĠRIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Left Edge Drawer Ġ= Ġchild Gravity Ġ== ĠGr avity . LEFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Left Edge Drawer Ġ&& Ġhas Drawer On Left Edge Ġ|| Ġ! is Left Edge Drawer Ġ&& Ġhas Drawer On Right Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Child Ġdrawer Ġhas Ġabsolute Ġgravity Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgravity ToString ( child Gravity ) Ġ+ Ġ" Ġbut Ġthis Ġ" Ġ+ ĠTAG Ġ+ Ġ" Ġalready Ġhas Ġa Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" drawer Ġview Ġalong Ġthat Ġedge ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Left Edge Drawer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Drawer On Left Edge Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Drawer On Right Edge Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawer Width Spec Ġ= ĠViewGroup . getChild Measure Spec ( width Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Min Drawer Margin Ġ+ Ġlp . left Margin Ġ+ Ġlp . right Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawer Height Spec Ġ= ĠViewGroup . getChild Measure Spec ( height Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . top Margin Ġ+ Ġlp . bottom Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . measure ( drawer Width Spec , Ġdrawer Height Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Child Ġ" Ġ+ Ġchild Ġ+ Ġ" Ġat Ġindex Ġ" Ġ+ Ġi Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġdoes Ġnot Ġhave Ġa Ġvalid Ġlayout _ gravity Ġ- Ġmust Ġbe ĠGr avity . LEFT , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Gravity . RIGHT Ġor ĠGr avity . NO _ GR AV ITY ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Shadow Draw ables () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( SET _ DRAW ER _ SH ADOW _ FROM _ E LE V ATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Shadow Left Resolved Ġ= Ġresolve Left Shadow () ĊĠĠĠĠĠĠĠ Ġm Shadow Right Resolved Ġ= Ġresolve Right Shadow () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Left Shadow (): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Direction Ġ= ĠView Compat . get Layout Direction ( this ) ĊĠĠĠĠĠĠĠ Ġ// ĠP refer Ġshadow s Ġdefined Ġwith Ġstart / end Ġgravity Ġover Ġleft Ġand Ġright . ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Direction Ġ== ĠView Compat . LAYOUT _ DIRECTION _ LTR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Shadow Start Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCorrect Ġdrawable Ġlayout Ġdirection , Ġif Ġneeded . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmirror ( m Shadow Start , Ġlayout Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Shadow Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Shadow End Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCorrect Ġdrawable Ġlayout Ġdirection , Ġif Ġneeded . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmirror ( m Shadow End , Ġlayout Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Shadow End ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Shadow Left ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Right Shadow (): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Direction Ġ= ĠView Compat . get Layout Direction ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Direction Ġ== ĠView Compat . LAYOUT _ DIRECTION _ LTR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Shadow End Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCorrect Ġdrawable Ġlayout Ġdirection , Ġif Ġneeded . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmirror ( m Shadow End , Ġlayout Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Shadow End ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Shadow Start Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCorrect Ġdrawable Ġlayout Ġdirection , Ġif Ġneeded . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmirror ( m Shadow Start , Ġlayout Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Shadow Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Shadow Right ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChange Ġthe Ġlayout Ġdirection Ġof Ġthe Ġgiven Ġdrawable . ĊĠĠĠĠ Ġ* ĠReturn Ġtrue Ġif Ġauto - mirror Ġis Ġsupported Ġand Ġdrawable 's Ġlayout Ġdirection Ġcan Ġbe Ġchanged . ĊĠĠĠĠ Ġ* ĠOtherwise , Ġreturn Ġfalse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmirror ( drawable : ĠDrawable ?, Ġlayout Direction : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ== Ġnull Ġ|| Ġ! Drawable Compat . is Auto Mir rored ( drawable )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠDrawable Compat . setLayout Direction ( drawable , Ġlayout Direction ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġl : ĠInt , Ġt : ĠInt , Ġr : ĠInt , Ġb : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm In Layout Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġr Ġ- Ġl ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . visibility Ġ== ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġchild . layout Params Ġas ĠLayout Params ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is ContentView ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout ( lp . left Margin , Ġlp . top Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . left Margin Ġ+ Ġchild . meas ured Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . top Margin Ġ+ Ġchild . meas ured Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// ĠDraw er , Ġif Ġit Ġwasn 't Ġon Measure Ġwould Ġhave Ġthrown Ġan Ġexception . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Width Ġ= Ġchild . meas ured Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Height Ġ= Ġchild . meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Left : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Offset : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Drawer View Absolute Gravity ( child , ĠGr avity . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Left Ġ= Ġ- child Width Ġ+ Ġ( child Width Ġ* Ġlp . on Screen ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Offset Ġ= Ġ( child Width Ġ+ Ġchild Left ). toFloat () Ġ/ Ġchild Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// ĠRight ; Ġon Measure Ġchecked Ġfor Ġus . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Left Ġ= Ġwidth Ġ- Ġ( child Width Ġ* Ġlp . on Screen ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Offset Ġ= Ġ( width Ġ- Ġchild Left ). toFloat () Ġ/ Ġchild Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchange Offset Ġ= Ġnew Offset Ġ!= Ġlp . on Screen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv grav Ġ= Ġlp . gravity Ġand ĠGr avity . VERTICAL _ GR AV ITY _ MASK ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( v grav ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout ( child Left , Ġlp . top Margin , Ġchild Left Ġ+ Ġchild Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . top Margin Ġ+ Ġchild Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġb Ġ- Ġt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout ( child Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ- Ġlp . bottom Margin Ġ- Ġchild . meas ured Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Left Ġ+ Ġchild Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ- Ġlp . bottom Margin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . CENTER _ VERTICAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġb Ġ- Ġt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġchild Top Ġ= Ġ( height Ġ- Ġchild Height ) Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOffset Ġfor Ġmargins . ĠIf Ġthings Ġdon 't Ġfit Ġright Ġbecause Ġof ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbad Ġmeasurement Ġbefore , Ġoh Ġwell . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Top Ġ< Ġlp . top Margin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Top Ġ= Ġlp . top Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( child Top Ġ+ Ġchild Height Ġ> Ġheight Ġ- Ġlp . bottom Margin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Top Ġ= Ġheight Ġ- Ġlp . bottom Margin Ġ- Ġchild Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout ( child Left , Ġchild Top , Ġchild Left Ġ+ Ġchild Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Top Ġ+ Ġchild Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout ( child Left , Ġlp . top Margin , Ġchild Left Ġ+ Ġchild Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . top Margin Ġ+ Ġchild Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( change Offset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Drawer View Offset ( child , Ġnew Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Visibility Ġ= Ġif Ġ( lp . on Screen Ġ> Ġ 0 ) ĠView . VISIBLE Ġelse ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . visibility Ġ!= Ġnew Visibility ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . visibility Ġ= Ġnew Visibility ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm In Layout Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm First Layout Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Super Call ") ĊĠĠĠ Ġoverride Ġfun Ġrequest Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m In Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Scroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġvar Ġs cri m Opacity Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon screen Ġ= Ġ( getChild At ( i ). layout Params Ġas ĠLayout Params ). on Screen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs cri m Opacity Ġ= ĠMath . max ( scri m Opacity , Ġon screen ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm S cri m Opacity Ġ= Ġs cri m Opacity ĊĊĠĠĠĠĠĠĠ Ġ// Ġ" |" Ġused Ġon Ġpurpose ; Ġboth Ġneed Ġto Ġrun . ĊĠĠĠĠĠĠĠ Ġif Ġ( m Left Drag ger . continue Set t ling ( true ) Ġor Ġm Right Drag ger . continue Set t ling ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . post Invalidate On Animation ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġdrawable Ġto Ġdraw Ġin Ġthe Ġin sets Ġarea Ġfor Ġthe Ġstatus Ġbar . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġwill Ġonly Ġbe Ġactivated Ġif Ġthis ĠDraw er Layout Ġfits System Windows . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġbg ĠBackground Ġdrawable Ġto Ġdraw Ġbehind Ġthe Ġstatus Ġbar ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset StatusBar Background ( bg : ĠDrawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstatus Bar Background Drawable Ġ= Ġbg ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġdrawable Ġto Ġdraw Ġin Ġthe Ġin sets Ġarea Ġfor Ġthe Ġstatus Ġbar . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġwill Ġonly Ġbe Ġactivated Ġif Ġthis ĠDraw er Layout Ġfits System Windows . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġres Id ĠResource Ġid Ġof Ġa Ġbackground Ġdrawable Ġto Ġdraw Ġbehind Ġthe Ġstatus Ġbar ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset StatusBar Background ( res Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstatus Bar Background Drawable Ġ= Ġif Ġ( res Id Ġ!= Ġ 0 ) ĠContext Compat . get Drawable ( context , Ġres Id ) Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġdrawable Ġto Ġdraw Ġin Ġthe Ġin sets Ġarea Ġfor Ġthe Ġstatus Ġbar . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġwill Ġonly Ġbe Ġactivated Ġif Ġthis ĠDraw er Layout Ġfits System Windows . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠColor Ġto Ġuse Ġas Ġa Ġbackground Ġdrawable Ġto Ġdraw Ġbehind Ġthe Ġstatus Ġbar ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 xA ARR G GB B Ġformat . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset StatusBar BackgroundColor (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstatus Bar Background Drawable Ġ= ĠColor Drawable ( color ) ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon R tl Properties Changed ( layout Direction : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresolve Shadow Draw ables () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Draw ( c : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( c ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Draw StatusBar Background Ġ&& Ġstatus Bar Background Drawable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinset Ġ= ĠIMP L . get Top Inset ( m Last Insets ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in set Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Bar Background Drawable !!. setBounds ( 0 , Ġ 0 , Ġwidth , Ġinset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Bar Background Drawable !!. draw ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw Child ( canvas : ĠCanvas , Ġchild : ĠView , Ġdrawing Time : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġval Ġdrawing Content Ġ= Ġis ContentView ( child ) ĊĠĠĠĠĠĠĠ Ġvar Ġclip Left Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġclip Right Ġ= Ġwidth ĊĊĠĠĠĠĠĠĠ Ġval Ġrestore Count Ġ= Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġif Ġ( drawing Content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġ=== Ġchild Ġ|| Ġv . visibility Ġ!= ĠView . VISIBLE Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! has Opaque Background ( v ) Ġ|| Ġ! is Drawer View ( v ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . height Ġ< Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Drawer View Absolute Gravity ( v , ĠGr avity . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv right Ġ= Ġv . right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v right Ġ> Ġclip Left ) Ġclip Left Ġ= Ġv right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv left Ġ= Ġv . left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v left Ġ< Ġclip Right ) Ġclip Right Ġ= Ġv left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Rect ( clip Left , Ġ 0 , Ġclip Right , Ġget Height ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsuper . draw Child ( canvas , Ġchild , Ġdrawing Time ) ĊĠĠĠĠĠĠĠ Ġcanvas . restore To Count ( restore Count ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m S cri m Opacity Ġ> Ġ 0 Ġ&& Ġdrawing Content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Alpha Ġ= Ġ( m S cri m Color Ġand Ġ 0 xff 0 0 0 0 0 0 . toInt ()). ush r ( 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimag Ġ= Ġ( base Alpha Ġ* Ġm S cri m Opacity ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġimag Ġshl Ġ 2 4 Ġor Ġ( m S cri m Color Ġand Ġ 0 xffffff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm S cri m Paint . color Ġ= Ġcolor ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( clip Left . toFloat (), Ġ 0 f , Ġclip Right . toFloat (), Ġget Height (). toFloat (), Ġm S cri m Paint ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Shadow Left Resolved Ġ!= Ġnull Ġ&& Ġcheck Drawer View Absolute Gravity ( child , ĠGr avity . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshadow Width Ġ= Ġm Shadow Left Resolved !!. intrinsic Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Right Ġ= Ġchild . right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawer Peek Distance Ġ= Ġm Left Drag ger . edge Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= ĠMath . max ( 0 f , ĠMath . min ( child Right . toFloat () Ġ/ Ġdrawer Peek Distance , Ġ 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Left Resolved !!. setBounds ( child Right , Ġchild . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Right Ġ+ Ġshadow Width , Ġchild . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Left Resolved !!. alpha Ġ= Ġ( 0 xff Ġ* Ġalpha ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Left Resolved !!. draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Shadow Right Resolved Ġ!= Ġnull Ġ&& Ġcheck Drawer View Absolute Gravity ( child , ĠGr avity . RIGHT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshadow Width Ġ= Ġm Shadow Right Resolved !!. intrinsic Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Left Ġ= Ġchild . left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshowing Ġ= Ġwidth Ġ- Ġchild Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawer Peek Distance Ġ= Ġm Right Drag ger . edge Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= ĠMath . max ( 0 f , ĠMath . min ( show ing . toFloat () Ġ/ Ġdrawer Peek Distance , Ġ 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Right Resolved !!. setBounds ( child Left Ġ- Ġshadow Width , Ġchild . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Left , Ġchild . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Right Resolved !!. alpha Ġ= Ġ( 0 xff Ġ* Ġalpha ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Right Resolved !!. draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġis ContentView ( child : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( child . layout Params Ġas ĠLayout Params ). gravity Ġ== ĠGr avity . NO _ GR AV ITY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġis Drawer View ( child : ĠView ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgravity Ġ= Ġ( child ?. layout Params Ġas ĠLayout Params ). gravity ĊĠĠĠĠĠĠĠ Ġval Ġabs Gravity Ġ= ĠGr avity Compat . get Absolute Gravity ( gravity , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . get Layout Direction ( child )) ĊĠĠĠĠĠĠĠ Ġif Ġ( abs Gravity Ġand ĠGr avity . LEFT Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġchild Ġis Ġa Ġleft - edge Ġdrawer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( abs Gravity Ġand ĠGr avity . RIGHT Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġchild Ġis Ġa Ġright - edge Ġdrawer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠMotion Event Compat . getAction Mask ed ( ev ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ" |" Ġused Ġdeli ber ately Ġhere ; Ġboth Ġmethods Ġshould Ġbe Ġinvoked . ĊĠĠĠĠĠĠĠ Ġval Ġintercept For Drag Ġ= Ġm Left Drag ger . should Intercept Touch Event ( ev ) Ġor Ġm Right Drag ger . should Intercept Touch Event ( ev ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġintercept For Tap Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġev . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġev . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Initial Motion X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Initial Motion Y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m S cri m Opacity Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġm Left Drag ger . find Top Child Under ( x . toInt (), Ġy . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġ!= Ġnull Ġ&& Ġis ContentView ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintercept For Tap Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Dis allow Intercept Requested Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Children Canceled Touch Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġcross Ġthe Ġtouch Ġs lop , Ġdon 't Ġperform Ġthe Ġdelayed Ġpeek Ġfor Ġan Ġedge Ġtouch . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Left Drag ger . check Touch S lop ( View Drag Helper . DIRECTION _ ALL )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Left Callback . remove Callbacks () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Right Callback . remove Callbacks () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL , ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Draw ers ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Dis allow Intercept Requested Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Children Canceled Touch Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġintercept For Drag Ġ|| Ġintercept For Tap Ġ|| Ġhas Peek ing Drawer () Ġ|| Ġm Children Canceled Touch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġm Left Drag ger . process Touch Event ( ev ) ĊĠĠĠĠĠĠĠ Ġm Right Drag ger . process Touch Event ( ev ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġev . action ĊĠĠĠĠĠĠĠ Ġval Ġwant Touch Events Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( action Ġand ĠMotion Event Compat . ACTION _ MASK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġev . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġev . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Initial Motion X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Initial Motion Y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Dis allow Intercept Requested Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Children Canceled Touch Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġev . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġev . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpeek ing Only Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtouched View Ġ= Ġm Left Drag ger . find Top Child Under ( x . toInt (), Ġy . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( touched View Ġ!= Ġnull Ġ&& Ġis ContentView ( touched View )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġx Ġ- Ġm Initial Motion X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġy Ġ- Ġm Initial Motion Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs lop Ġ= Ġm Left Drag ger . touch S lop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dx Ġ* Ġdx Ġ+ Ġdy Ġ* Ġdy Ġ< Ġs lop Ġ* Ġs lop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠT aps Ġclose Ġa Ġdim med Ġopen Ġdrawer Ġbut Ġonly Ġif Ġit Ġisn 't Ġlocked Ġopen . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopen Drawer Ġ= Ġfind Open Drawer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( open Drawer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpeek ing Only Ġ= Ġget Drawer Lock Mode ( open Drawer ) Ġ== ĠLOCK _ MODE _ LOCK ED _ OPEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Draw ers ( peek ing Only ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Dis allow Intercept Requested Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Draw ers ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Dis allow Intercept Requested Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Children Canceled Touch Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwant Touch Events ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Dis allow Intercept Touch Event ( dis allow Intercept : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( CHILD REN _ DIS ALLOW _ INTER CEPT Ġ|| Ġ! m Left Drag ger . is Edge Tou ched ( View Drag Helper . EDGE _ LEFT ) Ġ&& Ġ! m Right Drag ger . is Edge Tou ched ( View Drag Helper . EDGE _ RIGHT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġhave Ġan Ġedge Ġtouch Ġwe Ġwant Ġto Ġskip Ġthis Ġand Ġtrack Ġit Ġfor Ġlater Ġinstead . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . request Dis allow Intercept Touch Event ( dis allow Intercept ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Dis allow Intercept Requested Ġ= Ġdis allow Intercept ĊĠĠĠĠĠĠĠ Ġif Ġ( dis allow Intercept ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Draw ers ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClose Ġall Ġcurrently Ġopen Ġdrawer Ġviews Ġby Ġanim ating Ġthem Ġout Ġof Ġview . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclose Draw ers () Ġ{ ĊĠĠĠĠĠĠĠ Ġclose Draw ers ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġclose Draw ers ( peek ing Only : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġneeds Invalidate Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġchild . layout Params Ġas ĠLayout Params ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Drawer View ( child ) Ġ|| Ġpeek ing Only Ġ&& Ġ! lp . is Peek ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Width Ġ= Ġchild . width ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Drawer View Absolute Gravity ( child , ĠGr avity . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneeds Invalidate Ġ= Ġneeds Invalidate Ġor Ġm Left Drag ger . smooth Slide View To ( child , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- child Width , Ġchild . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneeds Invalidate Ġ= Ġneeds Invalidate Ġor Ġm Right Drag ger . smooth Slide View To ( child , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , Ġchild . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . is Peek ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Left Callback . remove Callbacks () ĊĠĠĠĠĠĠĠ Ġm Right Callback . remove Callbacks () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( needs Invalidate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen Ġthe Ġspecified Ġdrawer Ġview . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġdrawer View ĠDraw er Ġview Ġto Ġopen ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimate ĠWhether Ġopening Ġof Ġthe Ġdrawer Ġshould Ġbe Ġanimated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġopen Drawer ( drawer View : ĠView , Ġanimate : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Drawer View ( drawer View )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" View Ġ$ drawer View Ġis Ġnot Ġa Ġsl iding Ġdrawer ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġdrawer View . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠ Ġif Ġ( m First Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . on Screen Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . open State Ġ= ĠLayout Params . FLAG _ IS _ OPEN ED ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Children Important For Accessibility ( drawer View , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . open State Ġ= Ġlp . open State Ġor ĠLayout Params . FLAG _ IS _ OPEN ING ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Drawer View Absolute Gravity ( drawer View , ĠGr avity . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Left Drag ger . smooth Slide View To ( drawer View , Ġ 0 , Ġdrawer View . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Right Drag ger . smooth Slide View To ( drawer View , Ġwidth Ġ- Ġdrawer View . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer View . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Drawer To Offset ( drawer View , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Drawer State ( lp . gravity , ĠSTATE _ IDLE , Ġdrawer View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen Ġthe Ġspecified Ġdrawer . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġgravity ĠGr avity . LEFT Ġto Ġmove Ġthe Ġleft Ġdrawer Ġor ĠGr avity . RIGHT Ġfor Ġthe Ġright . ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity Compat . START Ġor ĠGr avity Compat . END Ġmay Ġalso Ġbe Ġused . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimate ĠWhether Ġopening Ġof Ġthe Ġdrawer Ġshould Ġbe Ġanimated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġopen Drawer (@ Edge Gravity Ġgravity : ĠInt , Ġanimate : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawer View Ġ= Ġfind Drawer With Gravity ( gravity ) Ġ?: Ġthrow ĠIllegalArgumentException (" No Ġdrawer Ġview Ġfound Ġwith Ġgravity Ġ" Ġ+ Ġgravity ToString ( gravity )) ĊĠĠĠĠĠĠĠ Ġopen Drawer ( drawer View , Ġanimate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClose Ġthe Ġspecified Ġdrawer Ġview . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġdrawer View ĠDraw er Ġview Ġto Ġclose ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimate ĠWhether Ġclosing Ġof Ġthe Ġdrawer Ġshould Ġbe Ġanimated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġclose Drawer ( drawer View : ĠView , Ġanimate : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Drawer View ( drawer View )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" View Ġ$ drawer View Ġis Ġnot Ġa Ġsl iding Ġdrawer ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġdrawer View . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠ Ġif Ġ( m First Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . on Screen Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . open State Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . open State Ġ= Ġlp . open State Ġor ĠLayout Params . FLAG _ IS _ CLO SING ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Drawer View Absolute Gravity ( drawer View , ĠGr avity . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Left Drag ger . smooth Slide View To ( drawer View , Ġ- drawer View . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer View . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Right Drag ger . smooth Slide View To ( drawer View , Ġwidth , Ġdrawer View . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Drawer To Offset ( drawer View , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Drawer State ( lp . gravity , ĠSTATE _ IDLE , Ġdrawer View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer View . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClose Ġthe Ġspecified Ġdrawer . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġgravity ĠGr avity . LEFT Ġto Ġmove Ġthe Ġleft Ġdrawer Ġor ĠGr avity . RIGHT Ġfor Ġthe Ġright . ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity Compat . START Ġor ĠGr avity Compat . END Ġmay Ġalso Ġbe Ġused . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimate ĠWhether Ġclosing Ġof Ġthe Ġdrawer Ġshould Ġbe Ġanimated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġclose Drawer (@ Edge Gravity Ġgravity : ĠInt , Ġanimate : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawer View Ġ= Ġfind Drawer With Gravity ( gravity ) Ġ?: Ġthrow ĠIllegalArgumentException (" No Ġdrawer Ġview Ġfound Ġwith Ġgravity Ġ" Ġ+ Ġgravity ToString ( gravity )) ĊĠĠĠĠĠĠĠ Ġclose Drawer ( drawer View , Ġanimate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthe Ġgiven Ġdrawer Ġview Ġis Ġcurrently Ġin Ġan Ġopen Ġstate . ĊĠĠĠĠ Ġ* ĠTo Ġbe Ġconsidered Ġ" open " Ġthe Ġdrawer Ġmust Ġhave Ġset tled Ġinto Ġits Ġfully ĊĠĠĠĠ Ġ* Ġvisible Ġstate . ĠTo Ġcheck Ġfor Ġpartial Ġvisibility Ġuse ĊĠĠĠĠ Ġ* Ġ[. is Drawer Visible ]. ĊĊĠĠĠĠ Ġ* Ġ@ param Ġdrawer ĠDraw er Ġview Ġto Ġcheck ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġgiven Ġdrawer Ġview Ġis Ġin Ġan Ġopen Ġstate ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. is Drawer Visible ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Drawer Open ( drawer : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Drawer View ( drawer )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" View Ġ$ drawer Ġis Ġnot Ġa Ġdrawer ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdrawer Lp Ġ= Ġdrawer . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠ Ġreturn Ġdrawer Lp . open State Ġand ĠLayout Params . FLAG _ IS _ OPEN ED Ġ== Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthe Ġgiven Ġdrawer Ġview Ġis Ġcurrently Ġin Ġan Ġopen Ġstate . ĊĠĠĠĠ Ġ* ĠTo Ġbe Ġconsidered Ġ" open " Ġthe Ġdrawer Ġmust Ġhave Ġset tled Ġinto Ġits Ġfully ĊĠĠĠĠ Ġ* Ġvisible Ġstate . ĠIf Ġthere Ġis Ġno Ġdrawer Ġwith Ġthe Ġgiven Ġgravity Ġthis Ġmethod ĊĠĠĠĠ Ġ* Ġwill Ġreturn Ġfalse . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġdrawer Gravity ĠGr avity Ġof Ġthe Ġdrawer Ġto Ġcheck ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġgiven Ġdrawer Ġview Ġis Ġin Ġan Ġopen Ġstate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Drawer Open (@ Edge Gravity Ġdrawer Gravity : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawer View Ġ= Ġfind Drawer With Gravity ( drawer Gravity ) ĊĠĠĠĠĠĠĠ Ġif Ġ( drawer View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Drawer Open ( drawer View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġa Ġgiven Ġdrawer Ġview Ġis Ġcurrently Ġvisible Ġon - screen . ĠThe Ġdrawer ĊĠĠĠĠ Ġ* Ġmay Ġbe Ġonly Ġpeek ing Ġonto Ġthe Ġscreen , Ġfully Ġextended , Ġor Ġanywhere Ġin between . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġdrawer ĠDraw er Ġview Ġto Ġcheck ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġgiven Ġdrawer Ġis Ġvisible Ġon - screen ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. is Drawer Open ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Drawer Visible ( drawer : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Drawer View ( drawer )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" View Ġ$ drawer Ġis Ġnot Ġa Ġdrawer ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ( drawer . layout Params Ġas ĠLayout Params ). on Screen Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġa Ġgiven Ġdrawer Ġview Ġis Ġcurrently Ġvisible Ġon - screen . ĠThe Ġdrawer ĊĠĠĠĠ Ġ* Ġmay Ġbe Ġonly Ġpeek ing Ġonto Ġthe Ġscreen , Ġfully Ġextended , Ġor Ġanywhere Ġin Ġbetween . ĊĠĠĠĠ Ġ* ĠIf Ġthere Ġis Ġno Ġdrawer Ġwith Ġthe Ġgiven Ġgravity Ġthis Ġmethod Ġwill Ġreturn Ġfalse . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġdrawer Gravity ĠGr avity Ġof Ġthe Ġdrawer Ġto Ġcheck ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġgiven Ġdrawer Ġis Ġvisible Ġon - screen ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Drawer Visible (@ Edge Gravity Ġdrawer Gravity : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawer View Ġ= Ġfind Drawer With Gravity ( drawer Gravity ) ĊĠĠĠĠĠĠĠ Ġif Ġ( drawer View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Drawer Visible ( drawer View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Peek ing Drawer (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġget Child At ( i ). layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lp . is Peek ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Default LayoutParams (): ĠViewGroup . LayoutParams Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLayout Params ( ViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . MATCH _ PARENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate LayoutParams ( p : ĠViewGroup . LayoutParams ): ĠViewGroup . LayoutParams Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( p Ġis ĠLayout Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params ( p ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( p Ġis ĠViewGroup . Margin LayoutParams ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params ( p ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params ( p ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck LayoutParams ( p : ĠViewGroup . LayoutParams ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġp Ġis ĠLayout Params Ġ&& Ġsuper . check LayoutParams ( p ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate LayoutParams ( attrs : ĠAttributeSet ): ĠViewGroup . LayoutParams Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLayout Params ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Focus ables ( views : ĠArrayList < View >, Ġdirection : ĠInt , Ġfocus able Mode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( desc endant Focus ability Ġ== ĠViewGroup . FOCUS _ BLOCK _ DESC END ANT S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġthe Ġviews Ġin Ġthe Ġopen Ġdraw ers Ġare Ġfocus ables . ĠAdd Ġnormal Ġchild Ġviews Ġwhen ĊĠĠĠĠĠĠĠ Ġ// Ġno Ġdraw ers Ġare Ġopened . ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġvar Ġis Drawer Open Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Drawer View ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Drawer Open ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Drawer Open Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . add Focus ables ( views , Ġdirection , Ġfocus able Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Non Drawer Views . add ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Drawer Open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon Drawer Views Count Ġ= Ġm Non Drawer Views . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. non Drawer Views Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġm Non Drawer Views [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . add Focus ables ( views , Ġdirection , Ġfocus able Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Non Drawer Views . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Visible Drawer (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Visible Drawer () Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Visible Drawer (): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Drawer View ( child ) Ġ&& Ġis Drawer Visible ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcancel Child View Touch () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCancel Ġchild Ġto uches ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Children Canceled Touch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem Clock . uptime Millis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancel Event Ġ= ĠMotion Event . obtain ( now , Ġnow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL , Ġ 0 . 0 f , Ġ 0 . 0 f , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( i ). dispatch Touch Event ( cancel Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Event . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Children Canceled Touch Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon KeyDown ( keyCode : ĠInt , Ġevent : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK Ġ&& Ġhas Visible Drawer ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent Compat . start Tracking ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyDown ( keyCode , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon KeyUp ( keyCode : ĠInt , Ġevent : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible Drawer Ġ= Ġfind Visible Drawer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visible Drawer Ġ!= Ġnull Ġ&& Ġget Drawer Lock Mode ( visible Drawer ) Ġ== ĠLOCK _ MODE _ UNLOCK ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvisible Drawer Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyUp ( keyCode , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ! is ĠSaved State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġss Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( ss . super State ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ss . open Drawer Gravity Ġ!= ĠGr avity . NO _ GR AV ITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Open Ġ= Ġfind Drawer With Gravity ( ss . open Drawer Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Open Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Drawer ( to Open ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ss . lock Mode Left Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Drawer Lock Mode ( ss . lock Mode Left , ĠGr avity . LEFT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ss . lock Mode Right Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Drawer Lock Mode ( ss . lock Mode Right , ĠGr avity . RIGHT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ss . lock Mode Start Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Drawer Lock Mode ( ss . lock Mode Start , ĠGr avity Compat . START ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ss . lock Mode End Ġ!= ĠLOCK _ MODE _ UNDEFINED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Drawer Lock Mode ( ss . lock Mode End , ĠGr avity Compat . END ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuper State Ġ= Ġsuper . on Save InstanceState () ĊĠĠĠĠĠĠĠ Ġval Ġss Ġ= ĠSaved State ( super State ) ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġchild . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIs Ġthe Ġcurrent Ġchild Ġfully Ġopened Ġ( that Ġis , Ġnot Ġclosing )? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Opened And Not Closing Ġ= Ġlp . open State Ġ== ĠLayout Params . FLAG _ IS _ OPEN ED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIs Ġthe Ġcurrent Ġchild Ġopening ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Closed And Opening Ġ= Ġlp . open State Ġ== ĠLayout Params . FLAG _ IS _ OPEN ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Opened And Not Closing Ġ|| Ġis Closed And Opening ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġone Ġof Ġthe Ġconditions Ġabove Ġholds , Ġsave Ġthe Ġchild 's Ġgravity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġthat Ġwe Ġopen Ġthat Ġchild Ġduring Ġstate Ġrestore . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss . open Drawer Gravity Ġ= Ġlp . gravity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġss . lock Mode Left Ġ= Ġm Lock Mode Left ĊĠĠĠĠĠĠĠ Ġss . lock Mode Right Ġ= Ġm Lock Mode Right ĊĠĠĠĠĠĠĠ Ġss . lock Mode Start Ġ= Ġm Lock Mode Start ĊĠĠĠĠĠĠĠ Ġss . lock Mode End Ġ= Ġm Lock Mode End ĊĊĠĠĠĠĠĠĠ Ġreturn Ġss ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View ( child : ĠView , Ġindex : ĠInt , Ġparams : ĠViewGroup . LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . addView ( child , Ġindex , Ġparams ) ĊĊĠĠĠĠĠĠĠ Ġval Ġopen Drawer Ġ= Ġfind Open Drawer () ĊĠĠĠĠĠĠĠ Ġif Ġ( open Drawer Ġ!= Ġnull Ġ|| Ġis Drawer View ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġdrawer Ġis Ġalready Ġopen Ġor Ġthe Ġnew Ġview Ġis Ġa Ġdrawer , Ġso Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnew Ġview Ġshould Ġstart Ġout Ġhidden . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Important For Accessibility ( child , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . IMPORTANT _ FOR _ ACC ES SI B ILITY _ NO _ HIDE _ DESC END ANT S ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise Ġthis Ġis Ġa Ġcontent Ġview Ġand Ġno Ġdrawer Ġis Ġopen , Ġso Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnew Ġview Ġshould Ġstart Ġout Ġvisible . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Important For Accessibility ( child , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . IMPORTANT _ FOR _ ACC ES SI B ILITY _ YES ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġonly Ġneed Ġa Ġdelegate Ġhere Ġif Ġthe Ġframework Ġdoesn 't Ġunderstand ĊĠĠĠĠĠĠĠ Ġ// ĠNO _ HIDE _ DESC END ANT S Ġimportance . ĊĠĠĠĠĠĠĠ Ġif Ġ(! CAN _ HIDE _ DESC END ANT S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Accessibility Delegate ( child , Ġm Child Accessibility Delegate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠState Ġpersisted Ġacross Ġinstances ĊĠĠĠĠ Ġ*/ ĊĠĠĠĠ Ġprivate Ġclass ĠSaved State Ġ: ĠAbs Saved State Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġopen Drawer Gravity Ġ= ĠGr avity . NO _ GR AV ITY ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġlock Mode Left : ĠInt = 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġlock Mode Right : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġlock Mode Start : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġlock Mode End : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġconstructor (` in `: ĠParcel , Ġloader : ĠClassLoader ) Ġ: Ġsuper (` in `, Ġloader ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Drawer Gravity Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock Mode Left Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock Mode Right Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock Mode Start Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock Mode End Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( super State : ĠParcel able ) Ġ: Ġsuper ( super State ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( dest : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . writeTo Parcel ( dest , Ġflags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeInt ( open Drawer Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeInt ( lock Mode Left ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeInt ( lock Mode Right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeInt ( lock Mode Start ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeInt ( lock Mode End ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠCRE ATOR : ĠParcel able . Creator < Saved State > Ġ= ĠParcel able Compat . new Creator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠParcel able Compat Creator Callbacks < Saved State > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel (` in `: ĠParcel , Ġloader : ĠClassLoader ): ĠSaved State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSaved State (` in `, Ġloader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Saved State ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠView Drag Callback ( private Ġval Ġm Abs Gravity : ĠInt ) Ġ: ĠView Drag Helper . Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Drag ger : ĠView Drag Helper ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Peek Runnable Ġ= ĠRunnable Ġ{ Ġpeek Drawer () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Drag ger ( drag ger : ĠView Drag Helper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag ger Ġ= Ġdrag ger ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġremove Callbacks () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Drawer Layout . remove Callbacks ( m Peek Runnable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtry Capture View ( child : ĠView , Ġpointer Id : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġcapture Ġviews Ġwhere Ġthe Ġgravity Ġmatches Ġwhat Ġwe 're Ġlooking Ġfor . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġlets Ġus Ġuse Ġtwo ĠView Drag Helpers , Ġone Ġfor Ġeach Ġside Ġdrawer . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Drawer View ( child ) Ġ&& Ġcheck Drawer View Absolute Gravity ( child , Ġm Abs Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġget Drawer Lock Mode ( child ) Ġ== ĠLOCK _ MODE _ UNLOCK ED ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Drag StateChanged ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Drawer State ( m Abs Gravity , Ġstate , Ġm Drag ger !!. captured View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Position Changed ( changed View : ĠView ?, Ġleft : ĠInt , Ġtop : ĠInt , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Width Ġ= Ġchanged View !!. width ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġre ver ses Ġthe Ġposition ing Ġshown Ġin Ġon Layout . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Drawer View Absolute Gravity ( changed View , ĠGr avity . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ( child Width Ġ+ Ġleft ). toFloat () Ġ/ Ġchild Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ( width Ġ- Ġleft ). toFloat () Ġ/ Ġchild Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Drawer View Offset ( changed View , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanged View . visibility Ġ= Ġif Ġ( offset Ġ== Ġ 0 f ) ĠView . IN VISIBLE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Capt ured ( captured Child : ĠView ?, Ġactive Pointer Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġcaptured Child !!. layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . is Peek ing Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Other Drawer () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġclose Other Drawer () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Gr av Ġ= Ġif Ġ( m Abs Gravity Ġ== ĠGr avity . LEFT ) ĠGr avity . RIGHT Ġelse ĠGr avity . LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Close Ġ= Ġfind Drawer With Gravity ( other Gr av ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Close Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Drawer ( to Close ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Released ( released Child : ĠView ?, Ġx vel : ĠFloat , Ġy vel : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOffset Ġis Ġhow Ġopen Ġthe Ġdrawer Ġis , Ġtherefore Ġleft / right Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġare Ġreversed Ġfrom Ġone Ġanother . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġget Drawer View Offset ( released Child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Width Ġ= Ġreleased Child !!. width ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Drawer View Absolute Gravity ( released Child , ĠGr avity . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġif Ġ( x vel Ġ> Ġ 0 Ġ|| Ġx vel Ġ== Ġ 0 f Ġ&& Ġoffset Ġ> Ġ 0 . 5 f ) Ġ 0 Ġelse Ġ- child Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġif Ġ( x vel Ġ< Ġ 0 Ġ|| Ġx vel Ġ== Ġ 0 f Ġ&& Ġoffset Ġ> Ġ 0 . 5 f ) Ġwidth Ġ- Ġchild Width Ġelse Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag ger !!. set tle Capt ured View At ( left , Ġreleased Child . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Edge Tou ched ( edge Flags : ĠInt , Ġpointer Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ( m Peek Runnable , ĠP EEK _ DELAY . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġpeek Drawer () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Capture : ĠView ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Left : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpeek Distance Ġ= Ġm Drag ger !!. edge Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Edge Ġ= Ġm Abs Gravity Ġ== ĠGr avity . LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Capture Ġ= Ġfind Drawer With Gravity ( Gravity . LEFT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Left Ġ= Ġ( if Ġ( to Capture Ġ!= Ġnull ) Ġ- to Capture . width Ġelse Ġ 0 ) Ġ+ Ġpeek Distance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Capture Ġ= Ġfind Drawer With Gravity ( Gravity . RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Left Ġ= Ġwidth Ġ- Ġpeek Distance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġpeek Ġif Ġit Ġwould Ġmean Ġmaking Ġthe Ġdrawer Ġmore Ġvisible Ġand Ġthe Ġdrawer Ġisn 't Ġlocked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Capture Ġ!= Ġnull Ġ&& Ġ( left Edge Ġ&& Ġto Capture . left Ġ< Ġchild Left Ġ|| Ġ! left Edge Ġ&& Ġto Capture . left Ġ> Ġchild Left ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawer Lock Mode ( to Capture ) Ġ== ĠLOCK _ MODE _ UNLOCK ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġto Capture . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag ger !!. smooth Slide View To ( to Capture , Ġchild Left , Ġto Capture . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . is Peek ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Other Drawer () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Child View Touch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Edge Lock ( edge Flags : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ALLOW _ EDGE _ LOCK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawer Ġ= Ġfind Drawer With Gravity ( m Abs Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawer Ġ!= Ġnull Ġ&& Ġ! is Drawer Open ( drawer )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Drawer ( drawer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Edge Drag Started ( edge Flags : ĠInt , Ġpointer Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Capture : ĠView ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edge Flags Ġand ĠView Drag Helper . EDGE _ LEFT Ġ== ĠView Drag Helper . EDGE _ LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Capture Ġ= Ġfind Drawer With Gravity ( Gravity . LEFT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Capture Ġ= Ġfind Drawer With Gravity ( Gravity . RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Capture Ġ!= Ġnull Ġ&& Ġget Drawer Lock Mode ( to Capture ) Ġ== ĠLOCK _ MODE _ UNLOCK ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag ger !!. capture Child View ( to Capture , Ġpointer Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View Horizontal Drag Range ( child : ĠView ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Drawer View ( child )) Ġchild !!. width Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclamp View Position Horizontal ( child : ĠView ?, Ġleft : ĠInt , Ġdx : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Drawer View Absolute Gravity ( child !! , ĠGr avity . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMath . max (- child !!. width , ĠMath . min ( left , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMath . max ( width Ġ- Ġchild !!. width , ĠMath . min ( left , Ġwidth )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclamp View Position Vertical ( child : ĠView ?, Ġtop : ĠInt , Ġdy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild !!. top ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLayout Params Ġ: ĠViewGroup . Margin LayoutParams Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġgravity Ġ= ĠGr avity . NO _ GR AV ITY ĊĠĠĠĠĠĠĠ Ġvar Ġon Screen : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠ Ġvar Ġis Peek ing : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġopen State : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġconstructor ( c : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( c , Ġattrs ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġc . obtain Styled Attributes ( attrs , ĠLAY OUT _ ATTR S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . gravity Ġ= Ġa . getInt ( 0 , ĠGr avity . NO _ GR AV ITY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( width : ĠInt , Ġheight : ĠInt ) Ġ: Ġsuper ( width , Ġheight ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( width : ĠInt , Ġheight : ĠInt , Ġgravity : ĠInt ) Ġ: Ġthis ( width , Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . gravity Ġ= Ġgravity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( source : ĠLayout Params ) Ġ: Ġsuper ( source ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . gravity Ġ= Ġsource . gravity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( source : ĠViewGroup . LayoutParams ) Ġ: Ġsuper ( source ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( source : ĠViewGroup . Margin LayoutParams ) Ġ: Ġsuper ( source ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFLAG _ IS _ OPEN ED Ġ= Ġ 0 x 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFLAG _ IS _ OPEN ING Ġ= Ġ 0 x 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFLAG _ IS _ CLO SING Ġ= Ġ 0 x 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinner Ġclass ĠAccessibility Delegate Ġ: ĠAccessibility Delegate Compat () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Tmp Rect Ġ= ĠRect () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Initialize Accessibility NodeInfo ( host : ĠView , Ġinfo : ĠAccessibility NodeInfo Compat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( CAN _ HIDE _ DESC END ANT S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Initialize Accessibility NodeInfo ( host , Ġinfo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠObtain Ġa Ġnode Ġfor Ġthe Ġhost , Ġthen Ġmanually Ġgenerate Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġof Ġchildren Ġto Ġonly Ġinclude Ġnon - ob sc ured Ġviews . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuper Node Ġ= ĠAccessibility NodeInfo Compat . obtain ( info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Initialize Accessibility NodeInfo ( host , Ġsuper Node ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . set Source ( host ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= ĠView Compat . getParent For Accessibility ( host ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . setParent ( parent Ġas ĠView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy NodeInfo No Children ( info , Ġsuper Node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Node . recycle () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Children For Accessibility ( info , Ġhost Ġas ĠViewGroup ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . className Ġ= ĠDraw er Layout :: class . java . name ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġview Ġreports Ġitself Ġas Ġfocus able Ġso Ġthat Ġit Ġcan Ġintercept ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġback Ġbutton , Ġbut Ġwe Ġshould Ġprevent Ġthis Ġview Ġfrom Ġreporting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġitself Ġas Ġfocus able Ġto Ġaccessibility Ġservices . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . is Focus able Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . is Focused Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . remove Action ( Accessibility NodeInfo Compat . Accessibility Action Compat . ACTION _ FOCUS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . remove Action ( Accessibility NodeInfo Compat . Accessibility Action Compat . ACTION _ CLEAR _ FOCUS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Initialize Accessibility Event ( host : ĠView , Ġevent : ĠAccessibility Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Initialize Accessibility Event ( host , Ġevent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . className Ġ= ĠDraw er Layout :: class . java . name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispatch Populate Accessibility Event ( host : ĠView , Ġevent : ĠAccessibility Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSpecial Ġcase Ġto Ġhandle Ġwindow Ġstate Ġchange Ġevents . ĠAs Ġfar Ġas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġaccessibility Ġservices Ġare Ġconcerned , Ġstate Ġchanges Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDraw er Layout Ġinvalidate Ġthe Ġentire Ġcontents Ġof Ġthe Ġscreen Ġ( like ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġan ĠActivity Ġor ĠDialog ) Ġand Ġthey Ġshould Ġannounce Ġthe Ġtitle Ġof Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnew Ġcontent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . eventType Ġ== ĠAccessibility Event . TYPE _ WINDOW _ STATE _ CHANGED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Text Ġ= Ġevent . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible Drawer Ġ= Ġfind Visible Drawer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visible Drawer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedge Gravity Ġ= Ġget Drawer View Absolute Gravity ( visible Drawer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġget Drawer Title ( edge Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Text . add ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch Populate Accessibility Event ( host , Ġevent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Request Send Accessibility Event ( host : ĠViewGroup , Ġchild : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent : ĠAccessibility Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( CAN _ HIDE _ DESC END ANT S Ġ|| Ġinclude Child For Accessibility ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Request Send Accessibility Event ( host , Ġchild , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġadd Children For Accessibility ( info : ĠAccessibility NodeInfo Compat , Ġv : ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġv . child Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġv . getChild At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( include Child For Accessibility ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . addChild ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġshould Ġreally Ġbe Ġin ĠAccessibility NodeInfo Compat , Ġbut Ġthere Ġunfortunately ĊĠĠĠĠĠĠĠĠ Ġ* Ġseem Ġto Ġbe Ġa Ġfew Ġelements Ġthat Ġare Ġnot Ġeasily Ġclone able Ġusing Ġthe Ġunderlying ĠAPI . ĊĠĠĠĠĠĠĠĠ Ġ* ĠLeave Ġit Ġprivate Ġhere Ġas Ġit 's Ġnot Ġgeneral - purpose Ġuseful . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcopy NodeInfo No Children ( dest : ĠAccessibility NodeInfo Compat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc : ĠAccessibility NodeInfo Compat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= Ġm Tmp Rect ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc . get Bounds In Parent ( rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . setBounds In Parent ( rect ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc . get Bounds In Screen ( rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . setBounds In Screen ( rect ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . isVisible To User Ġ= Ġsrc . isVisible To User ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . packageName Ġ= Ġsrc . packageName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . className Ġ= Ġsrc . className ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . content Description Ġ= Ġsrc . content Description ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . isEnabled Ġ= Ġsrc . isEnabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . is Clickable Ġ= Ġsrc . is Clickable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . is Focus able Ġ= Ġsrc . is Focus able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . is Focused Ġ= Ġsrc . is Focused ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . is Accessibility Focused Ġ= Ġsrc . is Accessibility Focused ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . isSelected Ġ= Ġsrc . isSelected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . is Long Clickable Ġ= Ġsrc . is Long Clickable ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . addAction ( src . actions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinner Ġclass ĠChild Accessibility Delegate Ġ: ĠAccessibility Delegate Compat () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Initialize Accessibility NodeInfo ( child : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo : ĠAccessibility NodeInfo Compat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Initialize Accessibility NodeInfo ( child , Ġinfo ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! include Child For Accessibility ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġare Ġignoring Ġthe Ġsub - tree Ġroot ed Ġat Ġthe Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbreak Ġthe Ġconnection Ġto Ġthe Ġrest Ġof Ġthe Ġnode Ġtree . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġdetails Ġrefer Ġto Ġinclude Child For Accessibility . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . setParent ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Drawer Layout " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIndicates Ġthat Ġany Ġdraw ers Ġare Ġin Ġan Ġidle , Ġset tled Ġstate . ĠNo Ġanimation Ġis Ġin Ġprogress . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ IDLE Ġ= ĠView Drag Helper . STATE _ IDLE ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIndicates Ġthat Ġa Ġdrawer Ġis Ġcurrently Ġbeing Ġdrag ged Ġby Ġthe Ġuser . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ DR AG GING Ġ= ĠView Drag Helper . STATE _ DR AG GING ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIndicates Ġthat Ġa Ġdrawer Ġis Ġin Ġthe Ġprocess Ġof Ġset t ling Ġto Ġa Ġfinal Ġposition . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ SET TL ING Ġ= ĠView Drag Helper . STATE _ SET TL ING ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdrawer Ġis Ġun locked . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOCK _ MODE _ UNLOCK ED Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdrawer Ġis Ġlocked Ġclosed . ĠThe Ġuser Ġmay Ġnot Ġopen Ġit , Ġthough ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġapp Ġmay Ġopen Ġit Ġprogram matically . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOCK _ MODE _ LOCK ED _ CLOSED Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdrawer Ġis Ġlocked Ġopen . ĠThe Ġuser Ġmay Ġnot Ġclose Ġit , Ġthough Ġthe Ġapp ĊĠĠĠĠĠĠĠĠ Ġ* Ġmay Ġclose Ġit Ġprogram matically . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOCK _ MODE _ LOCK ED _ OPEN Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdrawer 's Ġlock Ġstate Ġis Ġreset Ġto Ġdefault . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOCK _ MODE _ UNDEFINED Ġ= Ġ 3 ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMIN _ DRAW ER _ M ARGIN Ġ= Ġ 6 4 Ġ// Ġdp ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠD RAW ER _ E LE V ATION Ġ= Ġ 1 0 Ġ// dp ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ SCR IM _ COLOR Ġ= Ġ 0 x 9 9 0 0 0 0 0 0 . toInt () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠLength Ġof Ġtime Ġto Ġdelay Ġbefore Ġpeek ing Ġthe Ġdrawer . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠP EEK _ DELAY Ġ= Ġ 1 6 0 Ġ// Ġms ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMinimum Ġvelocity Ġthat Ġwill Ġbe Ġdetected Ġas Ġa Ġfl ing ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMIN _ FL ING _ VE LOC ITY Ġ= Ġ 4 0 0 Ġ// Ġd ips Ġper Ġsecond ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠExperimental Ġfeature . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠALLOW _ EDGE _ LOCK Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH ILD REN _ DIS ALLOW _ INTER CEPT Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTO UCH _ S LO P _ S ENS IT IVITY Ġ= Ġ 1 f ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLAY OUT _ ATTR S Ġ= Ġint ArrayOf ( android . R . attr . layout _ gravity ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠWhether Ġwe Ġcan Ġuse ĠNO _ HIDE _ DESC END ANT S Ġaccessibility Ġimportance . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCAN _ HIDE _ DESC END ANT S Ġ= ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 1 9 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠWhether Ġthe Ġdrawer Ġshadow Ġcomes Ġfrom Ġsetting Ġelevation Ġon Ġthe Ġdrawer . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSET _ DRAW ER _ SH ADOW _ FROM _ E LE V ATION Ġ= ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 1 ĊĊĠĠĠĠĠĠĠ Ġinternal Ġ Ġval Ġ ĠIMP L : ĠDraw er Layout Compat Impl ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= ĠBuild . VERSION . SDK _ INT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Ġ>= Ġ 2 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIMP L Ġ= ĠDraw er Layout Compat Impl Api 2 1 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIMP L Ġ= ĠDraw er Layout Compat Impl Base () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSimple Ġgravity Ġto Ġstring Ġ- Ġonly Ġsupports ĠLEFT Ġand ĠRIGHT Ġfor Ġdebugging Ġoutput . ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġgravity ĠAbsolute Ġgravity Ġvalue ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠLEFT Ġor ĠRIGHT Ġas Ġappropriate , Ġor Ġa Ġhex Ġstring ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġgravity ToString (@ Edge Gravity Ġgravity : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gravity Ġand ĠGr avity . LEFT Ġ== ĠGr avity . LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" LEFT " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gravity Ġand ĠGr avity . RIGHT Ġ== ĠGr avity . RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" RIGHT " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInteger . to HexString ( gravity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġhas Opaque Background ( v : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbg Ġ= Ġv . background ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bg Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbg . opacity Ġ== ĠPixel Format . OP A QUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinclude Child For Accessibility ( child : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġchild Ġis Ġnot Ġimportant Ġfor Ġaccessibility Ġwe Ġmake ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsure Ġthis Ġhide s Ġthe Ġentire Ġsubtree Ġroot ed Ġat Ġit Ġas Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIMPORT ANT _ FOR _ ACC ES SI B ILITY _ NO _ HIDE _ DESC END ATS Ġis Ġnot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsupported Ġon Ġolder Ġplatforms Ġbut Ġwe Ġwant Ġto Ġhide Ġthe Ġentire ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontent Ġand Ġnot Ġopened Ġdraw ers Ġif Ġa Ġdrawer Ġis Ġopened . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠView Compat . get Important For Accessibility ( child ) Ġ!= ĠView Compat . IMPORTANT _ FOR _ ACC ES SI B ILITY _ NO _ HIDE _ DESC END ANT S Ġ&& ĠView Compat . get Important For Accessibility ( child ) Ġ!= ĠView Compat . IMPORTANT _ FOR _ ACC ES SI B ILITY _ NO ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ /** Ċ Ġ* ĠOpen Ġthe Ġspecified Ġdrawer Ġview Ġby Ġanim ating Ġit Ġinto Ġview . ĊĊ Ġ* Ġ@ param Ġdrawer View ĠDraw er Ġview Ġto Ġopen Ċ Ġ*/ Ċ /** Ċ Ġ* ĠOpen Ġthe Ġspecified Ġdrawer Ġby Ġanim ating Ġit Ġout Ġof Ġview . ĊĊ Ġ* Ġ@ param Ġgravity ĠGr avity . LEFT Ġto Ġmove Ġthe Ġleft Ġdrawer Ġor ĠGr avity . RIGHT Ġfor Ġthe Ġright . Ċ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity Compat . START Ġor ĠGr avity Compat . END Ġmay Ġalso Ġbe Ġused . Ċ Ġ*/ Ċ /** Ċ Ġ* ĠClose Ġthe Ġspecified Ġdrawer Ġview Ġby Ġanim ating Ġit Ġinto Ġview . ĊĊ Ġ* Ġ@ param Ġdrawer View ĠDraw er Ġview Ġto Ġclose Ċ Ġ*/ Ċ /** Ċ Ġ* ĠClose Ġthe Ġspecified Ġdrawer Ġby Ġanim ating Ġit Ġout Ġof Ġview . ĊĊ Ġ* Ġ@ param Ġgravity ĠGr avity . LEFT Ġto Ġmove Ġthe Ġleft Ġdrawer Ġor ĠGr avity . RIGHT Ġfor Ġthe Ġright . Ċ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity Compat . START Ġor ĠGr avity Compat . END Ġmay Ġalso Ġbe Ġused . Ċ Ġ*/