/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠK eval ĠP ate l Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġw it Ċ Ġ* Ġ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 . c eng iz b . sample Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . annotation . Int Def Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . Toast Ċ import Ġcom . c eng iz b . fingerprint dialog . Authentication Callback Ċ import Ġcom . c eng iz b . fingerprint dialog . Fingerprint Dialog Builder Ċ import Ġcom . c eng iz b . fingerprint dialog . Fingerprint Utils Ċ import Ġkotlinx . android . synt hetic . main . activity _ secure .* ĊĊ Ċ /** Ċ Ġ* ĠTest Ġactivity . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ< a Ġhref =" https :// github . com / ke val p ate l 2 1 0 6 "> ke val p ate l 2 1 0 6 </ a > Ċ Ġ*/ Ċ class ĠSecure Activity Ġ: ĠAppCompatActivity (), ĠView . OnClickListener , ĠAuthentication Callback Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Secure Activity " ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠF inger Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPin Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġ@ Int Def ( F inger , ĠPin ) ĊĠĠĠĠĠĠĠ Ġ@ Retention ( Annotation Retention . SOURCE ) ĊĠĠĠĠĠĠĠ Ġannotation Ġclass ĠMode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Mode ĊĠĠĠ Ġprivate Ġvar Ġmode : ĠInt Ġ= ĠF inger ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ secure ) ĊĊĠĠĠĠĠĠĠ Ġauth Fingerprint () ĊĠĠĠĠĠĠĠ Ġauthenticate _ btn . setOnClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" onClick : Ġ$ v ") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . authenticate _ btn Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPin Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this @ Secure Activity , ĠPin Authentication Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Fingerprint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF inger Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfingerprint Authentication NotSupported () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDevice Ġdoesn 't Ġsupport Ġfingerprint Ġauthentication . ĊĠĠĠĠĠĠĠ Ġ// ĠSwitch Ġto Ġalternate Ġauthentication Ġmethod . ĊĊĠĠĠĠĠĠĠ Ġval Ġtext : ĠCharSequence Ġ= ĠgetString ( R . string . error _ fingerprint s _ not _ supported ) ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġtext , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġauth Pin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġno En rolled Fingerprint s () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUser Ġhas Ġno Ġfingerprint Ġen rolled . ĊĠĠĠĠĠĠĠ Ġ// ĠRedirect ing Ġto Ġthe Ġsettings . ĊĠĠĠĠĠĠĠ Ġval Ġtext : ĠCharSequence Ġ= ĠgetString ( R . string . error _ no _ fingerprint s _ en rolled ) ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġtext , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ ĠF ingerprint Utils . open Security Settings ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Authentication Error ( code : ĠInt , Ġerror : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġerror , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ// ĠUn recover able Ġerror . ĊĠĠĠĠĠĠĠ Ġ// ĠSwitch Ġto Ġalternate Ġauthentication Ġmethod . ĊĠĠĠĠĠĠĠ Ġauth Pin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Authentication Help ( code : ĠInt , Ġhelp : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAuthentication Ġprocess Ġhas Ġsome Ġwarning . ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġit Ġif Ġyou Ġwant . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġauthentication Canceled ByUser () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext : ĠCharSequence Ġ= ĠgetString ( R . string . error _ auth _ c anceled _ by _ user ) ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġtext , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Authentication Succeeded () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAuthentication Ġsuccess ĊĠĠĠĠĠĠĠ Ġ// ĠYou Ġuser Ġis Ġnow Ġauthenticated . ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠAuthentication Success Activity :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Authentication Failed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAuthentication Ġfailed . ĊĠĠĠĠĠĠĠ Ġ// ĠF ingerprint Ġscanning Ġis Ġstill Ġrunning . ĊĠĠĠĠĠĠĠ Ġval Ġsh ake Anim Ġ= ĠAnimation Utils . load Animation ( application Context , ĠR . anim . shake ) ĊĠĠĠĠĠĠĠ Ġauthentication _ iv . start Animation ( shake Anim ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġauth Dialog () Ġ{ ĊĠĠĠĠĠĠĠ ĠF ingerprint Dialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( R . string . fingerprint _ dialog _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subtitle ( R . string . fingerprint _ dialog _ subtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. description ( R . string . fingerprint _ dialog _ description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. negative Button Title ( R . string . fingerprint _ dialog _ button _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġ/* Fingerprint Dialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( R . string . fingerprint _ dialog _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subtitle ( R . string . fingerprint _ dialog _ subtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. description ( R . string . fingerprint _ dialog _ description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. negative Button Title ( R . string . fingerprint _ dialog _ button _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , Ġobject Ġ: ĠAuthentication Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġno En rolled Fingerprint s () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Authentication Error ( code : ĠInt , Ġerror : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Authentication Help ( code : ĠInt , Ġhelp : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Authentication Succeeded () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Authentication Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfingerprint Authentication NotSupported () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġauthentication Canceled ByUser () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) */ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġauth Fingerprint () Ġ{ ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠF inger ĊĠĠĠĠĠĠĠ Ġauthenticate _ btn . text Ġ= ĠgetString ( R . string . authenticate _ using _ fingerprint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġauth Pin () Ġ{ ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠPin ĊĠĠĠĠĠĠĠ Ġauthenticate _ btn . text Ġ= ĠgetString ( R . string . pin _ authentication _ btn _ t ite ) ĊĠĠĠ Ġ} Ċ } Ċ