/* Ċ Ġ* ĠCreated Ġby ĠE du ard ĠZ ay del Ġon Ġ 1 / 4 / 2 0 1 9 Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 1 9 ĠW aves ĠPlatform . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġcom . waves platform . wallet . v 2 . ui . custom Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . V ibration Effect Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . LinearLayout Ċ import Ġcom . waves platform . wallet . R Ċ import Ġcom . waves platform . wallet . v 2 . data . Constants Ċ import Ġkotlinx . android . synt hetic . main . content _ pass _ code _ entry _ keyboard _ layout . view .* Ċ import Ġpers . v ictor . ext . in vis iable Ċ import Ġpers . v ictor . ext . vi br ator Ċ import Ġpers . v ictor . ext . vis iable Ċ import Ġpers . v ictor . ext . vis iable If Ċ import Ġpy x is . uz uki . live . rich util sk t . utils . run Delayed Ċ Ċ class ĠPass Code Entry Key pad Ġ: ĠLinearLayout , ĠView . OnClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠOn Pin Entry Pad Clicked Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdots : ĠPin Dot s Layout ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpass Code Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġis Fingerprint Available : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġall Buttons Ġ= Ġarray ListOf < View >() ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġattr Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Pass Code Entry Key pad , Ġdef Style Attr , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġis Fingerprint Available Ġ= Ġattr . getBoolean ( R . style able . Pass Code Entry Key pad _ is _ fingerprint _ available , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġattr . recycle () ĊĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠLinearLayout . VERTICAL ĊĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . BOTTOM ĊĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġcontext . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . content _ pass _ code _ entry _ keyboard _ layout , Ġthis , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġbutton _ fingerprint . vis iable If Ġ{ Ġis Fingerprint Available Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton 0 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton 1 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton 2 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton 3 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton 4 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton 5 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton 6 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton 7 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton 8 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton 9 . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton _ fingerprint . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbutton _ delete . setOnClickListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġall Buttons Ġ= Ġarray ListOf ( button 0 , Ġbutton 1 , Ġbutton 2 , Ġbutton 3 , Ġbutton 4 , Ġbutton 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton 6 , Ġbutton 7 , Ġbutton 8 , Ġbutton 9 , Ġbutton _ fingerprint , Ġbutton _ delete ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach Dot s ( dots Layout : ĠPin Dot s Layout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdots Ġ= Ġdots Layout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Pad Clicked Listener ( listener : ĠOn Pin Entry Pad Clicked Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpad Clicked ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġview . tag . toString (). substring ( 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġlistener ?. on Number Clicked ( number ) ĊĠĠĠĠĠĠĠ Ġif Ġ( pass Code . length Ġ!= Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pass Code . length Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpass Code Ġ+= Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdots ?. fill Dot ( pass Code . length Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Pass Code Entered ( pass Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpass Code Ġ+= Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdots ?. fill Dot ( pass Code . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpass Codes Not Matches () Ġ{ ĊĠĠĠĠĠĠĠ Ġdots ?. pass Codes Not Matches () ĊĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . shake _ error ) ĊĠĠĠĠĠĠĠ Ġdots ?. start Animation ( animation ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ator . vi br ate ( V ibration Effect . create One Shot ( 5 0 0 , ĠV ibration Effect . DEFAULT _ AMP LIT UDE )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ator . vi br ate ( 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Delayed ( 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdots ?. clear Dot s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpass Code Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Pass Code () Ġ{ ĊĠĠĠĠĠĠĠ Ġdots ?. clear Dot s () ĊĠĠĠĠĠĠĠ Ġpass Code Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener ?. onDelete Clicked () ĊĠĠĠĠĠĠĠ Ġif Ġ( pass Code . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpass Code Ġ= Ġpass Code . substring ( 0 , Ġpass Code . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdots ?. pass Code Removed ( pass Code . length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfingerprint Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener ?. on Fingerprint Clicked () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Fingerprint Available ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Fingerprint Available Ġ= Ġenable ĊĠĠĠĠĠĠĠ Ġif Ġ( is Fingerprint Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton _ fingerprint . vis iable () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton _ fingerprint . in vis iable () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . button 0 , ĠR . id . button 1 , ĠR . id . button 2 , ĠR . id . button 3 , ĠR . id . button 4 , ĠR . id . button 5 , ĠR . id . button 6 , ĠR . id . button 7 , ĠR . id . button 8 , ĠR . id . button 9 Ġ-> Ġpad Clicked ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . button _ delete Ġ-> Ġdelete Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . button _ fingerprint Ġ-> Ġfingerprint Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Enable ( is Enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Buttons . forEach Ġ{ Ġbutton Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . alpha Ġ= ĠConstants . View . ENABLE _ VIEW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Buttons . forEach Ġ{ Ġbutton Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . alpha Ġ= ĠConstants . View . DISABLE _ VIEW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Pin Entry Pad Clicked Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Number Clicked ( number : ĠString ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Pass Code Entered ( pass Code : ĠString ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġfun ĠonDelete Clicked () Ġ{} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Fingerprint Clicked () Ġ{} ĊĠĠĠ Ġ} Ċ }