package Ġcom . t ari . android . wallet . ui . fragment . settings . user Autor ization Ċ Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . bio metric . Bio metric Prompt Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . or h ano but . logger . Logger Ċ import Ġcom . t ari . android . wallet . R Ċ import Ġcom . t ari . android . wallet . extension . observe Ċ import Ġcom . t ari . android . wallet . infrastructure . security . bio metric . Bio metric Authentication Service Ċ import Ġcom . t ari . android . wallet . ui . common . Common ViewModel Ċ import Ġcom . t ari . android . wallet . ui . common . Single Live Event Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ // todo ĠRemove Ġother Ġcopy Ġpaste Ċ class ĠBio metric Authentication ViewModel Ġ: ĠCommon ViewModel () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġauth Service : ĠBio metric Authentication Service ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcomponent . inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ start Authenticate Ġ= ĠSingle Live Event < Bio metric Authenticate Args >() ĊĠĠĠ Ġprivate Ġval Ġ_ show AlertDialog Ġ= ĠSingle Live Event < AlertDialog Args >() ĊĊĠĠĠ Ġprivate Ġvar Ġon Authorized Action : Ġ() Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġfun Ġrequire Authorization ( on Authorized : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Authorized Action Ġ= Ġon Authorized ĊĠĠĠĠĠĠĠ Ġif Ġ( auth Service . is Device Sec ured ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubtitle Ġ= Ġif Ġ( auth Service . is Bio metric Auth Available ) ĠR . string . auth _ bio metric _ prompt Ġelse ĠR . string . auth _ device _ lock _ code _ prompt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBio metric Authenticate Args ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Manager . getString ( R . string . auth _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Manager . getString ( subtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ start Authenticate . post Value ( args ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Authorized () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Success () Ġ= Ġon Authorized Action . invoke () ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Error ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠBio metric Authentication Service . Bio metric Authentication Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . code Ġ!= ĠBio metric Prompt . ERROR _ USER _ C ANCE LED Ġ&& Ġe . code Ġ!= ĠBio metric Prompt . ERROR _ C ANCE LED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . e (" Other Ġbio metric Ġerror . ĠCode : Ġ${ e . code }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠAlertDialog Args ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Manager . getString ( R . string . auth _ failed _ desc ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Manager . getString ( R . string . exit ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Manager . getString ( R . string . auth _ failed _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ show AlertDialog . post Value ( args ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind To Fragment ( viewModel : ĠBio metric Authentication ViewModel , Ġfragment : ĠFragment ) Ġ= Ġwith ( viewModel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . observe ( viewModel ._ start Authenticate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Service . authenticate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġit . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Ġ= Ġit . subtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠBio metric Authentication Service . Bio metric Authentication Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . observe (_ show AlertDialog ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( fragment . require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( it . negative ButtonText ) Ġ{ Ġdialog , Ġ_ Ġ-> Ġdialog . cancel () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĠsetTitle ( it . title ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ