/* Ċ Ġ* ĠCopyright Ġ( c ) ĠHu awei ĠTechnologies ĠCo ., ĠLtd . Ġ 2 0 2 0 - 2 0 2 1 . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ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 . hu awei . card reader . kotlin . user authentication . activity Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Key guard Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Cancellation Signal Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . hu awei . card reader . R Ċ import Ġcom . hu awei . card reader . kotlin . sc anned card details . activity . Sc anned Card Details Activity Ċ import Ġcom . hu awei . card reader . kotlin . sc anned card list . room db . Database Client . Companion . getInstance Ċ import Ġcom . hu awei . card reader . kotlin . user authentication . activity . Authentication Page Ċ import Ġcom . hu awei . card reader . kotlin . utils . Bio Auth Utils . check Authentication Type Ċ import Ġcom . hu awei . card reader . kotlin . utils . Bio Auth Utils . is Face Recognition Secure Ċ import Ġcom . hu awei . card reader . kotlin . utils . Bio Auth Utils . is F inger Print Secure Ċ import Ġcom . hu awei . card reader . kotlin . utils . Bio Auth Utils . is Key guard Secure Ċ import Ġcom . hu awei . card reader . kotlin . utils . Bio Auth Utils . show Toast Ċ import Ġcom . hu awei . card reader . kotlin . utils . Constants Ċ import Ġcom . hu awei . h ms . support . api . f ido . bio auth n .* Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠThe Ġtype ĠAuthentication Ġpage . Ċ Ġ*/ Ċ class ĠAuthentication Page Ġ: ĠAppCompatActivity (), ĠView . OnClickListener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġis Authentication Clicked Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġbio Auth n Prompt : ĠBio Auth n Prompt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġqr Code Image : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġid Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġqr Code Card Type : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ authentication _ page ) ĊĠĠĠĠĠĠĠ Ġthis . title Ġ= ĠgetString ( R . string . AUTHENT ICATION _ PAGE _ TITLE ) ĊĠĠĠĠĠĠĠ ĠObjects . requireNonNull ( support ActionBar )?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġinitialize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlock Image Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < ImageView >( R . id . Lock Image ) ĊĠĠĠĠĠĠĠ Ġlock Image . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġfinger Print Image Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < ImageView >( R . id . Fingerprint Image ) ĊĠĠĠĠĠĠĠ Ġfinger Print Image . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġface Recognize Image Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < ImageView >( R . id . Fac er ec ign ition Image ) ĊĠĠĠĠĠĠĠ Ġface Recognize Image . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbio Auth n Prompt Ġ= Ġcreate Bio Auth n Prompt () ĊĠĠĠĠĠĠĠ Ġqr Code Image Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . get Parcelable Extra ( Constants . QR CODE IMAGE ) ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġintent . getInt Extra ( Constants . ID , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġqr Code Card Type = intent . getString Extra ( Constants . QR CODEC ARD TYPE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Authentication Clicked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . IS _ DELETED _ FROM _ PROFILE DETAILS Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġis Authentication Clicked Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Authentication Clicked Ġ= Ġwhen Ġ( view . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . Lock Image Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Auth With Device Credentials () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . Fingerprint Image Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Auth with F inger Print () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . Fac er ec ign ition Image Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Auth With Face Recognition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠChecks Ġfor Ġface Recognition Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Auth With Face Recognition () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġcamera Ġpermission ĊĠĠĠĠĠĠĠ Ġval Ġpermission Check Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( this , ĠManifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠ Ġif Ġ( permission Check Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Authentication Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . FACE _ AUTH _ CAMERA _ PERMISSION _ NOT _ ENABLED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Authentication Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġcall Ġback ĊĠĠĠĠĠĠĠ Ġval Ġcallback : ĠBio Auth n Callback Ġ= Ġobject Ġ: ĠBio Auth n Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Auth Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrMsg Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr String : ĠCharSequence ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Authentication Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . FACE _ AUTH _ ERROR ) Ġ+ ĠerrMsg Id Ġ+ ĠgetString ( R . string . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġerr String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġif Ġ( err Msg Id Ġ== Ġ 1 0 1 2 ) ĠgetString ( R . string . FACE _ CAMERA _ MAY _ NOT _ BE ) Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Auth Help ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelp Msg Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelp String : ĠCharSequence ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Authentication Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . FACE _ AUTH _ HELP ) Ġ+ Ġhelp Msg Id Ġ+ ĠgetString ( R . string . help String ) Ġ+ Ġhelp String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Auth Succeeded ( result : ĠBio Auth n Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Authentication Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . FACE _ AUTH _ SUCCESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Constants . IS _ DELETED _ FROM _ PROFILE DETAILS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Card ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSc anned Card Details Activity :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . ID , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . QR CODE IMAGE , Ġqr Code Image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . QR CODEC ARD TYPE , Ġqr Code Card Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Auth Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( this @ Authentication Page , ĠgetString ( R . string . FACE _ AUTH _ FAIL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Authentication Type ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Face Recognition Secure ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠC ancellation ĠSignal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancellation Signal Ġ= ĠC ancellation Signal () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġface Manager Ġ= ĠFace Manager ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChecks Ġwhether Ġ 3 D Ġfac ial Ġauthentication Ġcan Ġbe Ġused . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorCode Ġ= Ġface Manager . can Auth () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( errorCode Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠgetString ( R . string . FACE _ CAN NOT _ AUTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠerrorCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġface Manager . auth ( null , Ġcancellation Signal , Ġflags , Ġcallback , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠR . string . FAC ER EC _ SUPPORT _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠCreating ĠF ingerprint Ġresult Ġcall Ġback Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Bio Auth n Prompt (): ĠBio Auth n Prompt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfp Result Callback : ĠBio Auth n Callback Ġ= Ġobject Ġ: ĠBio Auth n Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Auth Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrMsg Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr String : ĠCharSequence ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Authentication Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . FP _ AUTH _ ERROR ) Ġ+ ĠerrMsg Id Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . errorMessage ) Ġ+ Ġerr String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Auth Succeeded ( result : ĠBio Auth n Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Constants . IS _ DELETED _ FROM _ PROFILE DETAILS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Card ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSc anned Card Details Activity :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . ID , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . QR CODE IMAGE , Ġqr Code Image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . QR CODEC ARD TYPE , Ġqr Code Card Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Auth Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( this @ Authentication Page , ĠgetString ( R . string . FP _ AUTH _ FAILED )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠBio Auth n Prompt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠContext Compat . get Main Executor ( this ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfp Result Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* Ġchecks Ġfor ĠF ingerprint ĠAuth entic ations Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Auth with F inger Print () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Authentication Type ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is F inger Print Secure ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbio Auth n Manager Ġ= ĠBio Auth n Manager ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorCode Ġ= Ġbio Auth n Manager . can Auth () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( errorCode Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠR . string . FP _ AUTH _ CHECK Ġ+ ĠerrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBio Auth n Prompt . Prompt Info . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( R . string . FP _ PROMPT _ HEAD )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Subtitle ( getString ( R . string . FP _ PROMPT _ TITLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setDescription ( getString ( R . string . FP _ PROMPT _ DESC )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Device Credential Allowed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbio Auth n Prompt !!. auth ( info ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠR . string . FP _ DEVICE _ SUPPORT _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* Ġcheck Ġfor ĠPIN ĠLock ĠAuth entic ations Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Auth With Device Credentials () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Authentication Type ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Key guard Secure ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Key guard Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . KEY GU ARD _ SERVICE ) Ġas ĠKey guard Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġm Key guard Manager . create Confirm Device Credential Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . PIN _ LOCK _ TITLE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . PIN _ LOCK _ DESC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( i , ĠPIN _ LOCK _ REQ _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Settings . ACTION _ SECURITY _ SETTINGS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSECURITY _ SETTING _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠR . string . AUTH _ SU G GEST ION _ MSG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ ĠresultCode : ĠInt , ĊĠĠĠĠĠĠĠ Ġdata : ĠIntent ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠPIN _ LOCK _ REQ _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . PIN _ SUCCESS , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Constants . IS _ DELETED _ FROM _ PROFILE DETAILS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Card ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSc anned Card Details Activity :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . ID , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . QR CODE IMAGE , Ġqr Code Image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . QR CODEC ARD TYPE , Ġqr Code Card Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠR . string . PIN _ FAILURE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Card ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Static Field Leak ") ĊĠĠĠĠĠĠĠ Ġclass ĠDelete Task Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAsync Task < Void ?, ĠVoid ?, ĠVoid ?> () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġoverride Ġfun Ġdo In Background ( var arg Ġvoid s : ĠVoid ?): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetInstance ( application Context ) !!. app Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . business Card Entity Dao () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . delete ById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( a Void : ĠVoid ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Post Execute ( a Void ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . success Fully Deleted , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . IS _ DELETED _ FROM _ PROFILE DETAILS Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġst Ġ= ĠDelete Task () ĊĠĠĠĠĠĠĠ Ġst . execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemId Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠ Ġif Ġ( itemId Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPIN _ LOCK _ REQ _ CODE Ġ= Ġ 1 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSECURITY _ SETTING _ REQUEST _ CODE Ġ= Ġ 1 1 1 ĊĠĠĠ Ġ} Ċ }