From 8c7a26f28c420d0a8ad449344f816143a590c328 Mon Sep 17 00:00:00 2001 From: Santosh Bhandary Date: Fri, 2 Jul 2021 18:36:34 +0545 Subject: [PATCH] if OTP not verified beneficiary selected proceed to terms and conditions before OTP --- app/src/main/AndroidManifest.xml | 18 +- .../RecipientTermsGateway.java | 40 +++++ .../RecipientTermsGatewayInterface.java | 17 ++ .../RecipientPresenterTermsInterface.java | 13 ++ .../RecipientTermsViewModel.java | 162 ++++++++++++++++++ .../RecipientListingV3PresenterInterface.java | 1 + .../view/RecipientTermsViewModelFactory.java | 32 ++++ .../BeneficiaryAddEditV3TermsActivity.java | 107 ++++++++++++ .../RecipientTermsContractInterface.java | 9 + .../BeneficiaryAddEditV3Fragment.java | 1 + .../BeneficiaryAddEditV3TermsFragment.java | 9 +- .../RecipientListingV3Activity.java | 17 +- .../sendmoney/view/SendMoneyV2Activity.java | 41 ++--- .../TermsAndConditionV2BrowserActivity.java | 5 + .../webbrowser/WebBrowserV2Activity.java | 100 ++++++++++- .../res/layout/activity_web_browser_v2.xml | 107 ++++++++---- ...beneficiary_add_edit_v3_terms_activity.xml | 9 + app/src/main/res/values/strings.xml | 2 +- 18 files changed, 612 insertions(+), 78 deletions(-) create mode 100644 app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/gateway/recepientTermsConditions/RecipientTermsGateway.java create mode 100644 app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/gateway/recepientTermsConditions/RecipientTermsGatewayInterface.java create mode 100644 app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recepientTermsConditions/RecipientPresenterTermsInterface.java create mode 100644 app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recepientTermsConditions/RecipientTermsViewModel.java create mode 100644 app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/RecipientTermsViewModelFactory.java create mode 100644 app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recepientTermsConditions/BeneficiaryAddEditV3TermsActivity.java create mode 100644 app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recepientTermsConditions/RecipientTermsContractInterface.java create mode 100644 app/src/main/res/layout/beneficiary_add_edit_v3_terms_activity.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 876fb11a..0caa2902 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,7 @@ + tools:replace="android:allowBackup,android:supportsRtl"> + + - + + --> diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/gateway/recepientTermsConditions/RecipientTermsGateway.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/gateway/recepientTermsConditions/RecipientTermsGateway.java new file mode 100644 index 00000000..454869f1 --- /dev/null +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/gateway/recepientTermsConditions/RecipientTermsGateway.java @@ -0,0 +1,40 @@ +package com.swifttech.remit.jmecustomer.features.recipientmanagement.gateway.recepientTermsConditions; + +import com.google.gson.JsonObject; +import com.swifttech.remit.jmecustomer.base.PrivilegedGateway; +import com.swifttech.remit.jmecustomer.utils.Constants; +import com.swifttech.remit.jmecustomer.utils.https.HttpClientV2; + +import io.reactivex.Observable; +import okhttp3.ResponseBody; + +public class RecipientTermsGateway extends PrivilegedGateway implements RecipientTermsGatewayInterface { + @Override + public Observable verifyEmailCode(String auth, + String userId, + String OTP, + String requestFor, + String receiverId) { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty(Constants.USER_ID_KEY, userId); + jsonObject.addProperty(Constants.OTP_KEY, OTP); + jsonObject.addProperty(Constants.REQUEST_FOR_KEY, requestFor); + jsonObject.addProperty(Constants.RECEIVER_ID_KEY, receiverId); + return HttpClientV2.getInstance().verifyEmailCode(auth,jsonObject); + } + + @Override + public Observable requestForOtp(String auth, + String userId, + String OTP, + String requestFor, + String receiverId + ) { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty(Constants.USER_ID_KEY, userId); + jsonObject.addProperty(Constants.OTP_KEY, OTP); + jsonObject.addProperty(Constants.REQUEST_FOR_KEY, requestFor); + jsonObject.addProperty(Constants.RECEIVER_ID_KEY, receiverId); + return HttpClientV2.getInstance().requestForOtp(auth, jsonObject); + } +} diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/gateway/recepientTermsConditions/RecipientTermsGatewayInterface.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/gateway/recepientTermsConditions/RecipientTermsGatewayInterface.java new file mode 100644 index 00000000..7f20ee5d --- /dev/null +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/gateway/recepientTermsConditions/RecipientTermsGatewayInterface.java @@ -0,0 +1,17 @@ +package com.swifttech.remit.jmecustomer.features.recipientmanagement.gateway.recepientTermsConditions; + +import com.swifttech.remit.jmecustomer.base.PrivilegedGatewayInterface; + +import io.reactivex.Observable; +import okhttp3.ResponseBody; + +public interface RecipientTermsGatewayInterface extends PrivilegedGatewayInterface { + Observable verifyEmailCode(String auth, + String userId, + String OTP, + String requestFor, + String receiverId); + + Observable requestForOtp(String auth, String userId, String OTP, String requestFor, String receiverId); + +} diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recepientTermsConditions/RecipientPresenterTermsInterface.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recepientTermsConditions/RecipientPresenterTermsInterface.java new file mode 100644 index 00000000..06bf0e16 --- /dev/null +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recepientTermsConditions/RecipientPresenterTermsInterface.java @@ -0,0 +1,13 @@ +package com.swifttech.remit.jmecustomer.features.recipientmanagement.presenter.recepientTermsConditions; + +import com.swifttech.remit.jmecustomer.base.BasePresenterInterface; + +public interface RecipientPresenterTermsInterface extends BasePresenterInterface { + + void verifyEmailCode(String emailCode); + + void requestForOtp(); + + + +} diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recepientTermsConditions/RecipientTermsViewModel.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recepientTermsConditions/RecipientTermsViewModel.java new file mode 100644 index 00000000..1c7b18fe --- /dev/null +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recepientTermsConditions/RecipientTermsViewModel.java @@ -0,0 +1,162 @@ +package com.swifttech.remit.jmecustomer.features.recipientmanagement.presenter.recepientTermsConditions; + +import com.swifttech.remit.jmecustomer.R; +import com.swifttech.remit.jmecustomer.base.BaseViewModel; +import com.swifttech.remit.jmecustomer.common.customwidgets.CustomAlertDialog; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.gateway.recepientTermsConditions.RecipientTermsGatewayInterface; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.model.recipientlistingV3.ReceiverInfoV3Model; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.view.recepientTermsConditions.RecipientTermsContractInterface; +import com.swifttech.remit.jmecustomer.utils.Constants; +import com.swifttech.remit.jmecustomer.utils.https.GenericApiObserverResponseV2; +import com.swifttech.remit.jmecustomer.utils.https.GenericResponseDataModel; +import com.swifttech.remit.jmecustomer.utils.https.MessageResponseDataModel; + +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.schedulers.Schedulers; + +import static com.swifttech.remit.jmecustomer.utils.Constants.REQUEST_FOR_REC_VALUE; + +public class RecipientTermsViewModel extends BaseViewModel implements RecipientPresenterTermsInterface { + private final CompositeDisposable compositeDisposable; + RecipientTermsGatewayInterface gateway; + ReceiverInfoV3Model receiverInfoV3Model; + RecipientTermsContractInterface view; + + public RecipientTermsViewModel( + RecipientTermsGatewayInterface gateway, + RecipientTermsContractInterface view, + ReceiverInfoV3Model receiverInfoV3Model + ) { + this.compositeDisposable = new CompositeDisposable(); + this.gateway = gateway; + this.receiverInfoV3Model = receiverInfoV3Model; + this.view = view; + } + + @Override + public void verifyEmailCode(String emailCode) { + compositeDisposable.add( + this.gateway.verifyEmailCode( + gateway.getAuth(), + gateway.getUserID(), + emailCode, + Constants.REQUEST_FOR_REC_VALUE, + receiverInfoV3Model.getReceiverId()) + .doOnSubscribe(subs -> view.showProgressBar(true, "")) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doFinally(() -> view.showProgressBar(false, "")) + .subscribeWith(new UploadEmailCodeObserver(view::onEmailVerifySuccess))); + } + + @Override + public void requestForOtp() { + compositeDisposable.add( + gateway.requestForOtp( + gateway.getAuth(), + gateway.getUserID(), + "", + REQUEST_FOR_REC_VALUE, + receiverInfoV3Model.getReceiverId()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doOnSubscribe(disposable -> view.showProgressBar(true, getStringfromStringId(R.string.processing_request_for_otp_text))) + .doFinally(() -> view.showProgressBar(false, "")) + .subscribeWith(new RequestEmailCodeObserver(view::showEmailCodePromptDialog)) + ); + } + + @Override + public void onViewReady() { + + } + + @Override + public void onViewNotReady() { + + } + + public class UploadEmailCodeObserver extends GenericApiObserverResponseV2 { + + Runnable task; + + public UploadEmailCodeObserver(Runnable task) { + this.task = task; + } + + @Override + protected void onSuccess(GenericResponseDataModel t) { + + if (t.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { + if (task != null) + task.run(); + + + } else { + if (t.getErrorCode().equalsIgnoreCase(Constants.OPT_EXPIRED_CODE_V2)) { + view.showPopUpMessage(t.getMsg(), CustomAlertDialog.AlertType.FAILED, alertType -> requestForOtp()); + } else { + view.showPopUpMessage(t.getMsg(), CustomAlertDialog.AlertType.FAILED, null); + + } + } + } + + @Override + public void onFailed(String message) { + view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, null); + } + + @Override + protected void onConnectionNotEstablished(String message) { + view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, null); + } + + @Override + protected void unauthorizedAccess(String message) { + gateway.clearAllUserData(); + view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); + + } + } + + private class RequestEmailCodeObserver extends GenericApiObserverResponseV2 { + + Runnable task; + + public RequestEmailCodeObserver(Runnable task) { + this.task = task; + } + + @Override + protected void onSuccess(GenericResponseDataModel t) { + + if (t.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { + if (task != null) + task.run(); + + + } else { + view.showPopUpMessage(t.getMsg(), CustomAlertDialog.AlertType.FAILED, null); + } + } + + @Override + public void onFailed(String message) { + view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, null); + } + + @Override + protected void onConnectionNotEstablished(String message) { + view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, null); + } + + @Override + protected void unauthorizedAccess(String message) { + gateway.clearAllUserData(); + view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); + + } + } +} diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientlistingV3/RecipientListingV3PresenterInterface.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientlistingV3/RecipientListingV3PresenterInterface.java index 5d6f10b0..4f1df9b5 100644 --- a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientlistingV3/RecipientListingV3PresenterInterface.java +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientlistingV3/RecipientListingV3PresenterInterface.java @@ -47,6 +47,7 @@ public interface RecipientListingV3PresenterInterface extends BasePresenterInter void redirectToSendMoney(SendMoneyRequiredDataV3 sendMoneyRequiredDataV3); void proceedToEditRecipient(ReceiverInfoV3Model recipientInfoModel); + void proceedToShowTermsConditions(ReceiverInfoV3Model recipientInfoModel); void promptToEditRecipient(GenericPromptDialog.GenericDialogPromptListener genericDialogPromptListener,String message); } diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/RecipientTermsViewModelFactory.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/RecipientTermsViewModelFactory.java new file mode 100644 index 00000000..953e3c47 --- /dev/null +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/RecipientTermsViewModelFactory.java @@ -0,0 +1,32 @@ +package com.swifttech.remit.jmecustomer.features.recipientmanagement.view; + +import androidx.annotation.NonNull; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +import com.swifttech.remit.jmecustomer.features.recipientmanagement.gateway.recepientTermsConditions.RecipientTermsGateway; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.model.recipientlistingV3.ReceiverInfoV3Model; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.presenter.recepientTermsConditions.RecipientTermsViewModel; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.view.recepientTermsConditions.RecipientTermsContractInterface; + +public class RecipientTermsViewModelFactory implements ViewModelProvider.Factory { + private RecipientTermsContractInterface view; + private ReceiverInfoV3Model receiverInfoV3Model; + + + public RecipientTermsViewModelFactory( + RecipientTermsContractInterface view, + ReceiverInfoV3Model receiverInfoV3Model + ) { + this.view = view; + this.receiverInfoV3Model = receiverInfoV3Model; + + } + + @SuppressWarnings("unchecked") + @NonNull + @Override + public T create(@NonNull Class modelClass) { + return (T) new RecipientTermsViewModel(new RecipientTermsGateway(), view, receiverInfoV3Model); + } +} diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recepientTermsConditions/BeneficiaryAddEditV3TermsActivity.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recepientTermsConditions/BeneficiaryAddEditV3TermsActivity.java new file mode 100644 index 00000000..e6176229 --- /dev/null +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recepientTermsConditions/BeneficiaryAddEditV3TermsActivity.java @@ -0,0 +1,107 @@ +package com.swifttech.remit.jmecustomer.features.recipientmanagement.view.recepientTermsConditions; + +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.webkit.WebView; + +import androidx.lifecycle.ViewModelProvider; + +import com.swifttech.remit.jmecustomer.R; +import com.swifttech.remit.jmecustomer.common.customwidgets.common.GenericEditTextPromptDialog; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.model.recipientlistingV3.ReceiverInfoV3Model; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.presenter.recepientTermsConditions.RecipientTermsViewModel; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.view.RecipientTermsViewModelFactory; +import com.swifttech.remit.jmecustomer.features.sendmoney.model.SendMoneyRequiredDataV3; +import com.swifttech.remit.jmecustomer.features.sendmoney.view.SendMoneyRequestSummaryActivity; +import com.swifttech.remit.jmecustomer.features.sendmoney.view.SendMoneyV2Activity; +import com.swifttech.remit.jmecustomer.features.webbrowser.WebBrowserV2Activity; +import com.swifttech.remit.jmecustomer.features.webbrowser.model.WebRequestModel; + +import static com.swifttech.remit.jmecustomer.features.recipientmanagement.view.recipientaddeditV3.RecipientAddEditV3Activity.RECIPIENT_INFO_BUNDLE_KEY_v3; +import static com.swifttech.remit.jmecustomer.utils.Constants.JME_BENEFICIARY_TERMS; + +public class BeneficiaryAddEditV3TermsActivity extends WebBrowserV2Activity implements GenericEditTextPromptDialog.GenericEditTextPromptListener, RecipientTermsContractInterface { + public static final int RECIPIENT_ACTION_TERMS_REQUEST_CODE_v3 = 21346; + public static String RECIPIENT_TERMS_BUNDLE_KEY_v3 = "recipientInfoKeyV3"; + private static String TAG = BeneficiaryAddEditV3TermsActivity.class.getSimpleName(); + private String currentLoadedUrl = ""; + private ReceiverInfoV3Model selectedBeneficiary; + private RecipientTermsViewModel viewModel; + + + + @Override + protected void doTask(WebRequestModel webRequestModel, WebView webView) { + if (webRequestModel != null && !currentLoadedUrl.equalsIgnoreCase(webRequestModel.getUrl())) { + this.currentLoadedUrl = webRequestModel.getUrl(); + updateTitleInBrowser(webRequestModel.getWebTitle() != null && webRequestModel.getWebTitle().length() > 0 ? webRequestModel.getWebTitle() : ""); + webView.loadUrl(webRequestModel.getUrl()); + Log.d(TAG, currentLoadedUrl); + triggerWebViewEvent(webView); + } + } + + private void triggerWebViewEvent(WebView webView) { + + } + + @Override + protected void proceedButtonClicked() { + viewModel.requestForOtp(); + } + + @Override + protected void onStart() { + super.onStart(); + ivBack.setOnClickListener(this); + + } + + @Override + protected void onStop() { + super.onStop(); + ivBack.setOnClickListener(null); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + selectedBeneficiary = getIntent().getParcelableExtra(RECIPIENT_TERMS_BUNDLE_KEY_v3); + RecipientTermsViewModelFactory recipientTermsViewModelFactory = new RecipientTermsViewModelFactory((RecipientTermsContractInterface) this, selectedBeneficiary); + viewModel = new ViewModelProvider(this, recipientTermsViewModelFactory).get(RecipientTermsViewModel.class); + showAcceptOption(true); + WebRequestModel webRequestModel = new WebRequestModel(getResources().getString(R.string.terms_and_condition_title_text), JME_BENEFICIARY_TERMS, null); + setWebRequestData(webRequestModel); + loadWebView(); + } + + @Override + public void onEmailCodeNegativeButtonPressed() { + + } + + @Override + public void onEmailCodePositiveBtnPressed(String emailCode) { + viewModel.verifyEmailCode(emailCode); + } + + @Override + public void showEmailCodePromptDialog() { + GenericEditTextPromptDialog genericPromptDialog = new GenericEditTextPromptDialog(); + genericPromptDialog.setTitleMessage(getString(R.string.enterCodeFromEmail_text)); + genericPromptDialog.setCancellable(false); + genericPromptDialog.setListener(this); + if (!genericPromptDialog.isAdded()) + genericPromptDialog.show(getSupportFragmentManager(), "PROMPTEDITTEXT"); + } + + @Override + public void onEmailVerifySuccess() { + Intent intent = new Intent(this, SendMoneyV2Activity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + intent.putExtra(RECIPIENT_INFO_BUNDLE_KEY_v3, new SendMoneyRequiredDataV3(selectedBeneficiary)); + startActivity(intent); + finish(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recepientTermsConditions/RecipientTermsContractInterface.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recepientTermsConditions/RecipientTermsContractInterface.java new file mode 100644 index 00000000..95d676f1 --- /dev/null +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recepientTermsConditions/RecipientTermsContractInterface.java @@ -0,0 +1,9 @@ +package com.swifttech.remit.jmecustomer.features.recipientmanagement.view.recepientTermsConditions; + +import com.swifttech.remit.jmecustomer.base.BaseContractInterface; + +public interface RecipientTermsContractInterface extends BaseContractInterface { + void showEmailCodePromptDialog(); + + void onEmailVerifySuccess(); +} diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3Fragment.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3Fragment.java index 1f6293f9..2ebbe6c4 100644 --- a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3Fragment.java +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3Fragment.java @@ -239,6 +239,7 @@ public class BeneficiaryAddEditV3Fragment extends BaseFragment implements Recipi Intent intent = new Intent(getActivity(), SendMoneyV2Activity.class); intent.putExtra(RECIPIENT_INFO_BUNDLE_KEY_v3, sendMoneyRequiredDataV3); startActivity(intent); + getActivity().finish(); } diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3TermsFragment.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3TermsFragment.java index ecba63ff..7e430db6 100644 --- a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3TermsFragment.java +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3TermsFragment.java @@ -10,7 +10,6 @@ import androidx.lifecycle.ViewModelProvider; import com.swifttech.remit.jmecustomer.R; import com.swifttech.remit.jmecustomer.common.customwidgets.common.GenericEditTextPromptDialog; -import com.swifttech.remit.jmecustomer.features.kyc.newCustomer.view.termsAndCondition.NewKycTermsAndConditionFragment; import com.swifttech.remit.jmecustomer.features.recipientmanagement.model.recipientlistingV3.ReceiverInfoV3Model; import com.swifttech.remit.jmecustomer.features.recipientmanagement.presenter.recipientaddeditV3.RecipientAddEditBaseV3ViewModel; import com.swifttech.remit.jmecustomer.features.recipientmanagement.presenter.recipientaddeditV3.RecipientAddV3ContractInterface; @@ -27,7 +26,7 @@ import static com.swifttech.remit.jmecustomer.utils.Constants.JME_BENEFICIARY_TE public class BeneficiaryAddEditV3TermsFragment extends WebBrowserFragmentV2 implements RecipientAddV3ContractInterface.RecipientTermsAndConditionsContract, GenericEditTextPromptDialog.GenericEditTextPromptListener { private RecipientAddEditBaseV3ViewModel viewModel; private ReceiverInfoV3Model recipientToBeEdited; - private static String TAG = NewKycTermsAndConditionFragment.class.getSimpleName(); + private static String TAG = BeneficiaryAddEditV3TermsFragment.class.getSimpleName(); private String currentLoadedUrl = ""; @Override @@ -35,12 +34,12 @@ public class BeneficiaryAddEditV3TermsFragment extends WebBrowserFragmentV2 impl if (webRequestModel != null && !currentLoadedUrl.equalsIgnoreCase(webRequestModel.getUrl())) { this.currentLoadedUrl = webRequestModel.getUrl(); webView.loadUrl(webRequestModel.getUrl()); - Log.d(this.getClass().getSimpleName(), currentLoadedUrl); - triggerWebviewEvent(webView); + Log.d(TAG, currentLoadedUrl); + triggerWebViewEvent(webView); } } - private void triggerWebviewEvent(WebView webView) { + private void triggerWebViewEvent(WebView webView) { } diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientlistingV3/RecipientListingV3Activity.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientlistingV3/RecipientListingV3Activity.java index 1ec5bf33..0524b802 100644 --- a/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientlistingV3/RecipientListingV3Activity.java +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientlistingV3/RecipientListingV3Activity.java @@ -27,6 +27,7 @@ import com.swifttech.remit.jmecustomer.features.recipientmanagement.gateway.reci import com.swifttech.remit.jmecustomer.features.recipientmanagement.model.recipientlistingV3.ReceiverInfoV3Model; import com.swifttech.remit.jmecustomer.features.recipientmanagement.presenter.recipientlistingV3.RecipientListingV3Presenter; import com.swifttech.remit.jmecustomer.features.recipientmanagement.presenter.recipientlistingV3.RecipientListingV3PresenterInterface; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.view.recepientTermsConditions.BeneficiaryAddEditV3TermsActivity; import com.swifttech.remit.jmecustomer.features.recipientmanagement.view.recipientaddeditV3.RecipientAddEditV3Activity; import com.swifttech.remit.jmecustomer.features.sendmoney.model.SendMoneyRequiredDataV3; import com.swifttech.remit.jmecustomer.features.sendmoney.view.SendMoneyV2Activity; @@ -220,10 +221,9 @@ public class RecipientListingV3Activity extends BaseActivity @Override public void redirectToSendMoney(SendMoneyRequiredDataV3 sendMoneyRequiredDataV3) { - Intent intent = new Intent(RecipientListingV3Activity.this, SendMoneyV2Activity.class); intent.putExtra(RecipientAddEditV3Activity.RECIPIENT_INFO_BUNDLE_KEY_v3, sendMoneyRequiredDataV3); - startActivity(intent); + startActivityForResult(intent, RecipientAddEditV3Activity.RECIPIENT_ACTION_EDIT_REQUEST_CODE_v3); } @@ -234,6 +234,14 @@ public class RecipientListingV3Activity extends BaseActivity startActivityForResult(intent, RecipientAddEditV3Activity.RECIPIENT_ACTION_EDIT_REQUEST_CODE_v3); } + @Override + public void proceedToShowTermsConditions(ReceiverInfoV3Model recipientInfoModel) { + Intent intent = new Intent(getApplicationContext(), BeneficiaryAddEditV3TermsActivity.class); + intent.putExtra(BeneficiaryAddEditV3TermsActivity.RECIPIENT_TERMS_BUNDLE_KEY_v3, recipientInfoModel); + startActivityForResult(intent, RecipientAddEditV3Activity.RECIPIENT_ACTION_EDIT_REQUEST_CODE_v3); + } + + @Override public void promptToEditRecipient(GenericPromptDialog.GenericDialogPromptListener genericDialogPromptListener, String message) { GenericPromptDialog genericPromptDialog = new GenericPromptDialog(); @@ -251,9 +259,8 @@ public class RecipientListingV3Activity extends BaseActivity if (recipientInfoModel.getHasVerifiedOTP()) { this.presenter.saveSelectedRecipientInfomation(recipientInfoModel); } else { - this.presenter.requestForOtp(recipientInfoModel); + proceedToShowTermsConditions(recipientInfoModel); } - } @Override @@ -326,4 +333,6 @@ public class RecipientListingV3Activity extends BaseActivity alert.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(ContextCompat.getColor(this, R.color.black)); alert.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(this, R.color.colorPrimary)); } + + } diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/sendmoney/view/SendMoneyV2Activity.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/sendmoney/view/SendMoneyV2Activity.java index d6e97847..d4ab234d 100644 --- a/app/src/main/java/com/swifttech/remit/jmecustomer/features/sendmoney/view/SendMoneyV2Activity.java +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/sendmoney/view/SendMoneyV2Activity.java @@ -16,10 +16,11 @@ import com.swifttech.remit.jmecustomer.R; import com.swifttech.remit.jmecustomer.base.BaseActivity; import com.swifttech.remit.jmecustomer.base.BaseFragment; import com.swifttech.remit.jmecustomer.common.view.AnswerInputDialog; +import com.swifttech.remit.jmecustomer.features.recipientmanagement.view.recipientlistingV3.RecipientListingV3Activity; import com.swifttech.remit.jmecustomer.features.sendmoney.SendMoneyViewModelFactory; import com.swifttech.remit.jmecustomer.features.sendmoney.model.SendMoneyRequiredDataV3; -import com.swifttech.remit.jmecustomer.features.sendmoney.presenter.SendMoneyV2ViewModel; import com.swifttech.remit.jmecustomer.features.sendmoney.presenter.SendMoneyV2PresenterInterface; +import com.swifttech.remit.jmecustomer.features.sendmoney.presenter.SendMoneyV2ViewModel; import com.swifttech.remit.jmecustomer.features.webbrowser.WebBrowserFragmentV2; import butterknife.BindView; @@ -30,29 +31,21 @@ import static com.swifttech.remit.jmecustomer.features.recipientmanagement.view. public class SendMoneyV2Activity extends BaseActivity implements SendMoneyActionListener, SendMoneyV2PresenterInterface.SendMoneyV2ContractInterface, WebBrowserFragmentV2.WebBrowserFragmentActionListener, View.OnClickListener { private static final int PASSWORD_PROMPT_REQUEST = 43266; - private FragmentManager fragmentManager; - private SendMoneyV2PresenterInterface presenter; - - + public static String RECIPIENT_DATA = "recipientData"; @BindView(R.id.page1TxtView) TextView page1TxtView; - @BindView(R.id.page2TxtView) TextView page2TxtView; - @BindView(R.id.page3TxtView) TextView page3TxtView; - @BindView(R.id.page4TxtView) TextView page4TxtView; - @BindView(R.id.iv_back) View iv_back; - @BindView(R.id.iv_cancel) View iv_cancel; - - public static String RECIPIENT_DATA = "recipientData"; + private FragmentManager fragmentManager; + private SendMoneyV2PresenterInterface presenter; private SendMoneyScreenManager sendMoneyScreenManager; private SendMoneyRequiredDataV3 sendMoneyRequiredData; @@ -71,7 +64,6 @@ public class SendMoneyV2Activity extends BaseActivity implements SendMoneyAction private void performDefaultAction(Bundle savedInstanceState) { - if (savedInstanceState == null) { try { sendMoneyRequiredData = getIntent().getExtras().getParcelable(RECIPIENT_INFO_BUNDLE_KEY_v3); @@ -83,19 +75,19 @@ public class SendMoneyV2Activity extends BaseActivity implements SendMoneyAction sendMoneyRequiredData = savedInstanceState.getParcelable(RECIPIENT_DATA); } - SendMoneyViewModelFactory factory=new SendMoneyViewModelFactory(this,sendMoneyRequiredData); - presenter= ViewModelProviders.of(this, factory).get(SendMoneyV2ViewModel.class); + SendMoneyViewModelFactory factory = new SendMoneyViewModelFactory(this, sendMoneyRequiredData); + presenter = ViewModelProviders.of(this, factory).get(SendMoneyV2ViewModel.class); addScreenToSendMoneyOnly(R.layout.fragment_amount_detail_send_money_v2, false); } - public SendMoneyRequiredDataV3 getSendMoneyRequiredData(){ + public SendMoneyRequiredDataV3 getSendMoneyRequiredData() { return sendMoneyRequiredData; } private void initialize() { - sendMoneyScreenManager=new SendMoneyScreenManager(); + sendMoneyScreenManager = new SendMoneyScreenManager(); } @@ -283,11 +275,8 @@ public class SendMoneyV2Activity extends BaseActivity implements SendMoneyAction public void onClick(View v) { switch (v.getId()) { case R.id.iv_back: - onBackPressed(); - break; - case R.id.iv_cancel: - finish(); + onBackPressed(); break; } @@ -296,11 +285,13 @@ public class SendMoneyV2Activity extends BaseActivity implements SendMoneyAction @Override public void onBackPressed() { hideKeyBoard(); - super.onBackPressed(); + Intent intent = new Intent(this, RecipientListingV3Activity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + finish(); } - @Override public void showReceiptOnTransactionComplete(String transactionId) { Intent startReceiptActivity = new Intent(this, SendMoneyRequestSummaryActivity.class); @@ -313,9 +304,9 @@ public class SendMoneyV2Activity extends BaseActivity implements SendMoneyAction @Override public void updateFinalTransitionToValid(boolean action) { - if (action){ + if (action) { setBlueBg(page4TxtView); - }else{ + } else { setRedBg(page4TxtView); } diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/sendmoney/view/verification/TermsAndConditionV2BrowserActivity.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/sendmoney/view/verification/TermsAndConditionV2BrowserActivity.java index ee8368d0..a075b4f4 100644 --- a/app/src/main/java/com/swifttech/remit/jmecustomer/features/sendmoney/view/verification/TermsAndConditionV2BrowserActivity.java +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/sendmoney/view/verification/TermsAndConditionV2BrowserActivity.java @@ -15,4 +15,9 @@ public class TermsAndConditionV2BrowserActivity extends WebBrowserV2Activity { } } + + @Override + protected void proceedButtonClicked() { + + } } diff --git a/app/src/main/java/com/swifttech/remit/jmecustomer/features/webbrowser/WebBrowserV2Activity.java b/app/src/main/java/com/swifttech/remit/jmecustomer/features/webbrowser/WebBrowserV2Activity.java index 4b6e8d10..23d611d3 100644 --- a/app/src/main/java/com/swifttech/remit/jmecustomer/features/webbrowser/WebBrowserV2Activity.java +++ b/app/src/main/java/com/swifttech/remit/jmecustomer/features/webbrowser/WebBrowserV2Activity.java @@ -13,6 +13,7 @@ import android.net.Uri; import android.net.http.SslError; import android.os.Build; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.webkit.CookieManager; import android.webkit.JsResult; @@ -24,9 +25,14 @@ import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; +import android.widget.LinearLayout; import android.widget.ProgressBar; +import androidx.appcompat.widget.AppCompatCheckBox; +import androidx.core.widget.NestedScrollView; + import com.swifttech.remit.jmecustomer.R; +import com.swifttech.remit.jmecustomer.common.customwidgets.GmeButton; import com.swifttech.remit.jmecustomer.features.webbrowser.model.WebRequestModel; import com.swifttech.remit.jmecustomer.base.BaseActivity; import com.swifttech.remit.jmecustomer.common.customwidgets.CustomAlertDialog; @@ -40,7 +46,7 @@ import butterknife.ButterKnife; public abstract class WebBrowserV2Activity extends BaseActivity implements View.OnClickListener { @BindView(R.id.iv_back) - View iv_back; + protected View ivBack; @BindView(R.id.toolbar_title) GmeTextView toolbarTitle; @@ -50,6 +56,21 @@ public abstract class WebBrowserV2Activity extends BaseActivity implements View @BindView(R.id.progressBar) ProgressBar progressBar; + + @BindView(R.id.nestedScrollView) + NestedScrollView nestedScrollView; + @BindView(R.id.checkBoxAgreeConsent) + AppCompatCheckBox checkBoxAgreeConsent; + @BindView(R.id.btnProceed) + GmeButton btnProceed; + @BindView(R.id.llBottom) + LinearLayout llBottom; + + private String requestUrl; + + private boolean isPageLoadSuccess = false; + private boolean showAcceptOption = false; + private GMEWebViewClient gmeWebViewClient; private RemitChromeClient remitChromeClient; @@ -64,6 +85,10 @@ public abstract class WebBrowserV2Activity extends BaseActivity implements View protected abstract void doTask(WebRequestModel webRequestModel,WebView webView); + protected abstract void proceedButtonClicked(); + + private static final String TAG = WebBrowserV2Activity.class.getSimpleName(); + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -91,25 +116,38 @@ public abstract class WebBrowserV2Activity extends BaseActivity implements View protected void updateTitleInBrowser(String title) { -// toolbarTitle.setText(webRequestModel.getWebTitle()!=null&&webRequestModel.getWebTitle().length()>0?webRequestModel.getWebTitle():""); toolbarTitle.setText(title); } private void init() { //Setup presenter here setupWebView(); + initViews(); } + private void initViews() { + checkBoxAgreeConsent.setOnCheckedChangeListener((buttonView, isChecked) -> btnProceed.setEnabled(isChecked)); + btnProceed.setOnClickListener(this); + } + public void showAcceptOption(boolean showAcceptOption) { + this.showAcceptOption = showAcceptOption; + } + + public void setButtonText(String btnLabel) { + btnProceed.setText(btnLabel); + } + + @Override protected void onStart() { super.onStart(); - iv_back.setOnClickListener(this); + ivBack.setOnClickListener(this); } @Override protected void onStop() { super.onStop(); - iv_back.setOnClickListener(null); + ivBack.setOnClickListener(null); } protected void showProgressBar(boolean action, Runnable callback) { @@ -209,15 +247,59 @@ public abstract class WebBrowserV2Activity extends BaseActivity implements View settings.setSupportMultipleWindows(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); webView.getSettings().setAllowFileAccess(true); + + nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { + @Override + public void onScrollChange(NestedScrollView scrollView, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { + + if (scrollY > oldScrollY) { + Log.i(TAG, "Scroll DOWN"); + } + if (scrollY < oldScrollY) { + Log.i(TAG, "Scroll UP"); + } + + if (scrollY == 0) { + Log.i(TAG, "TOP SCROLL"); + } + View view = scrollView.getChildAt(scrollView.getChildCount() - 1); + int diff = (view.getBottom() - (scrollView.getHeight() + scrollView.getScrollY())); + Log.d(TAG, "onScrollChange: " + diff); + // if diff is zero, then the bottom has been reached + if (diff == 0 && showAcceptOption == true && isPageLoadSuccess == true) { + Log.i(TAG, diff + " is true "); + llBottom.setVisibility(View.VISIBLE); + + } else { + Log.i(TAG, diff + " " + showAcceptOption + " " + isPageLoadSuccess); + } + + } + }); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true); } + StringBuffer sb = new StringBuffer(webView.getSettings().getUserAgentString()).append(STR_USER_AGENT_YESSIGN_ANDROID); webView.getSettings().setUserAgentString(sb.toString()); } + public void setWebRequestData(WebRequestModel webRequestModel) { + this.webRequestModel = webRequestModel; + requestUrl = webRequestModel.getUrl(); + + } + + public void loadWebView() { + if (webRequestModel != null) { + isPageLoadSuccess = false; + doTask(webRequestModel, webView); + } + } + @Override public void onBackPressed() { if (webView.canGoBack()) @@ -232,6 +314,9 @@ public abstract class WebBrowserV2Activity extends BaseActivity implements View case R.id.iv_back: onBackPressed(); break; + case R.id.btnProceed: + proceedButtonClicked(); + break; } } @@ -347,6 +432,7 @@ public abstract class WebBrowserV2Activity extends BaseActivity implements View public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (webView.getProgress() == 100) { + isPageLoadSuccess=true; showProgressBar(false, () -> { if (webView.getVisibility() != View.VISIBLE) webView.setVisibility(View.VISIBLE); @@ -366,7 +452,7 @@ public abstract class WebBrowserV2Activity extends BaseActivity implements View errorMessage = getProperErrorMessage(error.getErrorCode()); else errorMessage = HTTPConstants.HTTP_RESPONSE_UNKNOWN; - toolbarTitle.setText(errorMessage); +// toolbarTitle.setText(errorMessage); showPopUpMessage(errorMessage, CustomAlertDialog.AlertType.FAILED, alert -> exitView()); } @@ -395,8 +481,8 @@ public abstract class WebBrowserV2Activity extends BaseActivity implements View private class RemitChromeClient extends WebChromeClient { @Override public void onReceivedTitle(WebView view, String title) { - if (webView.getVisibility() == View.VISIBLE) - toolbarTitle.setText(title); + if (webView.getVisibility() == View.VISIBLE){} +// toolbarTitle.setText(title); } @Override diff --git a/app/src/main/res/layout/activity_web_browser_v2.xml b/app/src/main/res/layout/activity_web_browser_v2.xml index 216c886e..4707cdd4 100644 --- a/app/src/main/res/layout/activity_web_browser_v2.xml +++ b/app/src/main/res/layout/activity_web_browser_v2.xml @@ -1,75 +1,120 @@ - + app:layout_constraintTop_toTopOf="parent"> + + android:textColor="@color/black" + android:textSize="17sp" /> + android:visibility="invisible" /> - + app:layout_constraintTop_toBottomOf="@+id/include"> + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/beneficiary_add_edit_v3_terms_activity.xml b/app/src/main/res/layout/beneficiary_add_edit_v3_terms_activity.xml new file mode 100644 index 00000000..44aaea33 --- /dev/null +++ b/app/src/main/res/layout/beneficiary_add_edit_v3_terms_activity.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3d45e346..70191ab5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,7 +9,7 @@ -