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"/> + +