/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 ĠP era ĠWallet , ĠL DA Ċ Ġ* Ġ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 . al gor and . android . custom views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . core . content . res . use Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . core . view . isIn visible Ċ import Ġandroidx . core . view . margin Bottom Ċ import Ġandroidx . core . view . margin Left Ċ import Ġandroidx . core . view . margin Right Ċ import Ġandroidx . core . view . margin Top Ċ import Ġcom . al gor and . android . R Ċ import Ġcom . al gor and . android . databinding . Custom Dial pad Binding Ċ import Ġcom . al gor and . android . utils . view binding . view Binding Ċ import Ġcom . google . android . material . button . Material Button Ċ Ċ class ĠD ial Pad View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull Ċ ) Ġ: ĠConstraint Layout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġ= Ġview Binding ( Custom Dial pad Binding :: inflate ) ĊĊĠĠĠ Ġprivate Ġval Ġnum Pad View List : ĠMutable List < Material Button > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġdial Pad Listener : ĠD ial Pad Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġload Attrs ( attrs ) ĊĠĠĠĠĠĠĠ Ġinit Numeric P ads () ĊĠĠĠĠĠĠĠ Ġset Click Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Attrs ( attrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext ?. obtain Styled Attributes ( attrs , ĠR . style able . Dial Pad View )?. use Ġ{ Ġattrs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs . getBoolean ( R . style able . Dial Pad View _ show Dot Button , Ġfalse ). let Ġ{ Ġis Shown Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pad View Dot Button . isIn visible Ġ= Ġis Shown . not () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs . get Dimension Pixel Size ( R . style able . Dial Pad View _ pad Button Size , Ġ- 1 ). let Ġ{ Ġsize Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( size Ġ!= Ġ- 1 ) Ġset Button Size ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs . get Dimension Pixel Size ( R . style able . Dial Pad View _ button Horizontal Margin , Ġ- 1 ). let Ġ{ Ġmargin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( margin Ġ!= Ġ- 1 ) Ġset Horizontal Margin ( margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs . get Dimension Pixel Size ( R . style able . Dial Pad View _ button Vertical Margin , Ġ- 1 ). let Ġ{ Ġmargin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( margin Ġ!= Ġ- 1 ) Ġset Vertical Margin ( margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Horizontal Margin ( margin : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapply All Views Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( layout Params Ġas ĠMargin LayoutParams ). set Margins ( margin , ĠmarginTop , Ġmargin , ĠmarginBottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Vertical Margin ( margin : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapply All Views Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( layout Params Ġas ĠMargin LayoutParams ). set Margins ( margin Left , Ġmargin , ĠmarginRight , Ġmargin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Button Size ( size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapply All Views Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( layout Params Ġas ĠViewGroup . LayoutParams ). height Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( layout Params Ġas ĠViewGroup . LayoutParams ). width Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Numeric P ads () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnum Pad View List . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 0 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 1 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 2 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 3 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 4 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 5 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 6 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 7 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 8 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pad View 9 Button ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Click Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġnum Pad View List . forEach Ġ{ Ġit . setOnClickListener Ġ{ Ġv Ġ-> Ġon Num Pad Click ( v ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . pad View Delete Button . setOnClickListener Ġ{ Ġon Back space Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . pad View Dot Button . setOnClickListener Ġ{ Ġon Dot Click () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Num Pad Click ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdial Pad Listener ?. on Number Click (( view Ġas ĠMaterial Button ). text . toString (). toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Back space Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġdial Pad Listener ?. on Back space Click () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Dot Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġdial Pad Listener ?. on Dot Click () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply All Views ( action : Ġ( View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Dial Pad Listener ( dial Pad Listener : ĠD ial Pad Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dial Pad Listener Ġ= Ġdial Pad Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠD ial Pad Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Number Click ( number : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Back space Click () ĊĠĠĠĠĠĠĠ Ġfun Ġon Dot Click () Ġ{} ĊĠĠĠ Ġ} Ċ } Ċ