package Ġex h . ui . lock Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . v 7 . preference . Switch Preference Compat Ċ import Ġandroid . support . v 7 . widget . LinearLayout Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . github . aj alt . re print . core . Authentication Result Ċ import Ġcom . github . aj alt . re print . core . Re print Ċ import Ġcom . github . aj alt . re print . rx java . Rx Re print Ċ import Ġcom . mat tp rec ious . sw irl . Sw irl View Ċ import Ġeu . kan ade . t ach iy omi . data . preference . Preferences Helper Ċ import Ġeu . kan ade . t ach iy omi . data . preference . get OrDefault Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . onChange Ċ import Ġex h . util . dp To Px Ċ import Ġrx . android . schedul ers . Android Schedulers Ċ import Ġu y . ko hes ive . in jekt . inject Lazy Ċ Ċ class ĠF inger Lock Preference Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull ) Ġ: ĊĠĠĠĠĠĠĠ ĠSwitch Preference Compat ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġval Ġprefs : ĠPreferences Helper Ġby Ġinject Lazy () ĊĊĠĠĠ Ġval Ġfingerprint Supported ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠRe print . is Hardware Present () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠRe print . has Fingerprint Registered () ĊĊĠĠĠ Ġval Ġuse Fingerprint ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfingerprint Supported ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġprefs . eh _ lock Use Fingerprint (). get OrDefault () ĊĊĠĠĠ Ġ@ Suppress Lint (" New Api ") ĊĠĠĠ Ġoverride Ġfun Ġon Attached () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached () ĊĠĠĠĠĠĠĠ Ġif ( fingerprint Supported ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Summary () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonChange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Change () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . eh _ lock Use Fingerprint (). set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Fingerprint Ġunsupported " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Disable View Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġif (! Re print . has Fingerprint Registered ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġfingerprint s Ġen rolled !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fingerprint Ġunlock Ġis Ġunsupported Ġon Ġthis Ġdevice !" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonChange Ġ{ Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Summary () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġuse Fingerprint ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġif ( isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fingerprint Ġenabled " ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fingerprint Ġdisabled " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġfun Ġtry Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus TextView Ġ= ĠTextView ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Please Ġtouch Ġthe Ġfingerprint Ġsensor " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġ( layout Params Ġ?: ĠViewGroup . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize , Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Padding ( 0 , Ġ 0 , Ġdp To Px ( context , Ġ 8 ), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġicon View Ġ= ĠSw irl View ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġdp To Px ( context , Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġ( layout Params Ġ?: ĠViewGroup . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize , Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetState ( Sw irl View . State . OFF , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlinear Layout Ġ= ĠLinearLayout Compat ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠLinearLayout Compat . HORIZONTAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . CENTER _ VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠLinearLayout Compat . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġ( layout Params Ġ?: ĠLinearLayout Compat . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize , Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Size Ġ= Ġdp To Px ( context , Ġ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Padding ( p Size , Ġ 0 , Ġp Size , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( status TextView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( icon View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠMaterial Dialog . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title (" Fingerprint Ġverification ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. custom View ( linear Layout , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. negative Text (" Cancel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. auto Dismiss ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. c anceled On Touch Outside ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġicon View . setState ( Sw irl View . State . ON ) ĊĠĠĠĠĠĠĠ Ġval Ġsubscription Ġ= ĠRx Re print . authenticate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthentication Result . Status . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon View . setState ( Sw irl View . State . ON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . eh _ lock Use Fingerprint (). set ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Summary () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthentication Result . Status . NON FATAL _ FAILURE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon View . setState ( Sw irl View . State . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus TextView . text Ġ= Ġresult . errorMessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthentication Result . Status . FATAL _ FAILURE , Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title (" Fingerprint Ġverification Ġfailed !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( result . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. positive Text (" Ok ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. auto Dismiss ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. c anceled On Touch Outside ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog . setOn Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscription . unsubscribe () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }