diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a352b550..d420bccb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -27,8 +27,36 @@
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:allowBackup,android:supportsRtl">
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
+
+
searchTxnByControlNo(String auth, String userID, String selectedControlNo) {
+ return null;
+ }
+
+ @Override
+ public Observable redeemCashPickupTxn(String auth, String userID, String selectedControlNo, String txnId, String password) {
+ return null;
+ }
}
diff --git a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/model/CashPickupTxnDetailDTO.java b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/model/CashPickupTxnDetailDTO.java
index dd6aa0c5..77cf11a3 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/model/CashPickupTxnDetailDTO.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/model/CashPickupTxnDetailDTO.java
@@ -48,6 +48,7 @@ public class CashPickupTxnDetailDTO {
@Expose
private String payoutAgent;
+
public String getTxnId() {
return txnId;
}
@@ -182,4 +183,21 @@ public class CashPickupTxnDetailDTO {
return "Transaction Status Unknown";
}
+
+ public void seedDummyValues() {
+ this.txnId = "1234";
+ this.sendingCountryCode = "KR";
+ this.sendingCountryName = "KOREA";
+ this.controlNo = "9123987123";
+ this.tranDate = "11/06/2020";
+ this.senderName = "Jhon Doe";
+ this.receiverName = "Jhon Doe Bro";
+ this.receiverAddress = "Jhon Home Address";
+ this.receiverMobile = "010-123-1234";
+ this.status = "UNPAID";
+ this.serviceFee = "12314 MNT";
+ this.exrate = "0.123";
+ this.receivedAmount = "124123123 MNT";
+ this.payoutAgent = "Merchant Trade";
+ }
}
diff --git a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/presenter/CashPickupToWalletPresenter.java b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/presenter/CashPickupToWalletPresenter.java
index c90a0543..7b2ca86c 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/presenter/CashPickupToWalletPresenter.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/presenter/CashPickupToWalletPresenter.java
@@ -57,14 +57,23 @@ public class CashPickupToWalletPresenter extends BaseViewModel implements CashPi
@Override
public void searchByControlNo() {
- useCaseSubs.add(
- gateway.searchTxnByControlNo(gateway.getAuth(), gateway.getUserID(), selectedControlNo)
- .doOnSubscribe(subs -> view.showProgressBar(true, ""))
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .doFinally(() -> view.showProgressBar(false, ""))
- .subscribeWith(new CashPickupTxnSearchObserver())
- );
+// useCaseSubs.add(
+// gateway.searchTxnByControlNo(gateway.getAuth(), gateway.getUserID(), selectedControlNo)
+// .doOnSubscribe(subs -> view.showProgressBar(true, ""))
+// .subscribeOn(Schedulers.io())
+// .observeOn(AndroidSchedulers.mainThread())
+// .doFinally(() -> view.showProgressBar(false, ""))
+// .subscribeWith(new CashPickupTxnSearchObserver())
+// );
+ showDummyResponse();
+ }
+
+ private void showDummyResponse() {
+ CashPickupTxnDetailDTO dummy=new CashPickupTxnDetailDTO();
+ dummy.seedDummyValues();
+ currentCashPickupTxnDetail=dummy;
+ cashPickupTxnDetailDTOMutableLiveData.setValue(dummy);
+ view.showTxnDetailScreen();
}
@Override
@@ -79,14 +88,15 @@ public class CashPickupToWalletPresenter extends BaseViewModel implements CashPi
).setListener(new RemitAuthManager.RemitAuthListener() {
@Override
public void onRemitAuthSuccess(RemitAuthSuccessResult result) {
- useCaseSubs.add(
- gateway.redeemCashPickupTxn(gateway.getAuth(), gateway.getUserID(), selectedControlNo, "", "")
- .doOnSubscribe(subs -> view.showProgressBar(true, ""))
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .doFinally(() -> view.showProgressBar(false, ""))
- .subscribeWith(new CashPickupTxnRedeemObserver())
- );
+// useCaseSubs.add(
+// gateway.redeemCashPickupTxn(gateway.getAuth(), gateway.getUserID(), selectedControlNo, "", "")
+// .doOnSubscribe(subs -> view.showProgressBar(true, ""))
+// .subscribeOn(Schedulers.io())
+// .observeOn(AndroidSchedulers.mainThread())
+// .doFinally(() -> view.showProgressBar(false, ""))
+// .subscribeWith(new CashPickupTxnRedeemObserver())
+// );
+ view.showPopUpMessage("Redeem Success", CustomAlertDialog.AlertType.SUCCESS, alertType -> view.exitView());
}
@Override
diff --git a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/CashPickupToWalletActivity.java b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/CashPickupToWalletActivity.java
index 26c622a4..eec7da8b 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/CashPickupToWalletActivity.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/CashPickupToWalletActivity.java
@@ -28,7 +28,7 @@ import butterknife.OnClick;
public class CashPickupToWalletActivity extends BaseActivity implements CashPickupToWalletPresenterInterface.CashPickupToWalletContract {
- @BindView(R.id.otpVerificationViewPager)
+ @BindView(R.id.cashPickupViewPager)
ViewPager viewPager;
diff --git a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/CashPickupTxnDetailFragment.java b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/CashPickupTxnDetailFragment.java
index 292242d2..77d19b49 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/CashPickupTxnDetailFragment.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/CashPickupTxnDetailFragment.java
@@ -5,21 +5,18 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
-import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModelProvider;
-import com.jakewharton.rxbinding3.widget.RxTextView;
import com.swifttech.remit.android.R;
import com.swifttech.remit.android.base.BaseFragment;
import com.swifttech.remit.android.common.customwidgets.exchangecountrylistingdialog.CountryFlagMapper;
import com.swifttech.remit.android.features.cashpickuptowallet.model.CashPickupTxnDetailDTO;
import com.swifttech.remit.android.features.cashpickuptowallet.presenter.CashPickupToWalletPresenter;
import com.swifttech.remit.android.features.cashpickuptowallet.presenter.CashPickupToWalletPresenterInterface;
-import com.swifttech.remit.android.features.inboundreceipt.view.ProgressPathView;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -94,9 +91,16 @@ public class CashPickupTxnDetailFragment extends BaseFragment {
viewModel.subscribeToCashPickupTxnDetailEvent().observe(getViewLifecycleOwner(), this::onCashPickupTxnDetailReceived);
}
+
+
+ private void init() {
+ viewModel = new ViewModelProvider(requireActivity()).get(CashPickupToWalletPresenter.class);
+ }
+
+
private void onCashPickupTxnDetailReceived(CashPickupTxnDetailDTO receiptViewModel) {
- tv_gme_control_no.setText(receiptViewModel.getControlNo());
+ tv_gme_control_no.setText("Control No: "+receiptViewModel.getControlNo());
transaction_date.setText(receiptViewModel.getTranDate());
tv_receiver.setText(receiptViewModel.getReceiverName());
tv_address.setText(receiptViewModel.getReceiverAddress());
@@ -107,23 +111,15 @@ public class CashPickupTxnDetailFragment extends BaseFragment {
exrate_fee.setText(receiptViewModel.getExrate());
transfer_label.setText(receiptViewModel.getTransferStatusLabel());
senderFlagImageview.setImageResource(CountryFlagMapper.getFlagFromCountryCode(receiptViewModel.getSendingCountryCode()));
- btn_submit.setEnabled(receiptViewModel.isTxnValidForRedeem());
if (receiptViewModel.isTxnValidForRedeem())
btn_submit.setVisibility(View.VISIBLE);
else
btn_submit.setVisibility(View.GONE);
}
- private void init() {
- viewModel = new ViewModelProvider(requireActivity()).get(CashPickupToWalletPresenter.class);
-
-
- }
-
-
@OnClick(R.id.btn_submit)
- public void searchByControlNo() {
+ public void redeemCashPickup() {
- viewModel.searchByControlNo();
+ viewModel.redeemCashPickup();
}
}
diff --git a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/SearchCashPickupTxnFragment.java b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/SearchCashPickupTxnFragment.java
index 7bd545d5..dc7637b7 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/SearchCashPickupTxnFragment.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/cashpickuptowallet/view/SearchCashPickupTxnFragment.java
@@ -60,9 +60,7 @@ public class SearchCashPickupTxnFragment extends BaseFragment {
@OnClick(R.id.search_btn)
public void searchByControlNo()
{
- if(btnSearch.isEnabled())
- {
+
viewModel.searchByControlNo();
- }
}
}
diff --git a/app/src/main/java/com/swifttech/remit/android/features/withdraw/gateway/WithdrawGateway.java b/app/src/main/java/com/swifttech/remit/android/features/withdraw/gateway/WithdrawGateway.java
index 4b6162a2..5feebe4c 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/withdraw/gateway/WithdrawGateway.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/withdraw/gateway/WithdrawGateway.java
@@ -4,5 +4,17 @@ import com.swifttech.remit.android.base.PrivilegedGateway;
import com.swifttech.remit.android.features.cashpickuptowallet.presenter.CashPickupToWalletGatewayInterface;
import com.swifttech.remit.android.features.withdraw.presenter.WithdrawGatewayInterface;
+import io.reactivex.Observable;
+import okhttp3.ResponseBody;
+
public class WithdrawGateway extends PrivilegedGateway implements WithdrawGatewayInterface {
+ @Override
+ public Observable checkWithdrawStatus(String auth, String userID) {
+ return null;
+ }
+
+ @Override
+ public Observable performWithdraw(String auth, String userID, String amount, String password) {
+ return null;
+ }
}
diff --git a/app/src/main/java/com/swifttech/remit/android/features/withdraw/model/WithdrawStatusResponseDTO.java b/app/src/main/java/com/swifttech/remit/android/features/withdraw/model/WithdrawStatusResponseDTO.java
new file mode 100644
index 00000000..38278b06
--- /dev/null
+++ b/app/src/main/java/com/swifttech/remit/android/features/withdraw/model/WithdrawStatusResponseDTO.java
@@ -0,0 +1,76 @@
+package com.swifttech.remit.android.features.withdraw.model;
+
+import android.util.Log;
+
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+import com.swifttech.remit.android.utils.Utils;
+
+public class WithdrawStatusResponseDTO {
+
+ @SerializedName("minAmount")
+ @Expose
+ private String minAmount;
+ @SerializedName("maxAmount")
+ @Expose
+ private String maxAmount;
+ @SerializedName("serviceCharge")
+ @Expose
+ private String serviceCharge;
+ @SerializedName("noticeMessage")
+ @Expose
+ private String noticeMessage;
+
+ public String getMinAmount() {
+ return minAmount;
+ }
+
+ public void setMinAmount(String minAmount) {
+ this.minAmount = minAmount;
+ }
+
+ public String getMaxAmount() {
+ return maxAmount;
+ }
+
+ public void setMaxAmount(String maxAmount) {
+ this.maxAmount = maxAmount;
+ }
+
+ public String getServiceCharge() {
+ return serviceCharge;
+ }
+
+ public void setServiceCharge(String serviceCharge) {
+ this.serviceCharge = serviceCharge;
+ }
+
+ public String getNoticeMessage() {
+ return noticeMessage;
+ }
+
+ public void setNoticeMessage(String noticeMessage) {
+ this.noticeMessage = noticeMessage;
+ }
+
+
+
+ public boolean isWithdrawAmountGreaterThanMinThreshold(double amount) {
+ Double minThreshold = Utils.formatCurrencyForComparision(this.minAmount);
+ Log.d("Withdraw","Entered amount: "+amount+" min threshold amount: "+minThreshold+" result: "+(minThreshold >= 0 && (amount > minThreshold)));
+ return minThreshold >= 0 && (amount > minThreshold);
+ }
+
+ public boolean isWithdrawAmountLessThanMaxThreshold(double amount) {
+ Double maxThreshold = Utils.formatCurrencyForComparision(this.maxAmount);
+ Log.d("Withdraw","Entered amount: "+amount+" max threshold amount: "+maxThreshold+" result: "+(maxThreshold > 0 && (amount >= maxThreshold)));
+
+ return maxThreshold > 0 && (amount <= maxThreshold);
+ }
+
+ public void seedDummyValues() {
+ this.minAmount="1,000";
+ this.maxAmount="10,000";
+ this.serviceCharge="1,000";
+ }
+}
diff --git a/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawGatewayInterface.java b/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawGatewayInterface.java
index 1bc5cefc..03b7f669 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawGatewayInterface.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawGatewayInterface.java
@@ -1,4 +1,12 @@
package com.swifttech.remit.android.features.withdraw.presenter;
-public interface WithdrawGatewayInterface {
+import com.swifttech.remit.android.base.PrivilegedGatewayInterface;
+
+import io.reactivex.Observable;
+import okhttp3.ResponseBody;
+
+public interface WithdrawGatewayInterface extends PrivilegedGatewayInterface {
+
+ Observable checkWithdrawStatus(String auth,String userID);
+ Observable performWithdraw(String auth,String userID,String amount,String password);
}
diff --git a/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawPresenter.java b/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawPresenter.java
index ec7d685e..1e58d431 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawPresenter.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawPresenter.java
@@ -1,15 +1,42 @@
package com.swifttech.remit.android.features.withdraw.presenter;
+import androidx.appcompat.app.AppCompatActivity;
+
import com.swifttech.remit.android.base.BaseViewModel;
+import com.swifttech.remit.android.common.customwidgets.CustomAlertDialog;
+import com.swifttech.remit.android.common.model.FormInputStateDTO;
+import com.swifttech.remit.android.features.security.RemitAuthManager;
+import com.swifttech.remit.android.features.security.model.RemitAuthFailedResult;
+import com.swifttech.remit.android.features.security.model.RemitAuthSuccessResult;
+import com.swifttech.remit.android.features.security.model.RemitTxnParam;
+import com.swifttech.remit.android.features.withdraw.model.WithdrawStatusResponseDTO;
+import com.swifttech.remit.android.utils.Constants;
+import com.swifttech.remit.android.utils.Utils;
+import com.swifttech.remit.android.utils.https.GenericApiObserverResponseV2;
+import com.swifttech.remit.android.utils.https.GenericResponseDataModel;
+import com.swifttech.remit.android.utils.https.MessageResponseDataModel;
+
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
-public class WithdrawPresenter extends BaseViewModel {
+public class WithdrawPresenter extends BaseViewModel implements WithdrawPresenterInterface {
private final WithdrawPresenterInterface.WithdrawContract view;
private final WithdrawGatewayInterface gateway;
+ private WithdrawViewLiveData withdrawViewLiveData;
+ private final CompositeDisposable useCaseSubs;
+ private final CompositeDisposable viewSubs;
+ private WithdrawStatusResponseDTO withdrawStatusDTO;
+ private String selectedWithdrawAmount;
public WithdrawPresenter(WithdrawPresenterInterface.WithdrawContract view, WithdrawGatewayInterface withdrawGateway) {
- this.view=view;
- this.gateway=withdrawGateway;
+ this.view = view;
+ this.gateway = withdrawGateway;
+ this.viewSubs = new CompositeDisposable();
+ this.useCaseSubs = new CompositeDisposable();
}
@Override
@@ -21,4 +48,175 @@ public class WithdrawPresenter extends BaseViewModel {
public void onViewNotReady() {
}
+
+ @Override
+ public WithdrawViewLiveData subscribeToWithdrawAmountEventLiveData(Observable specifiedAmount) {
+ viewSubs.add(
+ specifiedAmount.map(this::validateAmount)
+ .subscribeWith(new DisposableObserver() {
+ @Override
+ public void onNext(Boolean aBoolean) {
+ withdrawViewLiveData.setAllFieldValidLiveData(aBoolean);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ })
+ );
+ if(withdrawViewLiveData==null)
+ {
+ this.withdrawViewLiveData = new WithdrawViewLiveData();
+// useCaseSubs.add(
+// gateway.checkWithdrawStatus(gateway.getAuth(), gateway.getUserID())
+// .doOnSubscribe(subs -> view.showProgressBar(true, ""))
+// .subscribeOn(Schedulers.io())
+// .observeOn(AndroidSchedulers.mainThread())
+// .doFinally(() -> view.showProgressBar(false, ""))
+// .subscribeWith(new WithdrawStatusObserver())
+// );
+ WithdrawStatusResponseDTO withdrawStatusResponseDTO=new WithdrawStatusResponseDTO();
+ withdrawStatusResponseDTO.seedDummyValues();
+
+ onReceivingWithdrawStatus(withdrawStatusResponseDTO);
+ }
+ return withdrawViewLiveData;
+ }
+
+ @Override
+ public void proceedToWithdraw() {
+ RemitAuthManager.getGmeAuthManager((AppCompatActivity) view.getContext())
+ .fromPaymentSource(
+ new RemitTxnParam(
+ "wallet",
+ "",
+ ""
+ ).enableFallbackAuth()
+ ).setListener(new RemitAuthManager.RemitAuthListener() {
+ @Override
+ public void onRemitAuthSuccess(RemitAuthSuccessResult result) {
+// useCaseSubs.add(
+// gateway.performWithdraw(gateway.getAuth(), gateway.getUserID(), selectedWithdrawAmount, result.getResult())
+// .doOnSubscribe(subs -> view.showProgressBar(true, ""))
+// .subscribeOn(Schedulers.io())
+// .observeOn(AndroidSchedulers.mainThread())
+// .doFinally(() -> view.showProgressBar(false, ""))
+// .subscribeWith(new WithdrawTxnbserver())
+// );
+ view.showPopUpMessage("Withdraw Success", CustomAlertDialog.AlertType.SUCCESS, alertType -> view.exitView());
+ }
+
+ @Override
+ public void onRemitAuthFailed(RemitAuthFailedResult failedResult) {
+ view.showToastMessage(failedResult.getFailedReason());
+ }
+
+ @Override
+ public void onRemitAuthCancelled() {
+
+ }
+ }).prompt();
+ }
+
+ private Boolean validateAmount(CharSequence amount) {
+
+ double withDrawAmount = 0;
+ try {
+ withDrawAmount = Utils.formatCurrencyForComparision(amount.toString());
+ } catch (NumberFormatException ex) {
+ withdrawViewLiveData.setAmountLiveData(new FormInputStateDTO<>(false, "Invalid amount", null));
+ return false;
+ }
+
+
+ if (withdrawStatusDTO.isWithdrawAmountGreaterThanMinThreshold(withDrawAmount)&&withdrawStatusDTO.isWithdrawAmountLessThanMaxThreshold(withDrawAmount)) {
+ withdrawViewLiveData.setAmountLiveData(new FormInputStateDTO<>(true, "", null));
+ this.selectedWithdrawAmount=amount.toString();
+ return true;
+ } else {
+ withdrawViewLiveData.setAmountLiveData(new FormInputStateDTO<>(false, "Amount must be in between "+withdrawStatusDTO.getMinAmount()+ " and "+withdrawStatusDTO.getMaxAmount(), null));
+
+ this.selectedWithdrawAmount=null;
+ return false;
+ }
+
+
+ }
+
+ private void onReceivingWithdrawStatus(WithdrawStatusResponseDTO data) {
+ this.withdrawStatusDTO = data;
+ String serviceChargeMessage = "Service Charge Per Transaction:\n" + data.getServiceCharge() + " " + gateway.getUserPreferredCurrency();
+ withdrawViewLiveData.setServiceCharge(serviceChargeMessage);
+ }
+
+
+ public class WithdrawStatusObserver extends GenericApiObserverResponseV2 {
+
+ @Override
+ protected void onSuccess(GenericResponseDataModel t) {
+ if (Constants.SUCCESS_CODE_V2.equalsIgnoreCase(t.getErrorCode()) && t.getData() != null) {
+ onReceivingWithdrawStatus(t.getData());
+ } else {
+ view.showPopUpMessage(t.getMsg(), CustomAlertDialog.AlertType.FAILED, alertType -> view.exitView());
+ }
+ }
+
+ @Override
+ public void onFailed(String message) {
+ view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, alertType -> view.exitView());
+
+ }
+
+ @Override
+ protected void onConnectionNotEstablished(String message) {
+ view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, alertType -> view.exitView());
+
+ }
+
+ @Override
+ protected void unauthorizedAccess(String message) {
+ gateway.clearAllUserData();
+ view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout());
+
+ }
+ }
+
+ public class WithdrawTxnbserver extends GenericApiObserverResponseV2 {
+
+ @Override
+ protected void onSuccess(GenericResponseDataModel t) {
+ if (Constants.SUCCESS_CODE_V2.equalsIgnoreCase(t.getErrorCode()) ) {
+ view.showPopUpMessage(t.getMsg(), CustomAlertDialog.AlertType.SUCCESS, alertType -> view.exitView());
+ } else {
+ view.showPopUpMessage(t.getMsg(), CustomAlertDialog.AlertType.FAILED, alertType -> view.exitView());
+ }
+ }
+
+ @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/android/features/withdraw/presenter/WithdrawPresenterInterface.java b/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawPresenterInterface.java
index 4cca42dd..1e8f7fca 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawPresenterInterface.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawPresenterInterface.java
@@ -1,8 +1,22 @@
package com.swifttech.remit.android.features.withdraw.presenter;
-public interface WithdrawPresenterInterface {
+import androidx.lifecycle.LiveData;
- interface WithdrawContract
+import com.swifttech.remit.android.base.BaseContractInterface;
+import com.swifttech.remit.android.base.BasePresenterInterface;
+import com.swifttech.remit.android.common.model.FormInputStateDTO;
+
+import io.reactivex.Observable;
+
+public interface WithdrawPresenterInterface extends BasePresenterInterface {
+
+
+ WithdrawViewLiveData subscribeToWithdrawAmountEventLiveData(Observable specifiedAmount);
+
+ void proceedToWithdraw();
+
+
+ interface WithdrawContract extends BaseContractInterface
{
}
diff --git a/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawViewLiveData.java b/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawViewLiveData.java
new file mode 100644
index 00000000..12210a00
--- /dev/null
+++ b/app/src/main/java/com/swifttech/remit/android/features/withdraw/presenter/WithdrawViewLiveData.java
@@ -0,0 +1,43 @@
+package com.swifttech.remit.android.features.withdraw.presenter;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+
+import com.swifttech.remit.android.common.model.FormInputStateDTO;
+
+public class WithdrawViewLiveData {
+
+ MutableLiveData> amountLiveData;
+ MutableLiveData serviceCharge;
+ MutableLiveData allFieldValidLiveData;
+
+ public WithdrawViewLiveData() {
+ amountLiveData = new MutableLiveData<>();
+ serviceCharge = new MutableLiveData<>();
+ allFieldValidLiveData = new MutableLiveData<>();
+ }
+
+ public LiveData> getAmountLiveData() {
+ return amountLiveData;
+ }
+
+ public void setAmountLiveData(FormInputStateDTO amountLiveData) {
+ this.amountLiveData.setValue(amountLiveData);
+ }
+
+ public LiveData getServiceCharge() {
+ return serviceCharge;
+ }
+
+ public void setServiceCharge(String serviceCharge) {
+ this.serviceCharge.setValue(serviceCharge);
+ }
+
+ public LiveData getAllFieldValidLiveData() {
+ return allFieldValidLiveData;
+ }
+
+ public void setAllFieldValidLiveData(Boolean allFieldValidLiveData) {
+ this.allFieldValidLiveData.setValue(allFieldValidLiveData);
+ }
+}
diff --git a/app/src/main/java/com/swifttech/remit/android/features/withdraw/view/WithdrawActivity.java b/app/src/main/java/com/swifttech/remit/android/features/withdraw/view/WithdrawActivity.java
index 0da57552..44cd51d9 100644
--- a/app/src/main/java/com/swifttech/remit/android/features/withdraw/view/WithdrawActivity.java
+++ b/app/src/main/java/com/swifttech/remit/android/features/withdraw/view/WithdrawActivity.java
@@ -5,19 +5,27 @@ import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import android.view.View;
+import android.widget.Button;
import android.widget.TextView;
+import com.google.android.material.textfield.TextInputEditText;
+import com.google.android.material.textfield.TextInputLayout;
+import com.jakewharton.rxbinding3.widget.RxTextView;
import com.swifttech.remit.android.R;
+import com.swifttech.remit.android.base.BaseActivity;
+import com.swifttech.remit.android.common.model.FormInputStateDTO;
import com.swifttech.remit.android.features.cashpickuptowallet.CashPickupViewModelFactory;
import com.swifttech.remit.android.features.cashpickuptowallet.presenter.CashPickupToWalletPresenter;
import com.swifttech.remit.android.features.withdraw.WithdrawViewModelFactory;
import com.swifttech.remit.android.features.withdraw.presenter.WithdrawPresenter;
import com.swifttech.remit.android.features.withdraw.presenter.WithdrawPresenterInterface;
+import com.swifttech.remit.android.features.withdraw.presenter.WithdrawViewLiveData;
import butterknife.BindView;
import butterknife.ButterKnife;
+import butterknife.OnClick;
-public class WithdrawActivity extends AppCompatActivity implements WithdrawPresenterInterface.WithdrawContract {
+public class WithdrawActivity extends BaseActivity implements WithdrawPresenterInterface.WithdrawContract {
@BindView(R.id.iv_back)
View iv_back;
@@ -25,6 +33,19 @@ public class WithdrawActivity extends AppCompatActivity implements WithdrawPrese
@BindView(R.id.toolbar_title)
TextView toolbarTitle;
+ @BindView(R.id.amount_TxtInputLayout)
+ TextInputLayout amount_TxtInputLayout;
+
+ @BindView(R.id.amount_edTxt)
+ TextInputEditText amount_edTxt;
+
+ @BindView(R.id.service_charge_txt)
+ TextView service_charge_txt;
+
+ @BindView(R.id.proceedBtn)
+ Button proceedBtn;
+
+
private WithdrawPresenter viewModel;
@Override
@@ -33,6 +54,7 @@ public class WithdrawActivity extends AppCompatActivity implements WithdrawPrese
setContentView(R.layout.activity_withdraw);
ButterKnife.bind(this);
init();
+ performDefaultAction(savedInstanceState);
}
private void init() {
@@ -41,4 +63,29 @@ public class WithdrawActivity extends AppCompatActivity implements WithdrawPrese
}
+ private void performDefaultAction(Bundle savedInstanceState) {
+ WithdrawViewLiveData liveData = viewModel.subscribeToWithdrawAmountEventLiveData(RxTextView.textChanges(amount_edTxt).skipInitialValue());
+
+ liveData.getAmountLiveData().observe(this, this::onAmountDataReceived);
+ liveData.getServiceCharge().observe(this, this::onServiceChargeReceived);
+ liveData.getAllFieldValidLiveData().observe(this, proceedBtn::setEnabled);
+ }
+
+ private void onServiceChargeReceived(String serviceCharge) {
+ service_charge_txt.setText(serviceCharge);
+ }
+
+ private void onAmountDataReceived(FormInputStateDTO amountData) {
+ if (amountData.isValid()) {
+ amount_TxtInputLayout.setError(null);
+ } else {
+ amount_TxtInputLayout.setError(amountData.getErrorMessage());
+ }
+ }
+
+ @OnClick(R.id.proceedBtn)
+ public void proceedToWithdraw() {
+ viewModel.proceedToWithdraw();
+ }
+
}
diff --git a/app/src/main/res/layout/activity_cash_pickup_to_wallet.xml b/app/src/main/res/layout/activity_cash_pickup_to_wallet.xml
index bee0c74f..09ce58cf 100644
--- a/app/src/main/res/layout/activity_cash_pickup_to_wallet.xml
+++ b/app/src/main/res/layout/activity_cash_pickup_to_wallet.xml
@@ -1,9 +1,27 @@
-
+ android:background="@color/background_gray"
+ android:orientation="vertical"
+ android:fitsSystemWindows="true">
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_withdraw.xml b/app/src/main/res/layout/activity_withdraw.xml
index 260b6666..ffadb45d 100644
--- a/app/src/main/res/layout/activity_withdraw.xml
+++ b/app/src/main/res/layout/activity_withdraw.xml
@@ -1,9 +1,69 @@
-
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:background="@color/m_layout_bg_color"
+ android:orientation="vertical"
+ tools:context=".features.sendmoney.view.SendMoneyV2Activity">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_cash_pickup_txn_detail.xml b/app/src/main/res/layout/fragment_cash_pickup_txn_detail.xml
index 396567e5..d9c9da18 100644
--- a/app/src/main/res/layout/fragment_cash_pickup_txn_detail.xml
+++ b/app/src/main/res/layout/fragment_cash_pickup_txn_detail.xml
@@ -51,7 +51,7 @@
app:layout_constraintEnd_toStartOf="@+id/view13"
app:layout_constraintStart_toEndOf="@+id/view12"
app:layout_constraintTop_toBottomOf="@+id/transfer_label"
- app:layout_constraintBottom_toBottomOf="parent"/>
+ app:layout_constraintBottom_toTopOf="@+id/tv_control_no"/>
+
+