package Ġru . surf studio . android . security . sample . ui . screen . pin Ċ Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Dis pos ables Ċ import Ġru . surf studio . android . bio metrics . Bio metrics Service Ċ import Ġru . surf studio . android . bio metrics . Prompt Info Ċ import Ġru . surf studio . android . bio metrics . error .* Ċ import Ġru . surf studio . android . core . mvp . presenter . Base Presenter Ċ import Ġru . surf studio . android . core . mvp . presenter . Base Presenter Dependency Ċ import Ġru . surf studio . android . d agger . scope . Per Screen Ċ import Ġru . surf studio . android . logger . Logger Ċ import Ġru . surf studio . android . security . sample . R Ċ import Ġru . surf studio . android . security . sample . inter actor . profile . Profile Interactor Ċ import Ġru . surf studio . android . util k tx . k tx . text . EMPTY _ STRING Ċ import Ġjavax . inject . Inject Ċ import Ġru . surf studio . android . core . ui . provider . resource . Resource Provider Ċ Ċ /** Ċ Ġ* ĠÐŁ ÑĢ ÐµÐ· ÐµÐ½ÑĤ ÐµÑĢ ĠÑįÐº ÑĢÐ°Ð½ Ð° ĠÐ² Ð² Ð¾Ð´Ð° Ġpin - Ðº Ð¾Ð´Ð° Ċ Ġ*/ Ċ @ Per Screen Ċ class ĠCreate Pin Presenter Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġbase Presenter Dependency : ĠBase Presenter Dependency , ĊĠĠĠ Ġprivate Ġval Ġroute : ĠCreate Pin Activity Route , ĊĠĠĠ Ġprivate Ġval Ġresource Provider : ĠResource Provider , ĊĠĠĠ Ġprivate Ġval Ġprofile Interactor : ĠProfile Interactor , ĊĠĠĠ Ġprivate Ġval Ġbio metrics Service : ĠBio metrics Service Ċ ) Ġ: ĠBase Presenter < Create Pin Activity View >( base Presenter Dependency ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġscreen Model Ġ= ĠCreate Pin Screen Model () ĊĠĠĠ Ġprivate Ġvar Ġbio metrics Disposable Ġ= ĠDis pos ables . dis posed () ĊĊĠĠĠ Ġoverride Ġfun ĠonLoad ( view Re created : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Load ( view Re created ) ĊĠĠĠĠĠĠĠ Ġcheck Bio metrics Status () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmit Pin ( pin : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Data ( profile Interactor . signIn ( route . apiKey , Ġpin )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġresource Provider . getString ( R . string . pin _ created _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ApiKey ( pin : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Data ( profile Interactor . get ApiKey ( pin )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( it . apiKey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġencrypt Pin ( pin : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprompt Info Ġ= ĠPrompt Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġresource Provider . getString ( R . string . bio metric _ dialog _ confirmation _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Ġ= Ġresource Provider . getString ( R . string . bio metric _ dialog _ subtitle ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnegative ButtonText Ġ= Ġresource Provider . getString ( R . string . bio metric _ dialog _ cancel ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbio metrics Disposable . dispose () ĊĠĠĠĠĠĠĠ Ġbio metrics Disposable Ġ= Ġsubscribe ( bio metrics Service . encrypt By Bio metrics ( pin , Ġview , Ġprompt Info ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . render ( screen Model . apply Ġ{ Ġencrypted Pin Ġ= Ġit Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ:: handle Bio metrics Error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdecrypt Pin ( encrypted Data : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprompt Info Ġ= ĠPrompt Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġresource Provider . getString ( R . string . bio metric _ dialog _ activation _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Ġ= Ġresource Provider . getString ( R . string . bio metric _ dialog _ subtitle ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnegative ButtonText Ġ= Ġresource Provider . getString ( R . string . bio metric _ dialog _ cancel ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbio metrics Disposable . dispose () ĊĠĠĠĠĠĠĠ Ġbio metrics Disposable Ġ= Ġsubscribe ( bio metrics Service . decrypt By Bio metrics ( encrypted Data , Ġview , Ġprompt Info ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ:: handle Bio metrics Error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Bio metrics Error ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . e ( error ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġerror . message Ġ?: ĠEMPTY _ STRING ĊĠĠĠĠĠĠĠ Ġwhen Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC anceled Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠÐ¿ Ð¾Ð»ÑĮÐ·Ð¾Ð² Ð°ÐµÑĤ Ð»ÑĮ ĠÐ¸Ð»Ð¸ ĠÑģÐ¸ÑģÑĤÐµÐ¼ Ð° ĠÐ¾ÑĤ Ð¼ ÐµÐ½Ð¸ Ð» ĠÑģÐº Ð°Ð½ ÐµÑĢ , ĠÐ½ Ð¸Ñĩ ÐµÐ³Ð¾ ĠÐ½Ðµ ĠÐ¿Ð¾Ðº Ð°Ð· ÑĭÐ² Ð°ÐµÐ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHardware NotFoundException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠÐŃ ÑĤÐ° ĠÐ¾ÑĪÐ¸Ð± ÐºÐ° ĠÐ½Ðµ ĠÐ´Ð¾Ð»Ð¶ Ð½Ð° ĠÐ²Ñĭ ÑħÐ¾Ð´ Ð¸ÑĤ , ĠÐ¿Ð¾ÑĤ Ð¾Ð¼Ñĥ ĠÑĩÑĤÐ¾ ĠÐ¼Ñĭ ĠÑģ Ð½Ð°Ñĩ Ð°Ð» Ð¾ ĠÐ¿ÑĢ Ð¾Ð²ÐµÑĢ Ñı ÐµÐ¼ ĠÐ´Ð¾ÑģÑĤÑĥÐ¿ Ð½Ð¾ÑģÑĤÑĮ ĠÐ± Ð¸ Ð¾Ð¼ ÐµÑĤ ÑĢÐ¸ Ð¸ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHardware Unavailable Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð¡ Ðº Ð°Ð½ ÐµÑĢ ĠÐ²ÑĢÐµÐ¼ ÐµÐ½ Ð½Ð¾ ĠÐ½Ðµ ĠÐ´Ð¾ÑģÑĤÑĥÐ¿ ÐµÐ½ , ĠÐ¿ Ð¾Ð¿ ÑĢ Ð¾Ð± Ñĥ Ð¹ ÑĤÐµ ĠÐ¿Ð¾Ð· Ð¶Ðµ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocked Out Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð¡ Ðº Ð°Ð½ ÐµÑĢ ĠÐ· Ð°Ð± Ð» Ð¾Ðº Ð¸ÑĢÐ¾Ð² Ð°Ð½ ĠÐ½Ð° Ġ 3 0 ĠÑģ ÐµÐº ÑĥÐ½ Ð´ , ĠÑĤÐ°Ðº ĠÐºÐ°Ðº ĠÐ¿Ð¾Ð»ÑĮÐ·Ð¾Ð²Ð°ÑĤ ÐµÐ»ÑĮ ĠÑģ Ð´ÐµÐ» Ð°Ð» ĠÐ¼ Ð½Ð¾Ð³Ð¾ ĠÐ¿ Ð¾Ð¿ Ñĭ ÑĤ Ð¾Ðº ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLock out Permanent Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ðŀ Ñĩ ÐµÐ½ÑĮ ĠÐ¼ Ð½Ð¾Ð³Ð¾ ĠÐ¿ Ð¾Ð¿ Ñĭ ÑĤ Ð¾Ðº , ĠÑģÐº Ð°Ð½ ÐµÑĢ ĠÐ¿Ð¾Ð» Ð½Ð¾ÑģÑĤ ÑĮÑİ ĠÐ· Ð°Ð± Ð» Ð¾Ðº Ð¸ÑĢÐ¾Ð² Ð°Ð½ , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð½ ÑĥÐ¶ Ð½Ð¾ ĠÑĢÐ°Ð· Ð± Ð» Ð¾Ðº Ð¸ÑĢÐ¾Ð² Ð°ÑĤÑĮ ĠÐ² ĠÐ½Ð° ÑģÑĤÑĢ Ð¾Ð¹ ÐºÐ° Ñħ ĠÐ¿ÑĢÐ¸Ð»Ð¾Ð¶ ÐµÐ½Ð¸Ñı ĠÑģ ĠÐ¿Ð¾Ð¼Ð¾ÑīÑĮÑİ ĠÑģÑĤÑĢ Ð¾Ð³ Ð¾Ð¹ ĠÐ° ÑĥÑĤ ÐµÐ½ÑĤ Ð¸ÑĦ Ð¸ ÐºÐ° ÑĨÐ¸Ð¸ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( PIN - Ðº Ð¾Ð´ Ġ/ ĠÑĪ Ð°Ð± Ð» Ð¾Ð½ Ġ/ ĠÐ¿ Ð°ÑĢ Ð¾Ð»ÑĮ ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNegative Button Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠÐ¿Ð¾Ð»ÑĮÐ·Ð¾Ð²Ð°ÑĤ ÐµÐ»ÑĮ ĠÐ½ Ð°Ð¶ Ð°Ð» ĠÐº Ð½ Ð¾Ð¿ ÐºÑĥ ĠÐ¾ÑĤ Ð¼ÐµÐ½ Ð° ĠÐ² ĠÐ´ Ð¸ Ð°Ð» Ð¾Ð³ Ðµ ĠÑģÐº Ð°Ð½ ÐµÑĢÐ° , ĠÐ½ Ð¸Ñĩ ÐµÐ³Ð¾ ĠÐ½Ðµ ĠÐ´ ÐµÐ» Ð°ÐµÐ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNo Bio metrics Registered Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð½Ð° ĠÑĥ ÑģÑĤÑĢ Ð¾Ð¹ ÑģÑĤÐ² Ðµ ĠÐ¾ÑĤ Ñģ ÑĥÑĤ ÑģÑĤÐ² ÑĥÐµÑĤ ĠÐ· Ð°ÑĢ ÐµÐ³ Ð¸ÑģÑĤ ÑĢÐ¸ ÑĢÐ¾Ð² Ð°Ð½ Ð½Ð¾Ð¹ ĠÐ± Ð¸ Ð¾Ð¼ ÐµÑĤ ÑĢÐ¸ Ð¸ , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ñį ÑĤÐ° ĠÐ¾ÑĪÐ¸Ð± ÐºÐ° ĠÐ½Ðµ ĠÐ´Ð¾Ð»Ð¶ Ð½Ð° ĠÐ²Ñĭ Ð¹ ÑĤÐ¸ , ĠÑĤÐ°Ðº ĠÐºÐ°Ðº ĠÐ¼Ñĭ ĠÑģ Ð½Ð°Ñĩ Ð°Ð» Ð¾ ĠÐ¿ÑĢ Ð¾Ð²ÐµÑĢ Ñı ÐµÐ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNo Device Credential Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð½Ð° ĠÑĥ ÑģÑĤÑĢ Ð¾Ð¹ ÑģÑĤÐ² Ðµ ĠÐ¾ÑĤ Ñģ ÑĥÑĤ ÑģÑĤÐ² ÑĥÐµÑĤ ĠÐ· Ð°ÑĢ ÐµÐ³ Ð¸ÑģÑĤ ÑĢÐ¸ ÑĢÐ¾Ð² Ð°Ð½ Ð½Ð¾Ð³Ð¾ ĠÐ¿ Ð¸Ð½ Ðº Ð¾Ð´Ð° , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ñį ÑĤÐ° ĠÐ¾ÑĪÐ¸Ð± ÐºÐ° ĠÐ½Ðµ ĠÐ´Ð¾Ð»Ð¶ Ð½Ð° ĠÐ²Ñĭ Ð¹ ÑĤÐ¸ , ĠÑĤÐ°Ðº ĠÐºÐ°Ðº ĠÐ¼Ñĭ ĠÑģ Ð½Ð°Ñĩ Ð°Ð» Ð¾ ĠÐ¿ÑĢ Ð¾Ð²ÐµÑĢ Ñı ÐµÐ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNo Space Left Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð½ ÐµÐ´ Ð¾ÑģÑĤ Ð°ÑĤ Ð¾Ñĩ Ð½Ð¾ ĠÐ¼ ÐµÑģÑĤ Ð° ĠÐ´Ð»Ñı ĠÐ²ÑĭÐ¿Ð¾Ð»Ð½ ÐµÐ½Ð¸Ñı ĠÐ¾Ð¿ ÐµÑĢ Ð°ÑĨÐ¸Ð¸ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimeout Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð´ Ð¸ Ð°Ð» Ð¾Ð³ ĠÐ¾ÑĤ Ð¿ ÐµÑĩ Ð°ÑĤ ÐºÐ¸ ĠÐ¿ Ð°Ð»ÑĮ ÑĨ ÐµÐ² ĠÐ¿ÑĢ Ð¾ÑģÑĤ Ð¾Ñı Ð» ĠÐ´ Ð¾Ð» Ð³ Ð¾Ðµ ĠÐ²ÑĢÐµÐ¼ Ñı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð½Ð¸ Ñĩ ÐµÐ³Ð¾ ĠÐ½Ðµ ĠÐ´ ÐµÐ» Ð°ÐµÐ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVendor ErrorException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð¾ ÑĪÐ¸Ð± ÐºÐ° ĠÐ¿ÑĢÐ¾ Ð¸Ð· Ð²Ð¾Ð´ Ð¸ÑĤÐµ Ð»Ñı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Bio metrics Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġview . render ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreen Model . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Bio metrics Available Ġ= Ġbio metrics Service . has Bio metrics Registered () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġload Data ( observable : ĠObservable < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Next : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribe Io Handle Error ( observable , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Next ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . render ( screen Model ) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . render ( screen Model ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ