From 837616f14a03d41095f6b2e2e3200f9a3bf562c5 Mon Sep 17 00:00:00 2001 From: Preyea Regmi Date: Tue, 30 Apr 2019 15:08:16 +0545 Subject: [PATCH] Fingerprint auth fixes --- .../base/PrivilegedGateway.java | 3 +- .../presenter/ChangePasswordV2Presenter.java | 4 +- .../loginV2/presenter/LoginV2Presenter.java | 19 ++++---- .../view/FingerPrintAuthPromptDialog.java | 44 +++++++++---------- .../settings/view/SettingsView.java | 2 +- .../TransactionPasswordPromptV2Presenter.java | 13 +++--- app/src/main/res/values/strings.xml | 2 +- 7 files changed, 43 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java index 960ec31f..9b3516e6 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java @@ -185,7 +185,6 @@ public abstract class PrivilegedGateway implements PrivilegedGatewayInterface { @Override public void persistSecretKey(String encrypted) { - Log.d(SecurityUtils.TAG,"To be Stored Key :"+encrypted); GmeApplication.getStorage().edit().putString(PrefKeys.APP_SECRET_KEY,encrypted).apply(); } @@ -208,7 +207,6 @@ public abstract class PrivilegedGateway implements PrivilegedGatewayInterface { @Override public String getPersistedSecretKey() { - Log.d(SecurityUtils.TAG,"Stored Key :"+GmeApplication.getStorage().getString(PrefKeys.APP_SECRET_KEY,null)); return GmeApplication.getStorage().getString(PrefKeys.APP_SECRET_KEY,null); } @@ -223,6 +221,7 @@ public abstract class PrivilegedGateway implements PrivilegedGatewayInterface { editor.putString(PrefKeys.APP_USER_ID_SECRET_KEY,null); editor.putBoolean(PrefKeys.APP_FINGER_PRINT_ENABLED,false); editor.putString(PrefKeys.APP_USER_SECRET_KEY,null); + editor.putString(PrefKeys.APP_SECRET_KEY,null); editor.apply(); } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java index b98db9e0..9bb6a9d1 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java @@ -1,5 +1,7 @@ package com.gmeremit.online.gmeremittance_native.changepasswordV2.presenter; +import android.os.Build; +import android.security.keystore.KeyPermanentlyInvalidatedException; import android.util.Log; import com.gmeremit.online.gmeremittance_native.R; @@ -269,8 +271,6 @@ public class ChangePasswordV2Presenter extends BasePresenter implements ChangePa public void onError(Throwable e) { view.showProgressBar(false,""); gateway.flushBiometricData(); - Log.d(SecurityUtils.TAG, "Failed : " + e.getMessage()); - } @Override diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java index 4b58f17c..142e4852 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java @@ -95,14 +95,10 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI .observeOn(AndroidSchedulers.mainThread()) .retryWhen(errors -> errors.flatMap( error -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && error instanceof KeyPermanentlyInvalidatedException) { - view.showFingerPrintScanner(false); - gateway.flushBiometricData(); - - } - else if(error instanceof FingerprintAuthenticationException) + if(error instanceof FingerprintAuthenticationException) { view.showFingerPrintScanner(false); + view.showToastMessage(error.getMessage()); } else if (error instanceof SecurityUtils.FailedFingerPrintException || error instanceof SecurityUtils.SensorNotReadyException) { view.showToastMessage(error.getMessage()); @@ -300,8 +296,7 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI @Override public void onError(Throwable e) { - Log.d(SecurityUtils.TAG, "Failed : " + e.getMessage()); - + gateway.flushBiometricData(); } @Override @@ -315,7 +310,6 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI @Override public void onNext(FingerprintDecResult fingerprintDecResult) { Log.d(SecurityUtils.TAG, "Success : " + fingerprintDecResult.toString()); - encUserPassword = fingerprintDecResult.getUserPwd(); view.onLoginPerformTask(() -> loginUser(fingerprintDecResult.getUserId(), "")); @@ -323,7 +317,12 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI @Override public void onError(Throwable e) { - Log.d(SecurityUtils.TAG, "Failed : " + e.getMessage()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && e instanceof KeyPermanentlyInvalidatedException) { + view.showFingerPrintScanner(false); + gateway.flushBiometricData(); + view.showPopUpMessage(getStringfromStringId(R.string.fingerprint_changed_externally),CustomAlertDialog.AlertType.ALERT,null); + + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java index cda9d7e1..e5354628 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java @@ -51,11 +51,11 @@ public class FingerPrintAuthPromptDialog extends android.support.v4.app.DialogFr public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fingerprint_auth_prompt, null); - fingerprintScannerImgView=view.findViewById(R.id.fingerprintScannerImgView); - cancelView=view.findViewById(R.id.btnCancel); + fingerprintScannerImgView = view.findViewById(R.id.fingerprintScannerImgView); + cancelView = view.findViewById(R.id.btnCancel); builder.setView(view); initialize(); - Dialog dialog= builder.create(); + Dialog dialog = builder.create(); try { this.window = dialog.getWindow(); window.setBackgroundDrawableResource(R.drawable.ic_rounded_white); @@ -73,10 +73,9 @@ public class FingerPrintAuthPromptDialog extends android.support.v4.app.DialogFr } - public void setFingerprintAuthListener(boolean userAction,FingerprintAuthListener listener) - { - this.userAction=userAction; - this.listener=listener; + public void setFingerprintAuthListener(boolean userAction, FingerprintAuthListener listener) { + this.userAction = userAction; + this.listener = listener; } @Override @@ -85,10 +84,10 @@ public class FingerPrintAuthPromptDialog extends android.support.v4.app.DialogFr cancelView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - dismiss(); + dismiss(); } }); - if (fingerPrintReaderSubs==null||fingerPrintReaderSubs.isDisposed()) + if (fingerPrintReaderSubs == null || fingerPrintReaderSubs.isDisposed()) fingerPrintReaderSubs = startObservingFingerPrintScanner(); } @@ -122,7 +121,7 @@ public class FingerPrintAuthPromptDialog extends android.support.v4.app.DialogFr fingerPrintAVDCompat.start(); } - }, 200 ); + }, 200); } else { new Handler().postDelayed(() -> { fingerprintScannerImgView.setImageDrawable(null); @@ -147,12 +146,11 @@ public class FingerPrintAuthPromptDialog extends android.support.v4.app.DialogFr }) .observeOn(AndroidSchedulers.mainThread()) - .retryWhen(errors->errors.flatMap( - error->{ - if(error instanceof SecurityUtils.FailedFingerPrintException || error instanceof SecurityUtils.SensorNotReadyException) - { + .retryWhen(errors -> errors.flatMap( + error -> { + if (error instanceof SecurityUtils.FailedFingerPrintException || error instanceof SecurityUtils.SensorNotReadyException) { showToastMessage(error.getMessage()); - return Observable.timer(100,TimeUnit.MILLISECONDS); + return Observable.timer(100, TimeUnit.MILLISECONDS); } return Observable.error(error); } @@ -161,9 +159,9 @@ public class FingerPrintAuthPromptDialog extends android.support.v4.app.DialogFr } private void showToastMessage(String message) { - Toast toast=Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT); + Toast toast = Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT); TextView v = (TextView) toast.getView().findViewById(android.R.id.message); - if( v != null) v.setGravity(Gravity.CENTER); + if (v != null) v.setGravity(Gravity.CENTER); toast.show(); } @@ -173,16 +171,16 @@ public class FingerPrintAuthPromptDialog extends android.support.v4.app.DialogFr @Override public void onNext(FingerprintAuthenticationResult fingerprintAuthenticationResult) { - if(listener!=null) - listener.onFingerPrintAuthenticated(userAction); + if (listener != null) + listener.onFingerPrintAuthenticated(userAction); } @Override public void onError(Throwable e) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && e instanceof KeyPermanentlyInvalidatedException) { listener.onFingerPrintInvalidatedBySystem(); - } - showToastMessage(e.getMessage()); + } else + showToastMessage(e.getMessage()); } @Override @@ -192,9 +190,9 @@ public class FingerPrintAuthPromptDialog extends android.support.v4.app.DialogFr } - public interface FingerprintAuthListener - { + public interface FingerprintAuthListener { void onFingerPrintAuthenticated(boolean userAction); + void onFingerPrintInvalidatedBySystem(); } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java index c7deed8a..24e1960f 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java @@ -67,7 +67,7 @@ public class SettingsView extends BaseActivity implements CompoundButton.OnCheck private boolean isBiometricDataAvailable() { SharedPreferences sp = GmeApplication.getStorage(); - return sp.getString(PrefKeys.APP_USER_ID_SECRET_KEY, null) != null && sp.getString(PrefKeys.APP_USER_SECRET_KEY, null) != null; + return sp.getString(PrefKeys.APP_USER_ID_SECRET_KEY, null) != null && sp.getString(PrefKeys.APP_USER_SECRET_KEY, null) != null&&sp.getString(PrefKeys.APP_SECRET_KEY,null)!=null; } @OnClick({R.id.view_change_password, R.id.iv_back, R.id.view_language, R.id.view_fingerprint}) diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java index afa154df..19598a1d 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java @@ -147,11 +147,7 @@ public class TransactionPasswordPromptV2Presenter extends BasePresenter implemen .observeOn(AndroidSchedulers.mainThread()) .retryWhen(errors -> errors.flatMap( error -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && error instanceof KeyPermanentlyInvalidatedException) { - view.addFingerprintIcon(false); - gateway.flushBiometricData(); - - } else if (error instanceof FingerprintAuthenticationException) { + if (error instanceof FingerprintAuthenticationException) { view.addFingerprintIcon(false); } else if (error instanceof SecurityUtils.FailedFingerPrintException || error instanceof SecurityUtils.SensorNotReadyException) { view.showToastMessage(error.getMessage()); @@ -263,6 +259,13 @@ public class TransactionPasswordPromptV2Presenter extends BasePresenter implemen @Override public void onError(Throwable e) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && e instanceof KeyPermanentlyInvalidatedException) + { + view.addFingerprintIcon(false); + gateway.flushBiometricData(); + view.showPopUpMessage(getStringfromStringId(R.string.fingerprint_changed_externally),CustomAlertDialog.AlertType.ALERT,null); + } + Log.d(SecurityUtils.TAG, "Failed : " + e.getMessage()); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dd037d83..090cfc19 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -469,7 +469,7 @@ Enter your bank account number Select language Please place your finger on the fingerprint sensor to continue. - Your fingerprint has been expired. Please login again to continue. + It seems you added a new fingerprint or removed the existing one. Please login again to validate your fingerprint. Loading...