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 @@ +