package Ġcom . hus se inel fe ky . smart bank . ui . otp verification Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . hus se inel fe ky . smart bank . R Ċ import Ġcom . hus se inel fe ky . smart bank . databinding . Fragment O tp Verification Binding Ċ import Ġcom . hus se inel fe ky . smart bank . model . Transaction Type Ċ import Ġcom . hus se inel fe ky . smart bank . util . build Progress Dialog Ċ import Ġcom . ka op iz . k progress h ud . K Progress HUD Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġorg . k oin . core . parameter . parameters Of Ċ Ċ class ĠO tp Verification Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment O tp Verification Binding ĊĊĠĠĠ Ġprivate Ġval Ġargs : ĠO tp Verification Fragment Args Ġby Ġnav Args () ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠO tp Verification ViewModel Ġby ĠviewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġparameters Of ( args . qr Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġback Key Listener Ġ= Ġobject Ġ: ĠOn Back Pressed Callback ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . message _ cancel _ transaction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Verification Fragment Directions . action O tp Verification Fragment To Home Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . back ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġdismiss Ġthe Ġdialog . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġprogress Dialog : ĠK Progress HUD Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Progress Dialog () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġkey pad Numbers : ĠArray < Button > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment O tp Verification Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġinit Back Key Listener () ĊĠĠĠĠĠĠĠ Ġinit Observer s () ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrandom Key pad Ġ= ĠviewModel . generate Random Key pad () ĊĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey pad Numbers Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey pad Numbers . forEach Indexed Ġ{ Ġindex , Ġbutton Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . text Ġ= Ġrandom Key pad [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpin Code View . send KeyEvent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . keyCode FromString (" KEYCODE _${ button . text }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Key Back space . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpin Code View . send KeyEvent ( KeyEvent . KEYCODE _ DEL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpin Code View . setOn Code Typed Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . verify Transaction O tp ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Back Key Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher . add Callback ( back Key Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . otp Verification Event . observe ( view Lifecycle Owner ) Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Verification Event . Processing O tp Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO tp Verification Event . Pro ceed With Transaction Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . transaction Record . type Ġ== ĠTransaction Type . WITH DRAW AL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Verification Fragment Directions . action O tp Verification Fragment To Transaction Complete Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . transaction Record ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Verification Fragment Directions . action O tp Verification Fragment To Enter Deposit Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs . atm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs . qr Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO tp Verification Event . Expired Transaction Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Home Navigation Dialog ( getString ( R . string . error _ expired _ transaction )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO tp Verification Event . Incorrect O tp Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Home Navigation Dialog ( getString ( R . string . error _ incorrect _ otp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO tp Verification Event . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Home Navigation Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . throwable ?. localized Message Ġ?: Ġ" An Ġunknown Ġerror Ġhas Ġoccurred ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Home Navigation Dialog ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Verification Fragment Directions . action O tp Verification Fragment To Home Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġback Key Listener . remove () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} Ċ } Ċ