package Ġcom . die gop arra . ve gg ie . core Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroidx . annotation . Attr Res Ċ import Ġandroidx . appcompat . widget . AppCompat Button Ċ import Ġcom . die gop arra . ve gg ie . R Ċ Ċ /* ĊĠĠĠ ĠNotes Ġwhen Ġextending Ġfrom : ĊĠĠĠ ĠAppCompat Button ĊĠĠĠĠĠĠĠ ĠAlthough Ġenabling Ġthe Ġbutton Ġworks , Ġthe Ġvisual Ġappearance Ġis Ġnot Ġmodified . ĊĠĠĠĠĠĠĠ ĠWill Ġneed Ġto Ġset Alpha Ġand Ġcolor Ġin Ġselector Ġbackground Ġ( or Ġoverriding Ġis Enabled Ġmethod ) ĊĠĠĠ ĠMaterial Button ĊĠĠĠĠĠĠĠ ĠDoes Ġnot Ġaccept Ġselectors Ġas Ġbackground s . ĠSo Ġstates Ġwill Ġnot Ġhave Ġthe Ġdesired Ġfunctionality . Ċ Ġ*/ Ċ class ĠQ ty Button ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: ĠAppCompat Button ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠEnabled Behaviour Ġ{ ĠADD , ĠRED UCE , ĠUN DEFINED Ġ} ĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠQ ty States (@ Attr Res Ġval Ġstate Resource : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZERO ( R . attr . state _ qty _ zero ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠONE ( R . attr . state _ qty _ one ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNORMAL ( R . attr . state _ qty _ normal ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMAX ( R . attr . state _ qty _ max ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġclass ĠSaved State Ġ: ĠBase Saved State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm Enabled Behaviour : ĠEnabled Behaviour ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm Qty State : ĠQ ty States ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor ( super State : ĠParcel able ) Ġ: Ġsuper ( super State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconstructor ( ins : ĠParcel ?) Ġ: Ġsuper ( ins ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġins ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Enabled Behaviour Ġ= Ġit . readValue ( Enabled Behaviour :: class . java . class Loader ) Ġas ĠEnabled Behaviour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Qty State Ġ= Ġit . readValue ( Qty States :: class . java . class Loader ) Ġas ĠQ ty States ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( out : ĠParcel ?, Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . writeTo Parcel ( out , Ġflags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ?. writeValue ( m Enabled Behaviour ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ?. writeValue ( m Qty State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject ĠCRE ATOR Ġ: ĠParcel able . Creator < Saved State > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( parcel : ĠParcel ): ĠSaved State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSaved State ( parcel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Saved State ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ĠCan Ġbe Ġnullable Ġdepending Ġon Ġwhich Ġmethod Ġare Ġthey Ġcalled . ĊĠĠĠ Ġ// Ġ ĠFor Ġexample , Ġm Qty State Ġwas Ġnull Ġwhen Ġcalling Ġin ĠonCreate Drawable State ĊĠĠĠ Ġprivate Ġvar Ġm Enabled Behaviour : ĠEnabled Behaviour ? Ġ= ĠEnabled Behaviour . UNDEFINED ĊĠĠĠ Ġprivate Ġvar Ġm Qty State : ĠQ ty States ? Ġ= ĠQ ty States . NORMAL ĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġcontext . theme . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Qty Button , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , 0 ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbtn Type Ġ= Ġget Integer ( R . style able . Qty Button _ enabled _ be haviour , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Enabled Behaviour Ġ= Ġwhen ( btn Type ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠEnabled Behaviour . ADD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠEnabled Behaviour . RED UCE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠEnabled Behaviour . UNDEFINED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} finally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġfun Ġset Quantity State ( qty State : ĠQ ty States ){ ĊĠĠĠĠĠĠĠ Ġif ( m Qty State Ġ== Ġqty State ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Qty State Ġ= Ġqty State ĊĠĠĠĠĠĠĠ Ġset New Enabled State ( qty State ) ĊĠĠĠĠĠĠĠ Ġrefresh Drawable State () Ġ Ġ// Ġit Ġwas Ġnecessary Ġbecause Ġwith Ġthe Ġpayload , Ġbutton Qty Ġon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmain Product Ġwas Ġnot Ġref reshed Ġbehind Ġvariations Dialog ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġinvalidate () Ġand Ġrequest Layout () Ġare Ġcalled Ġinto Ġset New Enabled State Ġmethod . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Quantity State ( quantity : ĠInt , Ġmax Order : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( quantity ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Order Ġ-> Ġset Quantity State ( Qty States . MAX ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġset Quantity State ( Qty States . ZERO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġset Quantity State ( Qty States . ONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġset Quantity State ( Qty States . NORMAL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset New Enabled State ( qty State : ĠQ ty States ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠDo Ġnot Ġmodify Ġqty State Ġon Ġthis Ġmethod . ĊĠĠĠĠĠĠĠ Ġval Ġenable Ġ= Ġwhen ( m Enabled Behaviour ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEnabled Behaviour . ADD Ġ-> Ġqty State Ġ!= ĠQ ty States . MAX ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEnabled Behaviour . RED UCE Ġ-> Ġqty State Ġ!= ĠQ ty States . ZERO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠMaking Ġthe Ġchange Ġin Ġthe Ġui Ġwith Ġthe Ġde duced Ġenabled Ġstate ĊĠĠĠĠĠĠĠ Ġif ( enable Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġenable ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ĠThis Ġis Ġthe Ġmethod Ġthat Ġwill Ġeffectively Ġtake Ġinto Ġaccount Ġattrs Ġto Ġchange Ġstate Ġof Ġthe Ġview , ĊĠĠĠ Ġ// Ġ Ġand Ġbe Ġable Ġto Ġuse Ġselectors Ġin Ġcolors Ġand Ġdraw ables ĊĠĠĠ Ġoverride Ġfun ĠonCreate Drawable State ( extra Space : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawable State Ġ= Ġsuper . onCreate Drawable State ( extra Space + 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġm Qty State ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġint ArrayOf ( Ġit . state Resource Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerge Drawable States ( drawable State , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġdrawable State ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Save InstanceState ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġss Ġ= ĠSaved State ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġss . m Enabled Behaviour Ġ= Ġm Enabled Behaviour ĊĠĠĠĠĠĠĠĠĠĠĠ Ġss . m Qty State Ġ= Ġm Qty State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġss ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġss Ġ= Ġit Ġas ĠSaved State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( ss . super State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Enabled Behaviour Ġ= Ġss . m Enabled Behaviour ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Quantity State ( ss . m Qty State Ġ?: ĠQ ty States . NORMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġsuper . on Restore InstanceState ( state ) ĊĠĠĠ Ġ} Ċ Ċ }