/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 6 . ĠLaunch Key , ĠInc . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ package Ġcom . launch key . android . auth enticator . sdk . ui . internal . auth _ method . pin _ code Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġcom . launch key . android . auth enticator . sdk . ui . R Ċ import Ġcom . launch key . android . auth enticator . sdk . ui . databinding . Fragment Pin code Check Binding Ċ import Ġcom . launch key . android . auth enticator . sdk . ui . internal . auth _ method . pin _ code . Pin Code Check ViewModel . Request State Ċ import Ġcom . launch key . android . auth enticator . sdk . ui . internal . common . Constants Ċ import Ġcom . launch key . android . auth enticator . sdk . ui . internal . util . Base AppCompat Fragment Ċ import Ġcom . launch key . android . auth enticator . sdk . ui . internal . util . Ui Utils Ċ import Ġcom . launch key . android . auth enticator . sdk . ui . internal . util . view Binding Ċ Ċ class ĠPin Code Check Fragment Ġ: ĊĠĠĠ ĠBase AppCompat Fragment ( R . layout . fragment _ pin code _ check ), ĊĠĠĠ ĠPin Code View . Listener Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinstructions : ĠTextView ĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġview Binding ( Fragment Pin code Check Binding :: bind ) ĊĠĠĠ Ġprivate Ġval Ġpin Code Check ViewModel : ĠPin Code Check ViewModel Ġby Ġview Models ({ Ġrequire Parent Fragment (). require Parent Fragment () Ġ}) ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup Verification Headers () ĊĠĠĠĠĠĠĠ Ġsubscribe Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pin Set ( pin Code : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpin Code Check ViewModel . verify Pin Code ( pin Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pin Change ( pin Code : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . pin code Check Pin pad . animate Check Button ( pin Code . isNotEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Verification Headers () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader Views Ġ= ĠUi Utils . prep K ba Add Check Header ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . pin code _ check _ header , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . pin code _ check _ pin pad , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġinstructions Ġ= Ġheader Views [ 2 ] Ġas ĠTextView ĊĠĠĠĠĠĠĠ Ġinstructions . setText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( pin Code Check ViewModel . request State . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRequest State . Change Requested , Ġis ĠRequest State . Change Request Failed Ġ-> ĠR . string . io a _ sec _ pin _ check _ to verify ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . string . io a _ sec _ pin _ check _ to remove ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġheader Views [ 3 ] Ġas ĠTextView ĊĠĠĠĠĠĠĠ Ġbinding . pin code Check Pin pad . show Check Button () ĊĠĠĠĠĠĠĠ Ġbinding . pin code Check Pin pad . set Ob sc ure Input ( ob sc ure Input Ġ= Ġtrue , Ġincluding Last Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . pin code Check Pin pad . viewer Ġ= Ġcode ĊĠĠĠĠĠĠĠ Ġbinding . pin code Check Pin pad . listener Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġpin Code Check ViewModel . request State . observe ( view Lifecycle Owner , Ġ{ Ġrequest State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( request State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRequest State . Change Requested Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstructions . setText ( R . string . io a _ sec _ pin _ check _ to verify ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRequest State . Remove Requested Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstructions . setText ( R . string . io a _ sec _ pin _ check _ to remove ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRequest State . Change Request Failed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRequest State . Remove Request Failed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pin code Check Pin pad . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pin code Check Pin pad . start Pin Code Failed Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUi Utils . setText Temp or arily ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstructions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . io a _ sec _ pin _ check _ error _ wrong ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . BR IE F _ INSTR UCTION S _ DURATION _ MILLI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }