Browse Source

Payment source listing added in local topup and transfer

master
Preyea Regmi 5 years ago
parent
commit
60ea3a596b
  1. 31
      app/src/main/java/com/gmeremit/online/gmeremittance_native/accountmanage/adapter/paymentsources/PaymentSourceListAdapter.java
  2. 15
      app/src/main/java/com/gmeremit/online/gmeremittance_native/accountmanage/gateway/paymentsources/PaymentSourceRvViewHolder.java
  3. 5
      app/src/main/java/com/gmeremit/online/gmeremittance_native/accountmanage/model/paymentsources/PaymentSourceDTO.java
  4. 7
      app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java
  5. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGatewayInterface.java
  6. 240
      app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterImpl.java
  7. 5
      app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterInterface.java
  8. 96
      app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/view/DomesticRemitActivity.java
  9. 10
      app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java
  10. 6
      app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java
  11. 30
      app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenter.java
  12. 2
      app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenterInterface.java
  13. 90
      app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/view/topup/LocalTopUpActivity.java
  14. 2
      app/src/main/res/drawable/ic_rectangle_white_corners.xml
  15. 126
      app/src/main/res/layout/activity_domestic_remit.xml
  16. 148
      app/src/main/res/layout/activity_local_top_up.xml
  17. 25
      app/src/main/res/layout/payment_source_select_item.xml

31
app/src/main/java/com/gmeremit/online/gmeremittance_native/accountmanage/adapter/paymentsources/PaymentSourceListAdapter.java

@ -12,15 +12,15 @@ import com.gmeremit.online.gmeremittance_native.accountmanage.model.paymentsourc
import com.gmeremit.online.gmeremittance_native.customwidgets.SelectedRedBorderWithTickDecoration;
import java.util.ArrayList;
import java.util.List;
public class PaymentSourceListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements SelectedRedBorderWithTickDecoration.RedItemWithTickSelectionListener {
public class PaymentSourceListAdapter extends RecyclerView.Adapter<PaymentSourceRvViewHolder> implements SelectedRedBorderWithTickDecoration.RedItemWithTickSelectionListener {
private final PaymentSourceSelectionListener listener;
private ArrayList<PaymentSourceDTO> data;
private int selectedItemIndex;
private static final int SELECT_NO_COUPON_VIEW = 12;
private static final int COUPON_VIEW = 13;
public PaymentSourceListAdapter(PaymentSourceSelectionListener listener) {
this.listener = listener;
@ -30,16 +30,24 @@ public class PaymentSourceListAdapter extends RecyclerView.Adapter<RecyclerView.
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
public PaymentSourceRvViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new PaymentSourceRvViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.payment_source_select_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
public void onBindViewHolder(@NonNull PaymentSourceRvViewHolder holder, int position) {
holder.itemView.setOnClickListener(view -> {
this.selectedItemIndex = holder.getAdapterPosition();
if (listener != null)
listener.onPaymentSourceSelected(data.get(this.selectedItemIndex));
notifyItemChanged(this.selectedItemIndex);
});
holder.tv_sub_title.setText(data.get(position).getBankName());
holder.tv_title.setText(data.get(position).getAccountNumMasked());
}
public void updateDataList(ArrayList<PaymentSourceDTO> data) {
public void updateDataList(List<PaymentSourceDTO> data) {
if (data != null && data.size() > 0) {
this.data.clear();
this.data.addAll(data);
@ -47,15 +55,6 @@ public class PaymentSourceListAdapter extends RecyclerView.Adapter<RecyclerView.
}
}
@Override
public int getItemViewType(int position) {
if (position == 0 && data.get(position) == null) {
return SELECT_NO_COUPON_VIEW;
} else
return COUPON_VIEW;
}
@Override
public int getItemCount() {
return data.size();

15
app/src/main/java/com/gmeremit/online/gmeremittance_native/accountmanage/gateway/paymentsources/PaymentSourceRvViewHolder.java

@ -1,12 +1,27 @@
package com.gmeremit.online.gmeremittance_native.accountmanage.gateway.paymentsources;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.gmeremit.online.gmeremittance_native.R;
import butterknife.BindView;
import butterknife.ButterKnife;
public class PaymentSourceRvViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv_sub_title)
public TextView tv_sub_title;
@BindView(R.id.tv_title)
public TextView tv_title;
public PaymentSourceRvViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this,itemView);
}
}

5
app/src/main/java/com/gmeremit/online/gmeremittance_native/accountmanage/model/paymentsources/PaymentSourceDTO.java

@ -259,6 +259,11 @@ public class PaymentSourceDTO {
this.fullAccountName = fullAccountName;
}
public boolean isAccountAutoDebitType()
{
return "autodebit".equalsIgnoreCase(type);
}
@Override
public String toString() {
if("wallet".equalsIgnoreCase(type))

7
app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java

@ -69,6 +69,13 @@ public abstract class PrivilegedGateway extends BaseGateway implements Privilege
return "KRW";
}
@Override
public String getWalletNumber() {
return GmeApplication.getStorage().getString(PrefKeys.USER_WALLET_NUMBER, "");
}
@Override
public String getUserFirstName() {
return GmeApplication.getStorage().getString(PrefKeys.USER_FIRST_NAME, "");

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGatewayInterface.java

@ -55,6 +55,8 @@ public interface PrivilegedGatewayInterface extends BaseGatewayInterface {
String getUserCurrentBalance();
String getWalletNumber();
boolean isUserKYCVerified();

240
app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterImpl.java

@ -5,6 +5,8 @@ import android.text.Spanned;
import android.util.Log;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.accountmanage.model.paymentsources.PaymentSourceDTO;
import com.gmeremit.online.gmeremittance_native.accountmanage.presenter.paymentsources.PaymentSourceSelectionInteractorInterface;
import com.gmeremit.online.gmeremittance_native.base.BasePresenter;
import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog;
import com.gmeremit.online.gmeremittance_native.customwidgets.banklistingdialog.BankIconMapper;
@ -17,22 +19,31 @@ import com.gmeremit.online.gmeremittance_native.domesticremit.send.model.Domesti
import com.gmeremit.online.gmeremittance_native.domesticremit.send.model.DomesticRemitTxnResponseDTO;
import com.gmeremit.online.gmeremittance_native.domesticremit.send.model.KFTCBalanceCheckDTO;
import com.gmeremit.online.gmeremittance_native.domesticremit.send.view.RecipientConfirmDialog;
import com.gmeremit.online.gmeremittance_native.topup.local.model.topup.LocalTopUpResponseDTO;
import com.gmeremit.online.gmeremittance_native.topup.local.presenter.topup.LocalTopUpPresenter;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.PasswordPromptListener;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionBiometricPromptDialog;
import com.gmeremit.online.gmeremittance_native.utils.Constants;
import com.gmeremit.online.gmeremittance_native.utils.Utils;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponseV2;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataModel;
import com.gmeremit.online.gmeremittance_native.utils.https.GenericThrowable;
import com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants;
import com.gmeremit.online.gmeremittance_native.utils.https.HttpClientV2;
import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils;
import com.google.gson.reflect.TypeToken;
import java.io.IOException;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.List;
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;
import retrofit2.HttpException;
public class DomesticRemitPresenterImpl extends BasePresenter implements DomesticRemitPresenterInterface {
@ -44,10 +55,14 @@ public class DomesticRemitPresenterImpl extends BasePresenter implements Domesti
private List<DomesticBankDTO> availableBankList;
private List<DomesticAccountsDTO> availableAccountList;
private List<PaymentSourceDTO> paymentSourceList;
private final PaymentSourceSelectionInteractorInterface.PaymentSourceSelectionGatewayInterface paymentSourceSelectionGateway;
public DomesticRemitPresenterImpl(DomesticRemitContractInterface view, DomesticRemitGatewayInterface gatewayInterface) {
public DomesticRemitPresenterImpl(DomesticRemitContractInterface view, DomesticRemitGatewayInterface gatewayInterface, PaymentSourceSelectionInteractorInterface.PaymentSourceSelectionGatewayInterface paymentSourceSelectionGateway) {
this.view = view;
this.gateway = gatewayInterface;
this.paymentSourceSelectionGateway = paymentSourceSelectionGateway;
domesticRemitDataValidator = new DomesticRemitDataValidator();
countDownRemainingValue = -1;
compositeDisposable = new CompositeDisposable();
@ -56,14 +71,63 @@ public class DomesticRemitPresenterImpl extends BasePresenter implements Domesti
@Override
public void getDomesticRemitRelatedInfo() {
compositeDisposable.add(
this.gateway.getDomesticRelatedData(gateway.getAuth(), gateway.getUserIDNumber())
.doOnSubscribe(disposable -> view.showProgressBar(true, getStringfromStringId(R.string.processing_request_text)))
// compositeDisposable.add(
// this.gateway.getDomesticRelatedData(gateway.getAuth(), gateway.getUserIDNumber())
// .doOnSubscribe(disposable -> view.showProgressBar(true, getStringfromStringId(R.string.processing_request_text)))
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .doFinally(() -> view.showProgressBar(false, ""))
// .subscribeWith(new DomesticRelatedDataObserver())
// );
this.compositeDisposable.add(
Observable.zip(
getDomesticTransferRelatedData(),
getPaymentSourcesList(),
DomesticRelatedData::new)
.subscribeOn(Schedulers.io())
.doOnSubscribe(d -> {
view.hideKeyBoard();
view.showProgressBar(true, getStringfromStringId(R.string.processing_request_text));
})
.observeOn(AndroidSchedulers.mainThread())
.doFinally(() -> view.showProgressBar(false, ""))
.subscribeWith(new DomesticRelatedDataObserver())
.subscribeWith(new DomesticRelatedDataObserverV2())
);
}
private Observable<DomesticRemitRelatedInfoDTO> getDomesticTransferRelatedData() {
Type domesticDataType = new TypeToken<GenericResponseDataModel<DomesticRemitRelatedInfoDTO>>() {
}.getType();
return this.gateway.getDomesticRelatedData(this.gateway.getAuth(), gateway.getUserIDNumber())
.subscribeOn(Schedulers.io())
.flatMap(response -> {
GenericResponseDataModel<DomesticRemitRelatedInfoDTO> data = HttpClientV2.getDeserializer().fromJson(response.string(), domesticDataType);
if (data.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2))
return Observable.just(data.getData());
else if (data.getErrorCode().equalsIgnoreCase("5"))
return Observable.error(new GenericThrowable(getStringfromStringId(R.string.waitinge_recent_request_text)));
else
return Observable.error(new GenericThrowable(data.getMsg()));
});
}
private Observable<List<PaymentSourceDTO>> getPaymentSourcesList() {
Type paymentSourceType = new TypeToken<GenericResponseDataModel<List<PaymentSourceDTO>>>() {
}.getType();
return this.paymentSourceSelectionGateway.getAvailablePaymentSource(this.gateway.getAuth(), gateway.getUserIDNumber())
.subscribeOn(Schedulers.io())
.flatMap(response -> {
GenericResponseDataModel<List<PaymentSourceDTO>> data = HttpClientV2.getDeserializer().fromJson(response.string(), paymentSourceType);
if (data.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2))
return Observable.just(data.getData());
else
return Observable.error(new GenericThrowable(data.getMsg()));
});
}
@ -144,7 +208,7 @@ public class DomesticRemitPresenterImpl extends BasePresenter implements Domesti
}
@Override
public void onSenderAccountSelected(DomesticAccountsDTO selectedAccount) {
public void onSenderAccountSelected(PaymentSourceDTO selectedAccount) {
domesticRemitDataValidator.validateSenderAccount(selectedAccount);
}
@ -226,7 +290,7 @@ public class DomesticRemitPresenterImpl extends BasePresenter implements Domesti
}
class DomesticRemitDataValidator {
private DomesticAccountsDTO selectedSenderAccount;
private PaymentSourceDTO selectedSenderAccount;
private String sendAmount;
private DomesticBankDTO selectedRecipientBank;
private String bankAcNo;
@ -272,7 +336,39 @@ public class DomesticRemitPresenterImpl extends BasePresenter implements Domesti
this.serviceCharge = serviceCharge;
}
public void validateSenderAccount(DomesticAccountsDTO selectedAccount) {
// public void validateSenderAccount(DomesticAccountsDTO selectedAccount) {
// currentBalance = null;
//
// if (selectedAccount == null) {
// view.setErrorOnWidgetSenderAccount("Please select an account");
// view.showSelectedSenderAccount("");
// isValidSenderAccount = false;
// } else {
// this.selectedSenderAccount = selectedAccount;
// view.setErrorOnWidgetSenderAccount(null);
// view.showSelectedSenderAccount(selectedAccount.toString());
// isValidSenderAccount = true;
//
// String serviceChargeOnBasisOnType = "";
// if ("autodebit".equalsIgnoreCase(selectedSenderAccount.getType()))
// serviceChargeOnBasisOnType = serviceCharge;
// else
// serviceChargeOnBasisOnType = serviceChargeWallet;
//
// String messageServiceCharge = getStringfromStringId(R.string.transfer_charge_text) + ": " + Utils.formatCurrencyWithoutTruncatingDecimal(serviceChargeOnBasisOnType) + " " + Constants.KRW_STRING;
// view.updateServiceCharge(messageServiceCharge);
//
// if (sendAmount != null && sendAmount.length() > 0)
// validateSendAmount(sendAmount);
//
//
// }
// validateAll();
//
// view.showCheckBalanceButton(true);
//
// }
public void validateSenderAccount(PaymentSourceDTO selectedAccount) {
currentBalance = null;
if (selectedAccount == null) {
@ -337,9 +433,9 @@ public class DomesticRemitPresenterImpl extends BasePresenter implements Domesti
double deductionAmount = Utils.formatCurrencyForComparision(sendAmount) + Utils.formatCurrencyForComparision(serviceChargeOnBasisOnType);
String formattedAmount=Utils.formatCurrency(new BigDecimal(deductionAmount).stripTrailingZeros().toPlainString());
String message = getStringfromStringId(R.string.will_deduct_info_text).replace("ooo",formattedAmount);
Spanned sp = Html.fromHtml("&#8226; "+message);
String formattedAmount = Utils.formatCurrency(new BigDecimal(deductionAmount).stripTrailingZeros().toPlainString());
String message = getStringfromStringId(R.string.will_deduct_info_text).replace("ooo", formattedAmount);
Spanned sp = Html.fromHtml("&#8226; " + message);
view.showDeductionAmount(sp.toString());
}
@ -467,54 +563,122 @@ public class DomesticRemitPresenterImpl extends BasePresenter implements Domesti
}
}
public class DomesticRelatedDataObserver extends GenericApiObserverResponseV2<DomesticRemitRelatedInfoDTO> {
public static class DomesticRelatedData {
DomesticRemitRelatedInfoDTO domesticRelatedData;
List<PaymentSourceDTO> paymentSourceList;
@Override
protected Type getDataType() {
return TypeToken.getParameterized(DomesticRemitRelatedInfoDTO.class).getType();
public DomesticRelatedData(DomesticRemitRelatedInfoDTO domesticRelatedData, List<PaymentSourceDTO> paymentSourceList) {
this.domesticRelatedData = domesticRelatedData;
this.paymentSourceList = paymentSourceList;
}
@Override
protected void onSuccess(GenericResponseDataModel<DomesticRemitRelatedInfoDTO> t) {
if (t.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) {
public DomesticRemitRelatedInfoDTO getDomesticRelatedData() {
return domesticRelatedData;
}
domesticRemitDataValidator.setServiceCharge(t.getData().getServiceFee());
domesticRemitDataValidator.setWalletServiceCharge(t.getData().getServiceFeeWallet());
public List<PaymentSourceDTO> getPaymentSourceList() {
return paymentSourceList;
}
}
availableBankList = t.getData().getBankList();
availableAccountList = t.getData().getAccountList();
public class DomesticRelatedDataObserverV2 extends DisposableObserver<DomesticRelatedData> {
if (t.getData().getAccountList() == null || t.getData().getAccountList().size() < 1) {
String message = getStringfromStringId(R.string.doesnt_have_auto_debit_text);
view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.exitView());
} else {
domesticRemitDataValidator.validateSenderAccount(availableAccountList.get(0));
}
@Override
public void onNext(DomesticRelatedData domesticRelatedData) {
domesticRemitDataValidator.setServiceCharge(domesticRelatedData.getDomesticRelatedData().getServiceFee());
domesticRemitDataValidator.setWalletServiceCharge(domesticRelatedData.getDomesticRelatedData().getServiceFeeWallet());
availableBankList = domesticRelatedData.getDomesticRelatedData().getBankList();
availableAccountList = domesticRelatedData.getDomesticRelatedData().getAccountList();
paymentSourceList = domesticRelatedData.getPaymentSourceList();
//TODO add wallet no for wallet account in "accountMaskedKey"
if(paymentSourceList!=null)
{
for(PaymentSourceDTO paymentSourceDTO : paymentSourceList)
{
if(!paymentSourceDTO.isAccountAutoDebitType())
paymentSourceDTO.setAccountNumMasked(gateway.getWalletNumber());
}
}
if (domesticRelatedData.getDomesticRelatedData().getAccountList() == null || domesticRelatedData.getDomesticRelatedData().getAccountList().size() < 1) {
String message = getStringfromStringId(R.string.doesnt_have_auto_debit_text);
view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.exitView());
} else {
view.showPopUpMessage(t.getMsg(), CustomAlertDialog.AlertType.FAILED, alertType -> view.exitView());
domesticRemitDataValidator.validateSenderAccount(paymentSourceList.get(0));
}
view.updatePaymentSourceList(paymentSourceList);
}
@Override
public void onFailed(String message) {
public void onError(Throwable e) {
String message = e.getMessage();
if (e instanceof HttpException) {
message = HTTPConstants.getErrorMessageFromCode(((HttpException) e).code());
} else if (e instanceof IOException) {
message = HTTPConstants.HTTP_RESPONSE_NO_INTERNET;
}
view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, alertType -> view.exitView());
}
@Override
protected void onConnectionNotEstablished(String message) {
view.showPopUpMessage(message, CustomAlertDialog.AlertType.NO_INTERNET, alertType -> view.exitView());
}
public void onComplete() {
@Override
protected void unauthorizedAccess(String message) {
gateway.clearAllUserData();
view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout());
}
}
// public class DomesticRelatedDataObserver extends GenericApiObserverResponseV2<DomesticRemitRelatedInfoDTO> {
//
// @Override
// protected Type getDataType() {
// return TypeToken.getParameterized(DomesticRemitRelatedInfoDTO.class).getType();
// }
//
// @Override
// protected void onSuccess(GenericResponseDataModel<DomesticRemitRelatedInfoDTO> t) {
// if (t.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) {
//
// domesticRemitDataValidator.setServiceCharge(t.getData().getServiceFee());
// domesticRemitDataValidator.setWalletServiceCharge(t.getData().getServiceFeeWallet());
//
// availableBankList = t.getData().getBankList();
// availableAccountList = t.getData().getAccountList();
//
// if (t.getData().getAccountList() == null || t.getData().getAccountList().size() < 1) {
// String message = getStringfromStringId(R.string.doesnt_have_auto_debit_text);
// view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.exitView());
// } else {
// domesticRemitDataValidator.validateSenderAccount(availableAccountList.get(0));
// }
//
//
// } 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.NO_INTERNET, alertType -> view.exitView());
//
// }
//
// @Override
// protected void unauthorizedAccess(String message) {
// gateway.clearAllUserData();
// view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout());
// }
// }
public class VerifyKFTCAccountObserver extends GenericApiObserverResponseV2<DomesticReicipientInfoDTO> {
@Override

5
app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/presenter/DomesticRemitPresenterInterface.java

@ -1,5 +1,6 @@
package com.gmeremit.online.gmeremittance_native.domesticremit.send.presenter;
import com.gmeremit.online.gmeremittance_native.accountmanage.model.paymentsources.PaymentSourceDTO;
import com.gmeremit.online.gmeremittance_native.base.BaseContractInterface;
import com.gmeremit.online.gmeremittance_native.base.BasePresenterInterface;
import com.gmeremit.online.gmeremittance_native.customwidgets.common.GenericPromptDialog;
@ -20,7 +21,7 @@ public interface DomesticRemitPresenterInterface extends BasePresenterInterface
List<DomesticAccountsDTO> getAvailableSenderAccounts();
void onSenderAccountSelected(DomesticAccountsDTO selectedAccount);
void onSenderAccountSelected(PaymentSourceDTO selectedAccount);
void onSendingAmountChanged(String sendingAmount);
@ -50,6 +51,8 @@ public interface DomesticRemitPresenterInterface extends BasePresenterInterface
interface DomesticRemitContractInterface extends BaseContractInterface
{
void updatePaymentSourceList(List<PaymentSourceDTO> paymentSourceDTOList);
void promptPassword(PasswordPromptListener listener, long countDownValue,String selectedAccountKFTCId,String sendingAmount,String type);
void promptBiometricAuthDialog(TransactionBiometricPromptDialog.BiometricPromptResultListener listener);

96
app/src/main/java/com/gmeremit/online/gmeremittance_native/domesticremit/send/view/DomesticRemitActivity.java

@ -4,6 +4,7 @@ import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import androidx.transition.ChangeTransform;
import androidx.transition.TransitionManager;
import android.text.Editable;
@ -19,9 +20,13 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.accountmanage.adapter.paymentsources.PaymentSourceListAdapter;
import com.gmeremit.online.gmeremittance_native.accountmanage.gateway.paymentsources.PaymentSourceSelectionGateway;
import com.gmeremit.online.gmeremittance_native.accountmanage.model.paymentsources.PaymentSourceDTO;
import com.gmeremit.online.gmeremittance_native.base.BaseActivity;
import com.gmeremit.online.gmeremittance_native.customwidgets.CurrencyFormatterTextWatcher;
import com.gmeremit.online.gmeremittance_native.customwidgets.GMEFormInputField;
import com.gmeremit.online.gmeremittance_native.customwidgets.SelectedRedBorderWithTickDecoration;
import com.gmeremit.online.gmeremittance_native.customwidgets.TextWatcherAdapter;
import com.gmeremit.online.gmeremittance_native.customwidgets.banklistingdialog.BankWithIconListingDialog;
import com.gmeremit.online.gmeremittance_native.customwidgets.common.GenericTextListingDialog;
@ -36,6 +41,8 @@ import com.gmeremit.online.gmeremittance_native.transactionpasspromt.PasswordPro
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionBiometricPromptDialog;
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
@ -49,7 +56,7 @@ import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.view
import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity.SELECTED_KFTC_ID_FOR_OTP_BUNDLE_KEY;
import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity.TRANSACTION_PWD_ENC_DATA;
public class DomesticRemitActivity extends BaseActivity implements DomesticRemitPresenterInterface.DomesticRemitContractInterface, View.OnClickListener {
public class DomesticRemitActivity extends BaseActivity implements DomesticRemitPresenterInterface.DomesticRemitContractInterface, View.OnClickListener, PaymentSourceListAdapter.PaymentSourceSelectionListener {
private static final int PASSWORD_PROMPT_REQUEST = 9082;
@BindView(R.id.containerRootView)
@ -58,8 +65,8 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
@BindView(R.id.senderAccountRelatedViewContainer)
ViewGroup senderAccountRelatedViewContainer;
@BindView(R.id.senderBankSelectionViewContainer)
View senderBankSelectionViewContainer;
// @BindView(R.id.senderBankSelectionViewContainer)
// View senderBankSelectionViewContainer;
@BindView(R.id.checkBalanceTxt)
TextView checkBalanceTxt;
@ -71,8 +78,13 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
@BindView(R.id.recipientAmountFormInputField)
GMEFormInputField recipientAmountFormInputField;
@BindView(R.id.senderBankSelectionFormInputField)
GMEFormInputField senderBankSelectionFormInputField;
// @BindView(R.id.senderBankSelectionFormInputField)
// GMEFormInputField senderBankSelectionFormInputField;
@BindView(R.id.paymentSourceListRv)
RecyclerView paymentSourceListRv;
@BindView(R.id.recipientBankSelectionViewContainer)
ViewGroup recipientBankSelectionViewContainer;
@ -118,12 +130,15 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
@BindView(R.id.btn_submit)
Button submitBtn;
private PaymentSourceListAdapter paymentSourceListAdapter;
RecipientFullNameTextWatcher recipientFullNameTextWatcher;
RecipientMobileNoTextWatcher recipientMobileNoTextWatcher;
RecipientAccountNoTextWatcher recipientAccountNoTextWatcher;
RecipientSendingAmountTextWatcher recipientSendingAmountTextWatcher;
SenderBankSelectionClickListener senderBankSelectionClickListener;
// SenderBankSelectionClickListener senderBankSelectionClickListener;
RecipientBankSelectionClickListener recipientBankSelectionClickListener;
RecipientSendingAmountFocusChangeAndActionDoneListener recipientSendingAmountFocusChangeAndActionDoneListener;
@ -149,14 +164,21 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
}
private void init() {
this.presenter = new DomesticRemitPresenterImpl(this, new DomesticRemitGateway());
this.presenter = new DomesticRemitPresenterImpl(this, new DomesticRemitGateway(),new PaymentSourceSelectionGateway());
initListeners();
setupEdiText();
iv_cancel.setVisibility(View.INVISIBLE);
hideViewFromIndexId(2);
registerTextWatchers(true);
initPaymentSourceRv();
}
private void initPaymentSourceRv() {
paymentSourceListAdapter = new PaymentSourceListAdapter(this);
paymentSourceListRv.addItemDecoration(new SelectedRedBorderWithTickDecoration(paymentSourceListRv.getContext()));
paymentSourceListRv.setAdapter(paymentSourceListAdapter);
}
private void setupEdiText() {
@ -165,7 +187,7 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
recipientMobileNoFormInputField.getEditTextView().setInputType(InputType.TYPE_CLASS_PHONE);
recipientMobileNoFormInputField.getEditTextView().setFilters(new InputFilter[]{ new InputFilter.LengthFilter(11) });
recipientAccountNoFormInputField.getEditTextView().setRegExInputFilter("[a-zA-Z0-9\\s]+");
senderBankSelectionFormInputField.getEditTextView().setFilters(new InputFilter[]{});
// senderBankSelectionFormInputField.getEditTextView().setFilters(new InputFilter[]{});
recipientBankSelectionFormInputField.getEditTextView().setFilters(new InputFilter[]{});
recipientFullNameFormInputField.getEditTextView().setFilters(new InputFilter[]{});
recipientFullNameFormInputField.getEditTextView().setEnabled(false);
@ -182,7 +204,7 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
recipientAccountNoTextWatcher = new RecipientAccountNoTextWatcher();
recipientSendingAmountTextWatcher = new RecipientSendingAmountTextWatcher(recipientAmountFormInputField.getEditTextView());
senderBankSelectionClickListener = new SenderBankSelectionClickListener();
// senderBankSelectionClickListener = new SenderBankSelectionClickListener();
recipientBankSelectionClickListener = new RecipientBankSelectionClickListener();
recipientSendingAmountFocusChangeAndActionDoneListener = new RecipientSendingAmountFocusChangeAndActionDoneListener();
@ -212,7 +234,7 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
checkBalanceTxt.setOnClickListener(this);
recipientBankSelectionFormInputField.getEditTextView().setOnClickListener(recipientBankSelectionClickListener);
senderBankSelectionFormInputField.getEditTextView().setOnClickListener(senderBankSelectionClickListener);
// senderBankSelectionFormInputField.getEditTextView().setOnClickListener(senderBankSelectionClickListener);
recipientHistoryImageView.setOnClickListener(this);
@ -225,7 +247,7 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
recipientBankSelectionFormInputField.getEditTextView().setOnClickListener(null);
senderBankSelectionFormInputField.getEditTextView().setOnClickListener(null);
// senderBankSelectionFormInputField.getEditTextView().setOnClickListener(null);
recipientHistoryImageView.setOnClickListener(null);
@ -286,6 +308,12 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
}
}
@Override
public void updatePaymentSourceList(List<PaymentSourceDTO> paymentSourceDTOList) {
paymentSourceListAdapter.updateDataList(paymentSourceDTOList);
paymentSourceListAdapter.setCurrentSelectableItem(0);
}
@Override
public void promptPassword(PasswordPromptListener listener, long countDownValue,String selectedAccountKFTCId,String sendingAmount,String type) {
@ -440,7 +468,7 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
@Override
public void showSelectedSenderAccount(String accountName) {
senderBankSelectionFormInputField.getEditTextView().setText(accountName);
// senderBankSelectionFormInputField.getEditTextView().setText(accountName);
TransitionManager.beginDelayedTransition(senderAccountRelatedViewContainer, new ChangeTransform());
showChildView(2, 3);
@ -524,6 +552,12 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
}
@Override
public void onPaymentSourceSelected(PaymentSourceDTO account) {
presenter.onSenderAccountSelected(account);
}
public class RecipientFullNameTextWatcher extends TextWatcherAdapter {
@Override
@ -561,25 +595,25 @@ public class DomesticRemitActivity extends BaseActivity implements DomesticRemit
}
}
public class SenderBankSelectionClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
hideKeyBoard();
senderAccountListingDialog = new GenericTextListingDialog<>();
senderAccountListingDialog.setData(presenter.getAvailableSenderAccounts());
senderAccountListingDialog.setListener(account ->
{
presenter.onSenderAccountSelected(account);
senderAccountListingDialog.dismiss();
});
senderAccountListingDialog.setHintAndTitle(getString(R.string.search_account_text), getString(R.string.select_auto_debit_account_text), getString(R.string.no_account_found_text));
senderAccountListingDialog.disableSearch(false);
if (!senderAccountListingDialog.isAdded())
senderAccountListingDialog.show(getSupportFragmentManager(), "AccountSelector");
}
}
// public class SenderBankSelectionClickListener implements View.OnClickListener {
//
// @Override
// public void onClick(View v) {
// hideKeyBoard();
// senderAccountListingDialog = new GenericTextListingDialog<>();
// senderAccountListingDialog.setData(presenter.getAvailableSenderAccounts());
// senderAccountListingDialog.setListener(account ->
// {
// presenter.onSenderAccountSelected(account);
// senderAccountListingDialog.dismiss();
// });
// senderAccountListingDialog.setHintAndTitle(getString(R.string.search_account_text), getString(R.string.select_auto_debit_account_text), getString(R.string.no_account_found_text));
// senderAccountListingDialog.disableSearch(false);
// if (!senderAccountListingDialog.isAdded())
// senderAccountListingDialog.show(getSupportFragmentManager(), "AccountSelector");
//
// }
// }
public class RecipientBankSelectionClickListener implements View.OnClickListener {

10
app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java

@ -90,11 +90,11 @@ public class SplashScreenPresenter extends BasePresenter implements SplashScreen
@Override
public boolean checkSafety() {
if (hasRootAccess() || !checkIfAppSafe()) {
view.showPopUpMessage("Access Denied", CustomAlertDialog.AlertType.ALERT, null);
new Handler().postDelayed(() -> view.exitView(), 1500);
return false;
} else
// if (hasRootAccess() || !checkIfAppSafe()) {
// view.showPopUpMessage("Access Denied", CustomAlertDialog.AlertType.ALERT, null);
// new Handler().postDelayed(() -> view.exitView(), 1500);
// return false;
// } else
return true;
}

6
app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java

@ -833,9 +833,9 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
public native void startAntiDebugger();
private void initAntiDebugger() {
boolean isDebuggable = (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE));
if (isDebuggable)
startAntiDebugger();
// boolean isDebuggable = (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE));
// if (isDebuggable)
// startAntiDebugger();
}
class ChannelIOEventListener extends ChatUtils.ChannelIOListenerAdapter {

30
app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenter.java

@ -57,13 +57,13 @@ public class LocalTopUpPresenter extends BasePresenter implements LocalTopUpPres
private final DataTopUpValidator dataTopUpValidator;
private final MutableLiveData<LocalTopUpResponseDTO> regularTopup;
private final MutableLiveData<LocalTopUpResponseDTO> fixedTopup;
private final MutableLiveData<List<PaymentSourceDTO>> paymentSourceListLiveData;
private final MutableLiveData<String> selectedPaymentSourceLiveData;
private final MutableLiveData<String> selectedPaymentSourceBalanceLiveData;
private final PaymentSourceSelectionInteractorInterface.PaymentSourceSelectionGatewayInterface paymentSourceSelectionGateway;
private String userCurrentBalance = null;
private String userMsisdn = "";
private List<PaymentSourceDTO> paymentSourceList;
private PaymentSourceDTO selectedPaymentSource;
private long countDownRemainingValue;
@ -79,6 +79,7 @@ public class LocalTopUpPresenter extends BasePresenter implements LocalTopUpPres
this.fixedTopup = new MutableLiveData<>();
this.selectedPaymentSourceLiveData = new MutableLiveData<>();
this.selectedPaymentSourceBalanceLiveData = new MutableLiveData<>();
this.paymentSourceListLiveData = new MutableLiveData<>();
countDownRemainingValue = -1;
}
@ -109,6 +110,11 @@ public class LocalTopUpPresenter extends BasePresenter implements LocalTopUpPres
return selectedPaymentSourceBalanceLiveData;
}
@Override
public LiveData<List<PaymentSourceDTO>> getPaymentSourceListLiveData() {
return paymentSourceListLiveData;
}
private boolean validateMsisdn() {
if (userMsisdn != null && userMsisdn.length() == 11) {
@ -213,7 +219,7 @@ public class LocalTopUpPresenter extends BasePresenter implements LocalTopUpPres
this.selectedPaymentSource = paymentSource;
this.userCurrentBalance = null;
selectedPaymentSourceLiveData.setValue(this.selectedPaymentSource.toString());
if ("wallet".equalsIgnoreCase(paymentSource.getType())) {
if (!paymentSource.isAccountAutoDebitType()) {
String walletBalance = gateway.getUserCurrentBalance();
if (walletBalance != null && walletBalance.length() > 0) {
userCurrentBalance = Utils.formatCurrencyWithoutTruncatingDecimal(walletBalance);
@ -225,11 +231,6 @@ public class LocalTopUpPresenter extends BasePresenter implements LocalTopUpPres
// dataTopUpValidator.validateAll();
}
@Override
public List<PaymentSourceDTO> getAvailablePaymentSources() {
return paymentSourceList;
}
@Override
public void promptPinForRegularTransaction() {
@ -621,6 +622,17 @@ public class LocalTopUpPresenter extends BasePresenter implements LocalTopUpPres
@Override
public void onNext(LocalTopUpRelatedData o) {
//TODO add wallet no for wallet account in "accountMaskedKey" until server side is changed
if(o.paymentSourceList!=null)
{
for(PaymentSourceDTO paymentSourceDTO : o.paymentSourceList)
{
if(!paymentSourceDTO.isAccountAutoDebitType())
paymentSourceDTO.setAccountNumMasked(gateway.getWalletNumber());
}
}
regularTopup.setValue(o.regularDTO);
fixedTopup.setValue(o.fixedDTO);
updatePaymentSourceData(o.paymentSourceList);
@ -652,10 +664,10 @@ public class LocalTopUpPresenter extends BasePresenter implements LocalTopUpPres
private void updatePaymentSourceData(List<PaymentSourceDTO> paymentSourceList) {
userCurrentBalance = null;
this.selectedPaymentSource = null;
this.paymentSourceList = paymentSourceList;
this.paymentSourceListLiveData.setValue(paymentSourceList);
if (paymentSourceList != null) {
for (PaymentSourceDTO paymentSource : paymentSourceList) {
if ("wallet".equalsIgnoreCase(paymentSource.getType())) {
if (!paymentSource.isAccountAutoDebitType()) {
selectedPaymentSource = paymentSource;
selectedPaymentSourceLiveData.setValue(selectedPaymentSource.getBankName());
String walletBalance = gateway.getUserCurrentBalance();

2
app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/presenter/topup/LocalTopUpPresenterInterface.java

@ -28,6 +28,7 @@ public interface LocalTopUpPresenterInterface extends BasePresenterInterface {
LiveData<LocalTopUpResponseDTO> getFixedTopupRelatedLiveData();
LiveData<String> getSelectedPaymentSourceLiveData();
LiveData<String> getSelectedPaymentSourceBalanceLiveData();
LiveData<List<PaymentSourceDTO>> getPaymentSourceListLiveData();
void onRegularTopUpDenoSelected(ButtonsGrid selectedAmount);
@ -50,7 +51,6 @@ public interface LocalTopUpPresenterInterface extends BasePresenterInterface {
void onPaymentSourceSelected(PaymentSourceDTO paymentSource);
List<PaymentSourceDTO> getAvailablePaymentSources();
void checkBalance();

90
app/src/main/java/com/gmeremit/online/gmeremittance_native/topup/local/view/topup/LocalTopUpActivity.java

@ -8,15 +8,18 @@ import android.provider.ContactsContract;
import androidx.annotation.Nullable;
import com.gmeremit.online.gmeremittance_native.accountmanage.adapter.paymentsources.PaymentSourceListAdapter;
import com.gmeremit.online.gmeremittance_native.accountmanage.gateway.paymentsources.PaymentSourceSelectionGateway;
import com.gmeremit.online.gmeremittance_native.accountmanage.model.paymentsources.PaymentSourceDTO;
import com.gmeremit.online.gmeremittance_native.customwidgets.GmeEditText;
import com.gmeremit.online.gmeremittance_native.customwidgets.SelectedRedBorderWithTickDecoration;
import com.gmeremit.online.gmeremittance_native.customwidgets.common.GenericTextListingDialog;
import com.gmeremit.online.gmeremittance_native.domesticremit.send.model.DomesticAccountsDTO;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.textfield.TextInputLayout;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
@ -43,6 +46,7 @@ import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.Transa
import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
@ -54,7 +58,7 @@ import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.view
import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity.SELECTED_KFTC_ID_FOR_OTP_BUNDLE_KEY;
import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity.TRANSACTION_PWD_ENC_DATA;
public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresenterInterface.LocalTopUpContractInterface, LocalTopUpActivityActionListener, GmeMaskedEditText.ValueListener {
public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresenterInterface.LocalTopUpContractInterface, LocalTopUpActivityActionListener, GmeMaskedEditText.ValueListener, PaymentSourceListAdapter.PaymentSourceSelectionListener {
private static final int PICK_CONTACT = 34342;
private static final int PASSWORD_PROMPT_REQUEST = 8241;
@ -82,8 +86,8 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
ImageView ivBack;
@BindView(R.id.senderBankSelectionFormInputField)
TextInputLayout senderPaymentSourceTextInputLayout;
// @BindView(R.id.senderBankSelectionFormInputField)
// TextInputLayout senderPaymentSourceTextInputLayout;
@BindView(R.id.currentBalanceTextView)
@ -92,6 +96,9 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
@BindView(R.id.checkBalanceTxt)
View checkBalanceBtn;
@BindView(R.id.paymentSourceListRv)
RecyclerView paymentSourceListRv;
@BindView(R.id.iv_cancel)
View ivCancel;
@ -101,6 +108,8 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
private LocalTopUpPresenterInterface presenter;
private PasswordPromptListener passwordPromptListener;
private PaymentSourceListAdapter paymentSourceListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -119,19 +128,29 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
setUpTabLayout();
ivCancel.setVisibility(View.INVISIBLE);
userMsisdnEdTxt.setValueListener(this, false);
senderPaymentSourceTextInputLayout.getEditText().setFilters(new InputFilter[]{});
// senderPaymentSourceTextInputLayout.getEditText().setFilters(new InputFilter[]{});
initPaymentSourceRv();
}
private void initPaymentSourceRv() {
paymentSourceListAdapter = new PaymentSourceListAdapter(this);
paymentSourceListRv.addItemDecoration(new SelectedRedBorderWithTickDecoration(paymentSourceListRv.getContext()));
paymentSourceListRv.setAdapter(paymentSourceListAdapter);
}
private void performDefaultAction(Bundle savedInstanceState) {
ivCancel.setVisibility(View.GONE);
toolbarTitle.setText(getString(R.string.local_top_up_text));
presenter.getSelectedPaymentSourceLiveData().observe(this, selectedPaymentSource -> {
senderPaymentSourceTextInputLayout.getEditText().setText(selectedPaymentSource);
// senderPaymentSourceTextInputLayout.getEditText().setText(selectedPaymentSource);
resetBalanceView();
});
presenter.getPaymentSourceListLiveData().observe(this, this::updatePaymentSourceList);
presenter.getSelectedPaymentSourceBalanceLiveData().observe(this, selectedPaymentSourceBalance -> {
currentBalanceTextView.setText(selectedPaymentSourceBalance);
checkBalanceBtn.setVisibility(View.GONE);
checkBalanceBtn.setVisibility(View.INVISIBLE);
currentBalanceTextView.setVisibility(View.VISIBLE);
});
presenter.getAllRequiredData();
@ -139,7 +158,13 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
private void resetBalanceView() {
checkBalanceBtn.setVisibility(View.VISIBLE);
currentBalanceTextView.setVisibility(View.GONE);
currentBalanceTextView.setVisibility(View.INVISIBLE);
}
private void updatePaymentSourceList(List<PaymentSourceDTO> paymentSourceDTOList) {
paymentSourceListAdapter.updateDataList(paymentSourceDTOList);
paymentSourceListAdapter.setCurrentSelectableItem(0);
}
private void setUpTabLayout() {
@ -189,21 +214,21 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
}
}
@OnClick(R.id.senderPaymentSourceViewContainer)
public void promptAccounSelection() {
hideKeyBoard();
senderAccountListingDialog = new GenericTextListingDialog<>();
senderAccountListingDialog.setData(presenter.getAvailablePaymentSources());
senderAccountListingDialog.setListener(account ->
{
presenter.onPaymentSourceSelected(account);
senderAccountListingDialog.dismiss();
});
senderAccountListingDialog.setHintAndTitle(getString(R.string.search_account_text), getString(R.string.select_auto_debit_account_text), getString(R.string.no_account_found_text));
senderAccountListingDialog.disableSearch(false);
if (!senderAccountListingDialog.isAdded())
senderAccountListingDialog.show(getSupportFragmentManager(), "AccountSelector");
}
// @OnClick(R.id.senderPaymentSourceViewContainer)
// public void promptAccounSelection() {
// hideKeyBoard();
// senderAccountListingDialog = new GenericTextListingDialog<>();
// senderAccountListingDialog.setData(presenter.getAvailablePaymentSources());
// senderAccountListingDialog.setListener(account ->
// {
// presenter.onPaymentSourceSelected(account);
// senderAccountListingDialog.dismiss();
// });
// senderAccountListingDialog.setHintAndTitle(getString(R.string.search_account_text), getString(R.string.select_auto_debit_account_text), getString(R.string.no_account_found_text));
// senderAccountListingDialog.disableSearch(false);
// if (!senderAccountListingDialog.isAdded())
// senderAccountListingDialog.show(getSupportFragmentManager(), "AccountSelector");
// }
private void handleContact(Intent data) {
String phoneNo = null;
@ -247,18 +272,18 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
@Override
protected void onStart() {
super.onStart();
senderPaymentSourceTextInputLayout.getEditText().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
promptAccounSelection();
}
});
// senderPaymentSourceTextInputLayout.getEditText().setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// promptAccounSelection();
// }
// });
}
@Override
protected void onStop() {
super.onStop();
senderPaymentSourceTextInputLayout.getEditText().setOnClickListener(null);
// senderPaymentSourceTextInputLayout.getEditText().setOnClickListener(null);
}
@Override
@ -313,7 +338,7 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
}
@Override
public void promptPassword(PasswordPromptListener listener,long countDownValue,String selectedAccountKFTCId,String sendingAmount,String type) {
public void promptPassword(PasswordPromptListener listener, long countDownValue, String selectedAccountKFTCId, String sendingAmount, String type) {
this.passwordPromptListener = listener;
Intent passwordRequestIntent = new Intent(this, TransactionPasswordPromptActivity.class);
passwordRequestIntent.putExtra(PAYMENT_TYPE_BUNDLE_KEY, type);
@ -340,4 +365,9 @@ public class LocalTopUpActivity extends BaseActivity implements LocalTopUpPresen
ConfirmRechargePaymentBottomSheetDialog.showConfirmationView(param, rechargeConfirmationListener).show(getSupportFragmentManager(), ConfirmRechargePaymentBottomSheetDialog.class.getSimpleName());
}
@Override
public void onPaymentSourceSelected(PaymentSourceDTO account) {
presenter.onPaymentSourceSelected(account);
}
}

2
app/src/main/res/drawable/ic_rectangle_white_corners.xml

@ -2,6 +2,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff" />
<corners android:radius="4dp"/>
<corners android:radius="@dimen/_4sdp"/>
</shape>

126
app/src/main/res/layout/activity_domestic_remit.xml

@ -29,50 +29,75 @@
android:layout_height="wrap_content"
android:background="@color/bright_gray">
<LinearLayout
android:id="@+id/senderBankSelectionViewContainer"
<!-- <LinearLayout-->
<!-- android:id="@+id/senderBankSelectionViewContainer"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginStart="@dimen/_8sdp"-->
<!-- android:layout_marginEnd="@dimen/_8sdp"-->
<!-- android:orientation="horizontal"-->
<!-- android:visibility="visible"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent">-->
<!-- <com.gmeremit.online.gmeremittance_native.customwidgets.GMEFormInputField-->
<!-- android:id="@+id/senderBankSelectionFormInputField"-->
<!-- style="@style/gme_form_text_input_layout"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_weight="1"-->
<!-- android:hint="@string/select_auto_debit_account_text"-->
<!-- android:visibility="visible"-->
<!-- app:edFormCursorVisible="false"-->
<!-- app:edFormFocusable="false" />-->
<!-- <ImageView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_gravity="center_vertical|end"-->
<!-- android:layout_marginStart="@dimen/_4sdp"-->
<!-- android:layout_marginEnd="@dimen/_4sdp"-->
<!-- android:background="@drawable/ic_arrow_down" />-->
<!-- </LinearLayout>-->
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/gmeTextView12"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:orientation="horizontal"
android:visibility="visible"
android:gravity="start|left"
android:paddingTop="@dimen/_8sdp"
android:text="@string/select_auto_debit_account_text"
android:textColor="@color/dark_gray"
android:textSize="@dimen/text_medium"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.gmeremit.online.gmeremittance_native.customwidgets.GMEFormInputField
android:id="@+id/senderBankSelectionFormInputField"
style="@style/gme_form_text_input_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/select_auto_debit_account_text"
android:visibility="visible"
app:edFormCursorVisible="false"
app:edFormFocusable="false" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginStart="@dimen/_4sdp"
android:layout_marginEnd="@dimen/_4sdp"
android:background="@drawable/ic_arrow_down" />
</LinearLayout>
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_8sdp"
app:txtfontName="@string/semibold" />
<androidx.recyclerview.widget.RecyclerView
android:paddingStart="@dimen/_16sdp"
android:paddingEnd="@dimen/_16sdp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/paymentSourceListRv"
app:layout_constraintTop_toBottomOf="@+id/gmeTextView12"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:paddingStart="@dimen/_8sdp"
android:paddingEnd="@dimen/_8sdp"
android:paddingTop="@dimen/_3sdp"
android:paddingBottom="@dimen/_3sdp"
android:layout_marginTop="@dimen/_5sdp"
android:layout_marginBottom="@dimen/_5sdp"
android:layout_marginTop="@dimen/_12sdp"
android:id="@+id/currentBalanceTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_8sdp"
android:gravity="center"
android:text="@string/na_text"
android:textColor="@color/dark_gray"
@ -83,20 +108,19 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/senderBankSelectionViewContainer" />
app:layout_constraintTop_toBottomOf="@+id/paymentSourceListRv" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:paddingStart="@dimen/_8sdp"
android:paddingEnd="@dimen/_8sdp"
android:paddingTop="@dimen/_3sdp"
android:paddingBottom="@dimen/_3sdp"
android:layout_marginTop="@dimen/_5sdp"
android:layout_marginBottom="@dimen/_5sdp"
android:layout_marginTop="@dimen/_12sdp"
android:id="@+id/checkBalanceTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_8sdp"
android:background="@drawable/ic_rounded_country_listing_gray"
android:text="@string/account_balance_button_text"
android:textColor="@color/colorPrimaryDark"
@ -106,20 +130,20 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/senderBankSelectionViewContainer" />
app:layout_constraintTop_toBottomOf="@+id/paymentSourceListRv" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:paddingStart="@dimen/_8sdp"
android:paddingEnd="@dimen/_8sdp"
android:paddingTop="@dimen/_3sdp"
android:paddingBottom="@dimen/_3sdp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginBottom="@dimen/_8sdp"
android:id="@+id/serviceChargeTxtView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_8sdp"
android:gravity="center"
android:text="@string/transfer_charge_text"
android:textColor="@color/colorPrimaryDark"
@ -139,19 +163,19 @@
<com.gmeremit.online.gmeremittance_native.customwidgets.GMEFormInputField
android:layout_marginTop="25dp"
android:layout_marginStart="10dp"
android:layout_marginStart="@dimen/_8sdp"
android:id="@+id/recipientAmountFormInputField"
style="@style/gme_form_text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_marginEnd="@dimen/_8sdp"
android:visibility="visible"
android:hint="@string/enter_send_amount_text" />
<LinearLayout
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_8sdp"
android:id="@+id/recipientBankSelectionViewContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -214,12 +238,12 @@
<com.gmeremit.online.gmeremittance_native.customwidgets.GMEFormInputField
android:layout_marginStart="10dp"
android:layout_marginStart="@dimen/_8sdp"
android:id="@+id/recipientAccountNoFormInputField"
style="@style/gme_form_text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_marginEnd="@dimen/_8sdp"
android:visibility="visible"
android:hint="@string/enter_account_text" />
@ -228,8 +252,8 @@
style="@style/gme_form_text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="@dimen/_8sdp"
android:layout_marginStart="@dimen/_8sdp"
android:visibility="visible"
android:hint="@string/full_name_text" />
@ -238,8 +262,8 @@
style="@style/gme_form_text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="@dimen/_8sdp"
android:layout_marginStart="@dimen/_8sdp"
android:visibility="visible"
/>

148
app/src/main/res/layout/activity_local_top_up.xml

@ -78,48 +78,48 @@
app:layout_constraintTop_toTopOf="@+id/receiverMobileNumberFormInputField"
app:srcCompat="@drawable/ic_ico_contact" />
<LinearLayout
android:id="@+id/senderPaymentSourceViewContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="@dimen/_10sdp"
android:orientation="horizontal"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/receiverMobileNumberFormInputField">
<com.gmeremit.online.gmeremittance_native.customwidgets.GMEFormInputField
android:id="@+id/senderBankSelectionFormInputField"
style="@style/gme_form_text_input_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/select_auto_debit_account_text"
android:visibility="visible"
app:edFormCursorVisible="false"
app:edFormFocusable="false" />
<ImageView
android:id="@+id/senderBankSelectionDownArrowImgView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginStart="@dimen/_4sdp"
android:layout_marginEnd="@dimen/_4sdp"
android:background="@drawable/ic_arrow_down" />
</LinearLayout>
<!-- <LinearLayout-->
<!-- android:id="@+id/senderPaymentSourceViewContainer"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginStart="10dp"-->
<!-- android:layout_marginEnd="10dp"-->
<!-- android:layout_marginTop="@dimen/_10sdp"-->
<!-- android:orientation="horizontal"-->
<!-- android:visibility="visible"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@+id/receiverMobileNumberFormInputField">-->
<!-- <com.gmeremit.online.gmeremittance_native.customwidgets.GMEFormInputField-->
<!-- android:id="@+id/senderBankSelectionFormInputField"-->
<!-- style="@style/gme_form_text_input_layout"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_weight="1"-->
<!-- android:hint="@string/select_auto_debit_account_text"-->
<!-- android:visibility="visible"-->
<!-- app:edFormCursorVisible="false"-->
<!-- app:edFormFocusable="false" />-->
<!-- <ImageView-->
<!-- android:id="@+id/senderBankSelectionDownArrowImgView"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_gravity="center_vertical|end"-->
<!-- android:layout_marginStart="@dimen/_4sdp"-->
<!-- android:layout_marginEnd="@dimen/_4sdp"-->
<!-- android:background="@drawable/ic_arrow_down" />-->
<!-- </LinearLayout>-->
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/currentBalanceTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="@dimen/_5sdp"
android:layout_marginBottom="@dimen/_8sdp"
android:layout_marginTop="@dimen/_8sdp"
android:gravity="center"
android:paddingStart="@dimen/_8sdp"
android:paddingTop="@dimen/_3sdp"
@ -128,12 +128,12 @@
android:text="@string/na_text"
android:textColor="@color/dark_gray"
android:textSize="17sp"
android:visibility="gone"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/senderPaymentSourceViewContainer"
app:layout_constraintBottom_toTopOf="@+id/localTopupTabLayout"
app:layout_constraintTop_toBottomOf="@+id/receiverMobileNumberFormInputField"
app:layout_constraintBottom_toTopOf="@+id/gmeTextView12"
app:txtfontName="@string/semibold" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
@ -143,6 +143,7 @@
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="@dimen/_8sdp"
android:layout_marginTop="@dimen/_8sdp"
android:background="@drawable/ic_rounded_country_listing_gray"
android:paddingStart="@dimen/_8sdp"
android:paddingTop="@dimen/_3sdp"
@ -155,27 +156,64 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/senderPaymentSourceViewContainer"
app:layout_constraintBottom_toTopOf="@+id/localTopupTabLayout"/>
app:layout_constraintTop_toBottomOf="@+id/receiverMobileNumberFormInputField"
app:layout_constraintBottom_toTopOf="@+id/gmeTextView12"
/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/localTopupTabLayout"
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/gmeTextView12"
android:layout_width="match_parent"
android:layout_height="@dimen/_28sdp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:gravity="start|left"
android:paddingTop="@dimen/_8sdp"
android:text="@string/select_auto_debit_account_text"
android:textColor="@color/dark_gray"
android:textSize="@dimen/text_medium"
app:layout_constraintBottom_toTopOf="@+id/paymentSourceListRv"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/currentBalanceTextView"
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_8sdp"
android:layout_marginTop="@dimen/_10sdp"
android:background="@drawable/circular_tab_layout_bg"
app:txtfontName="@string/semibold" />
<androidx.recyclerview.widget.RecyclerView
android:paddingStart="@dimen/_16sdp"
android:paddingEnd="@dimen/_16sdp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/paymentSourceListRv"
app:layout_constraintTop_toBottomOf="@+id/currentBalanceTextView"
app:tabBackground="@drawable/circular_tab_selector"
app:tabGravity="fill"
app:tabIndicatorHeight="0dp"
app:tabMaxWidth="0dp"
app:tabMode="fixed"
app:tabRippleColor="@null"
app:tabTextAppearance="@style/CircularTabTextAppearance" />
app:layout_constraintBottom_toTopOf="@+id/localTopupTabLayoutContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
/>
<FrameLayout
android:id="@+id/localTopupTabLayoutContainer"
android:layout_marginTop="@dimen/_12sdp"
android:paddingTop="@dimen/_8sdp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:layout_constraintTop_toBottomOf="@+id/paymentSourceListRv">
<com.google.android.material.tabs.TabLayout
android:id="@+id/localTopupTabLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/_28sdp"
android:layout_gravity="center"
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_8sdp"
android:background="@drawable/circular_tab_layout_bg"
app:tabBackground="@drawable/circular_tab_selector"
app:tabGravity="fill"
app:tabIndicatorHeight="0dp"
app:tabMaxWidth="0dp"
app:tabMode="fixed"
app:tabRippleColor="@null"
app:tabTextAppearance="@style/CircularTabTextAppearance" />
</FrameLayout>

25
app/src/main/res/layout/payment_source_select_item.xml

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
@ -6,20 +7,19 @@
android:layout_height="wrap_content"
android:background="@drawable/ic_rectangle_white_corners"
android:padding="@dimen/_8sdp"
android:minHeight="@dimen/_75sdp"
android:layout_marginStart="@dimen/_4sdp"
android:layout_marginEnd="@dimen/_4sdp"
android:layout_marginTop="@dimen/_4sdp">
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/tv_coupon_name"
android:id="@+id/tv_sub_title"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="start"
android:textColor="@color/darkgray"
android:textSize="@dimen/_10ssp"
app:layout_constraintBottom_toTopOf="@+id/tv_coupon_type"
app:layout_constraintBottom_toTopOf="@+id/tv_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
@ -29,36 +29,23 @@
tools:text="Coupon Name" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:paddingTop="@dimen/_2sdp"
android:paddingBottom="@dimen/_2sdp"
android:id="@+id/tv_coupon_type"
android:id="@+id/tv_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
android:textColor="@color/darkgray"
android:textSize="@dimen/_13ssp"
app:layout_constraintBottom_toTopOf="@+id/tv_coupon_date"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_coupon_name"
app:layout_constraintTop_toBottomOf="@+id/tv_sub_title"
app:txtfontName="@string/bold"
android:layout_marginEnd="@dimen/_32sdp"
tools:text="Coupon Type" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/tv_coupon_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:textColor="@color/darkgray"
android:textSize="@dimen/_10ssp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_coupon_type"
app:txtfontName="@string/regular"
android:layout_marginEnd="@dimen/_32sdp"
tools:text="Date" />
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save