Browse Source

User profile credential change flow added

master
Preyea Regmi 4 years ago
parent
commit
07877b9f78
  1. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java
  2. 6
      app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/view/ChangePasswordV2Activity.java
  3. 4
      app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterImpl.java
  4. 4
      app/src/main/java/com/gmeremit/online/gmeremittance_native/exrate/presenter/ExchangeRatePresenter.java
  5. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2Presenter.java
  6. 42
      app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/view/HomeActivityV2.java
  7. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/presenter/KYCV3ViewModel.java
  8. 5
      app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/gateway/LoginV2Gateway.java
  9. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java
  10. 6
      app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java
  11. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java
  12. 6
      app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java
  13. 4
      app/src/main/java/com/gmeremit/online/gmeremittance_native/resendV2/presenter/resend/ReSendMoneyV2Presenter.java
  14. 183
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/GMEAuthManager.java
  15. 147
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/auth/GMEUserPasswordPromptBottomSheetDialog.java
  16. 270
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/auth/GMEUserProfileChangeOTPRequestBottomSheetDialog.java
  17. 5
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/EncryptionManager.java
  18. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeyboardManager.java
  19. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeyboardView.java
  20. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeypadRequestParamBuilder.java
  21. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/AESEncryptionHelper.java
  22. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/SecurityUtils.java
  23. 4
      app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/SignatureCheck.java
  24. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/presenter/SendMoneyV2Presenter.java
  25. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java
  26. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java
  27. 5
      app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java
  28. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenter.java
  29. 3
      app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java
  30. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionBiometricPromptDialog.java
  31. 6
      app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptActivity.java
  32. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/HTTPConstants.java
  33. 91
      app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/GMEAuthManager.java
  34. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserFragmentV2.java
  35. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserV2Activity.java
  36. 6
      app/src/main/res/drawable/bg_window_top_inset.xml
  37. 2
      app/src/main/res/drawable/ic_rounded_password_prompt.xml
  38. 4
      app/src/main/res/drawable/ic_rounded_password_prompt_bg.xml
  39. 6
      app/src/main/res/layout/activity_change_password_v2.xml
  40. 2
      app/src/main/res/layout/activity_login_v2.xml
  41. 2
      app/src/main/res/layout/activity_register_v2.xml
  42. 2
      app/src/main/res/layout/activity_transaction_password_prompt.xml
  43. 101
      app/src/main/res/layout/gme_user_pwd_prompt_modal.xml
  44. 4
      app/src/main/res/values/styles.xml

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java

@ -8,7 +8,7 @@ import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog;
import com.gmeremit.online.gmeremittance_native.utils.Constants;
import com.gmeremit.online.gmeremittance_native.utils.Utils;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponse;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;

6
app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/view/ChangePasswordV2Activity.java

@ -18,9 +18,9 @@ import com.gmeremit.online.gmeremittance_native.changepasswordV2.gateway.ChangeP
import com.gmeremit.online.gmeremittance_native.changepasswordV2.presenter.ChangePasswordV2Presenter;
import com.gmeremit.online.gmeremittance_native.changepasswordV2.presenter.ChangePasswordV2PresenterInterface;
import com.gmeremit.online.gmeremittance_native.customwidgets.GmeErrorTextView;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.softsecurity.transkey.TransKeyActivity;
import butterknife.BindView;

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

@ -19,8 +19,6 @@ 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.topup.local.model.topup.LocalTopUpResponseDTO;
import com.gmeremit.online.gmeremittance_native.topup.local.presenter.topup.LocalTopUpPresenter;
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;
@ -30,7 +28,7 @@ import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataM
import com.gmeremit.online.gmeremittance_native.utils.https.GenericThrowable;
import com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants;
import com.gmeremit.online.gmeremittance_native.utils.https.HttpClientV2;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.google.gson.reflect.TypeToken;
import java.io.IOException;

4
app/src/main/java/com/gmeremit/online/gmeremittance_native/exrate/presenter/ExchangeRatePresenter.java

@ -28,7 +28,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
import static com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants.HTTP_INVALID_REQUEST;
import static com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants.INVALID_REQUEST;
public class ExchangeRatePresenter extends BasePresenter implements ExchangeRatePresenterInterface {
@ -316,7 +316,7 @@ public class ExchangeRatePresenter extends BasePresenter implements ExchangeRate
else
{
clearExistingRateOnFailure();
view.showPopUpMessage(HTTP_INVALID_REQUEST, CustomAlertDialog.AlertType.FAILED, null);
view.showPopUpMessage(INVALID_REQUEST, CustomAlertDialog.AlertType.FAILED, null);
}
} else {

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2Presenter.java

@ -17,7 +17,7 @@ import com.gmeremit.online.gmeremittance_native.utils.Utils;
import com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants;
import com.gmeremit.online.gmeremittance_native.utils.https.SessionExpiredException;
import com.gmeremit.online.gmeremittance_native.utils.https.UserSessionObserverResponse;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.google.firebase.iid.FirebaseInstanceId;
import java.util.Calendar;

42
app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/view/HomeActivityV2.java

@ -14,6 +14,8 @@ import androidx.annotation.RequiresApi;
import com.gmeremit.online.gmeremittance_native.domesticremit.send.view.DomesticRemitActivity;
import com.gmeremit.online.gmeremittance_native.kycV3.view.KYCV3Activity;
import com.gmeremit.online.gmeremittance_native.notice.view.NoticeActivity;
import com.gmeremit.online.gmeremittance_native.security.GMEAuthManager;
import com.gmeremit.online.gmeremittance_native.security.auth.GMEUserPasswordPromptBottomSheetDialog;
import com.gmeremit.online.gmeremittance_native.topup.local.view.history.LocalTopUpHistoryActivity;
import com.gmeremit.online.gmeremittance_native.transactionhistoryV2.view.OutboundTransactionHistoryActivityV2;
import com.gmeremit.online.gmeremittance_native.walletstatementV2.view.WalletStatementV2Activity;
@ -24,6 +26,7 @@ import androidx.core.content.ContextCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AlertDialog;
import android.text.Html;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@ -468,13 +471,38 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra
@Override
public void showLocalTopup() {
if (isNotificaitonViewActive())
return;
String unverifiedMessage = presenter.checkIfUserVerified();
if (unverifiedMessage == null)
startActivity(new Intent(getApplicationContext(), LocalTopUpActivity.class));
else
showPopUpMessage(unverifiedMessage, CustomAlertDialog.AlertType.ALERT, null);
// if (isNotificaitonViewActive())
// return;
// String unverifiedMessage = presenter.checkIfUserVerified();
// if (unverifiedMessage == null)
// startActivity(new Intent(getApplicationContext(), LocalTopUpActivity.class));
// else
// showPopUpMessage(unverifiedMessage, CustomAlertDialog.AlertType.ALERT, null);
GMEAuthManager.getGmeAuthManager(this).requestExplicitly(GMEAuthManager.GMEAuthType.USER_PASSWORD).setListener(new GMEAuthManager.GMEAuthListener() {
@Override
public void onGMEAuthSuccess(String secret) {
Log.d(GMEAuthManager.TAG,"User password recieved: "+secret);
GMEAuthManager.getGmeAuthManager(HomeActivityV2.this).requestExplicitly(GMEAuthManager.GMEAuthType.OTP_PROFILE_SUBMIT).setListener(new GMEAuthManager.GMEAuthListener() {
@Override
public void onGMEAuthSuccess(String secret) {
Log.d(GMEAuthManager.TAG,"User submitted OTP recieved: "+secret);
}
@Override
public void onGMEAuthFailed(String errorReason) {
}
}).prompt();
}
@Override
public void onGMEAuthFailed(String errorReason) {
}
}).prompt();
}
@Override

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/presenter/KYCV3ViewModel.java

@ -8,7 +8,6 @@ import android.util.Log;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.gmeremit.online.gmeremittance_native.GmeApplication;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.addautodebitV2.view.AddPrimaryAccounAsAutoDebitActivity;
import com.gmeremit.online.gmeremittance_native.base.BaseViewModel;
@ -31,7 +30,6 @@ import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverRe
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponseV2;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataModel;
import com.gmeremit.online.gmeremittance_native.utils.https.MessageResponseDataModel;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.google.gson.reflect.TypeToken;
import java.io.File;

5
app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/gateway/LoginV2Gateway.java

@ -1,9 +1,7 @@
package com.gmeremit.online.gmeremittance_native.loginV2.gateway;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import com.gmeremit.online.gmeremittance_native.GmeApplication;
import com.gmeremit.online.gmeremittance_native.base.PrefKeys;
@ -12,12 +10,9 @@ import com.gmeremit.online.gmeremittance_native.loginV2.model.LoginModelV2;
import com.gmeremit.online.gmeremittance_native.loginV2.model.LoginV2DataApiResponse;
import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginV2InteractorInterface;
import com.gmeremit.online.gmeremittance_native.utils.https.HttpClientV2;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.google.gson.JsonObject;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
public class LoginV2Gateway extends PrivilegedGateway implements LoginV2InteractorInterface.Login2GatewayInterface {

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java

@ -11,7 +11,7 @@ import com.gmeremit.online.gmeremittance_native.loginV2.gateway.LoginV2Gateway;
import com.gmeremit.online.gmeremittance_native.loginV2.model.LoginModelV2;
import com.gmeremit.online.gmeremittance_native.utils.Constants;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponse;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.mtramin.rxfingerprint.data.FingerprintAuthenticationException;
import com.mtramin.rxfingerprint.data.FingerprintDecryptionResult;

6
app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java

@ -42,9 +42,9 @@ import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginV2Present
import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginV2PresenterInterface;
import com.gmeremit.online.gmeremittance_native.registerV2.view.RegisterV2Activity;
import com.gmeremit.online.gmeremittance_native.resetpassV2.view.ResetPassV2Activity;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.softsecurity.transkey.TransKeyActivity;
import butterknife.BindView;

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java

@ -13,7 +13,7 @@ import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverRe
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponseV2;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataModel;
import com.gmeremit.online.gmeremittance_native.utils.https.MessageResponseDataModel;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.google.firebase.iid.FirebaseInstanceId;
import java.util.List;

6
app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java

@ -38,9 +38,9 @@ import com.gmeremit.online.gmeremittance_native.registerV2.gateway.RegisterV2Gat
import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterV2Presenter;
import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterV2PresenterInterface;
import com.gmeremit.online.gmeremittance_native.termsandcondition.view.TermsAndConditionAcitivity;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.softsecurity.transkey.TransKeyActivity;
import butterknife.BindView;

4
app/src/main/java/com/gmeremit/online/gmeremittance_native/resendV2/presenter/resend/ReSendMoneyV2Presenter.java

@ -18,7 +18,7 @@ import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverRe
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponseV2;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataModel;
import com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
@ -163,7 +163,7 @@ public class ReSendMoneyV2Presenter extends BasePresenter implements ReSendMoney
@Override
public void getPrepData() {
if (previousTransactionRelatedData == null)
view.showPopUpMessage(HTTPConstants.HTTP_INVALID_REQUEST, CustomAlertDialog.AlertType.FAILED, alertType -> view.exitView());
view.showPopUpMessage(HTTPConstants.INVALID_REQUEST, CustomAlertDialog.AlertType.FAILED, alertType -> view.exitView());
else {
compositeObservable.add(
this.gateway.getResendRelatedData(this.gateway.getAuth(), previousTransactionRelatedData.getSelectedTransaction().getTranId())

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

@ -0,0 +1,183 @@
package com.gmeremit.online.gmeremittance_native.security;
import android.content.SharedPreferences;
import androidx.appcompat.app.AppCompatActivity;
import com.gmeremit.online.gmeremittance_native.GmeApplication;
import com.gmeremit.online.gmeremittance_native.base.PrefKeys;
import com.gmeremit.online.gmeremittance_native.security.auth.GMEUserPasswordPromptBottomSheetDialog;
import com.gmeremit.online.gmeremittance_native.security.auth.GMEUserProfileChangeOTPRequestBottomSheetDialog;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionBiometricPromptDialog;
import static com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants.INVALID_REQUEST;
/**
* @author Preyea R. Regmi
* This class acts as a high level controller to orchestrates different authentication requirement for GME Services.
* The purpose of this class is to act as middleware and abstract underlying authentication process from various GME Services such as Remittacne,Topup etc.
*/
public class GMEAuthManager {
public static final String TAG="GMEAuthManager";
private AppCompatActivity context;
private GMEAuthListener listener;
private String paymentSourceType;
private GMEAuthType explicitlyRequestedAuthType;
private GMEAuthManager(AppCompatActivity context) {
this.context = context;
resetParamToDefault();
}
private void resetParamToDefault() {
listener = null;
paymentSourceType = null;
explicitlyRequestedAuthType = null;
}
public static GMEAuthManager getGmeAuthManager(AppCompatActivity context) {
return new GMEAuthManager(context);
}
public GMEAuthManager setListener(GMEAuthListener listener) {
this.listener = listener;
return this;
}
public GMEAuthManager fromPaymentSource(String paymentSourceType) {
this.paymentSourceType = paymentSourceType;
this.explicitlyRequestedAuthType = null;
return this;
}
public GMEAuthManager requestExplicitly(GMEAuthType gmeAuthType) {
this.explicitlyRequestedAuthType = gmeAuthType;
this.paymentSourceType = null;
return this;
}
public void prompt() {
if (explicitlyRequestedAuthType != null) {
startAuthFromRequestedAuthType();
} else {
startAuthFromPaymentSourceType();
}
}
private void startAuthFromPaymentSourceType() {
if ("wallet".equalsIgnoreCase(paymentSourceType))
if (checkIfUserHasEnabledBiometric())
showBiometricAuthPrompt();
else
showUserPasswordPrompt();
else if ("autodebit".equalsIgnoreCase(paymentSourceType))
showOTPTxnPrompt();
else
returnInvalidRequest();
}
private void returnInvalidRequest() {
if (listener != null)
listener.onGMEAuthFailed("Payment source not recognized.\n" + INVALID_REQUEST);
}
private void returnSecret(String secret)
{
if(listener!=null)
listener.onGMEAuthSuccess(secret);
}
private void showUserPasswordPrompt() {
GMEUserPasswordPromptBottomSheetDialog.showPromptView(new GMEUserPasswordPromptBottomSheetDialog.GMEUserPasswordPromptListener() {
@Override
public void onUserPasswordReceived(String secret) {
returnSecret(secret);
}
}).show(context.getSupportFragmentManager(), GMEUserPasswordPromptBottomSheetDialog.class.getSimpleName());
}
private void showBiometricAuthPrompt() {
TransactionBiometricPromptDialog promptDialog = new TransactionBiometricPromptDialog();
promptDialog.show(context.getSupportFragmentManager(), promptDialog.getClass().getSimpleName());
}
private void showOTPTxnPrompt() {
TransactionBiometricPromptDialog promptDialog = new TransactionBiometricPromptDialog();
promptDialog.show(context.getSupportFragmentManager(), promptDialog.getClass().getSimpleName());
}
private void showOTPProfilePrompt(boolean initiallyRequestOTP) {
GMEUserProfileChangeOTPRequestBottomSheetDialog.showPromptView(initiallyRequestOTP, -1, new GMEUserProfileChangeOTPRequestBottomSheetDialog.GMEUserProfileChangeOTPRequestListener() {
@Override
public void onOTPSubmittedSucessfully(String secret) {
returnSecret(secret);
}
@Override
public void onOTPRequestFailed() {
}
}).show(context.getSupportFragmentManager(), GMEUserPasswordPromptBottomSheetDialog.class.getSimpleName());
}
private boolean checkIfUserHasEnabledBiometric() {
SharedPreferences storage = GmeApplication.getStorage();
boolean isFingerPrintAuthEnabled = storage.getBoolean(PrefKeys.APP_FINGER_PRINT_ENABLED, false);
String persistedUserID = storage.getString(PrefKeys.APP_USER_ID_SECRET_KEY, "");
String persistedUserPwd = storage.getString(PrefKeys.APP_USER_SECRET_KEY, "");
return SecurityUtils.checkFingerPrintUsablity(context) && isFingerPrintAuthEnabled && persistedUserID != null && persistedUserPwd != null;
}
private void startAuthFromRequestedAuthType() {
if (explicitlyRequestedAuthType != null) {
switch (explicitlyRequestedAuthType) {
case OTP_TXN:
showOTPTxnPrompt();
break;
case OTP_PROFILE_REQUEST:
showOTPProfilePrompt(true);
break;
case OTP_PROFILE_SUBMIT:
showOTPProfilePrompt(false);
break;
case BIOMETRIC:
showBiometricAuthPrompt();
break;
case USER_PASSWORD:
showUserPasswordPrompt();
break;
default:
returnInvalidRequest();
}
}
}
public interface GMEAuthListener {
void onGMEAuthSuccess(String secret);
void onGMEAuthFailed(String errorReason);
}
public enum GMEAuthType {
USER_PASSWORD, BIOMETRIC, OTP_PROFILE_REQUEST, OTP_PROFILE_SUBMIT, OTP_TXN
}
}

147
app/src/main/java/com/gmeremit/online/gmeremittance_native/security/auth/GMEUserPasswordPromptBottomSheetDialog.java

@ -0,0 +1,147 @@
package com.gmeremit.online.gmeremittance_native.security.auth;
import android.app.Dialog;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.security.GMEAuthManager;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import butterknife.BindView;
import butterknife.ButterKnife;
public class GMEUserPasswordPromptBottomSheetDialog extends BottomSheetDialogFragment {
private GMEUserPasswordPromptListener listener;
private SecurityKeypadListener securityKeypadListener;
SecurityKeyboardManager securityKeyboardManager;
@BindView(R.id.securityKeyboard)
SecurityKeyboardView securityKeyboardView;
@BindView(R.id.keypadContainer)
FrameLayout keypadContainer;
@BindView(R.id.keypadBallon)
RelativeLayout ballonView;
@BindView(R.id.title)
TextView title;
public static GMEUserPasswordPromptBottomSheetDialog showPromptView(GMEUserPasswordPromptListener listener) {
GMEUserPasswordPromptBottomSheetDialog gmeUserPasswordPromptBottomSheetDialog = new GMEUserPasswordPromptBottomSheetDialog();
gmeUserPasswordPromptBottomSheetDialog.setListener(listener);
return gmeUserPasswordPromptBottomSheetDialog;
}
private void setListener(GMEUserPasswordPromptListener listener) {
this.listener=listener;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.AppBottomSheetDialogThemeWithInset);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.gme_user_pwd_prompt_modal, container, false);
ButterKnife.bind(this, v);
init();
return v;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog bottomSheetDialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
bottomSheetDialog.setOnShowListener(dialog -> {
BottomSheetDialog dialogc = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = dialogc.findViewById(com.google.android.material.R.id.design_bottom_sheet);
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
int bottomSheetHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
bottomSheetBehavior.setPeekHeight(bottomSheetHeight);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
});
return bottomSheetDialog;
}
private void init() {
securityKeypadListener=new SecurityKeypadListener();
securityKeyboardView.setKeyboardContainerView(keypadContainer);
securityKeyboardView.setKeyboardBallonView(ballonView);
try {
securityKeyboardManager = new SecurityKeyboardManager(getActivity());
SecurityKeypadRequestParamBuilder request = new SecurityKeypadRequestParamBuilder(this.getActivity());
request.disableKeyPadEffect(false);
request.setHintString(getString(R.string.password_text));
title.setText(getString(R.string.enter_login_password_text));
securityKeyboardManager.bindWithSecurityWidgetView(securityKeyboardView)
.setBallonView(ballonView)
.setKeyboardContainer(keypadContainer)
.setRequestParams(request)
.setActionListener(securityKeypadListener)
.build();
securityKeyboardManager.showKeyboard();
} catch (Exception e) {
e.printStackTrace();
}
}
public class SecurityKeypadListener implements SecurityKeyboardManager.SecurityKeyboardActionListenerFacade
{
@Override
public void done(Intent intent) {
dismiss();
if(listener!=null)
listener.onUserPasswordReceived("!@#!@$!@#");
}
@Override
public void cancel(Intent intent) {
dismiss();
}
@Override
public void input(int i) {
}
@Override
public void minTextSizeCallback() {
}
@Override
public void maxTextSizeCallback() {
}
}
public interface GMEUserPasswordPromptListener
{
void onUserPasswordReceived(String secret);
}
}

270
app/src/main/java/com/gmeremit/online/gmeremittance_native/security/auth/GMEUserProfileChangeOTPRequestBottomSheetDialog.java

@ -0,0 +1,270 @@
package com.gmeremit.online.gmeremittance_native.security.auth;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.security.GMEAuthManager;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import com.softsecurity.transkey.TransKeyActivity;
import java.util.Locale;
import butterknife.BindView;
import butterknife.ButterKnife;
public class GMEUserProfileChangeOTPRequestBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
private GMEUserProfileChangeOTPRequestListener listener;
private SecurityKeypadListener securityKeypadListener;
SecurityKeyboardManager securityKeyboardManager;
@BindView(R.id.securityKeyboard)
SecurityKeyboardView securityKeyboardView;
@BindView(R.id.keypadContainer)
FrameLayout keypadContainer;
@BindView(R.id.keypadBallon)
RelativeLayout ballonView;
@BindView(R.id.title)
TextView title;
@BindView(R.id.resend_request)
TextView resendRequest;
private boolean initiallyRequestOTP;
private CountDownTimer countDownTimer;
private long currentCountDownVal;
public static GMEUserProfileChangeOTPRequestBottomSheetDialog showPromptView(boolean intiallyRequestOTP,long currentCountDownVal,GMEUserProfileChangeOTPRequestListener listener) {
GMEUserProfileChangeOTPRequestBottomSheetDialog gmeUserPasswordPromptBottomSheetDialog = new GMEUserProfileChangeOTPRequestBottomSheetDialog();
gmeUserPasswordPromptBottomSheetDialog.setListener(listener);
gmeUserPasswordPromptBottomSheetDialog.setRequestOTPInitially(intiallyRequestOTP);
gmeUserPasswordPromptBottomSheetDialog.setCurrentCountDownValue(currentCountDownVal);
return gmeUserPasswordPromptBottomSheetDialog;
}
private void setCurrentCountDownValue(long currentCountDownVal) {
if(currentCountDownVal>0)
this.currentCountDownVal=currentCountDownVal;
else
this.currentCountDownVal=5000;
}
private void setRequestOTPInitially(boolean intiallyRequestOTP) {
this.initiallyRequestOTP=intiallyRequestOTP;
}
private void setListener(GMEUserProfileChangeOTPRequestListener listener) {
this.listener=listener;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.AppBottomSheetDialogThemeWithInset);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.gme_user_pwd_prompt_modal, container, false);
ButterKnife.bind(this, v);
init();
return v;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog bottomSheetDialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
bottomSheetDialog.setOnShowListener(dialog -> {
BottomSheetDialog dialogc = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = dialogc.findViewById(com.google.android.material.R.id.design_bottom_sheet);
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
int bottomSheetHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
bottomSheetBehavior.setPeekHeight(bottomSheetHeight);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
});
performDefaultAction();
return bottomSheetDialog;
}
private void performDefaultAction() {
Log.d(GMEAuthManager.TAG,"USER PROFILE OTP SCREEN: requestOTP Initially=>"+initiallyRequestOTP);
startCountdownView(currentCountDownVal);
}
public void startCountdownView(long durationMillisecond) {
if(countDownTimer!=null)
countDownTimer.cancel();
countDownTimer = new CountDownTimer(durationMillisecond, 1000) {
int redColor = ContextCompat.getColor(getActivity(), R.color.colorPrimary);
int grayColor = ContextCompat.getColor(getActivity(), R.color.darkgray2);
@Override
public void onTick(long millisUntilFinished) {
currentCountDownVal=millisUntilFinished;
int seconds = (int) (millisUntilFinished / 1000);
int hours = seconds / (60 * 60);
int tempMint = (seconds - (hours * 60 * 60));
int minutes = tempMint / 60;
seconds = tempMint - (minutes * 60);
String timeRemaining = String.format(Locale.US, "%02d", minutes)
+ ":" + String.format(Locale.US, "%02d", seconds);
Spannable tryInText = new SpannableString(getString(R.string.resend_code_text));
tryInText.setSpan(new ForegroundColorSpan(grayColor), 0, tryInText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
resendRequest.setText(tryInText);
Spannable timeText = new SpannableString(" " + timeRemaining);
timeText.setSpan(new ForegroundColorSpan(redColor), 0, timeText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
resendRequest.append(timeText);
}
@Override
public void onFinish() {
showResendRequestView(true);
currentCountDownVal=-1;
}
};
countDownTimer.start();
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
if(countDownTimer!=null)
countDownTimer.cancel();
super.onDismiss(dialog);
}
public void showResendRequestView(boolean action) {
if (resendRequest.getVisibility() != View.VISIBLE)
resendRequest.setVisibility(View.VISIBLE);
if (action) {
if (countDownTimer != null)
countDownTimer.cancel();
currentCountDownVal=-1;
resendRequest.setText(getString(R.string.resend_request_text));
resendRequest.setOnClickListener(this);
} else {
resendRequest.setText("");
resendRequest.setOnClickListener(null);
}
}
private void init() {
resendRequest.setVisibility(View.VISIBLE);
securityKeypadListener=new SecurityKeypadListener();
securityKeyboardView.setKeyboardContainerView(keypadContainer);
securityKeyboardView.setKeyboardBallonView(ballonView);
try {
securityKeyboardManager = new SecurityKeyboardManager(getActivity());
SecurityKeypadRequestParamBuilder request = new SecurityKeypadRequestParamBuilder(this.getActivity());
request.disableKeyPadEffect(true);
request.setKeypadType(TransKeyActivity.mTK_TYPE_KEYPAD_NUMBER);
request.setHintString(getString(R.string.otp_password_hint_text));
title.setText(getString(R.string.enter_otp_password_text));
request.setMaxLength(4);
ballonView.setVisibility(View.INVISIBLE);
securityKeyboardManager.bindWithSecurityWidgetView(securityKeyboardView)
.setBallonView(ballonView)
.setKeyboardContainer(keypadContainer)
.setRequestParams(request)
.setActionListener(securityKeypadListener)
.build();
securityKeyboardManager.showKeyboard();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.resend_request:
break;
}
}
public class SecurityKeypadListener implements SecurityKeyboardManager.SecurityKeyboardActionListenerFacade
{
@Override
public void done(Intent intent) {
dismiss();
if(listener!=null)
listener.onOTPSubmittedSucessfully("1234");
}
@Override
public void cancel(Intent intent) {
dismiss();
}
@Override
public void input(int i) {
}
@Override
public void minTextSizeCallback() {
}
@Override
public void maxTextSizeCallback() {
}
}
public interface GMEUserProfileChangeOTPRequestListener
{
void onOTPSubmittedSucessfully(String secret);
void onOTPRequestFailed();
}
}

5
app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/EncryptionManager.java → app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/EncryptionManager.java

@ -1,8 +1,5 @@
package com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad;
package com.gmeremit.online.gmeremittance_native.security.securitykeypad;
import android.util.Log;
import com.softsecurity.transkey.Global;
import com.softsecurity.transkey.TransKeyCipher;
public class EncryptionManager {

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeyboardManager.java → app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeyboardManager.java

@ -1,4 +1,4 @@
package com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad;
package com.gmeremit.online.gmeremittance_native.security.securitykeypad;
import android.content.Context;
import android.content.Intent;

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeyboardView.java → app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeyboardView.java

@ -1,4 +1,4 @@
package com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad;
package com.gmeremit.online.gmeremittance_native.security.securitykeypad;
import android.content.Context;
import android.content.res.TypedArray;

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeypadRequestParamBuilder.java → app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeypadRequestParamBuilder.java

@ -1,4 +1,4 @@
package com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad;
package com.gmeremit.online.gmeremittance_native.security.securitykeypad;
import android.content.Context;
import android.content.Intent;

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/AESEncryptionHelper.java → app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/AESEncryptionHelper.java

@ -1,4 +1,4 @@
package com.gmeremit.online.gmeremittance_native.utils.security;
package com.gmeremit.online.gmeremittance_native.security.utils;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;

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

@ -1,4 +1,4 @@
package com.gmeremit.online.gmeremittance_native.utils.security;
package com.gmeremit.online.gmeremittance_native.security.utils;
import android.content.Context;

4
app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/SignatureCheck.java → app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/SignatureCheck.java

@ -1,4 +1,4 @@
package com.gmeremit.online.gmeremittance_native.utils.security;
package com.gmeremit.online.gmeremittance_native.security.utils;
import android.content.Context;
import android.content.pm.PackageInfo;
@ -8,9 +8,7 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.util.Log;
public class SignatureCheck {

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

@ -25,7 +25,7 @@ import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.Transa
import com.gmeremit.online.gmeremittance_native.utils.Constants;
import com.gmeremit.online.gmeremittance_native.utils.Utils;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponse;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import java.util.ArrayList;
import java.util.List;

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

@ -18,7 +18,7 @@ import android.widget.Toast;
import androidx.fragment.app.DialogFragment;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.mtramin.rxfingerprint.data.FingerprintAuthenticationResult;
import java.util.concurrent.TimeUnit;

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

@ -19,7 +19,7 @@ import com.gmeremit.online.gmeremittance_native.settings.adapter.LanguageSelecti
import com.gmeremit.online.gmeremittance_native.settings.gateway.LanguageSelectionGateway;
import com.gmeremit.online.gmeremittance_native.settings.gateway.LanguageSelectionGatewayInterface;
import com.gmeremit.online.gmeremittance_native.splash_screen.model.LanguageModel;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import butterknife.BindView;
import butterknife.ButterKnife;

5
app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java

@ -1,15 +1,12 @@
package com.gmeremit.online.gmeremittance_native.splash_screen.presenter;
import android.os.Handler;
import com.gmeremit.online.gmeremittance_native.BuildConfig;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.base.BasePresenter;
import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog;
import com.gmeremit.online.gmeremittance_native.customwidgets.exchangecountrylistingdialog.CountryFlagMapper;
import com.gmeremit.online.gmeremittance_native.settings.gateway.LanguageSelectionGatewayInterface;
import com.gmeremit.online.gmeremittance_native.splash_screen.model.LanguageModel;
import com.gmeremit.online.gmeremittance_native.utils.security.SignatureCheck;
import com.gmeremit.online.gmeremittance_native.security.utils.SignatureCheck;
import com.scottyab.rootbeer.RootBeer;
import java.util.List;

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

@ -26,7 +26,7 @@ import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverRe
import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataModel;
import com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants;
import com.gmeremit.online.gmeremittance_native.utils.https.HttpClientV2;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.google.gson.reflect.TypeToken;
import java.io.IOException;

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

@ -7,12 +7,11 @@ import android.util.Log;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.base.BasePresenter;
import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.gateway.TransactionPasswordPromptV2Gateway;
import com.gmeremit.online.gmeremittance_native.utils.Constants;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponseV2;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataModel;
import com.gmeremit.online.gmeremittance_native.utils.https.MessageResponseDataModel;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.mtramin.rxfingerprint.data.FingerprintAuthenticationException;
import com.mtramin.rxfingerprint.data.FingerprintDecryptionResult;

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

@ -20,7 +20,7 @@ import androidx.fragment.app.DialogFragment;
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.utils.security.SecurityUtils;
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils;
import com.mtramin.rxfingerprint.data.FingerprintAuthenticationException;
import com.mtramin.rxfingerprint.data.FingerprintDecryptionResult;

6
app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptActivity.java

@ -33,9 +33,9 @@ import com.gmeremit.online.gmeremittance_native.customwidgets.GmeErrorTextView;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.gateway.TransactionPasswordPromptV2Gateway;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.presenter.TransactionPasswordPromptV2Presenter;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.presenter.TransactionPasswordPromptV2PresenterInterface;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardManager;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView;
import com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeypadRequestParamBuilder;
import com.softsecurity.transkey.TransKeyActivity;
import java.util.Locale;

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/HTTPConstants.java

@ -8,7 +8,7 @@ public class HTTPConstants {
public static final String HTTP_RESPONSE_NO_INTERNET = "No internet";
public static final String HTTP_RESPONSE_UNKNOWN = "Unknown Error";
public static final String APPLICATION_WISE_ERROR_KEY = "1";
public static final String HTTP_INVALID_REQUEST = "Invalid Request. Please contact GME Support.";
public static final String INVALID_REQUEST = "Invalid Request. Please contact GME Support.";
private static final String HTTP_RESPONSE_405 = "405";

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

@ -1,91 +0,0 @@
package com.gmeremit.online.gmeremittance_native.utils.security;
import android.content.Context;
/**
* @author Preyea R. Regmi
* This class acts as a high level controller to orchestrates different authentication requirement for GME Services.
* The purpose of this class is to act as middleware and abstract underlying authentication process from various GME Services such as Remittacne,Topup etc.
*/
public class GMEAuthManager {
private double otpCountdown;
private static final double DEFAULT_OTP_COUNTDOWN_VAL = 3;
private Context context;
private GMEAuthListener listener;
private String paymentSourceType;
private GMEAuthType explicitlyRequestedAuthType;
private GMEAuthManager(Context context) {
this.context = context;
resetParamToDefault();
}
private void resetParamToDefault() {
otpCountdown = DEFAULT_OTP_COUNTDOWN_VAL;
listener = null;
paymentSourceType = null;
explicitlyRequestedAuthType = null;
}
public static GMEAuthManager getGmeAuthManager(Context context) {
return new GMEAuthManager(context);
}
public void resetCountdown() {
otpCountdown = DEFAULT_OTP_COUNTDOWN_VAL;
}
public GMEAuthManager setListener(GMEAuthListener listener) {
this.listener = listener;
return this;
}
public GMEAuthManager fromPaymentSource(String paymentSourceType) {
this.paymentSourceType = paymentSourceType;
this.explicitlyRequestedAuthType = null;
return this;
}
public GMEAuthManager requestExplicitly(GMEAuthType gmeAuthType) {
this.explicitlyRequestedAuthType = gmeAuthType;
this.paymentSourceType = null;
return this;
}
public void prompt()
{
if(explicitlyRequestedAuthType!=null)
{
startAuthFromRequestedAuthType();
}
else
{
startAuthFromPaymentSourceType();
}
}
private void startAuthFromPaymentSourceType() {
}
private void startAuthFromRequestedAuthType() {
}
public interface GMEAuthListener {
void onGMEAuthSuccess(String secret, boolean isBiometricUsed);
void onGMEAuthFailed(String errorReason);
}
public enum GMEAuthType {
USER_PASSWORD, BIOMETRIC, OTP
}
}

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserFragmentV2.java

@ -180,7 +180,7 @@ public abstract class WebBrowserFragmentV2 extends BaseFragment {
return HTTPConstants.HTTP_RESPONSE_NO_INTERNET;
case WebViewClient.ERROR_BAD_URL:
return HTTPConstants.HTTP_INVALID_REQUEST;
return HTTPConstants.INVALID_REQUEST;
default:
return HTTPConstants.HTTP_RESPONSE_UNKNOWN;

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserV2Activity.java

@ -385,7 +385,7 @@ public abstract class WebBrowserV2Activity extends BaseActivity implements View
return HTTPConstants.HTTP_RESPONSE_NO_INTERNET;
case WebViewClient.ERROR_BAD_URL:
return HTTPConstants.HTTP_INVALID_REQUEST;
return HTTPConstants.INVALID_REQUEST;
default:
return HTTPConstants.HTTP_RESPONSE_UNKNOWN;

6
app/src/main/res/drawable/bg_window_top_inset.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<inset
xmlns:android="http://schemas.android.com/apk/res/android"
android:insetTop="@dimen/_40sdp"
android:drawable="@android:color/transparent"
/>

2
app/src/main/res/drawable/ic_rounded_password_prompt.xml

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<inset
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_rounded_password_prompt_bg"
android:drawable="@android:color/transparent"
android:insetTop="@dimen/_38sdp"
>
</inset>

4
app/src/main/res/drawable/ic_rounded_password_prompt_bg.xml

@ -3,6 +3,6 @@
android:shape="rectangle">
<solid android:color="@android:color/white"/>
<corners
android:topLeftRadius="12dp"
android:topRightRadius="12dp"/>
android:topLeftRadius="@dimen/_10sdp"
android:topRightRadius="@dimen/_10sdp"/>
</shape>

6
app/src/main/res/layout/activity_change_password_v2.xml

@ -51,7 +51,7 @@
android:text="@string/current_password_text"
android:textSize="14sp"
app:txtfontName="@string/regular" />
<com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView
<com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView
android:id="@+id/securityKeyboardCurrentPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -74,7 +74,7 @@
android:text="@string/new_password_text"
android:textSize="14sp"
app:txtfontName="@string/regular" />
<com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView
<com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView
android:id="@+id/securityKeyboardNewPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -97,7 +97,7 @@
android:text="@string/confirm_password_text"
android:textSize="14sp"
app:txtfontName="@string/regular" />
<com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView
<com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView
android:id="@+id/securityKeyboardConfirmPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"

2
app/src/main/res/layout/activity_login_v2.xml

@ -101,7 +101,7 @@
android:text="@string/password_text"
android:textSize="@dimen/text_normal"
app:txtfontName="@string/regular" />
<com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView
<com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:id="@+id/securityKeyboard"

2
app/src/main/res/layout/activity_register_v2.xml

@ -116,7 +116,7 @@
android:text="@string/create_password_text"
android:textSize="@dimen/text_normal"
app:txtfontName="@string/regular" />
<com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView
<com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView
android:id="@+id/securityKeyboardPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"

2
app/src/main/res/layout/activity_transaction_password_prompt.xml

@ -47,7 +47,7 @@
android:textSize="@dimen/_11sdp" />
<com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView
<com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView
android:id="@+id/securityKeyboard"
android:layout_width="match_parent"
app:centerGravityInput="false"

101
app/src/main/res/layout/gme_user_pwd_prompt_modal.xml

@ -0,0 +1,101 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rootView"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/_15sdp"
android:layout_marginTop="@dimen/_15sdp"
android:gravity="center"
android:text="@string/enter_login_password_text"
android:textColor="@color/black"
android:textSize="@dimen/_15ssp" />
<ImageView
android:id="@+id/passwordPromptImageView"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginBottom="@dimen/_8sdp"
android:layout_width="@dimen/_50sdp"
android:layout_height="@dimen/_50sdp"
android:scaleType="centerCrop"
android:layout_gravity="center"
/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/orTextView"
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginBottom="@dimen/_16sdp"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginEnd="@dimen/_12sdp"
android:gravity="center"
android:text="@string/fingerprint_user_text"
android:textColor="@color/darkgray"
android:textSize="@dimen/_11sdp" />
<com.gmeremit.online.gmeremittance_native.security.securitykeypad.SecurityKeyboardView
android:id="@+id/securityKeyboard"
android:layout_width="match_parent"
app:centerGravityInput="false"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/_4sdp"
android:layout_marginStart="@dimen/_4sdp" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeErrorTextView
android:id="@+id/passwordErrorTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/_11sdp"
android:layout_marginRight="@dimen/_11sdp"
android:paddingBottom="@dimen/_1sdp"
android:paddingTop="@dimen/_1sdp" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/resend_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginStart="@dimen/_6sdp"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_8sdp"
android:padding="@dimen/_8sdp"
android:gravity="center"
android:text="@string/resend_request_text"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/_11ssp"
android:visibility="invisible" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<FrameLayout
android:id="@+id/keypadContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/_8sdp"
android:layout_gravity="bottom">
</FrameLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/keypadBallon"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>

4
app/src/main/res/values/styles.xml

@ -163,6 +163,10 @@
</style>
<style name="AppBottomSheetDialogThemeWithInset" parent="AppBottomSheetDialogTheme">
<item name="android:windowBackground">@drawable/bg_window_top_inset</item>
</style>
</resources>
Loading…
Cancel
Save