diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java
index 83557436..2265514a 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java
+++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/presenter/ChangePasswordV2Presenter.java
@@ -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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/view/ChangePasswordV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/view/ChangePasswordV2Activity.java
index e97ec345..b3773799 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/changepasswordV2/view/ChangePasswordV2Activity.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterImpl.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterImpl.java
index 754ce2c6..cca87a8e 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterImpl.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/exrate/presenter/ExchangeRatePresenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/exrate/presenter/ExchangeRatePresenter.java
index bc7fc4ff..38d6a150 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/exrate/presenter/ExchangeRatePresenter.java
+++ b/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 {
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2Presenter.java
index c4d848f2..cc48e518 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2Presenter.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/view/HomeActivityV2.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/view/HomeActivityV2.java
index 5011f588..fdd052c0 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/view/HomeActivityV2.java
+++ b/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
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/presenter/KYCV3ViewModel.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/presenter/KYCV3ViewModel.java
index c480aa4e..d8b7136e 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/presenter/KYCV3ViewModel.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/gateway/LoginV2Gateway.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/gateway/LoginV2Gateway.java
index 07895ade..82bafab6 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/gateway/LoginV2Gateway.java
+++ b/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 {
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java
index 2ce1b00b..8287a10f 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java
+++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java
@@ -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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java
index 5d4ed9bd..3ba2c9a3 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java
index 545d7c5e..5fdaa6a6 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java
index 5a6e7349..ac8e57aa 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/resendV2/presenter/resend/ReSendMoneyV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/resendV2/presenter/resend/ReSendMoneyV2Presenter.java
index c87bd47d..99e19adb 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/resendV2/presenter/resend/ReSendMoneyV2Presenter.java
+++ b/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())
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/GMEAuthManager.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/GMEAuthManager.java
new file mode 100644
index 00000000..c9da8403
--- /dev/null
+++ b/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
+ }
+}
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/auth/GMEUserPasswordPromptBottomSheetDialog.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/auth/GMEUserPasswordPromptBottomSheetDialog.java
new file mode 100644
index 00000000..7d88c7aa
--- /dev/null
+++ b/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);
+ }
+}
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/auth/GMEUserProfileChangeOTPRequestBottomSheetDialog.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/auth/GMEUserProfileChangeOTPRequestBottomSheetDialog.java
new file mode 100644
index 00000000..ee4eafff
--- /dev/null
+++ b/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();
+
+ }
+}
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/EncryptionManager.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/EncryptionManager.java
similarity index 85%
rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/EncryptionManager.java
rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/EncryptionManager.java
index ba557b67..acce0d2a 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/EncryptionManager.java
+++ b/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 {
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeyboardManager.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeyboardManager.java
similarity index 98%
rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeyboardManager.java
rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeyboardManager.java
index 428ee9fd..99496d8f 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeyboardManager.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeyboardView.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeyboardView.java
similarity index 98%
rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeyboardView.java
rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeyboardView.java
index c4bd4afc..dc31a448 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeyboardView.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeypadRequestParamBuilder.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeypadRequestParamBuilder.java
similarity index 98%
rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeypadRequestParamBuilder.java
rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/security/securitykeypad/SecurityKeypadRequestParamBuilder.java
index ca097091..e232fcf2 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/securitykeypad/SecurityKeypadRequestParamBuilder.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/AESEncryptionHelper.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/AESEncryptionHelper.java
similarity index 99%
rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/AESEncryptionHelper.java
rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/AESEncryptionHelper.java
index 77402aa4..61256e96 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/AESEncryptionHelper.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/SecurityUtils.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/SecurityUtils.java
similarity index 98%
rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/SecurityUtils.java
rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/SecurityUtils.java
index 4092297e..90ff520d 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/SecurityUtils.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/SignatureCheck.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/SignatureCheck.java
similarity index 91%
rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/SignatureCheck.java
rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/security/utils/SignatureCheck.java
index ea2c990f..53ffae22 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/SignatureCheck.java
+++ b/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 {
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/presenter/SendMoneyV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/presenter/SendMoneyV2Presenter.java
index f4320dce..0fd8a058 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/presenter/SendMoneyV2Presenter.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java
index 321f605e..16ae4b7c 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java
+++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerPrintAuthPromptDialog.java
@@ -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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java
index 1a2a022a..637270b4 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java
+++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java
@@ -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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java
index d0018a9a..22e92ae2 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenter.java
index 106f9bc0..791c4099 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenter.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java
index 6550f43b..dfbb0c9b 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java
+++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java
@@ -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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionBiometricPromptDialog.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionBiometricPromptDialog.java
index 1e8c576c..1869cebf 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionBiometricPromptDialog.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptActivity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptActivity.java
index c51406ce..f6c745e2 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptActivity.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/HTTPConstants.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/HTTPConstants.java
index d79603b2..47e4758f 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/HTTPConstants.java
+++ b/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";
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/GMEAuthManager.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/GMEAuthManager.java
deleted file mode 100644
index 1eceabb0..00000000
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/security/GMEAuthManager.java
+++ /dev/null
@@ -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
- }
-}
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserFragmentV2.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserFragmentV2.java
index d1f55964..14f01392 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserFragmentV2.java
+++ b/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;
diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserV2Activity.java
index 87ab53c4..59f92796 100644
--- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/webbrowserV2/WebBrowserV2Activity.java
+++ b/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;
diff --git a/app/src/main/res/drawable/bg_window_top_inset.xml b/app/src/main/res/drawable/bg_window_top_inset.xml
new file mode 100644
index 00000000..10af73ec
--- /dev/null
+++ b/app/src/main/res/drawable/bg_window_top_inset.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/app/src/main/res/drawable/ic_rounded_password_prompt.xml b/app/src/main/res/drawable/ic_rounded_password_prompt.xml
index 7481d1d1..e80662df 100644
--- a/app/src/main/res/drawable/ic_rounded_password_prompt.xml
+++ b/app/src/main/res/drawable/ic_rounded_password_prompt.xml
@@ -1,7 +1,7 @@
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_rounded_password_prompt_bg.xml b/app/src/main/res/drawable/ic_rounded_password_prompt_bg.xml
index 71590fef..70296ca7 100644
--- a/app/src/main/res/drawable/ic_rounded_password_prompt_bg.xml
+++ b/app/src/main/res/drawable/ic_rounded_password_prompt_bg.xml
@@ -3,6 +3,6 @@
android:shape="rectangle">
+ android:topLeftRadius="@dimen/_10sdp"
+ android:topRightRadius="@dimen/_10sdp"/>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_change_password_v2.xml b/app/src/main/res/layout/activity_change_password_v2.xml
index 8f8081bc..02b1774d 100644
--- a/app/src/main/res/layout/activity_change_password_v2.xml
+++ b/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" />
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index fe528a55..3ae77798 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -163,6 +163,10 @@
+