/* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġcom . sky do ves . expand able layout Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Relative Layout Ċ import Ġkotlinx . android . synt hetic . main . expand able _ layout _ parent . view .* Ċ Ċ /** ĠAn Ġexpand able Ġlayout Ġthat Ġshows Ġa Ġtwo - level Ġlayout Ġwith Ġan Ġindicator . Ġ*/ Ċ @ Suppress (" unused ") Ċ class ĠExpand able Layout Ġ: ĠFrame Layout Ġ{ ĊĊĠ Ġlateinit Ġvar Ġparent Layout : ĠViewGroup ĊĠ Ġlateinit Ġvar Ġsecond Layout : ĠViewGroup ĊĠ Ġprivate Ġlateinit Ġvar Ġparent Frame Layout : ĠRelative Layout ĊĠ Ġvar Ġparent Layout Resource : ĠInt Ġ= ĠR . layout . expand able _ layout _ parent ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġ} ĊĠ Ġvar Ġsecond Layout Resource : ĠInt Ġ= ĠR . layout . expand able _ layout _ child ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġ} ĊĠ Ġvar Ġspinner Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġ} ĊĠ Ġvar Ġspinner Size : ĠFloat Ġ= Ġdp 2 Px ( 2 4 ) ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġ} ĊĠ Ġvar Ġspinner Margin : ĠFloat Ġ= Ġdp 2 Px ( 8 ) ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġ} ĊĠ Ġvar Ġshow Spinner : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġ} ĊĊĠ Ġvar Ġsecond Layout Height : ĠInt Ġ= Ġ 0 ĊĠ Ġvar Ġis Expanded : ĠBoolean Ġ= Ġfalse ĊĠ Ġvar Ġduration : ĠLong Ġ= Ġ 2 5 0 L ĊĠ Ġvar Ġspinner Rotation : ĠInt Ġ= Ġ- 1 8 0 ĊĠ Ġvar Ġspinner Animate : ĠBoolean Ġ= Ġtrue ĊĠ Ġvar Ġon Expand Listener : ĠOn Expand Listener ? Ġ= Ġnull ĊĊĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) ĊĊĠ Ġconstructor ( context : ĠContext , Ġattribute Set : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattribute Set ) Ġ{ ĊĠĠĠ Ġget Attrs ( attribute Set ) ĊĠ Ġ} ĊĊĠ Ġconstructor ( context : ĠContext , Ġattribute Set : ĠAttributeSet , Ġdef Style : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠ Ġcontext , ĊĠĠĠ Ġattribute Set , Ġdef Style ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġget Attrs ( attribute Set , Ġdef Style ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Attrs ( attribute Set : ĠAttributeSet ) Ġ{ ĊĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attribute Set , ĠR . style able . Expand able Layout ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġset Type Array ( typed Array ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ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 ) Ġ{ ĊĠĠĠ Ġthis . parent Layout Resource Ġ= ĊĠĠĠĠĠ Ġa . getResource Id ( R . style able . Expand able Layout _ expand able _ parent Layout , Ġthis . parent Layout Resource ) ĊĠĠĠ Ġthis . second Layout Resource Ġ= ĊĠĠĠĠĠ Ġa . getResource Id ( R . style able . Expand able Layout _ expand able _ second Layout , Ġthis . second Layout Resource ) ĊĠĠĠ Ġthis . duration Ġ= ĊĠĠĠĠĠ Ġa . getInteger ( R . style able . Expand able Layout _ expand able _ duration , Ġthis . duration . toInt ()). to Long () ĊĠĠĠ Ġthis . spinner Drawable Ġ= Ġa . get Drawable ( R . style able . Expand able Layout _ expand able _ spinner ) ĊĠĠĠ Ġthis . show Spinner Ġ= ĊĠĠĠĠĠ Ġa . getBoolean ( R . style able . Expand able Layout _ expand able _ show Spinner , Ġthis . show Spinner ) ĊĠĠĠ Ġthis . spinner Animate Ġ= ĊĠĠĠĠĠ Ġa . getBoolean ( R . style able . Expand able Layout _ expand able _ spinner _ animate , Ġthis . spinner Animate ) ĊĠĠĠ Ġthis . spinner Rotation Ġ= ĊĠĠĠĠĠ Ġa . getInt ( R . style able . Expand able Layout _ expand able _ spinner _ rotation , Ġthis . spinner Rotation ) ĊĠĠĠ Ġthis . spinner Size Ġ= ĊĠĠĠĠĠ Ġa . get Dimension ( R . style able . Expand able Layout _ expand able _ spinner _ size , Ġthis . spinner Size ) ĊĠĠĠ Ġthis . spinner Margin Ġ= ĊĠĠĠĠĠ Ġa . get Dimension ( R . style able . Expand able Layout _ expand able _ spinner _ margin , Ġthis . spinner Margin ) ĊĠĠĠ Ġthis . is Expanded Ġ= ĊĠĠĠĠĠ Ġa . getBoolean ( R . style able . Expand able Layout _ expand able _ is Expanded , Ġthis . is Expanded ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠ Ġsuper . on Finish Inf late () ĊĠĠĠ Ġupdate Expand able Layout () ĊĠĠĠ Ġif Ġ( this . is Expanded ) Ġ{ ĊĠĠĠĠĠ Ġthis . is Expanded Ġ= Ġ! this . is Expanded ĊĠĠĠĠĠ Ġexpand () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Expand able Layout () Ġ{ ĊĠĠĠ Ġupdate Parent Layout () ĊĠĠĠ Ġupdate Second Layout () ĊĠĠĠ Ġupdate Spinner () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Parent Layout () Ġ{ ĊĠĠĠ Ġthis . parent Frame Layout Ġ= Ġinf late ( R . layout . expand able _ layout _ parent ) Ġas ĠRelative Layout ĊĠĠĠ Ġthis . parent Layout Ġ= Ġinf late ( parent Layout Resource ) ĊĠĠĠ Ġthis . parent Layout . measure ( Measure Spec . UNSPECIFIED , ĠMeasure Spec . UNSPECIFIED ) ĊĠĠĠ Ġthis . parent Frame Layout . cover . addView ( this . parent Layout ) ĊĠĠĠ Ġthis . parent Frame Layout . cover . update LayoutParams Ġ{ Ġheight Ġ= Ġparent Layout . meas ured Height Ġ} ĊĠĠĠ Ġremove View ( this . parent Frame Layout ) ĊĠĠĠ Ġadd View ( this . parent Frame Layout ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Second Layout () Ġ{ ĊĠĠĠ Ġthis . second Layout Ġ= Ġinf late ( this . second Layout Resource ) ĊĠĠĠ Ġwith ( this . second Layout ) Ġ{ ĊĠĠĠĠĠ Ġupdate LayoutParams Ġ{ Ġheight Ġ= Ġ 0 Ġ} ĊĠĠĠĠĠ Ġy Ġ= Ġparent Layout . meas ured Height . toFloat () ĊĠĠĠ Ġ} ĊĠĠĠ Ġremove View ( this . second Layout ) ĊĠĠĠ Ġadd View ( this . second Layout ) ĊĠĠĠ Ġset Measure Height ( second Layout ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Spinner () Ġ{ ĊĠĠĠ Ġwith ( this . parent Frame Layout . arrow ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( spinner Drawable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Image Drawable ( spinner Drawable ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( show Spinner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisible ( true ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġvisible ( false ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( layout Params Ġis ĠMargin LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( layout Params Ġas ĠMargin LayoutParams ). set Margins ( 0 , Ġ 0 , Ġspinner Margin . toInt (), Ġ 0 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlayout Params . width Ġ= Ġspinner Size . toInt () ĊĠĠĠĠĠ Ġlayout Params . height Ġ= Ġspinner Size . toInt () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Measure Height ( parent : ĠViewGroup ): ĠInt Ġ{ ĊĠĠĠ Ġparent . measure ( Measure Spec . UNSPECIFIED , ĠMeasure Spec . UNSPECIFIED ) ĊĠĠĠ Ġvar Ġheight Ġ= Ġparent . height ĊĠĠĠ Ġheight Ġ+= Ġget Top Bottom Padding Size ( parent ) ĊĠĠĠ Ġheight Ġ+= Ġget Top Bottom Margin Size ( parent ) ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġparent . child Count ) Ġ{ ĊĠĠĠĠĠ Ġval Ġchild Ġ= Ġparent . getChild At ( i ) ĊĠĠĠĠĠ Ġchild . post Ġ{ ĊĠĠĠĠĠĠĠ Ġchild . measure ( Measure Spec . UNSPECIFIED , ĠMeasure Spec . UNSPECIFIED ) ĊĠĠĠĠĠĠĠ Ġheight Ġ+= Ġwhen Ġ( child ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis ĠExpand able Layout Ġ-> Ġchild . height Ġ+ Ġchild . second Layout Height ĊĠĠĠĠĠĠĠĠĠ Ġis ĠViewGroup Ġ-> Ġset Measure Height ( child ) ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġchild . meas ured Height ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġheight Ġ+= Ġget Top Bottom Padding Size ( child ) ĊĠĠĠĠĠĠĠ Ġheight Ġ+= Ġget Top Bottom Margin Size ( child ) ĊĠĠĠĠĠĠĠ Ġif Ġ( height Ġ> Ġthis . second Layout Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . second Layout Height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġheight ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Top Bottom Padding Size ( view : ĠView ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġview . padding Top Ġ+ Ġview . padding Bottom ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Top Bottom Margin Size ( view : ĠView ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġmargin Ġ= Ġ 0 ĊĠĠĠ Ġif Ġ( view . layout Params Ġis ĠMargin LayoutParams ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmargin LayoutParams Ġ= Ġ( view . layout Params Ġas ĠMargin LayoutParams ) ĊĠĠĠĠĠ Ġmargin Ġ+= Ġmargin LayoutParams . top Margin Ġ+ Ġmargin LayoutParams . bottom Margin ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġmargin ĊĠ Ġ} ĊĊĠ Ġ/** ĠExpand Ġthe Ġsecond Ġlayout Ġwith Ġindicator Ġanimation . Ġ*/ ĊĠ Ġfun Ġexpand () Ġ{ ĊĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! this . is Expanded ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠValue Animator . of Float ( 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġanim ator . duration Ġ= Ġthis . duration ĊĠĠĠĠĠĠĠ Ġanim ator . add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠ Ġthis . second Layout . update LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ( second Layout Height Ġ* Ġvalue ). toInt () Ġ+ Ġparent Layout . height ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . spinner Animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent Frame Layout . arrow . rotation Ġ= Ġthis . spinner Rotation Ġ* Ġvalue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . is Expanded Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthis . on Expand Listener ?. on Expand ( this . is Expanded ) ĊĠĠĠĠĠĠĠ Ġanim ator . start () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠCol lapse Ġthe Ġsecond Ġlayout Ġwith Ġindicator Ġanimation . Ġ*/ ĊĠ Ġfun Ġcollapse () Ġ{ ĊĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠ Ġif Ġ( this . is Expanded ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠValue Animator . of Float ( 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġanim ator . duration Ġ= Ġthis . duration ĊĠĠĠĠĠĠĠ Ġanim ator . add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠ Ġthis . second Layout . update LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( height Ġ- Ġparent Layout . height ) Ġ* Ġvalue ). toInt () Ġ+ Ġparent Layout . height ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . spinner Animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent Frame Layout . arrow . rotation Ġ= Ġthis . spinner Rotation Ġ* Ġvalue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . is Expanded Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis . on Expand Listener ?. on Expand ( this . is Expanded ) ĊĠĠĠĠĠĠĠ Ġanim ator . start () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠSets Ġthe Ġ[ On Expand Listener ] Ġusing Ġa Ġlambda . Ġ*/ ĊĠ Ġfun Ġset On Expand Listener ( block : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . on Expand Listener Ġ= Ġobject Ġ: ĠOn Expand Listener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Expand ( is Expanded : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġblock ( is Expanded ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinf late ( resource : ĠInt ): ĠViewGroup Ġ{ ĊĠĠĠ Ġval Ġinflater : ĠLayoutInflater Ġ= ĊĠĠĠĠĠ Ġcontext . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( resource , Ġthis , Ġfalse ) ĊĠĠĠ Ġif Ġ( view Ġis ĠViewGroup ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" the Ġlayout Ġresource Ġshould Ġbe Ġwrapped Ġa ĠViewGroup .") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** Ġ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 ( value : ĠInt ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . parent Layout Resource Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset Second Layout Resource ( 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 ( value : ĠFloat ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . spinner Size Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset Spinner Margin ( value : ĠFloat ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . spinner Margin Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset Duration ( value : ĠLong ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . duration Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset On Expand Listener ( value : ĠOn Expand Listener ) Ġ= Ġapply Ġ{ Ġthis . expand able Layout . on Expand Listener Ġ= Ġvalue Ġ} ĊĠĠĠ Ġfun Ġset On Expand Listener ( block : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġthis . expand able Layout . on Expand Listener Ġ= Ġobject Ġ: ĠOn Expand Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Expand ( is Expanded : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġblock ( is Expanded ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild () Ġ= Ġthis . expand able Layout ĊĠ Ġ} Ċ } Ċ