Browse Source

package renamed

master
Preyea Regmi 4 years ago
parent
commit
8cc45fa0ee
  1. BIN
      .idea/caches/build_file_checksums.ser
  2. 2
      .idea/gradle.xml
  3. 2
      .idea/modules.xml
  4. 2
      app/build.gradle
  5. 37
      app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterImpl.java
  6. 20
      app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/view/DomesticRemitActivity.java
  7. 18
      app/src/main/java/com/gmeremit/online/gmeremittance_native/resendV2/view/ReSendMoneyV2Activity.java
  8. 13
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/GMEAuthManager.java
  9. 8
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/SecurityUtils.java
  10. 21
      app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/presenter/SendMoneyV2Presenter.java
  11. 28
      app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/SendMoneyV2Activity.java
  12. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java
  13. 37
      app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenter.java
  14. 23
      app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/view/topup/LocalTopUpActivity.java
  15. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java
  16. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionBiometricPromptDialog.java
  17. 0
      rxbiometric/.gitignore
  18. 0
      rxbiometric/build.gradle
  19. 0
      rxbiometric/dependencies.gradle
  20. 0
      rxbiometric/proguard-rules.pro
  21. 0
      rxbiometric/publish.gradle
  22. 0
      rxbiometric/src/main/AndroidManifest.xml
  23. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/AesCipherProvider.java
  24. 5
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/AesDecryptionObservable.java
  25. 2
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/AesEncryptionObservable.java
  26. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/Base64Provider.java
  27. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/CipherProvider.java
  28. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/ContextUtils.java
  29. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/ConversionUtils.java
  30. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/CryptoData.java
  31. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/CryptoDataException.java
  32. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/DefaultLogger.java
  33. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/EncodingProvider.java
  34. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/EncryptionMethod.java
  35. 9
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/FingerprintApiWrapper.java
  36. 4
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/FingerprintAuthenticationObservable.java
  37. 15
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/FingerprintObservable.java
  38. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/Logger.java
  39. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/RsaCipherProvider.java
  40. 5
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/RsaDecryptionObservable.java
  41. 3
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/RsaEncryptionObservable.java
  42. 95
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/RxFingerprint.java
  43. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/RxFingerprintLogger.java
  44. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/BiometricExceptions.java
  45. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintAuthenticationResult.java
  46. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintDecryptionResult.java
  47. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintEncryptionResult.java
  48. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintResult.java
  49. 0
      rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintUnavailableException.java
  50. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/CryptoDataExceptionTest.java
  51. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/CryptoDataTest.java
  52. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/FingerprintApiWrapperTest.java
  53. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/FingerprintAuthenticationTest.java
  54. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/RsaEncryptionObservableTest.java
  55. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/RxFingerprintTest.java
  56. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/TestEncodingProvider.java
  57. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/TestHelper.java
  58. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/data/FingerprintEncryptionResultTest.java
  59. 0
      rxbiometric/src/test/java/com/mtramin/rxfingerprint/data/KeyStoreDecryptionResultTest.java
  60. 2
      settings.gradle

BIN
.idea/caches/build_file_checksums.ser

2
.idea/gradle.xml

@ -13,7 +13,7 @@
<option value="$PROJECT_DIR$/SpinnerDatePickerLib-release" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/httpclient-release" />
<option value="$PROJECT_DIR$/rxkeystore" />
<option value="$PROJECT_DIR$/rxbiometric" />
<option value="$PROJECT_DIR$/securitykeypad" />
</set>
</option>

2
.idea/modules.xml

@ -6,7 +6,7 @@
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
<module fileurl="file://$PROJECT_DIR$/gme-android.iml" filepath="$PROJECT_DIR$/gme-android.iml" />
<module fileurl="file://$PROJECT_DIR$/httpclient-release/httpclient-release.iml" filepath="$PROJECT_DIR$/httpclient-release/httpclient-release.iml" />
<module fileurl="file://$PROJECT_DIR$/rxkeystore/rxkeystore.iml" filepath="$PROJECT_DIR$/rxkeystore/rxkeystore.iml" />
<module fileurl="file://$PROJECT_DIR$/rxbiometric/rxbiometric.iml" filepath="$PROJECT_DIR$/rxbiometric/rxbiometric.iml" />
<module fileurl="file://$PROJECT_DIR$/securitykeypad/securitykeypad.iml" filepath="$PROJECT_DIR$/securitykeypad/securitykeypad.iml" />
</modules>
</component>

2
app/build.gradle

@ -165,7 +165,7 @@ dependencies {
testImplementation 'pl.pragmatists:JUnitParams:1.1.1'
testImplementation "org.mockito:mockito-core:3.0.0"
implementation project(path: ':rxkeystore')
implementation project(path: ':rxbiometric')
}
apply plugin: 'com.google.gms.google-services'

37
app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterImpl.java

@ -4,6 +4,8 @@ import android.text.Html;
import android.text.Spanned;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.accountmanage.model.paymentsources.PaymentSourceDTO;
import com.gmeremit.online.gmeremittance_native.accountmanage.presenter.paymentsources.PaymentSourceSelectionInteractorInterface;
@ -19,6 +21,10 @@ import com.gmeremit.online.gmeremittance_native.domesticremit.send.model.Domesti
import com.gmeremit.online.gmeremittance_native.domesticremit.send.model.DomesticRemitTxnResponseDTO;
import com.gmeremit.online.gmeremittance_native.domesticremit.send.model.KFTCBalanceCheckDTO;
import com.gmeremit.online.gmeremittance_native.domesticremit.send.view.RecipientConfirmDialog;
import com.gmeremit.online.gmeremittance_native.security.GMEAuthManager;
import com.gmeremit.online.gmeremittance_native.security.model.GMEAuthFailedResult;
import com.gmeremit.online.gmeremittance_native.security.model.GMEAuthSuccessResult;
import com.gmeremit.online.gmeremittance_native.security.model.GMETxnParam;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.PasswordPromptListener;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionBiometricPromptDialog;
import com.gmeremit.online.gmeremittance_native.utils.Constants;
@ -130,31 +136,28 @@ public class DomesticRemitPresenterImpl extends BasePresenter implements Domesti
@Override
public void promptPinAndPerformTransaction() {
if (checkIfUserHasEnabledBiometricAuth()) {
view.promptBiometricAuthDialog(new TransactionBiometricPromptDialog.BiometricPromptResultListener() {
GMEAuthManager.getGmeAuthManager((AppCompatActivity) view.getContext()).fromPaymentSource(
new GMETxnParam(
domesticRemitDataValidator.selectedSenderAccount.getType(),
domesticRemitDataValidator.sendAmount,
domesticRemitDataValidator.selectedSenderAccount.getKftcAccountId()
).enableFallbackAuth().withCountdownTimer(countDownRemainingValue)
).setListener(new GMEAuthManager.GMEAuthListener() {
@Override
public void onBiometricAuthSuccess(String otpCode) {
performSendMoneyTransaction(otpCode, true);
public void onGMEAuthSuccess(GMEAuthSuccessResult result) {
performSendMoneyTransaction(result.getResult(), result.isBiometricUsed());
}
});
} else {
view.promptPassword(new PasswordPromptListener() {
@Override
public void onPasswordSubmit(String password) {
performSendMoneyTransaction(password, false);
public void onGMEAuthFailed(GMEAuthFailedResult failedResult) {
view.showToastMessage(failedResult.getFailedReason());
}
@Override
public void onCancelled() {
public void onGMEAuthCancelled() {
}
}, countDownRemainingValue,
domesticRemitDataValidator.selectedSenderAccount.getKftcAccountId(),
domesticRemitDataValidator.sendAmount,
domesticRemitDataValidator.selectedSenderAccount.getType()
);
}
}).prompt();
}
private void performSendMoneyTransaction(String password, boolean isBioMetricUsed) {

20
app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/view/DomesticRemitActivity.java

@ -319,21 +319,21 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
@Override
public void promptPassword(PasswordPromptListener listener, long countDownValue,String selectedAccountKFTCId,String sendingAmount,String type) {
this.passwordPromptListener = listener;
Intent passwordRequestIntent = new Intent(this, TransactionPasswordPromptActivity.class);
passwordRequestIntent.putExtra(PAYMENT_TYPE_BUNDLE_KEY, type);
passwordRequestIntent.putExtra(SELECTED_AMT_FOR_OTP_BUNDLE_KEY, sendingAmount);
passwordRequestIntent.putExtra(SELECTED_KFTC_ID_FOR_OTP_BUNDLE_KEY, selectedAccountKFTCId);
passwordRequestIntent.putExtra(OTP_COUNTDOWN_VALUE, countDownValue);
startActivityForResult(passwordRequestIntent, PASSWORD_PROMPT_REQUEST);
// this.passwordPromptListener = listener;
// Intent passwordRequestIntent = new Intent(this, TransactionPasswordPromptActivity.class);
// passwordRequestIntent.putExtra(PAYMENT_TYPE_BUNDLE_KEY, type);
// passwordRequestIntent.putExtra(SELECTED_AMT_FOR_OTP_BUNDLE_KEY, sendingAmount);
// passwordRequestIntent.putExtra(SELECTED_KFTC_ID_FOR_OTP_BUNDLE_KEY, selectedAccountKFTCId);
// passwordRequestIntent.putExtra(OTP_COUNTDOWN_VALUE, countDownValue);
// startActivityForResult(passwordRequestIntent, PASSWORD_PROMPT_REQUEST);
}
@Override
public void promptBiometricAuthDialog(TransactionBiometricPromptDialog.BiometricPromptResultListener listener) {
TransactionBiometricPromptDialog promptDialog= new TransactionBiometricPromptDialog();
promptDialog.setResultListener(listener);
promptDialog.show(getSupportFragmentManager(),promptDialog.getClass().getSimpleName());
// TransactionBiometricPromptDialog promptDialog= new TransactionBiometricPromptDialog();
// promptDialog.setResultListener(listener);
// promptDialog.show(getSupportFragmentManager(),promptDialog.getClass().getSimpleName());
}

18
app/src/main/java/com/gmeremit/online/gmeremittance_native/resendV2/view/ReSendMoneyV2Activity.java

@ -208,12 +208,12 @@ public class ReSendMoneyV2Activity extends BaseActivity implements ReSendMoneyV2
@Override
public void showReceiptOnTransactionComplete(String transactionId) {
Intent startReceiptActivity = new Intent(this, SendMoneyV2TransactionCompleteActivity.class);
startReceiptActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startReceiptActivity.putExtra(SendMoneyV2TransactionCompleteActivity.SEND_MONEY_TID_BUNDLE_KEY, transactionId);
startReceiptActivity.putExtra(SendMoneyV2TransactionCompleteActivity.IS_TRANSACTION_DETAIL_REQUEST_FROM_SEND_MONEY_BUNDLE_KEY, true);
startReceiptActivity.putExtra(SendMoneyV2TransactionCompleteActivity.SHOULD_UPDATE_BALANCE_UPON_RETURN, true);
startActivity(startReceiptActivity);
// Intent startReceiptActivity = new Intent(this, SendMoneyV2TransactionCompleteActivity.class);
// startReceiptActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// startReceiptActivity.putExtra(SendMoneyV2TransactionCompleteActivity.SEND_MONEY_TID_BUNDLE_KEY, transactionId);
// startReceiptActivity.putExtra(SendMoneyV2TransactionCompleteActivity.IS_TRANSACTION_DETAIL_REQUEST_FROM_SEND_MONEY_BUNDLE_KEY, true);
// startReceiptActivity.putExtra(SendMoneyV2TransactionCompleteActivity.SHOULD_UPDATE_BALANCE_UPON_RETURN, true);
// startActivity(startReceiptActivity);
}
@Override
@ -223,9 +223,9 @@ public class ReSendMoneyV2Activity extends BaseActivity implements ReSendMoneyV2
@Override
public void promptBiometricAuthDialog(TransactionBiometricPromptDialog.BiometricPromptResultListener listener) {
TransactionBiometricPromptDialog promptDialog= new TransactionBiometricPromptDialog();
promptDialog.setResultListener(listener);
promptDialog.show(getSupportFragmentManager(),promptDialog.getClass().getSimpleName());
// TransactionBiometricPromptDialog promptDialog= new TransactionBiometricPromptDialog();
// promptDialog.setResultListener(listener);
// promptDialog.show(getSupportFragmentManager(),promptDialog.getClass().getSimpleName());
}

13
app/src/main/java/com/gmeremit/online/gmeremittance_native/security/GMEAuthManager.java

@ -7,6 +7,7 @@ import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.gmeremit.online.gmeremittance_native.GmeApplication;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.base.PrefKeys;
import com.gmeremit.online.gmeremittance_native.loginV2.gateway.LoginV2Gateway;
import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginV2Presenter;
@ -47,11 +48,21 @@ public class GMEAuthManager {
private GMEAuthManagerGateway gmeAuthManagerGateway;
private GMETxnParam gmeTxnParam;
private GMEScreenBasedParam gmeScreenBasedParam;
private RxFingerprint.BiometricPromptDialogParam biometricDialogParam;
private GMEAuthManager(AppCompatActivity context) {
this.context = context;
gmeAuthManagerGateway = new GMEAuthManagerGateway();
resetParamToDefault();
setDefaultBiometricDialogParam();
}
private void setDefaultBiometricDialogParam() {
this.biometricDialogParam=new RxFingerprint.BiometricPromptDialogParam()
.setTitle(context.getString(R.string.fingerprint_auth_text))
.setDescription("Please place your required fingertip and verify your identity")
.setNegativeButtonText(context.getString(R.string.cancel_text))
.setSubTitle(null);
}
private void resetParamToDefault() {
@ -202,7 +213,7 @@ public class GMEAuthManager {
}
private Observable<String> decryptByKeyStore(String data) {
return SecurityUtils.decryptUsingKeyStore(context, data)
return SecurityUtils.decryptUsingKeyStore(context,biometricDialogParam, data)
.map(FingerprintDecryptionResult::getDecrypted);
}

8
app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/SecurityUtils.java

@ -63,8 +63,8 @@ public class SecurityUtils {
* @param secret
* @return
*/
public static Observable<FingerprintDecryptionResult> decryptUsingKeyStore(Context context, String secret) {
return RxFingerprint.decrypt(EncryptionMethod.RSA, context, KEY_STORE_SECRET_ALIAS, secret);
public static Observable<FingerprintDecryptionResult> decryptUsingKeyStore(Context context, RxFingerprint.BiometricPromptDialogParam dialogParam, String secret) {
return RxFingerprint.decrypt(EncryptionMethod.RSA,dialogParam, context, KEY_STORE_SECRET_ALIAS, secret);
}
/**
@ -72,8 +72,8 @@ public class SecurityUtils {
* @param context
* @return
*/
public static Observable<FingerprintAuthenticationResult> authenticateFingerPrint(Context context) {
return RxFingerprint.authenticate(context);
public static Observable<FingerprintAuthenticationResult> authenticateFingerPrint(Context context, RxFingerprint.BiometricPromptDialogParam dialogParam) {
return RxFingerprint.authenticate(context,dialogParam);
}
/**

21
app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/presenter/SendMoneyV2Presenter.java

@ -194,27 +194,6 @@ public class SendMoneyV2Presenter extends BaseViewModel implements SendMoneyV2Pr
@Override
public void promptPinAndPerformTransaction() {
// if (checkIfUserHasEnabledBiometricAuth()) {
// view.promptBiometricAuthDialog(new TransactionBiometricPromptDialog.BiometricPromptResultListener() {
// @Override
// public void onBiometricAuthSuccess(String decResult) {
// performSendMoneyTransaction(decResult, true);
//
// }
// });
// } else {
// view.promptPassword(new PasswordPromptListener() {
// @Override
// public void onPasswordSubmit(String password) {
// performSendMoneyTransaction(password, false);
// }
//
// @Override
// public void onCancelled() {
//
// }
// }, countDownRemainingValue);
// }
GMEAuthManager.getGmeAuthManager(view.getContext()).fromPaymentSource(
new GMETxnParam(

28
app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/SendMoneyV2Activity.java

@ -254,24 +254,24 @@ public class SendMoneyV2Activity extends BaseActivity implements SendMoneyAction
@Override
public void promptPassword(PasswordPromptListener listener, long countDownValue) {
String paymentType = presenter.getPaymentType();
String kftcId=presenter.getKftcId();
String selectedAmount=presenter.getTransactionAmount();
this.passwordPromptListener = listener;
Intent passwordRequestIntent = new Intent(this, TransactionPasswordPromptActivity.class);
passwordRequestIntent.putExtra(PAYMENT_TYPE_BUNDLE_KEY, paymentType);
passwordRequestIntent.putExtra(SELECTED_AMT_FOR_OTP_BUNDLE_KEY, selectedAmount);
passwordRequestIntent.putExtra(SELECTED_KFTC_ID_FOR_OTP_BUNDLE_KEY, kftcId);
passwordRequestIntent.putExtra(OTP_COUNTDOWN_VALUE, countDownValue);
startActivityForResult(passwordRequestIntent, PASSWORD_PROMPT_REQUEST);
// String paymentType = presenter.getPaymentType();
// String kftcId=presenter.getKftcId();
// String selectedAmount=presenter.getTransactionAmount();
//
// this.passwordPromptListener = listener;
// Intent passwordRequestIntent = new Intent(this, TransactionPasswordPromptActivity.class);
// passwordRequestIntent.putExtra(PAYMENT_TYPE_BUNDLE_KEY, paymentType);
// passwordRequestIntent.putExtra(SELECTED_AMT_FOR_OTP_BUNDLE_KEY, selectedAmount);
// passwordRequestIntent.putExtra(SELECTED_KFTC_ID_FOR_OTP_BUNDLE_KEY, kftcId);
// passwordRequestIntent.putExtra(OTP_COUNTDOWN_VALUE, countDownValue);
// startActivityForResult(passwordRequestIntent, PASSWORD_PROMPT_REQUEST);
}
@Override
public void promptBiometricAuthDialog(TransactionBiometricPromptDialog.BiometricPromptResultListener listener) {
TransactionBiometricPromptDialog promptDialog= new TransactionBiometricPromptDialog();
promptDialog.setResultListener(listener);
promptDialog.show(getSupportFragmentManager(),promptDialog.getClass().getSimpleName());
// TransactionBiometricPromptDialog promptDialog= new TransactionBiometricPromptDialog();
// promptDialog.setResultListener(listener);
// promptDialog.show(getSupportFragmentManager(),promptDialog.getClass().getSimpleName());
}
@Override

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java

@ -123,7 +123,7 @@ public class FingerPrintAuthPromptDialog extends DialogFragment {
}
private Disposable startObservingFingerPrintScanner() {
return SecurityUtils.authenticateFingerPrint(getActivity())
return SecurityUtils.authenticateFingerPrint(getActivity(),null)
.subscribeOn(Schedulers.io())
.flatMap(authentication -> {
switch (authentication.getResult()) {

37
app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenter.java

@ -1,5 +1,6 @@
package com.gmeremit.online.gmeremittance_native.topup.local.presenter.topup;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
@ -9,6 +10,10 @@ import com.gmeremit.online.gmeremittance_native.accountmanage.presenter.payments
import com.gmeremit.online.gmeremittance_native.base.BasePresenter;
import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog;
import com.gmeremit.online.gmeremittance_native.domesticremit.send.model.KFTCBalanceCheckDTO;
import com.gmeremit.online.gmeremittance_native.security.GMEAuthManager;
import com.gmeremit.online.gmeremittance_native.security.model.GMEAuthFailedResult;
import com.gmeremit.online.gmeremittance_native.security.model.GMEAuthSuccessResult;
import com.gmeremit.online.gmeremittance_native.security.model.GMETxnParam;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.topup.local.model.topup.ButtonsGrid;
import com.gmeremit.online.gmeremittance_native.topup.local.model.topup.CardInfoDTO;
@ -240,32 +245,28 @@ public class LocalTopUpPresenter extends BasePresenter implements LocalTopUpPres
new ConfirmRechargePaymentBottomSheetDialog.RechargeConfirmationListener() {
@Override
public void onPaymentConfirmed() {
if (checkIfUserHasEnabledBiometricAuth()) {
view.promptBiometricAuthDialog(new TransactionBiometricPromptDialog.BiometricPromptResultListener() {
GMEAuthManager.getGmeAuthManager((AppCompatActivity) view.getContext()).fromPaymentSource(
new GMETxnParam(
selectedPaymentSource.getType(),
regularTopUpValidator.selectedDeno.getPrice(),
selectedPaymentSource.getKftcAccountId()
).enableFallbackAuth().withCountdownTimer(countDownRemainingValue)
).setListener(new GMEAuthManager.GMEAuthListener() {
@Override
public void onBiometricAuthSuccess(String password) {
prepareAndPerformRegularTopUpTxn(password, true);
public void onGMEAuthSuccess(GMEAuthSuccessResult result) {
prepareAndPerformRegularTopUpTxn(result.getResult(), result.isBiometricUsed());
}
});
} else {
view.promptPassword(new PasswordPromptListener() {
@Override
public void onPasswordSubmit(String password) {
prepareAndPerformRegularTopUpTxn(password, false);
@Override
public void onGMEAuthFailed(GMEAuthFailedResult failedResult) {
view.showToastMessage(failedResult.getFailedReason());
}
@Override
public void onCancelled() {
public void onGMEAuthCancelled() {
}
}, countDownRemainingValue,
selectedPaymentSource.getKftcAccountId(),
regularTopUpValidator.selectedDeno.getPrice(),
selectedPaymentSource.getType()
);
}
}).prompt();
}
});

23
app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/view/topup/LocalTopUpActivity.java

@ -1,6 +1,7 @@
package com.gmeremit.online.gmeremittance_native.topup.local.view.topup;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
@ -341,20 +342,20 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
@Override
public void promptPassword(PasswordPromptListener listener, long countDownValue, String selectedAccountKFTCId, String sendingAmount, String type) {
this.passwordPromptListener = listener;
Intent passwordRequestIntent = new Intent(this, TransactionPasswordPromptActivity.class);
passwordRequestIntent.putExtra(PAYMENT_TYPE_BUNDLE_KEY, type);
passwordRequestIntent.putExtra(SELECTED_AMT_FOR_OTP_BUNDLE_KEY, sendingAmount);
passwordRequestIntent.putExtra(SELECTED_KFTC_ID_FOR_OTP_BUNDLE_KEY, selectedAccountKFTCId);
passwordRequestIntent.putExtra(OTP_COUNTDOWN_VALUE, countDownValue);
startActivityForResult(passwordRequestIntent, PASSWORD_PROMPT_REQUEST);
// this.passwordPromptListener = listener;
// Intent passwordRequestIntent = new Intent(this, TransactionPasswordPromptActivity.class);
// passwordRequestIntent.putExtra(PAYMENT_TYPE_BUNDLE_KEY, type);
// passwordRequestIntent.putExtra(SELECTED_AMT_FOR_OTP_BUNDLE_KEY, sendingAmount);
// passwordRequestIntent.putExtra(SELECTED_KFTC_ID_FOR_OTP_BUNDLE_KEY, selectedAccountKFTCId);
// passwordRequestIntent.putExtra(OTP_COUNTDOWN_VALUE, countDownValue);
// startActivityForResult(passwordRequestIntent, PASSWORD_PROMPT_REQUEST);
}
@Override
public void promptBiometricAuthDialog(TransactionBiometricPromptDialog.BiometricPromptResultListener listener) {
TransactionBiometricPromptDialog promptDialog = new TransactionBiometricPromptDialog();
promptDialog.setResultListener(listener);
promptDialog.show(getSupportFragmentManager(), promptDialog.getClass().getSimpleName());
// TransactionBiometricPromptDialog promptDialog = new TransactionBiometricPromptDialog();
// promptDialog.setResultListener(listener);
// promptDialog.show(getSupportFragmentManager(), promptDialog.getClass().getSimpleName());
}
@Override
@ -372,4 +373,6 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
presenter.onPaymentSourceSelected(account);
}
}

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java

@ -129,7 +129,7 @@ public class TransactionPasswordPromptV2Presenter extends BasePresenter implemen
}
private Observable<String> decryptFromKeyStore(String data) {
return SecurityUtils.decryptUsingKeyStore(view.getContext(), data)
return SecurityUtils.decryptUsingKeyStore(view.getContext(),null, data)
.flatMap(authentication -> {
switch (authentication.getResult()) {
case FAILED:

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionBiometricPromptDialog.java

@ -132,7 +132,7 @@ public class TransactionBiometricPromptDialog extends DialogFragment {
}
private Observable<String> decryptFromKeyStore(String data) {
return SecurityUtils.decryptUsingKeyStore(getActivity(), data)
return SecurityUtils.decryptUsingKeyStore(getActivity(),null, data)
.flatMap(authentication -> {
switch (authentication.getResult()) {
case FAILED:

0
rxkeystore/.gitignore → rxbiometric/.gitignore

0
rxkeystore/build.gradle → rxbiometric/build.gradle

0
rxkeystore/dependencies.gradle → rxbiometric/dependencies.gradle

0
rxkeystore/proguard-rules.pro → rxbiometric/proguard-rules.pro

0
rxkeystore/publish.gradle → rxbiometric/publish.gradle

0
rxkeystore/src/main/AndroidManifest.xml → rxbiometric/src/main/AndroidManifest.xml

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/AesCipherProvider.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/AesCipherProvider.java

5
rxkeystore/src/main/java/com/mtramin/rxfingerprint/AesDecryptionObservable.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/AesDecryptionObservable.java

@ -52,13 +52,14 @@ class AesDecryptionObservable extends FingerprintObservable<FingerprintDecryptio
* to encrypt the given data.
*
* @param context context to use
* @param dialogParam
* @param keyName keyName to use for the decryption
* @param encrypted data to encrypt @return Observable {@link FingerprintEncryptionResult}
* @return Observable result of the decryption
*/
static Observable<FingerprintDecryptionResult> create(Context context, String keyName, String encrypted) {
static Observable<FingerprintDecryptionResult> create(Context context, RxFingerprint.BiometricPromptDialogParam dialogParam, String keyName, String encrypted) {
try {
return Observable.create(new AesDecryptionObservable(new FingerprintApiWrapper(context),
return Observable.create(new AesDecryptionObservable(new FingerprintApiWrapper(context,dialogParam),
new AesCipherProvider(context, keyName),
encrypted,
new Base64Provider()));

2
rxkeystore/src/main/java/com/mtramin/rxfingerprint/AesEncryptionObservable.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/AesEncryptionObservable.java

@ -59,7 +59,7 @@ class AesEncryptionObservable extends FingerprintObservable<FingerprintEncryptio
*/
static Observable<FingerprintEncryptionResult> create(Context context, String keyName, char[] toEncrypt, boolean keyInvalidatedByBiometricEnrollment) {
try {
return Observable.create(new AesEncryptionObservable(new FingerprintApiWrapper(context),
return Observable.create(new AesEncryptionObservable(new FingerprintApiWrapper(context,null),
new AesCipherProvider(context, keyName, keyInvalidatedByBiometricEnrollment),
toEncrypt,
new Base64Provider()));

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/Base64Provider.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/Base64Provider.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/CipherProvider.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/CipherProvider.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/ContextUtils.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/ContextUtils.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/ConversionUtils.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/ConversionUtils.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/CryptoData.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/CryptoData.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/CryptoDataException.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/CryptoDataException.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/DefaultLogger.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/DefaultLogger.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/EncodingProvider.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/EncodingProvider.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/EncryptionMethod.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/EncryptionMethod.java

9
rxkeystore/src/main/java/com/mtramin/rxfingerprint/FingerprintApiWrapper.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/FingerprintApiWrapper.java

@ -35,8 +35,9 @@ import static android.Manifest.permission.USE_BIOMETRIC;
class FingerprintApiWrapper {
@NonNull private final Context context;
@NonNull private final RxFingerprint.BiometricPromptDialogParam biometricPromptDialogParam;
FingerprintApiWrapper(@NonNull Context context) {
FingerprintApiWrapper( Context context, RxFingerprint.BiometricPromptDialogParam biometricPromptDialogParam) {
// If this is an Application Context, it causes issues when rotating the device while
// the sensor is active. The 2nd callback will receive the cancellation error of the first
// authentication action which will immediately onError and unsubscribe the 2nd
@ -47,6 +48,7 @@ class FingerprintApiWrapper {
}
this.context = context;
this.biometricPromptDialogParam=biometricPromptDialogParam;
}
@ -60,8 +62,9 @@ class FingerprintApiWrapper {
}
public RxFingerprint.BiometricPromptDialogParam getBiometricPromptDialogParam() {
return biometricPromptDialogParam;
}
CancellationSignal createCancellationSignal() {
return new CancellationSignal();

4
rxkeystore/src/main/java/com/mtramin/rxfingerprint/FingerprintAuthenticationObservable.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/FingerprintAuthenticationObservable.java

@ -42,8 +42,8 @@ class FingerprintAuthenticationObservable extends FingerprintObservable<Fingerpr
* @param context context to use
* @return Observable {@link FingerprintAuthenticationResult}
*/
static Observable<FingerprintAuthenticationResult> create(Context context) {
return Observable.create(new FingerprintAuthenticationObservable(new FingerprintApiWrapper(context)));
static Observable<FingerprintAuthenticationResult> create(Context context, RxFingerprint.BiometricPromptDialogParam dialogParam) {
return Observable.create(new FingerprintAuthenticationObservable(new FingerprintApiWrapper(context,dialogParam)));
}
@VisibleForTesting

15
rxkeystore/src/main/java/com/mtramin/rxfingerprint/FingerprintObservable.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/FingerprintObservable.java

@ -49,7 +49,8 @@ import static android.Manifest.permission.USE_BIOMETRIC;
abstract class FingerprintObservable<T> implements ObservableOnSubscribe<T> {
private final FingerprintApiWrapper fingerprintApiWrapper;
CancellationSignal cancellationSignal;
private CancellationSignal cancellationSignal;
private BiometricPrompt biometricPromptDialog;
/**
@ -91,12 +92,14 @@ abstract class FingerprintObservable<T> implements ObservableOnSubscribe<T> {
BiometricPrompt.AuthenticationCallback callback = createAuthenticationCallback(emitter);
cancellationSignal = fingerprintApiWrapper.createCancellationSignal();
RxFingerprint.BiometricPromptDialogParam dialogParam= fingerprintApiWrapper.getBiometricPromptDialogParam();
if(dialogParam==null)
throw new IllegalArgumentException("Dialog param cannot be null");
BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
.setTitle("Set the title to display.")
.setSubtitle("Set the subtitle to display.")
.setDescription("Set the description to display")
.setNegativeButtonText("Negative Button")
.setTitle(dialogParam.getTitle())
.setSubtitle(dialogParam.getSubTitle())
.setDescription(dialogParam.getDescription())
.setNegativeButtonText(fingerprintApiWrapper.getBiometricPromptDialogParam().getNegativeButtonText())
.build();

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/Logger.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/Logger.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/RsaCipherProvider.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/RsaCipherProvider.java

5
rxkeystore/src/main/java/com/mtramin/rxfingerprint/RsaDecryptionObservable.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/RsaDecryptionObservable.java

@ -50,13 +50,14 @@ class RsaDecryptionObservable extends FingerprintObservable<FingerprintDecryptio
* to encrypt the given data.
*
* @param context context to use
* @param dialogParam
* @param keyName keyName to use for the decryption
* @param encrypted data to encrypt @return Observable {@link FingerprintEncryptionResult}
* @return Observable result of the decryption
*/
static Observable<FingerprintDecryptionResult> create(Context context, String keyName, String encrypted) {
static Observable<FingerprintDecryptionResult> create(Context context, RxFingerprint.BiometricPromptDialogParam dialogParam, String keyName, String encrypted) {
try {
return Observable.create(new RsaDecryptionObservable(new FingerprintApiWrapper(context),
return Observable.create(new RsaDecryptionObservable(new FingerprintApiWrapper(context,dialogParam),
new RsaCipherProvider(context, keyName),
encrypted,
new Base64Provider()));

3
rxkeystore/src/main/java/com/mtramin/rxfingerprint/RsaEncryptionObservable.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/RsaEncryptionObservable.java

@ -53,7 +53,7 @@ class RsaEncryptionObservable implements ObservableOnSubscribe<FingerprintEncryp
return Observable.error(new IllegalArgumentException("String to be encrypted is null. Can only encrypt valid strings"));
}
try {
return Observable.create(new RsaEncryptionObservable(new FingerprintApiWrapper(context),
return Observable.create(new RsaEncryptionObservable(new FingerprintApiWrapper(context,null),
new RsaCipherProvider(context, keyName, keyInvalidatedByBiometricEnrollment),
toEncrypt,
new Base64Provider()));
@ -76,7 +76,6 @@ class RsaEncryptionObservable implements ObservableOnSubscribe<FingerprintEncryp
@Override
public void subscribe(ObservableEmitter<FingerprintEncryptionResult> emitter) throws Exception {
if (fingerprintApiWrapper.isUnavailable()) {
Log.d("GMEAuthManager","Error => Biometric unavailable");
emitter.onError(new FingerprintUnavailableException("Fingerprint authentication is not available on this device! Ensure that the device has a Fingerprint sensor and enrolled Fingerprints by calling RxFingerprint#isAvailable(Context) first"));
return;
}

95
rxkeystore/src/main/java/com/mtramin/rxfingerprint/RxFingerprint.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/RxFingerprint.java

@ -22,6 +22,7 @@ import android.security.keystore.KeyPermanentlyInvalidatedException;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.biometric.BiometricManager;
import com.mtramin.rxfingerprint.data.FingerprintAuthenticationResult;
import com.mtramin.rxfingerprint.data.FingerprintDecryptionResult;
@ -40,7 +41,7 @@ import io.reactivex.Observable;
* call {@link #encrypt(EncryptionMethod, Context, String, String)}
* <p/>
* To decrypt previously encrypted data via the {@link #encrypt(EncryptionMethod, Context, String, String)}
* method, call {@link #decrypt(EncryptionMethod, Context, String, String)}
* method, call {@link #decrypt(EncryptionMethod, BiometricPromptDialogParam,Context, String, String)}
* <p/>
* Helper methods provide information about the devices capability to handle fingerprint
* authentication. For fingerprint authentication to be isAvailable, the device needs to contain the
@ -59,13 +60,13 @@ public class RxFingerprint {
* @return Observable {@link FingerprintAuthenticationResult}. Will complete once the
* authentication was successful or has failed entirely.
*/
public static Observable<FingerprintAuthenticationResult> authenticate(@NonNull Context context) {
return FingerprintAuthenticationObservable.create(context);
public static Observable<FingerprintAuthenticationResult> authenticate(@NonNull Context context,BiometricPromptDialogParam dialogParam) {
return FingerprintAuthenticationObservable.create(context,dialogParam);
}
/**
* Encrypt data and authenticate the user with his fingerprint. The encrypted data can only be
* accessed again by calling {@link #decrypt(Context, String)}. Will use a default keyName in
* accessed again by calling {@link #decrypt(Context,BiometricPromptDialogParam, String)}. Will use a default keyName in
* the Android keystore unique to this applications package name.
* If you want to provide a custom key name use {@link #encrypt(Context, String, String)}
* instead.
@ -92,7 +93,7 @@ public class RxFingerprint {
/**
* Encrypt data and authenticate the user with his fingerprint. The encrypted data can only be
* accessed again by calling {@link #decrypt(Context, String)}. Will use a default keyName in
* accessed again by calling {@link #decrypt(Context,BiometricPromptDialogParam, String)}. Will use a default keyName in
* the Android keystore unique to this applications package name.
* If you want to provide a custom key name use {@link #encrypt(Context, String, String)}
* instead.
@ -121,7 +122,7 @@ public class RxFingerprint {
/**
* Encrypt data and authenticate the user with his fingerprint. The encrypted data can only be
* accessed again by calling {@link #decrypt(Context, String)}. Will use a default keyName in
* accessed again by calling {@link #decrypt(Context,BiometricPromptDialogParam, String)}. Will use a default keyName in
* the Android keystore unique to this applications package name.
* If you want to provide a custom key name use {@link #encrypt(Context, String, String)}
* instead.
@ -167,13 +168,13 @@ public class RxFingerprint {
* @return Observable result of the decryption operation. Will contain the
* decrypted string if decryption was successful.
*/
public static Observable<FingerprintDecryptionResult> decrypt(@NonNull Context context, @NonNull String encrypted) {
return decrypt(EncryptionMethod.AES, context, null, encrypted);
public static Observable<FingerprintDecryptionResult> decrypt(@NonNull Context context,@NonNull BiometricPromptDialogParam dialogParam, @NonNull String encrypted) {
return decrypt(EncryptionMethod.AES, dialogParam,context, null, encrypted);
}
/**
* Encrypt data and authenticate the user with his fingerprint. The encrypted data can only be
* accessed again by calling {@link #decrypt(Context, String, String)} with the same keyName.
* accessed again by calling {@link #decrypt(Context,BiometricPromptDialogParam, String, String)} with the same keyName.
* Encrypted data is only accessible after the user has authenticated with
* fingerprint authentication.
* <p/>
@ -197,7 +198,7 @@ public class RxFingerprint {
/**
* Encrypt data and authenticate the user with his fingerprint. The encrypted data can only be
* accessed again by calling {@link #decrypt(Context, String, String)} with the same keyName.
* accessed again by calling {@link #decrypt(Context,BiometricPromptDialogParam, String, String)} with the same keyName.
* Encrypted data is only accessible after the user has authenticated with
* fingerprint authentication.
* <p/>
@ -239,15 +240,15 @@ public class RxFingerprint {
* successful or have failed entirely.
* @return Observable result of the decryption
*/
public static Observable<FingerprintDecryptionResult> decrypt(@NonNull Context context, @Nullable String keyName, @NonNull String encrypted) {
return decrypt(EncryptionMethod.AES, context, keyName, encrypted);
public static Observable<FingerprintDecryptionResult> decrypt(@NonNull Context context,@NonNull BiometricPromptDialogParam dialogParam, @Nullable String keyName, @NonNull String encrypted) {
return decrypt(EncryptionMethod.AES,dialogParam, context, keyName, encrypted);
}
/**
* Encrypt data with the given {@link EncryptionMethod}. Depending on the given method, the
* fingerprint sensor might be enabled and waiting for the user to authenticate before the
* encryption step. All encrypted data can only be accessed again by calling
* {@link #decrypt(EncryptionMethod, Context, String, String)} with the same
*{@link #decrypt(EncryptionMethod,BiometricPromptDialogParam, Context, String, String)} with the same
* {@link EncryptionMethod} that was used for encryption of the given value.
* <p>
* Take more details about the encryption method and how they behave from {@link EncryptionMethod}
@ -274,7 +275,7 @@ public class RxFingerprint {
* Encrypt data with the given {@link EncryptionMethod}. Depending on the given method, the
* fingerprint sensor might be enabled and waiting for the user to authenticate before the
* encryption step. All encrypted data can only be accessed again by calling
* {@link #decrypt(EncryptionMethod, Context, String, String)} with the same
* {@link #decrypt(EncryptionMethod,BiometricPromptDialogParam, Context, String, String)} with the same
* {@link EncryptionMethod} that was used for encryption of the given value.
* <p>
* Take more details about the encryption method and how they behave from {@link EncryptionMethod}
@ -302,7 +303,7 @@ public class RxFingerprint {
* Encrypt data with the given {@link EncryptionMethod}. Depending on the given method, the
* fingerprint sensor might be enabled and waiting for the user to authenticate before the
* encryption step. All encrypted data can only be accessed again by calling
* {@link #decrypt(EncryptionMethod, Context, String, String)} with the same
* {@link #decrypt(EncryptionMethod,BiometricPromptDialogParam, Context, String, String)} with the same
* {@link EncryptionMethod} that was used for encryption of the given value.
* <p>
* Take more details about the encryption method and how they behave from {@link EncryptionMethod}
@ -333,7 +334,7 @@ public class RxFingerprint {
* Encrypt data with the given {@link EncryptionMethod}. Depending on the given method, the
* fingerprint sensor might be enabled and waiting for the user to authenticate before the
* encryption step. All encrypted data can only be accessed again by calling
* {@link #decrypt(EncryptionMethod, Context, String, String)} with the same
* {@link #decrypt(EncryptionMethod,BiometricPromptDialogParam, Context, String, String)} with the same
* {@link EncryptionMethod} that was used for encryption of the given value.
* <p>
* Take more details about the encryption method and how they behave from {@link EncryptionMethod}
@ -392,14 +393,15 @@ public class RxFingerprint {
* @return Observable result of the decryption
*/
public static Observable<FingerprintDecryptionResult> decrypt(@NonNull EncryptionMethod method,
@NonNull BiometricPromptDialogParam dialogParam,
@NonNull Context context,
@Nullable String keyName,
@NonNull String toDecrypt) {
switch (method) {
case AES:
return AesDecryptionObservable.create(context, keyName, toDecrypt);
return AesDecryptionObservable.create(context,dialogParam, keyName, toDecrypt);
case RSA:
return RsaDecryptionObservable.create(context, keyName, toDecrypt);
return RsaDecryptionObservable.create(context,dialogParam, keyName, toDecrypt);
default:
return Observable.error(new IllegalArgumentException("Unknown decryption method: " + method));
}
@ -415,7 +417,7 @@ public class RxFingerprint {
* @return {@code true} if fingerprint authentication is isAvailable
*/
public static boolean isAvailable(@NonNull Context context) {
return new FingerprintApiWrapper(context).isAvailable();
return BiometricManager.from(context).canAuthenticate()== BiometricManager.BIOMETRIC_SUCCESS;
}
/**
@ -467,4 +469,59 @@ public class RxFingerprint {
public static boolean keyInvalidated(Throwable throwable) {
return throwable instanceof KeyPermanentlyInvalidatedException;
}
public static class BiometricPromptDialogParam
{
private String title,subTitle,description,negativeButtonText;
public BiometricPromptDialogParam()
{
this.title=null;
this.subTitle=null;
this.description=null;
this.negativeButtonText=null;
}
public BiometricPromptDialogParam setTitle(String title)
{
this.title=title;
return this;
}
public BiometricPromptDialogParam setSubTitle(String subTitle)
{
this.subTitle=subTitle;
return this;
}
public BiometricPromptDialogParam setDescription(String description)
{
this.description=description;
return this;
}
public BiometricPromptDialogParam setNegativeButtonText(String buttonText)
{
this.negativeButtonText=buttonText;
return this;
}
public String getTitle() {
return title;
}
public String getSubTitle() {
return subTitle;
}
public String getDescription() {
return description;
}
public String getNegativeButtonText() {
return negativeButtonText;
}
}
}

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/RxFingerprintLogger.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/RxFingerprintLogger.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/data/BiometricExceptions.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/BiometricExceptions.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/data/FingerprintAuthenticationResult.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintAuthenticationResult.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/data/FingerprintDecryptionResult.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintDecryptionResult.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/data/FingerprintEncryptionResult.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintEncryptionResult.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/data/FingerprintResult.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintResult.java

0
rxkeystore/src/main/java/com/mtramin/rxfingerprint/data/FingerprintUnavailableException.java → rxbiometric/src/main/java/com/mtramin/rxfingerprint/data/FingerprintUnavailableException.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/CryptoDataExceptionTest.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/CryptoDataExceptionTest.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/CryptoDataTest.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/CryptoDataTest.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/FingerprintApiWrapperTest.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/FingerprintApiWrapperTest.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/FingerprintAuthenticationTest.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/FingerprintAuthenticationTest.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/RsaEncryptionObservableTest.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/RsaEncryptionObservableTest.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/RxFingerprintTest.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/RxFingerprintTest.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/TestEncodingProvider.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/TestEncodingProvider.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/TestHelper.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/TestHelper.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/data/FingerprintEncryptionResultTest.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/data/FingerprintEncryptionResultTest.java

0
rxkeystore/src/test/java/com/mtramin/rxfingerprint/data/KeyStoreDecryptionResultTest.java → rxbiometric/src/test/java/com/mtramin/rxfingerprint/data/KeyStoreDecryptionResultTest.java

2
settings.gradle

@ -1 +1 @@
include ':securitykeypad', ':app', ':httpclient-release', ':SpinnerDatePickerLib-release', ':rxkeystore'
include ':securitykeypad', ':app', ':httpclient-release', ':SpinnerDatePickerLib-release', ':rxbiometric'
Loading…
Cancel
Save