package Ġcom . sun il son . quiz creator . presentation . views Ċ Ċ import Ġandroid . animation . Animator Inflater Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . LinearLayout Ċ import Ġcom . sun il son . quiz creator . R Ċ import Ġcom . sun il son . quiz creator . presentation . shared . extensions . convertTo Px Ċ import Ġkotlinx . android . synt hetic . main . custom _ button . view .* Ċ Ċ class ĠCustom Button ( context : ĠContext , Ġattribute Set : ĠAttributeSet ) Ġ: ĊĠĠĠ ĠFrame Layout ( context , Ġattribute Set ) Ġ{ ĊĊĠĠĠ Ġvar Ġtype : ĠButton Type Ġ= ĠButton Type . DEFAULT ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! icon Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton Type . DEFAULT Ġ-> ĠContext Compat . get Drawable ( context , ĠR . drawable . button _ default _ background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton Type . CONFIRM Ġ-> ĠContext Compat . get Drawable ( context , ĠR . drawable . button _ confirm _ background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton Type . CANCEL Ġ-> ĠContext Compat . get Drawable ( context , ĠR . drawable . button _ cancel _ background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ!= Ġnull ) Ġbackground Ġ= Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġbutton Text : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ text . text Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . isEmpty ()) Ġcustom _ button _ text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcustom _ button _ text . layout Params Ġas ĠLinearLayout . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( icon Ġ!= Ġnull ) Ġparams . left Margin Ġ= Ġ 7 . convertTo Px ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġparams . left Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ text . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġicon : ĠDrawable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ icon . setImage Drawable ( field ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ icon . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsmall : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ icon . layout Params . height Ġ= Ġ 1 5 . convertTo Px ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ icon . layout Params . width Ġ= Ġ 1 5 . convertTo Px ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpadding Ġ= Ġ 6 . convertTo Px ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ container . set Padding ( padding , Ġpadding , Ġpadding , Ġpadding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ icon . layout Params . height Ġ= Ġ 2 0 . convertTo Px ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ icon . layout Params . width Ġ= Ġ 2 0 . convertTo Px ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpadding Ġ= Ġ 1 2 . convertTo Px ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ container . set Padding ( padding , Ġpadding , Ġpadding , Ġpadding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġicon Only : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . button _ empty _ background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton Type . DEFAULT Ġ-> ĠContext Compat . getColor ( context , ĠR . color . button _ default _ background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton Type . CONFIRM Ġ-> ĠContext Compat . getColor ( context , ĠR . color . button _ confirm _ background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton Type . CANCEL Ġ-> ĠContext Compat . getColor ( context , ĠR . color . button _ cancel _ background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ icon . setColor Filter ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom _ button _ icon . setColor Filter ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġloading : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinflater Ġ= Ġcontext . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . custom _ button , Ġthis , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . theme . obtain Styled Attributes ( attribute Set , ĠR . style able . Custom Button , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġwhen Ġ( a . getInt ( R . style able . Custom Button _ type , Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠButton Type . DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠButton Type . CONFIRM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠButton Type . CANCEL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclip To Padding Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 1 0 f ĊĠĠĠĠĠĠĠ Ġstate List Animator Ġ= ĠAn imator Inflater . load State List Animator ( context , ĠR . anim ator . button _ anim ator ) ĊĠĠĠĠĠĠĠ Ġicon Ġ= Ġa . get Drawable ( R . style able . Custom Button _ button Icon ) ĊĠĠĠĠĠĠĠ Ġbutton Text Ġ= Ġa . getString ( R . style able . Custom Button _ button Text ). or Empty () ĊĠĠĠĠĠĠĠ Ġsmall Ġ= Ġa . getBoolean ( R . style able . Custom Button _ small , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġicon Only Ġ= Ġa . getBoolean ( R . style able . Custom Button _ icon Only , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠButton Type Ġ{ ĊĠĠĠ ĠDEFAULT , ĠCON FIRM , ĠCANCEL Ċ }