/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 Ġsky do ves Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" unused ") Ċ Ċ package Ġcom . sky do ves . expand able layout Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . annotation . Px Ċ import Ġandroidx . appcompat . content . res . AppCompat Resources Ċ import Ġandroidx . core . widget . ImageView Compat Ċ import Ġcom . sky do ves . expand able layout . databinding . Expand able Layout Frame Binding Ċ Ċ /** ĠAn Ġexpand able Ġlayout Ġthat Ġshows Ġa Ġtwo - level Ġlayout Ġwith Ġan Ġindicator . Ġ*/ Ċ class ĠExpand able Layout Ġ@ Jvm Over loads Ġconstructor ( ĊĠ Ġcontext : ĠContext , ĊĠ Ġattribute Set : ĠAttributeSet ? Ġ= Ġnull , ĊĠ Ġdef Style : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattribute Set , Ġdef Style ) Ġ{ ĊĊĠ Ġlateinit Ġvar Ġparent Layout : ĠView ĊĠ Ġlateinit Ġvar Ġsecond Layout : ĠView ĊĊĠ Ġprivate Ġval Ġbinding : ĠExpand able Layout Frame Binding Ġ= ĊĠĠĠ ĠExpand able Layout Frame Binding . inflate ( LayoutInflater . from ( context ), Ġnull , Ġfalse ) ĊĊĠ Ġprivate Ġvar Ġ_ is Expanded : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġprivate Ġvar Ġ_ is Expand ing : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġprivate Ġvar Ġ_ is Col lap sing : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġ@ Layout Res ĊĠ Ġprivate Ġvar Ġ_ parent Layout Resource : ĠInt Ġ= ĠR . layout . expand able _ layout _ frame ĊĊĠ Ġ@ Layout Res ĊĠ Ġprivate Ġvar Ġ_ second Layout Resource : ĠInt Ġ= ĠR . layout . expand able _ layout _ child ĊĊĠ Ġprivate Ġvar Ġ_ spinner Drawable : ĠDrawable ? Ġ= Ġnull ĊĊĠ Ġ@ Px ĊĠ Ġprivate Ġvar Ġ_ spinner Margin : ĠFloat Ġ= Ġdp 2 Px ( 1 4 ) ĊĊĠ Ġ@ Px ĊĠ Ġprivate Ġvar Ġ_ spinner Size : ĠFloat Ġ= Ġdp 2 Px ( 1 2 ) ĊĊĠ Ġ@ Color Int ĊĠ Ġprivate Ġvar Ġ_ spinner Color : ĠInt Ġ= ĠColor . WHITE ĊĊĠ Ġprivate Ġvar Ġ_ spinner Gravity : ĠSp inner Gravity Ġ= ĠSp inner Gravity . END ĊĊĠ Ġprivate Ġvar Ġ_ show Spinner : ĠBoolean Ġ= Ġtrue ĊĊĠ Ġvar Ġis Expanded : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġ_ is Expanded ĊĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ_ is Expanded Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġis Expand ing : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġ_ is Expand ing ĊĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ_ is Expand ing Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġis Col lap sing : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġ_ is Col lap sing ĊĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ_ is Col lap sing Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġparent Layout Resource : ĠInt ĊĠĠĠ Ġ@ Layout Res Ġget () Ġ= Ġ_ parent Layout Resource ĊĠĠĠ Ġset (@ Layout Res Ġvalue ) Ġ{ ĊĠĠĠĠĠ Ġ_ parent Layout Resource Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġsecond Layout Resource : ĠInt ĊĠĠĠ Ġ@ Layout Res Ġget () Ġ= Ġ_ second Layout Resource ĊĠĠĠ Ġset (@ Layout Res Ġvalue ) Ġ{ ĊĠĠĠĠĠ Ġ_ second Layout Resource Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġspinner Drawable : ĠDrawable ? ĊĠĠĠ Ġget () Ġ= Ġ_ spinner Drawable ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ_ spinner Drawable Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Spinner () ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġspinner Size : ĠFloat ĊĠĠĠ Ġ@ Px Ġget () Ġ= Ġ_ spinner Size ĊĠĠĠ Ġset (@ Dp Ġvalue ) Ġ{ ĊĠĠĠĠĠ Ġ_ spinner Size Ġ= Ġdp 2 Px ( value ) ĊĠĠĠĠĠ Ġupdate Spinner () ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġspinner Margin : ĠFloat ĊĠĠĠ Ġ@ Px Ġget () Ġ= Ġ_ spinner Margin ĊĠĠĠ Ġset (@ Dp Ġvalue ) Ġ{ ĊĠĠĠĠĠ Ġ_ spinner Margin Ġ= Ġdp 2 Px ( value ) ĊĠĠĠĠĠ Ġupdate Spinner () ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġspinner Color : ĠInt ĊĠĠĠ Ġ@ Color Int Ġget () Ġ= Ġ_ spinner Color ĊĠĠĠ Ġset (@ Color Int Ġvalue ) Ġ{ ĊĠĠĠĠĠ Ġ_ spinner Color Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Spinner () ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġspinner Gravity : ĠSp inner Gravity ĊĠĠĠ Ġget () Ġ= Ġ_ spinner Gravity ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ_ spinner Gravity Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Spinner () ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġshow Spinner : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġ_ show Spinner ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ_ show Spinner Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Spinner () ĊĠĠĠ Ġ} ĊĊĠ Ġ@ Px ĊĠ Ġprivate Ġvar Ġmeasured Second Layout Height : ĠInt Ġ= Ġ 0 ĊĊĠ Ġvar Ġduration : ĠLong Ġ= Ġ 2 5 0 L ĊĠ Ġvar Ġexpand able Animation : ĠExpand able Animation Ġ= ĠExpand able Animation . NORMAL ĊĠ Ġvar Ġspinner Rotation : ĠInt Ġ= Ġ- 1 8 0 ĊĠ Ġvar Ġspinner Animate : ĠBoolean Ġ= Ġtrue ĊĊĠ Ġvar Ġon Expand Listener : ĠOn Expand Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġset ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġif Ġ( attribute Set Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġget Attrs ( attribute Set , Ġdef Style ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Attrs ( attribute Set : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( ĊĠĠĠĠĠ Ġattribute Set , ĊĠĠĠĠĠ ĠR . style able . Expand able Layout , ĊĠĠĠĠĠ Ġdef Style Attr , ĊĠĠĠĠĠĠ 0 ĊĠĠĠ Ġ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġset Type Array ( typed Array ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Type Array ( a : ĠTyped Array ) Ġ{ ĊĠĠĠ Ġ_ is Expanded Ġ= ĊĠĠĠĠĠ Ġa . getBoolean ( R . style able . Expand able Layout _ expand able _ is Expanded , Ġ_ is Expanded ) ĊĊĠĠĠ Ġ_ parent Layout Resource Ġ= ĊĠĠĠĠĠ Ġa . getResource Id ( ĊĠĠĠĠĠĠĠ ĠR . style able . Expand able Layout _ expand able _ parent Layout , ĊĠĠĠĠĠĠĠ Ġ_ parent Layout Resource ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ_ second Layout Resource Ġ= ĊĠĠĠĠĠ Ġa . getResource Id ( ĊĠĠĠĠĠĠĠ ĠR . style able . Expand able Layout _ expand able _ second Layout , ĊĠĠĠĠĠĠĠ Ġ_ second Layout Resource ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġa . getResource Id ( R . style able . Expand able Layout _ expand able _ spinner , Ġ- 1 ). also Ġ{ ĊĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ spinner Drawable Ġ= ĠAppCompat Resources . get Drawable ( context , Ġit ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ_ show Spinner Ġ= ĊĠĠĠĠĠ Ġa . getBoolean ( R . style able . Expand able Layout _ expand able _ show Spinner , Ġ_ show Spinner ) ĊĊĠĠĠ Ġ_ spinner Size Ġ= ĊĠĠĠĠĠ Ġa . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠ ĠR . style able . Expand able Layout _ expand able _ spinner _ size , ĊĠĠĠĠĠĠĠ Ġ_ spinner Size . toInt () ĊĠĠĠĠĠ Ġ). toFloat () ĊĊĠĠĠ Ġ_ spinner Margin Ġ= ĊĠĠĠĠĠ Ġa . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠ ĠR . style able . Expand able Layout _ expand able _ spinner _ margin , ĊĠĠĠĠĠĠĠ Ġ_ spinner Margin . toInt () ĊĠĠĠĠĠ Ġ). toFloat () ĊĊĠĠĠ Ġ_ spinner Color Ġ= ĊĠĠĠĠĠ Ġa . getColor ( R . style able . Expand able Layout _ expand able _ spinner _ color , Ġ_ spinner Color ) ĊĊĠĠĠ Ġval Ġspinner Gravity Ġ= Ġa . getInteger ( ĊĠĠĠĠĠ ĠR . style able . Expand able Layout _ expand able _ spinner _ gravity , ĊĠĠĠĠĠ Ġ_ spinner Gravity . value ĊĠĠĠ Ġ) ĊĠĠĠ Ġwhen Ġ( spinner Gravity ) Ġ{ ĊĠĠĠĠĠ ĠSp inner Gravity . START . value Ġ-> Ġ_ spinner Gravity Ġ= ĠSp inner Gravity . START ĊĠĠĠĠĠ ĠSp inner Gravity . END . value Ġ-> Ġ_ spinner Gravity Ġ= ĠSp inner Gravity . END ĊĠĠĠ Ġ} ĊĠĠĠ Ġthis . duration Ġ= ĊĠĠĠĠĠ Ġa . getInteger ( R . style able . Expand able Layout _ expand able _ duration , Ġduration . toInt ()). to Long () ĊĠĠĠ Ġval Ġanimation Ġ= ĊĠĠĠĠĠ Ġa . getInteger ( ĊĠĠĠĠĠĠĠ ĠR . style able . Expand able Layout _ expand able _ animation , ĊĠĠĠĠĠĠĠ Ġthis . expand able Animation . value ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġwhen Ġ( animation ) Ġ{ ĊĠĠĠĠĠ ĠExpand able Animation . NORMAL . value Ġ-> Ġexpand able Animation Ġ= ĠExpand able Animation . NORMAL ĊĠĠĠĠĠ ĠExpand able Animation . AC CELER ATE . value Ġ-> Ġexpand able Animation Ġ= ĠExpand able Animation . AC CELER ATE ĊĠĠĠĠĠ ĠExpand able Animation . BOUN CE . value Ġ-> Ġexpand able Animation Ġ= ĠExpand able Animation . BOUN CE ĊĠĠĠĠĠ ĠExpand able Animation . OVER SHO OT . value Ġ-> Ġexpand able Animation Ġ= ĠExpand able Animation . OVER SHO OT ĊĠĠĠ Ġ} ĊĠĠĠ Ġthis . spinner Animate Ġ= ĊĠĠĠĠĠ Ġa . getBoolean ( R . style able . Expand able Layout _ expand able _ spinner _ animate , Ġspinner Animate ) ĊĠĠĠ Ġthis . spinner Rotation Ġ= ĊĠĠĠĠĠ Ġa . getInt ( R . style able . Expand able Layout _ expand able _ spinner _ rotation , Ġspinner Rotation ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠ Ġsuper . on Finish Inf late () ĊĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġif Ġ( is Expanded ) Ġ{ ĊĠĠĠĠĠ Ġis Expanded Ġ= Ġ! is Expanded ĊĠĠĠĠĠ Ġexpand () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Expand able Layout () Ġ{ ĊĠĠĠ Ġvisible ( false ) ĊĠĠĠ Ġremove All Views () ĊĠĠĠ Ġupdate Parent Layout () ĊĠĠĠ Ġupdate Second Layout () ĊĠĠĠ Ġupdate Spinner () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Parent Layout () Ġ{ ĊĠĠĠ Ġthis . parent Layout Ġ= Ġinf late ( parent Layout Resource ). apply Ġ{ ĊĠĠĠĠĠ Ġmeasure ( Measure Spec . UNSPECIFIED , ĠMeasure Spec . UNSPECIFIED ) ĊĠĠĠĠĠ Ġbinding . cover . addView ( this ) ĊĠĠĠĠĠ Ġbinding . cover . update LayoutParams Ġ{ Ġheight Ġ= Ġmeasured Height Ġ} ĊĠĠĠĠĠ Ġadd View ( binding . root ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Second Layout () Ġ{ ĊĠĠĠ Ġsecond Layout Ġ= Ġinf late ( second Layout Resource ). apply Ġ{ ĊĠĠĠĠĠ Ġadd View ( this ) ĊĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠ Ġmeasured Second Layout Height Ġ= Ġget Measured Height ( this ) ĊĠĠĠĠĠĠĠ Ġupdate LayoutParams Ġ{ Ġheight Ġ= Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġparent Layout . meas ured Height . toFloat () ĊĠĠĠĠĠĠĠ Ġthis @ Expand able Layout . visible ( true ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Spinner () Ġ{ ĊĠĠĠ Ġwith ( binding . arrow ) Ġ{ ĊĠĠĠĠĠ Ġvisible ( show Spinner ) ĊĠĠĠĠĠ Ġspinner Drawable ?. let Ġ{ Ġset Image Drawable ( it ) Ġ} ĊĠĠĠĠĠ ĠImageView Compat . setImage Tint List ( this , ĠColor State List . valueOf ( spinner Color )) ĊĠĠĠĠĠ Ġparent Layout . post Ġ{ Ġy Ġ= Ġ( parent Layout . height Ġ/ Ġ 2 f ) Ġ- Ġ( spinner Size Ġ/ Ġ 2 ) Ġ} ĊĠĠĠĠĠ Ġwith ( layout Params Ġas ĠLayout Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġspinner Size . toInt () ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġspinner Size . toInt () ĊĠĠĠĠĠĠĠ Ġleft Margin Ġ= Ġspinner Margin . toInt () ĊĠĠĠĠĠĠĠ Ġright Margin Ġ= Ġspinner Margin . toInt () ĊĠĠĠĠĠĠĠ Ġgravity Ġ= Ġwhen Ġ( spinner Gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠSp inner Gravity . START Ġ-> ĠGr avity . START ĊĠĠĠĠĠĠĠĠĠ ĠSp inner Gravity . END Ġ-> ĠGr avity . END ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Measured Height ( view : ĠView ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġheight Ġ= Ġview . height ĊĠĠĠ Ġif Ġ( view Ġis ĠViewGroup ) Ġ{ ĊĠĠĠĠĠ Ġ( 0 Ġuntil Ġview . child Count ). map Ġ{ Ġview . getChild At ( it ) Ġ}. forEach Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠExpand able Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġchild . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ+= Ġget Measured Height ( child ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġheight ĊĠ Ġ} ĊĊĠ Ġ/** ĠExpand Ġthe Ġsecond Ġlayout Ġwith Ġindicator Ġanimation . Ġ*/ ĊĠ Ġ@ Jvm Over loads ĊĠ Ġfun Ġexpand (@ Px Ġexpand able Height : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! is Expanded Ġ&& Ġ! is Expand ing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Expand ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 0 f , Ġ 1 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġthis @ Expand able Layout . duration ĊĠĠĠĠĠĠĠĠĠ Ġapply Interpolator ( expand able Animation ) ĊĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Layout . update LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġif Ġ( expand able Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( expand able Height Ġ* Ġvalue ). toInt () Ġ+ Ġparent Layout . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( meas ured Second Layout Height Ġ* Ġvalue ). toInt () Ġ+ Ġparent Layout . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( spinner Animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . arrow . rotation Ġ= Ġspinner Rotation Ġ* Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ>= Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Expand Listener ?. on Expand ( is Expanded ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Expand ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Expanded Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠCol lapse Ġthe Ġsecond Ġlayout Ġwith Ġindicator Ġanimation . Ġ*/ ĊĠ Ġfun Ġcollapse () Ġ{ ĊĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠ Ġif Ġ( is Expanded Ġ&& Ġ! is Col lap sing ) Ġ{ ĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 1 f , Ġ 0 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis Col lap sing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġthis @ Expand able Layout . duration ĊĠĠĠĠĠĠĠĠĠ Ġapply Interpolator ( expand able Animation ) ĊĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Layout . update LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( height Ġ- Ġparent Layout . height ) Ġ* Ġvalue ). toInt () Ġ+ Ġparent Layout . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( spinner Animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . arrow . rotation Ġ= Ġspinner Rotation Ġ* Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ<= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Expand Listener ?. on Expand ( is Expanded ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Col lap sing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Expanded Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠIf Ġthe Ġlayout Ġis Ġnot Ġexpanded , Ġexpand Ġthe Ġsecond Ġlayout . ĊĠĠ Ġ* ĠIf Ġthe Ġlayout Ġis Ġalready Ġexpanded , Ġcollapse Ġthe Ġsecond Ġlayout . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġtoggle Layout () Ġ{ ĊĠĠĠ Ġif Ġ( is Expanded ) Ġ{ ĊĠĠĠĠĠ Ġcollapse () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġexpand () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** Ġsets Ġan Ġ[ On Expand Listener ] Ġto Ġthe Ġ[ Expand able Layout ]. Ġ*/ ĊĠ Ġfun Ġset On Expand Listener ( on Expand Listener : ĠOn Expand Listener ) Ġ{ ĊĠĠĠ Ġthis . on Expand Listener Ġ= Ġon Expand Listener ĊĠ Ġ} ĊĊĠ Ġ/** Ġsets Ġan Ġ[ On Expand Listener ] Ġto Ġthe Ġ[ Expand able Layout ] Ġusing Ġa Ġlambda . Ġ*/ ĊĠ Ġ@ Jvm Synt hetic ĊĠ Ġfun Ġset On Expand Listener ( block : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . on Expand Listener Ġ= ĠOn Expand Listener ( block ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinf late (@ Layout Res Ġresource : ĠInt ) Ġ= ĊĠĠĠ ĠLayoutInflater . from ( context ). inflate ( resource , Ġthis , Ġfalse ) ĊĊĠ Ġ/** ĠBuilder Ġclass Ġfor Ġcreating Ġ[ Expand able Layout ]. Ġ*/ ĊĠ Ġ@ Expand able Layout Dsl ĊĠ Ġclass ĠBuilder ( context : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġexpand able Layout Ġ= ĠExpand able Layout ( context ) ĊĊĠĠĠ Ġfun Ġset Parent Layout Resource (@ Layout Res Ġvalue : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġthis . expand able Layout . parent Layout Resource Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Second Layout Resource (@ Layout Res Ġvalue : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġthis . expand able Layout . second Layout Resource Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Spinner Drawable ( value : ĠDrawable ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġthis . expand able Layout . spinner Drawable Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetShow Spinner ( value : ĠBoolean ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . show Spinner Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset Spinner Rotation ( value : ĠInt ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . spinner Rotation Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset Spinner Animate ( value : ĠBoolean ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . spinner Animate Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset Spinner Size (@ Px Ġvalue : ĠFloat ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . spinner Size Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset Spinner Margin (@ Px Ġvalue : ĠFloat ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . spinner Margin Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset Duration ( value : ĠLong ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . duration Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset Expand able Animation ( value : ĠExpand able Animation ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġthis . expand able Layout . expand able Animation Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Expand Listener ( value : ĠOn Expand Listener ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġthis . expand able Layout . on Expand Listener Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġfun Ġset On Expand Listener ( block : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġthis . expand able Layout . on Expand Listener Ġ= ĠOn Expand Listener Ġ{ Ġis Expanded Ġ-> Ġblock ( is Expanded ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild () Ġ= Ġthis . expand able Layout ĊĠ Ġ} Ċ } Ċ