diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 84f7c458..00f8438c 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -317,8 +317,9 @@ diff --git a/app/build.gradle b/app/build.gradle index e0539678..d2a5752b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -233,6 +233,7 @@ dependencies { implementation 'io.trustdock.sdk:verification-sandbox-full:2.7.2' implementation 'com.google.android.flexbox:flexbox:3.0.0' + implementation 'me.relex:circleindicator:2.1.4' diff --git a/app/src/main/java/com/remit/jmecustomer/features/beneficiaryDetail/BeneficiaryDetailActivity.kt b/app/src/main/java/com/remit/jmecustomer/features/beneficiaryDetail/BeneficiaryDetailActivity.kt index ef28a675..0c6fef1c 100644 --- a/app/src/main/java/com/remit/jmecustomer/features/beneficiaryDetail/BeneficiaryDetailActivity.kt +++ b/app/src/main/java/com/remit/jmecustomer/features/beneficiaryDetail/BeneficiaryDetailActivity.kt @@ -8,6 +8,9 @@ import com.remit.jmecustomer.databinding.ActivityBeneficiaryDetailBinding import com.remit.jmecustomer.features.beneficiaryDetail.adapters.SendMethodAdapter import com.remit.jmecustomer.features.recipientlisting.view.recipientaddedit.RecipientAddEditActivity import com.remit.jmecustomer.features.recipientmanagement.model.recipientlistingV3.ReceiverInfoV3Model +import com.remit.jmecustomer.features.recipientmanagement.view.recipientaddeditV3.RecipientAddEditV3Activity +import com.remit.jmecustomer.features.sendmoney.model.SendMoneyRequiredDataV3 +import com.remit.jmecustomer.features.sendmoney.view.SendMoneyV2Activity class BeneficiaryDetailActivity : BaseActivity() { @@ -44,9 +47,19 @@ class BeneficiaryDetailActivity : BaseActivity() { } binding.agreeButton.setOnClickListener { - val intent = Intent() - setResult(RESULT_OK, intent) - finish() + val intent = Intent( + this@BeneficiaryDetailActivity, + SendMoneyV2Activity::class.java + ) + val sendMoneyRequiredDataV3 = SendMoneyRequiredDataV3(receiverInfoModel) + intent.putExtra( + RecipientAddEditV3Activity.RECIPIENT_INFO_BUNDLE_KEY_v3, + sendMoneyRequiredDataV3 + ) + startActivityForResult( + intent, + RecipientAddEditV3Activity.RECIPIENT_ACTION_EDIT_REQUEST_CODE_v3 + ) } } diff --git a/app/src/main/java/com/remit/jmecustomer/features/homeV3/adpaters/BannerViewAdapter.kt b/app/src/main/java/com/remit/jmecustomer/features/homeV3/adpaters/BannerViewAdapter.kt new file mode 100644 index 00000000..b7ac0745 --- /dev/null +++ b/app/src/main/java/com/remit/jmecustomer/features/homeV3/adpaters/BannerViewAdapter.kt @@ -0,0 +1,65 @@ +package com.remit.jmecustomer.features.homeV3.adpaters + +import android.content.Context +import android.util.DisplayMetrics +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.remit.jmecustomer.databinding.BannerItemBinding +import com.remit.jmecustomer.features.homeV3.models.BannerModel + +class BannerViewAdapter( + data: List, +) : + RecyclerView.Adapter() { + var data: List + var mContext: Context? = null + + init { + this.data = data + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BannerItemViewHolder { + val binding = BannerItemBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + mContext = parent.context + return BannerItemViewHolder(binding) + } + + override fun onBindViewHolder(holder: BannerItemViewHolder, position: Int) { + val imageURl: String = data[position].bannerIcon + Glide.with(mContext!!) + .load(imageURl).diskCacheStrategy(DiskCacheStrategy.ALL) + .transform(CenterCrop(), RoundedCorners(dpToPx(8, mContext!!))) + .into(holder.bindings.offerItemImgView) + } + + + override fun getItemCount(): Int { + return data.size + } + + private fun dpToPx(dp: Int, context: Context): Int { + val displayMetrics = context.resources.displayMetrics + return Math.round( + dp * (displayMetrics.xdpi / + DisplayMetrics.DENSITY_DEFAULT) + ) + } + + class BannerItemViewHolder(private val binding: BannerItemBinding) : + RecyclerView.ViewHolder(binding.root) { + val bindings: BannerItemBinding = binding + fun bind(item: String) { + + } + } +} diff --git a/app/src/main/java/com/remit/jmecustomer/features/homeV3/adpaters/SendTypeAdapter.kt b/app/src/main/java/com/remit/jmecustomer/features/homeV3/adpaters/SendTypeAdapter.kt index f3cf285e..c8fbe983 100644 --- a/app/src/main/java/com/remit/jmecustomer/features/homeV3/adpaters/SendTypeAdapter.kt +++ b/app/src/main/java/com/remit/jmecustomer/features/homeV3/adpaters/SendTypeAdapter.kt @@ -4,15 +4,22 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.remit.jmecustomer.databinding.RowSendTypeBinding +import com.remit.jmecustomer.features.exrate.model.PaymentModeMapper +import com.remit.jmecustomer.features.exrate.model.datav2.PaymentMode -class SendTypeAdapter(private val items: List) : +class SendTypeAdapter(private var items: MutableList) : RecyclerView.Adapter() { class ViewHolder(private val binding: RowSendTypeBinding) : RecyclerView.ViewHolder(binding.root) { - fun bind(item: String) { - binding.ivText.text = item + fun bind(item: PaymentMode) { + binding.ivIcon.setImageResource( + PaymentModeMapper.getPaymentModeImageFromId( + item.id + ) + ) + binding.ivText.text = item.description } } @@ -31,4 +38,10 @@ class SendTypeAdapter(private val items: List) : } override fun getItemCount(): Int = items.size + + fun setData(serviceAvailable: MutableList) { + if (serviceAvailable != null && serviceAvailable.size > 0) this.items = + serviceAvailable else this.items.clear() + notifyDataSetChanged() + } } \ No newline at end of file diff --git a/app/src/main/java/com/remit/jmecustomer/features/homeV3/models/BannerModel.kt b/app/src/main/java/com/remit/jmecustomer/features/homeV3/models/BannerModel.kt new file mode 100644 index 00000000..b75a7396 --- /dev/null +++ b/app/src/main/java/com/remit/jmecustomer/features/homeV3/models/BannerModel.kt @@ -0,0 +1,3 @@ +package com.remit.jmecustomer.features.homeV3.models + +class BannerModel(var bannerIcon : String) \ No newline at end of file diff --git a/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeActivityV3.kt b/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeActivityV3.kt index 2567bc5e..2edb7569 100644 --- a/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeActivityV3.kt +++ b/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeActivityV3.kt @@ -65,15 +65,16 @@ import com.remit.jmecustomer.features.transactionhistory.presenter.TransactionHi import com.remit.jmecustomer.features.transactionhistory.presenter.TransactionHistoryV2PresenterInterface import com.remit.jmecustomer.features.transactionhistory.view.RemitTransactionHistoryActivity import com.remit.jmecustomer.features.trustdock.view.TrustDockActivity +import com.remit.jmecustomer.features.userprofile.view.ProfileFragment import com.remit.jmecustomer.features.walletstatement.view.WalletStatementV2Activity import com.remit.jmecustomer.features.withdraw.view.WithdrawActivity class HomeActivityV3 : BaseActivity(), HomeParentViewContractV2, HomeV2PresenterInterface.HomeV2ContractInterface, SendMoneyActionListener, - SendMoneyV2ContractInterface , + SendMoneyV2ContractInterface, TransactionHistoryV2PresenterInterface.TransactionHistoryV2ContractInterface { - lateinit var binding: ActivityHomeV3Binding + lateinit var binding: ActivityHomeV3Binding private var pagerAdapter: HomePagerAdapter? = null private val currentFragment: Fragment? = null private val manager: FragmentManager? = null @@ -90,7 +91,7 @@ class HomeActivityV3 : BaseActivity(), HomeParentViewContractV2, private var presenter: SendMoneyV2PresenterInterface? = null private var sendMoneyRequiredData: SendMoneyRequiredDataV3? = null private var presenterTransaction: TransactionHistoryV2Presenter? = null - lateinit var homeFragmentV3 : HomeFragmentV3 + lateinit var homeFragmentV3: HomeFragmentV3 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityHomeV3Binding.inflate(layoutInflater) @@ -112,7 +113,7 @@ class HomeActivityV3 : BaseActivity(), HomeParentViewContractV2, SendMoneyV2ViewModel::class.java ) homeFragmentV3 = HomeFragmentV3() - val fragments = listOf(homeFragmentV3, MyTransfersFragment()) + val fragments = listOf(homeFragmentV3, MyTransfersFragment(), ProfileFragment()) pagerAdapter = HomePagerAdapter(supportFragmentManager, fragments) binding.vpDashboard.adapter = pagerAdapter @@ -146,6 +147,7 @@ class HomeActivityV3 : BaseActivity(), HomeParentViewContractV2, 2 -> { resetTabs() tab.setIcon(R.drawable.ic_transfers_selected) + binding.vpDashboard.currentItem = 2 } } } @@ -720,13 +722,4 @@ class HomeActivityV3 : BaseActivity(), HomeParentViewContractV2, true } else false } - - fun setSendData(sendMoneyRequiredDataV3: SendMoneyRequiredDataV3){ - val factory = SendMoneyViewModelFactory(this, sendMoneyRequiredDataV3) - presenter = ViewModelProviders.of(this, factory).get( - SendMoneyV2ViewModel::class.java - ) - homeFragmentV3.performDefaultAction(factory) - - } } \ No newline at end of file diff --git a/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt b/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt index c07651f2..fe396c86 100644 --- a/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt +++ b/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt @@ -1,56 +1,48 @@ package com.remit.jmecustomer.features.homeV3.view -import android.app.Activity -import android.content.Context +import android.graphics.Rect import android.os.Bundle -import android.os.Handler import android.text.Editable -import android.text.TextWatcher -import android.view.KeyEvent -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup +import android.view.* +import android.view.GestureDetector.SimpleOnGestureListener import android.view.animation.AccelerateDecelerateInterpolator import android.view.animation.Interpolator import android.view.inputmethod.EditorInfo -import android.widget.Button import android.widget.EditText import android.widget.ImageView import android.widget.RelativeLayout -import android.widget.Spinner import android.widget.TextView import android.widget.TextView.OnEditorActionListener -import androidx.cardview.widget.CardView -import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.view.GestureDetectorCompat import androidx.core.view.ViewCompat -import androidx.core.widget.NestedScrollView -import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager -import butterknife.BindView -import butterknife.ButterKnife +import androidx.recyclerview.widget.PagerSnapHelper import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout import com.remit.jmecustomer.R import com.remit.jmecustomer.base.BaseFragment import com.remit.jmecustomer.common.customwidgets.CurrencyFormatterTextWatcher -import com.remit.jmecustomer.common.customwidgets.CustomAlertDialog -import com.remit.jmecustomer.common.customwidgets.JmeTextView import com.remit.jmecustomer.common.customwidgets.exchangecountrylistingdialog.CountryFlagMapper +import com.remit.jmecustomer.common.customwidgets.exchangecountrylistingdialog.ExchangeRateCurrencyListingDialog import com.remit.jmecustomer.databinding.FragmentHomeNewBinding -import com.remit.jmecustomer.features.exrate.model.datav2.ExchangeCalculationModel +import com.remit.jmecustomer.features.exrate.adapter.PaymentModeRvAdapter +import com.remit.jmecustomer.features.exrate.gateway.ExchangeRateGateway +import com.remit.jmecustomer.features.exrate.model.datav2.CountryPaymentService +import com.remit.jmecustomer.features.exrate.model.datav2.PaymentMode +import com.remit.jmecustomer.features.exrate.presenter.ExchangeRatePresenter +import com.remit.jmecustomer.features.exrate.presenter.ExchangeRatePresenterInterface +import com.remit.jmecustomer.features.exrate.presenter.ExchangeRatePresenterInterface.ExchangeRateContractInterfacee +import com.remit.jmecustomer.features.homeV3.adpaters.BannerViewAdapter import com.remit.jmecustomer.features.homeV3.adpaters.SendTypeAdapter -import com.remit.jmecustomer.features.sendmoney.SendMoneyViewModelFactory -import com.remit.jmecustomer.features.sendmoney.model.RewardsPointDTO +import com.remit.jmecustomer.features.homeV3.models.BannerModel import com.remit.jmecustomer.features.sendmoney.model.amountdetail.AmountDetailRelatedDataModel -import com.remit.jmecustomer.features.sendmoney.model.amountdetail.RecipientCurrencyModel -import com.remit.jmecustomer.features.sendmoney.presenter.SendMoneyV2ViewModel -import com.remit.jmecustomer.features.sendmoney.view.SendMoneyActionListener import com.remit.jmecustomer.features.sendmoney.view.amountdetail.AmountDetailExRateCountryListingDialog -import com.remit.jmecustomer.features.sendmoney.view.amountdetail.AmountDetailExRateCountryListingDialog.ExRateCurrencySelectionListener -import com.remit.jmecustomer.utils.Utils +import java.util.* class HomeFragmentV3 : BaseFragment(), View.OnClickListener, - ExRateCurrencySelectionListener, OnEditorActionListener { + OnEditorActionListener, ExchangeRateContractInterfacee, + PaymentModeRvAdapter.OnPaymentModeSelectionListener { + private var scrollPosition: Int = 0 private var _binding: FragmentHomeNewBinding? = null private val binding get() = _binding!! var iv_rewardsPoint: TextInputLayout? = null @@ -66,14 +58,11 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener, private var selectedSendAmount: String? = null private var selectedsendingCurrency: String? = null private var sendAmountTextWatcher: SendAmountTextWatcher? = null - private var recepientAmountTextWatcher: RecipientAmountTextWatcher? = null private var sendCurrencyFormatterTextWatcher: CurrencyFormatterTextWatcher? = null private var recepientCurrencyFormatterTextWatcher: CurrencyFormatterTextWatcher? = null - private var rewardsPointTextWatcher: RewardsPointTextWatcher? = null private var selectedExRateId: String? = null private var selectedExRateWithoutTrunc: String? = null private var selectedTransferAmount: String? = null - private var viewmodel: SendMoneyV2ViewModel? = null private var sendMoneyEditText: TextInputEditText? = null private var recieveMoneyEditText: TextInputEditText? = null private var continueBtn: RelativeLayout? = null @@ -83,6 +72,16 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener, private var recepientFlagImageView: ImageView? = null private var recepientCurrencyTextView: TextView? = null private var btnText: TextView? = null + lateinit var presenter: ExchangeRatePresenterInterface + private var countryListingDialog: ExchangeRateCurrencyListingDialog? = null + + private var sendMoneyTextWatcher: SendAmountTextWatcher? = null + private var receiveMoneyTextWatcher: ReceiveAmountTextWatcher? = null + private var gestureDetector: GestureDetectorCompat? = null + private var myViewGestureDetector: AmountChangeAndFocusOutDetector? = null + + private val paymentModeRvAdapter: PaymentModeRvAdapter? = null + private var sendTypeAdapter: SendTypeAdapter? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -91,7 +90,8 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener, _binding = FragmentHomeNewBinding.inflate(inflater, container, false) setUpData() init() - performDefaultAction(null) + setBannerData() + performDefaultAction() return binding.root } @@ -99,15 +99,21 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener, super.onViewCreated(view, savedInstanceState) } + private fun performDefaultAction() { + showProgressBar(true, getString(R.string.processing_request_text)) + presenter.getExrateRelatedData() + } + private fun setUpData() { - var list = listOf("Cash Pickup", "Bank Deposit", "Mobile Wallet") + val list: MutableList = ArrayList() val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false) binding.rvSendType.layoutManager = layoutManager - var adapter = SendTypeAdapter(list) - binding.rvSendType.adapter = adapter + sendTypeAdapter = SendTypeAdapter(list) + binding.rvSendType.adapter = sendTypeAdapter } private fun init() { + presenter = ExchangeRatePresenter(this, ExchangeRateGateway()) sendMoneyEditText = binding.sendAmountEdTxt recieveMoneyEditText = binding.receiveAmountEdTxt transferFeeTxtView = binding.tvTransfer1 @@ -117,417 +123,273 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener, recepientCurrencyTextView = binding.tvCurrency2 countrySelectionSpinner = binding.ivCurrency2; btnText = binding.btnText - viewmodel = ViewModelProvider(requireActivity())[SendMoneyV2ViewModel::class.java] - sendAmountTextWatcher = SendAmountTextWatcher() - recepientAmountTextWatcher = RecipientAmountTextWatcher() interpolator = AccelerateDecelerateInterpolator() - setupRecyclerView() - registerTextWatchers(true) - viewmodel!!.fetchRewardsLiveData() - viewmodel!!.subscribeToRewardsPoint().observe( - viewLifecycleOwner - ) { rewardsPointDTO: RewardsPointDTO -> - updateRewardDetails( - rewardsPointDTO - ) - } - } - - override fun onStart() { - super.onStart() - continueBtn!!.setOnClickListener(this) - recieveMoneyEditText!!.setOnEditorActionListener(this) - sendMoneyEditText!!.setOnEditorActionListener(this) - countrySelectionSpinner!!.setOnClickListener(this) -// recepientCurrencyTextView!!.setOnClickListener(this) -// countrySelectionSpinnerArrow!!.setOnClickListener(this) -// ed_rewardsPoint!!.setOnClickListener(this) -// ed_rewardsPoint!!.setOnEditorActionListener(this) - } - - override fun onStop() { - super.onStop() - continueBtn!!.setOnClickListener(null) - recieveMoneyEditText!!.setOnEditorActionListener(null) - sendMoneyEditText!!.setOnEditorActionListener(null) - countrySelectionSpinner!!.setOnClickListener(null) -// recepientCurrencyTextView!!.setOnClickListener(null) -// countrySelectionSpinnerArrow!!.setOnClickListener(null) -// ed_rewardsPoint!!.setOnClickListener(null) -// ed_rewardsPoint!!.setOnEditorActionListener(null) - } - - override fun onAttach(context: Context) { - super.onAttach(context) - (context as SendMoneyActionListener).updateCurrentIndexFrom(R.layout.fragment_amount_detail_send_money_v2) - } - - override fun onAttach(activity: Activity) { - super.onAttach(activity) - (activity as SendMoneyActionListener).updateCurrentIndexFrom(R.layout.fragment_amount_detail_send_money_v2) - } - - override fun onDetach() { - super.onDetach() - (activity as SendMoneyActionListener?)!!.updateCurrentScreenByLayoutId(R.layout.fragment_amount_detail_send_money_v2) + sendMoneyTextWatcher = SendAmountTextWatcher(sendMoneyEditText) + receiveMoneyTextWatcher = ReceiveAmountTextWatcher(recieveMoneyEditText) + myViewGestureDetector = AmountChangeAndFocusOutDetector() + gestureDetector = GestureDetectorCompat(requireContext(), myViewGestureDetector) } - override fun onDestroy() { - registerTextWatchers(false) - super.onDestroy() + override fun onClick(v: View) { + when (v.id) { + R.id.agreeButton -> { + (requireActivity() as HomeActivityV3).binding.vpDashboard.currentItem = 1 + } + R.id.countrySelectionSpinner, R.id.recepientCurrencyTextView, R.id.iv_currency_2 -> showCountryListinDialog() + R.id.exRateCalculateButton -> presenter.calcExrate() + } } - private fun setupRecyclerView() {} - - private fun showCurrencyListingDialog() { - hideKeyBoard() - if (amountDetailRelatedData!!.availableCurrencyData == null || amountDetailRelatedData!!.availableCurrencyData.isEmpty()) return - if (exRateCountryListingDialog == null) exRateCountryListingDialog = - AmountDetailExRateCountryListingDialog() - exRateCountryListingDialog!!.setListener(this) - exRateCountryListingDialog!!.setCountryPaymentData(amountDetailRelatedData!!.availableCurrencyData) - if (!exRateCountryListingDialog!!.isAdded) exRateCountryListingDialog!!.show( - activity!!.supportFragmentManager, + private fun showCountryListinDialog() { + if (countryListingDialog == null) countryListingDialog = ExchangeRateCurrencyListingDialog() + countryListingDialog?.setCountryPaymentData(presenter.getAvailableCountryRelatedCurrency()) + countryListingDialog?.setListener(ExchangeRateCurrencyListingDialog.CountrySelectionListener { countryPaymentService -> + presenter.setCountryRelatedCurrencyData(countryPaymentService) + countryListingDialog?.dismiss() + }) + if (!countryListingDialog!!.isAdded) countryListingDialog?.show( + requireActivity().supportFragmentManager, "GenericTextListingDialog" ) } - fun performDefaultAction(sendMoneyViewModelFactory: SendMoneyViewModelFactory?) { - - if(sendMoneyViewModelFactory != null) { - viewmodel = - ViewModelProvider(this, sendMoneyViewModelFactory)[SendMoneyV2ViewModel::class.java] - } - shouldCaulatedByRecipient = false - showFootNote(viewmodel!!.footNote) - viewmodel!!.subscribeToAmountRelatedData().observe( - viewLifecycleOwner - ) { data: AmountDetailRelatedDataModel? -> - amountDetailRelatedData = data - if (amountDetailRelatedData == null || amountDetailRelatedData!!.defaultSelectedCurrency == null) { - showSelectedCurrency("", getString(R.string.na_text)) - Handler().postDelayed({ - showPopUpMessage( - getString(R.string.no_payout_currency_defined_error), - CustomAlertDialog.AlertType.ALERT, - null - ) - }, 350) - continueBtn!!.setOnClickListener(null) - } else { - showSelectedCurrency( - amountDetailRelatedData!!.defaultSelectedCurrency.countryCode, - amountDetailRelatedData!!.defaultSelectedCurrency.currencyCode - ) - updateButtonToCalculate(true) - } - } - viewmodel!!.subscribeToExRateData().observe( - viewLifecycleOwner - ) { data: ExchangeCalculationModel -> - selectedTransferFeeAmount = data.scCharge - selectedExRate = data.exRateDisplay - selectedExRateWithoutTrunc = data.exRate - selectedRecipientAmount = data.getpAmt() - selectedSendAmount = data.collAmt - selectedsendingCurrency = data.collCurr - selectedExRateId = data.exrateId - selectedTransferAmount = data.getsAmt() - val transferDisplay = - " -" + Utils.formatCurrency( - selectedTransferFeeAmount - ) + " " + selectedsendingCurrency + "\n (" + getString(R.string.transfer_fee_included_text) + ")" - val exRateDisplay = - """ $selectedExRate - (${getString(R.string.current_exchange_rate_text)})""" - showTransferfeeAndExRate(true, transferDisplay, exRateDisplay, "") - showSendAndRecieveAmount(selectedSendAmount, selectedRecipientAmount) - updateButtonToCalculate(false) - showFootNote(viewmodel!!.footNote) + private fun startSendAmountListener(action: Boolean) { + if (action) { + binding.sendAmountEdTxt.addTextChangedListener(sendMoneyTextWatcher) + } else { + binding.sendAmountEdTxt.removeTextChangedListener(sendMoneyTextWatcher) } } - override fun onClick(v: View) { - when (v.id) { - R.id.agreeButton -> if (shouldCalculateExRate) { - forex - } else { - if (validateAll()) { - hideKeyBoard() - sendMoneyEditText!!.clearFocus() - recieveMoneyEditText!!.clearFocus() - viewmodel!!.setSendingAmount( - sendMoneyEditText!!.text.toString(), - amountDetailRelatedData!!.defaultSelectedCurrency.currencyCode, - selectedExRateWithoutTrunc, - selectedRecipientAmount, - selectedTransferFeeAmount, - shouldCaulatedByRecipient, - selectedExRateId, - selectedTransferAmount - ) - // ((SendMoneyActionListener) getActivity()).showTransactionReviewPage(); - (activity as SendMoneyActionListener?)!!.showCCDIPage() - } - } - R.id.countrySelectionSpinner, R.id.recepientCurrencyTextView, R.id.countrySelectionSpinnerArrow -> if (!amountDetailRelatedData!!.availableCurrencyData.isEmpty()) showCurrencyListingDialog() + private fun startReceiveAmountListener(action: Boolean) { + if (action) { + binding.receiveAmountEdTxt.addTextChangedListener(receiveMoneyTextWatcher) + } else { + binding.receiveAmountEdTxt.removeTextChangedListener(receiveMoneyTextWatcher) } } - private val forex: Unit - private get() { - if (shouldCaulatedByRecipient && !validateAmountIsNotEmpty(recieveMoneyEditText!!.text.toString())) { - showToastMessage(getString(R.string.sending_amount_error)) - return - } - if (!shouldCaulatedByRecipient && !validateAmountIsNotEmpty(sendMoneyEditText!!.text.toString())) { - showToastMessage(getString(R.string.receiving_amount_error)) - return - } - if (amountDetailRelatedData != null) { - viewmodel!!.getForex( - recieveMoneyEditText!!.text.toString(), - sendMoneyEditText!!.text.toString(), - shouldCaulatedByRecipient, - amountDetailRelatedData!!.defaultSelectedCurrency.currencyCode, - binding.edRewardsPoint!!.text.toString() - ); - } else { - (requireActivity() as HomeActivityV3).binding.vpDashboard.currentItem = 2 - } - } + override fun showPayoutAmount(pAmount: String?) { + startReceiveAmountListener(false) + binding.receiveAmountEdTxt.setText(pAmount) + startReceiveAmountListener(true) + } - private fun showSelectedCurrency( - selectedCountryCode: String?, - selectedCountryCurrency: String? + override fun showCollectionAmount(pAmount: String?) { + startSendAmountListener(false) + binding.sendAmountEdTxt.setText(pAmount) + startSendAmountListener(true) + } + + override fun showSelectedPayoutMode( + serviceAvailable: MutableList, + selectedIndex: Int ) { - var flagResId = -1 - if (selectedCountryCode != null) flagResId = - CountryFlagMapper.getFlagFromCountryCode(selectedCountryCode) - if (flagResId != -1) recepientFlagImageView!!.setBackgroundResource(flagResId) else recepientFlagImageView!!.setBackgroundResource( - 0 + sendTypeAdapter?.setData(serviceAvailable) +// sendTypeAdapter.setSelectedItem(selectedIndex) + } + + override fun showSelectedPayoutCurrency(selectedPayoutCountryCurrency: CountryPaymentService) { + recepientCurrencyTextView!!.text = selectedPayoutCountryCurrency.currency + recepientFlagImageView!!.setImageResource( + CountryFlagMapper.getFlagFromCountryCode( + selectedPayoutCountryCurrency.countryCode + ) ) - if (selectedCountryCurrency != null) recepientCurrencyTextView!!.text = - selectedCountryCurrency } - private fun showTransferfeeAndExRate( - action: Boolean, - transferDisplay: String, - exRateDisplay: String, - discountValue: String + + override fun showTransferChargeAndExrate( + chargeAmount: String?, + exRate: String?, + formattedExRate: String?, + playAnimation: Boolean ) { - if (action) { - if (exchangeRateTxtView!!.visibility == View.VISIBLE) exchangeRateTxtView!!.visibility = - View.INVISIBLE - exchangeRateTxtView!!.text = exRateDisplay + if (playAnimation) { + exchangeRateTxtView!!.visibility = View.INVISIBLE + exchangeRateTxtView!!.text = exRate exchangeRateTxtView!!.translationY = exchangeRateTxtView!!.height.toFloat() exchangeRateTxtView!!.visibility = View.VISIBLE ViewCompat.animate(exchangeRateTxtView!!).translationY(0f).setDuration(550) .setInterpolator( interpolator ).start() - if (transferFeeTxtView!!.visibility == View.VISIBLE) transferFeeTxtView!!.visibility = - View.INVISIBLE - transferFeeTxtView!!.text = transferDisplay + transferFeeTxtView!!.visibility = View.INVISIBLE + transferFeeTxtView!!.text = chargeAmount transferFeeTxtView!!.translationY = transferFeeTxtView!!.height.toFloat() transferFeeTxtView!!.visibility = View.VISIBLE ViewCompat.animate(transferFeeTxtView!!).translationY(0f).setDuration(550) .setInterpolator( interpolator ).start() +// jmeExratePC.setVisibility(View.INVISIBLE) +// jmeExratePC.setAlpha(0f) +// jmeExratePC.setText(formattedExRate) +// jmeExratePC.setVisibility(View.INVISIBLE) +// jmeExratePC.animate().alpha(1f).setDuration(500).withLayer().start() } else { - if (exchangeRateTxtView!!.visibility == View.VISIBLE) exchangeRateTxtView!!.visibility = - View.INVISIBLE - if (transferFeeTxtView!!.visibility == View.VISIBLE) transferFeeTxtView!!.visibility = - View.INVISIBLE + transferFeeTxtView!!.text = chargeAmount + exchangeRateTxtView!!.text = exRate +// jmeExratePC.setText(formattedExRate) } } - private fun showSendAndRecieveAmount(sendAmount: String?, recieveAmount: String?) { - updateSendAmount(sendAmount) - updateRecievingAmount(recieveAmount) + override fun showExrateView(task: Runnable?) { + showProgressBar(false, getString(R.string.processing_request_text)) + presenter.onExRateViewLoadedSuccessfully() } - private fun validateAmountIsNotEmpty(amount: String?): Boolean { - return amount != null && amount.length > 0 + override fun showFootNote(footNote: String) { +// if (footNote.isEmpty()) { +// idExFootNoteContainer.setVisibility(View.INVISIBLE) +// } else { +// exRateFootNoteText.setText(footNote) +// idExFootNoteContainer.setVisibility(View.VISIBLE) +// } } - override fun onCurrencySelected(selectedCurrency: RecipientCurrencyModel) { - if (amountDetailRelatedData != null && amountDetailRelatedData!!.defaultSelectedCurrency != null && amountDetailRelatedData!!.defaultSelectedCurrency.countryName != null && amountDetailRelatedData!!.defaultSelectedCurrency.currencyCode != null && amountDetailRelatedData!!.defaultSelectedCurrency.countryName.length > 0 && amountDetailRelatedData!!.defaultSelectedCurrency.currencyCode.length > 0) { - if (!amountDetailRelatedData!!.defaultSelectedCurrency.currencyCode.equals( - selectedCurrency.currencyCode, - ignoreCase = true - ) && !amountDetailRelatedData!!.defaultSelectedCurrency.countryName.equals( - selectedCurrency.countryCode, - ignoreCase = true - ) - ) { - updateRecievingAmount("") - updateButtonToCalculate(true) - shouldCaulatedByRecipient = false - } else forex - } - amountDetailRelatedData!!.defaultSelectedCurrency = selectedCurrency - if (exRateCountryListingDialog != null) exRateCountryListingDialog!!.dismiss() - exRateCountryListingDialog = null - showSelectedCurrency( - amountDetailRelatedData!!.defaultSelectedCurrency.countryCode, - amountDetailRelatedData!!.defaultSelectedCurrency.currencyCode - ) + override fun onPaymentModeSelected(selectedData: PaymentMode?) { + presenter.setPaymentMode(selectedData) + } + + override fun onStart() { + super.onStart() +// exRateCalculateButton.setOnClickListener(this) +// iv_back.setOnClickListener(this) + binding.receiveAmountEdTxt.setOnEditorActionListener(this) + binding.sendAmountEdTxt.setOnEditorActionListener(this) + countrySelectionSpinner!!.setOnClickListener(this) + recepientCurrencyTextView!!.setOnClickListener(this) + recepientFlagImageView?.setOnClickListener(this) + binding.agreeButton.setOnClickListener(this) } override fun onEditorAction(v: TextView, actionId: Int, event: KeyEvent?): Boolean { when (v.id) { - R.id.sendAmountEdTxt, R.id.receiveAmountEdTxt -> { + R.id.sendAmountEdTxt -> { if (actionId == EditorInfo.IME_ACTION_DONE) { - hideKeyBoard() - forex + presenter.setCalcByPayoutAmount(false) + presenter.calcExrate() + return true } - return true - } - R.id.ed_rewardsPoint -> { if (actionId == EditorInfo.IME_ACTION_DONE) { - hideKeyBoard() - forex + presenter.setCalcByPayoutAmount(true) + presenter.calcExrate() + return true } + } + R.id.receiveAmountEdTxt -> if (actionId == EditorInfo.IME_ACTION_DONE) { + presenter.setCalcByPayoutAmount(true) + presenter.calcExrate() return true } } return false } - private fun validateAll(): Boolean { - return validateAmountIsNotEmpty(sendMoneyEditText!!.text.toString()) && validateAmountIsNotEmpty( - recieveMoneyEditText!!.text.toString() - ) - } - - private fun updateButtonToCalculate(action: Boolean) { - shouldCalculateExRate = action - if (action) btnText?.text = - getString(R.string.calculate_text) else btnText?.text = - getString(R.string.continue_text) - } - - private fun updateSendAmount(amount: String?) { - registerAvailableTextWatchersForEditText(sendMoneyEditText, false) - sendMoneyEditText!!.setText(Utils.formatCurrency(amount)) - registerAvailableTextWatchersForEditText(sendMoneyEditText, true) - } - - private fun updateRecievingAmount(amount: String?) { - registerAvailableTextWatchersForEditText(recieveMoneyEditText, false) - recieveMoneyEditText!!.setText(Utils.formatCurrency(amount)) - registerAvailableTextWatchersForEditText(recieveMoneyEditText, true) - } - - private fun registerTextWatchers(action: Boolean) { - if (action) { - if (sendAmountTextWatcher == null) sendAmountTextWatcher = SendAmountTextWatcher() - if (recepientAmountTextWatcher == null) recepientAmountTextWatcher = - RecipientAmountTextWatcher() - if (recepientCurrencyFormatterTextWatcher == null) recepientCurrencyFormatterTextWatcher = - CurrencyFormatterTextWatcher(recieveMoneyEditText) - if (sendCurrencyFormatterTextWatcher == null) sendCurrencyFormatterTextWatcher = - CurrencyFormatterTextWatcher(sendMoneyEditText) - if (rewardsPointTextWatcher == null) rewardsPointTextWatcher = RewardsPointTextWatcher() - sendMoneyEditText!!.addTextChangedListener(sendAmountTextWatcher) - recieveMoneyEditText!!.addTextChangedListener(recepientAmountTextWatcher) - sendMoneyEditText!!.addTextChangedListener(sendCurrencyFormatterTextWatcher) - recieveMoneyEditText!!.addTextChangedListener(recepientCurrencyFormatterTextWatcher) - binding.edRewardsPoint!!.addTextChangedListener(rewardsPointTextWatcher) - } else { - sendMoneyEditText!!.removeTextChangedListener(sendAmountTextWatcher) - recieveMoneyEditText!!.removeTextChangedListener(recepientAmountTextWatcher) - sendMoneyEditText!!.removeTextChangedListener(sendCurrencyFormatterTextWatcher) - recieveMoneyEditText!!.removeTextChangedListener(recepientCurrencyFormatterTextWatcher) - binding.edRewardsPoint!!.removeTextChangedListener(rewardsPointTextWatcher) + inner class AmountChangeAndFocusOutDetector : SimpleOnGestureListener() { + override fun onSingleTapUp(e: MotionEvent): Boolean { + if (e.action == MotionEvent.ACTION_UP) { + if (hasValidOutsideAmountWidgetTouch(e.x, e.y)) { + presenter.calcExrate() + return true + } + } + return super.onSingleTapUp(e) } - } - private fun registerAvailableTextWatchersForEditText(editText: EditText?, action: Boolean) { - when (editText!!.id) { - R.id.sendAmountEdTxt -> if (action) sendMoneyEditText!!.addTextChangedListener( - sendAmountTextWatcher - ) else sendMoneyEditText!!.removeTextChangedListener(sendAmountTextWatcher) - R.id.receiveAmountEdTxt -> if (action) recieveMoneyEditText!!.addTextChangedListener( - recepientAmountTextWatcher - ) else recieveMoneyEditText!!.removeTextChangedListener(recepientAmountTextWatcher) + private fun hasValidOutsideAmountWidgetTouch(x: Float, y: Float): Boolean { + val posX = x.toInt() + val posY = y.toInt() + val sendMoneyLeftAndTopCoordinates = IntArray(2) + val receiveMoneyLeftAndTopCoordinates = IntArray(2) + +// sendMoneyViewContainer.getLocationOnScreen(sendMoneyLeftAndTopCoordinates); + val sendMoneyBoundRect = Rect( + sendMoneyLeftAndTopCoordinates[0], sendMoneyLeftAndTopCoordinates[1], + sendMoneyLeftAndTopCoordinates[0] + binding.sendAmountEdTxt.getMeasuredWidth(), + sendMoneyLeftAndTopCoordinates[1] + binding.sendAmountEdTxt.getMeasuredHeight() + ) + val receiveMoneyBoundRect = Rect( + receiveMoneyLeftAndTopCoordinates[0], receiveMoneyLeftAndTopCoordinates[1], + receiveMoneyLeftAndTopCoordinates[0] + binding.receiveAmountEdTxt.getMeasuredWidth(), + receiveMoneyLeftAndTopCoordinates[1] + binding.receiveAmountEdTxt.getMeasuredHeight() + ) + return ((binding.receiveAmountEdTxt.hasFocus() || binding.sendAmountEdTxt.hasFocus()) + && !sendMoneyBoundRect.contains(posX, posY) + && !receiveMoneyBoundRect.contains(posX, posY) + ) } } - private inner class SendAmountTextWatcher : TextWatcher { + + inner class SendAmountTextWatcher(editText: EditText?) : + CurrencyFormatterTextWatcher(editText) { override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {} override fun afterTextChanged(s: Editable) { - shouldCaulatedByRecipient = false - updateRecievingAmount("") - updateButtonToCalculate(true) - showTransferfeeAndExRate(false, "", "", "") + super.afterTextChanged(s) + presenter.setCalcByPayoutAmount(false) + presenter.setCAmount(s.toString()) } } - private inner class RecipientAmountTextWatcher : TextWatcher { + inner class ReceiveAmountTextWatcher(editText: EditText?) : + CurrencyFormatterTextWatcher(editText) { override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {} override fun afterTextChanged(s: Editable) { - shouldCaulatedByRecipient = true - updateSendAmount("") - updateButtonToCalculate(true) - showTransferfeeAndExRate(false, "", "", "") + super.afterTextChanged(s) + presenter.setCalcByPayoutAmount(true) + presenter.setPAmount(s.toString()) } } - private inner class RewardsPointTextWatcher : TextWatcher { - override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} - override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { - val strEnteredVal = binding.edRewardsPoint!!.text.toString() - if (!strEnteredVal.isEmpty()) { - val num = strEnteredVal.toInt() - if (num > rewardPoint!!.toInt()) { - iv_rewardsPoint!!.error = "You cannot use more than $rewardPoint" - continueBtn!!.isEnabled = false - } else { - iv_rewardsPoint!!.error = null - continueBtn!!.isEnabled = true - } - } - } + fun setBannerData() { + val data: MutableList = ArrayList() + var url = arrayOf( + "https://cdn.imepay.com.np:9001/Handler/AdminImageHandler.ashx?img=GF84cX%2fW3XJc0WxXb93%2fjgTfdYUWuYswsB5R6endZc84sA%2bJ9cUB06Km7M9P1ULW," + + "https://cdn.imepay.com.np:9001/Handler/AdminImageHandler.ashx?img=GF84cX%2fW3XJc0WxXb93%2fjgTfdYUWuYswsB5R6endZc84sA%2bJ9cUB06Km7M9P1ULW," + + "https://cdn.imepay.com.np:9001/Handler/AdminImageHandler.ashx?img=GF84cX%2fW3XJc0WxXb93%2fjgTfdYUWuYswsB5R6endZc84sA%2bJ9cUB06Km7M9P1ULW" + ) - override fun afterTextChanged(s: Editable) { - shouldCaulatedByRecipient = false - updateRecievingAmount("") - updateButtonToCalculate(true) - showTransferfeeAndExRate(false, "", "", "") + for (i in url) { + val bannerModel = BannerModel(i) + data.add(bannerModel) } - } + val bannerViewAdapter = BannerViewAdapter(data) - class CouponDetailViewDTO(var couponName: String, var appliedAmount: String) { - override fun toString(): String { - return "CouponDetailViewDTO{" + - "couponName='" + couponName + '\'' + - ", appliedAmount='" + appliedAmount + '\'' + - '}' + val lm = LinearLayoutManager( + binding.bannerView.getContext(), + LinearLayoutManager.HORIZONTAL, + false + ) + binding.bannerView.layoutManager = lm + binding.bannerView.adapter = bannerViewAdapter + binding.bannerView.setOnFlingListener(null) + val snapHelper = PagerSnapHelper() + snapHelper.attachToRecyclerView(binding.bannerView) + + if (data.size > 1) { +// bannerView.addItemDecoration(new LinePagerIndicatorDecoration()); + binding.indicator.attachToRecyclerView(binding.bannerView, snapHelper) } - } - fun showFootNote(footNote: String?) { -// if (footNote == null || footNote.isEmpty()) { -// idSendMoneyFootNoteContainer!!.visibility = View.INVISIBLE -// } else { -// sendMoneyNoteText!!.text = footNote -// idSendMoneyFootNoteContainer!!.visibility = View.VISIBLE -// } - } - - fun updateRewardDetails(rewardsPointDTO: RewardsPointDTO) { - if (rewardsPointDTO.showRewardPoint.equals("y", ignoreCase = true)) { - binding.rewardsPointsContainer!!.visibility = View.VISIBLE - //pointsAvailableText.setText("You have " + rewardsPointDTO.getPoint() + " reward points available"); - binding.pointsAvailableText!!.text = rewardsPointDTO.rewardMessage - rewardPoint = rewardsPointDTO.point - } + val timer = Timer() + timer.scheduleAtFixedRate(object : TimerTask() { + override fun run() { + if (scrollPosition >= data.size) scrollPosition = 0 + binding.bannerView.post(Runnable { // scrollPosition = lm.findFirstVisibleItemPosition(); + ++scrollPosition + if (scrollPosition > data.size - 1) { + scrollPosition = 0 + binding.bannerView.scrollToPosition(scrollPosition) + } else { + binding.bannerView.smoothScrollToPosition(scrollPosition) + } + }) + } + }, 500, 3500) } } \ No newline at end of file diff --git a/app/src/main/java/com/remit/jmecustomer/features/myTransfers/adapters/MyBeneficiariesAdapter.kt b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/adapters/MyBeneficiariesAdapter.kt index d5ec0ca0..7c58201f 100644 --- a/app/src/main/java/com/remit/jmecustomer/features/myTransfers/adapters/MyBeneficiariesAdapter.kt +++ b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/adapters/MyBeneficiariesAdapter.kt @@ -40,13 +40,12 @@ class MyBeneficiariesAdapter(private var data: MutableList override fun onBindViewHolder(holder: ViewHolder, position: Int) { val item = data[position] holder.bindings.rvInitials.setOnClickListener { - val activity : HomeActivityV3 = mContext as HomeActivityV3 - var intent = Intent(mContext, BeneficiaryDetailActivity::class.java) - intent.putExtra("receiverInfoModel", item) - activity.startActivityForResult(intent , 101) - activity.setSendData(SendMoneyRequiredDataV3(item)) + + } + holder.bindings.constMain.setOnClickListener{ + listener?.onRecipientSelected(item) } - holder.itemView.setOnClickListener{ + holder.bindings.rvInitials.setOnClickListener{ listener?.onRecipientSelected(item) } holder.bindings.tvName.text = item.fullName diff --git a/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt index 16e556d8..ffda855e 100644 --- a/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt +++ b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt @@ -19,6 +19,7 @@ import com.remit.jmecustomer.common.customwidgets.common.GenericEditTextPromptDi import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog.GenericDialogPromptListener import com.remit.jmecustomer.databinding.FragmentMyTransfersBinding +import com.remit.jmecustomer.features.beneficiaryDetail.BeneficiaryDetailActivity import com.remit.jmecustomer.features.homeV3.view.HomeActivityV3 import com.remit.jmecustomer.features.inboundreceipt.view.InboundRemitReceiptActivity import com.remit.jmecustomer.features.myTransfers.adapters.RecentTransactionsAdapter @@ -47,7 +48,7 @@ class MyTransfersFragment : BaseFragment(), private var adapter: MyBeneficiariesAdapter? = null private var recentAdapter: RecentTransactionsAdapter? = null - var presenter: RecipientListingV3PresenterInterface? = null + var presenter: RecipientListingV3PresenterInterface? = null private var searchEditTextTextWatcher: SearchEditTextTextWatcher? = null private var _binding: FragmentMyTransfersBinding? = null @@ -80,7 +81,7 @@ class MyTransfersFragment : BaseFragment(), val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false) binding.recipientListRv.layoutManager = layoutManager var data: ArrayList = ArrayList() - adapter = MyBeneficiariesAdapter(data , this) + adapter = MyBeneficiariesAdapter(data, this) binding.recipientListRv.adapter = adapter val layoutManagerVertical = LinearLayoutManager(activity) @@ -95,8 +96,6 @@ class MyTransfersFragment : BaseFragment(), override fun onStart() { super.onStart() - binding.edtSearchTransfers!!.addTextChangedListener(searchEditTextTextWatcher) - binding.addRecipientView.setOnClickListener(this) } override fun onStop() { @@ -113,6 +112,9 @@ class MyTransfersFragment : BaseFragment(), presenterTransaction = ViewModelProvider(requireActivity()).get( TransactionHistoryV2Presenter::class.java ) + + binding.edtSearchTransfers!!.addTextChangedListener(searchEditTextTextWatcher) + binding.addRecipientView.setOnClickListener(this) } private fun performDefaultAction(savedInstance: Bundle?) { @@ -128,7 +130,7 @@ class MyTransfersFragment : BaseFragment(), } - override fun showAllRecipientToUser( + override fun showAllRecipientToUser( recipientInfoModelList: MutableList, changeLayoutBehavior: Boolean ) { @@ -151,7 +153,7 @@ class MyTransfersFragment : BaseFragment(), override fun onEmailCodeNegativeButtonPressed() {} - override fun onEmailCodePositiveBtnPressed(emailCode: String?) { + override fun onEmailCodePositiveBtnPressed(emailCode: String?) { presenter?.verifyEmailCode(emailCode) } @@ -179,7 +181,7 @@ class MyTransfersFragment : BaseFragment(), ) } - override fun redirectToSendMoney(sendMoneyRequiredDataV3: SendMoneyRequiredDataV3?) { + override fun redirectToSendMoney(sendMoneyRequiredDataV3: SendMoneyRequiredDataV3?) { // val intent = Intent(requireContext(), SendMoneyV2Activity::class.java) // intent.putExtra( // RecipientAddEditV3Activity.RECIPIENT_INFO_BUNDLE_KEY_v3, @@ -189,10 +191,9 @@ class MyTransfersFragment : BaseFragment(), // intent, // RecipientAddEditV3Activity.RECIPIENT_ACTION_EDIT_REQUEST_CODE_v3 // ) - (requireActivity() as HomeActivityV3).binding.vpDashboard.currentItem = 0 } - override fun proceedToEditRecipient(recipientInfoModel: ReceiverInfoV3Model) { + override fun proceedToEditRecipient(recipientInfoModel: ReceiverInfoV3Model) { val intent = Intent(requireContext(), RecipientAddEditV3Activity::class.java) intent.putExtra(RecipientAddEditV3Activity.RECIPIENT_INFO_BUNDLE_KEY_v3, recipientInfoModel) startActivityForResult( @@ -230,15 +231,18 @@ class MyTransfersFragment : BaseFragment(), ) } - override fun onRecipientSelected(recipientInfoModel: ReceiverInfoV3Model) { - if (recipientInfoModel.hasVerifiedOTP) { - presenter!!.saveSelectedRecipientInfomation(recipientInfoModel) - } else { - proceedToShowTermsConditions(recipientInfoModel) - } + override fun onRecipientSelected(recipientInfoModel: ReceiverInfoV3Model) { +// if (recipientInfoModel.hasVerifiedOTP) { +// presenter!!.saveSelectedRecipientInfomation(recipientInfoModel) +// } else { +// proceedToShowTermsConditions(recipientInfoModel) +// } + val intent = Intent(requireActivity(), BeneficiaryDetailActivity::class.java) + intent.putExtra("receiverInfoModel", recipientInfoModel) + startActivity(intent) } - override fun proceedToDeleteRecipient(receiverInfoV3Model: ReceiverInfoV3Model) { + override fun proceedToDeleteRecipient(receiverInfoV3Model: ReceiverInfoV3Model) { showBeneficiaryDeleteConfirmDialog(receiverInfoV3Model) } @@ -262,9 +266,9 @@ class MyTransfersFragment : BaseFragment(), } - internal class SearchEditTextTextWatcher : TextWatcherAdapter() { + inner class SearchEditTextTextWatcher : TextWatcherAdapter() { override fun onTextUpdated(text: String) { -// this.presenter.searchForReciever(text) + presenter?.searchForReciever(text) } } diff --git a/app/src/main/java/com/remit/jmecustomer/features/userprofile/view/ProfileFragment.kt b/app/src/main/java/com/remit/jmecustomer/features/userprofile/view/ProfileFragment.kt new file mode 100644 index 00000000..f3ba5974 --- /dev/null +++ b/app/src/main/java/com/remit/jmecustomer/features/userprofile/view/ProfileFragment.kt @@ -0,0 +1,110 @@ +package com.remit.jmecustomer.features.userprofile.view + +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.remit.jmecustomer.R +import com.remit.jmecustomer.base.BaseFragment +import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog +import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog.GenericDialogPromptListener +import com.remit.jmecustomer.databinding.FragmentProfileBinding +import com.remit.jmecustomer.features.aboutscreen.view.AboutJMERemit +import com.remit.jmecustomer.features.customersupport.view.CustomerSupportFragment +import com.remit.jmecustomer.features.depositinfo.view.DepositInfo +import com.remit.jmecustomer.features.homeV3.view.HomeActivityV3 +import com.remit.jmecustomer.features.homeV3.view.HomeFragmentV3 +import com.remit.jmecustomer.features.loyaltypoints.view.LoyaltyPointsActivity +import com.remit.jmecustomer.features.mynotifications.view.MyNotificationActivity +import com.remit.jmecustomer.features.settings.view.SettingsView +import com.remit.jmecustomer.features.walletstatement.view.WalletStatementV2Activity + +class ProfileFragment : BaseFragment(), View.OnClickListener { + private var _binding: FragmentProfileBinding? = null + private val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + _binding = FragmentProfileBinding.inflate(inflater, container, false) + init() + return binding.root + } + + fun init() { + binding.llPaymentLayout.setOnClickListener(this) + binding.llAboutUsLayout.setOnClickListener(this) + binding.llFaqLayout.setOnClickListener(this) + binding.rlLogout.setOnClickListener(this) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + } + + override fun onClick(view: View) { + when (view.id) { + R.id.ll_faq_layout -> { + val newFragment = CustomerSupportFragment.newInstance() + newFragment.show(requireActivity().supportFragmentManager, "dialog") + } + R.id.ll_about_us_layout -> startActivity( + Intent( + requireActivity(), + AboutJMERemit::class.java + ) + ) + R.id.view_setting -> startActivity(Intent(requireActivity(), SettingsView::class.java)) + R.id.rl_logout -> { + showLogoutConfirmationDialog() + } + R.id.view_account_statement -> startActivity( + Intent( + requireActivity(), + WalletStatementV2Activity::class.java + ) + ) + R.id.iv_notification -> startActivity( + Intent( + requireActivity(), + MyNotificationActivity::class.java + ) + ) + R.id.ll_payment_layout -> startActivity( + Intent( + requireActivity(), + DepositInfo::class.java + ) + ) + R.id.view_loyalty_points -> startActivity( + Intent( + requireActivity(), + LoyaltyPointsActivity::class.java + ) + ) + } + } + + private fun showLogoutConfirmationDialog() { + val genericPromptDialog = GenericPromptDialog() + genericPromptDialog.setTitleMessage(getString(R.string.logout_text)) + genericPromptDialog.setBodyMessage(getString(R.string.logout_confirmation_text)) + genericPromptDialog.setIconsRes(-1) + genericPromptDialog.setCancellable(true) + genericPromptDialog.setPositiveBtnString(getString(R.string.yes_text)) + genericPromptDialog.setNegativeBtnString(getString(R.string.no_text)) + genericPromptDialog.setListener(object : GenericDialogPromptListener { + override fun onNegativeBtnPressed() {} + override fun onPositiveBtnPressed() { + (requireActivity() as HomeActivityV3).performLogout() + } + }) + if (!genericPromptDialog.isAdded) genericPromptDialog.show( + requireActivity().supportFragmentManager, + "PROMPTSENDMONEY" + ) + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/banner_round_bg.xml b/app/src/main/res/drawable/banner_round_bg.xml new file mode 100644 index 00000000..31855583 --- /dev/null +++ b/app/src/main/res/drawable/banner_round_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/blue_dot.xml b/app/src/main/res/drawable/blue_dot.xml new file mode 100644 index 00000000..883d7b71 --- /dev/null +++ b/app/src/main/res/drawable/blue_dot.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/circle_bullet.xml b/app/src/main/res/drawable/circle_bullet.xml new file mode 100644 index 00000000..1fc0b5ec --- /dev/null +++ b/app/src/main/res/drawable/circle_bullet.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/fingerprint_24px.xml b/app/src/main/res/drawable/fingerprint_24px.xml new file mode 100644 index 00000000..316c63d9 --- /dev/null +++ b/app/src/main/res/drawable/fingerprint_24px.xml @@ -0,0 +1,40 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/grey_border_dark_indicator.xml b/app/src/main/res/drawable/grey_border_dark_indicator.xml new file mode 100644 index 00000000..4bb5877d --- /dev/null +++ b/app/src/main/res/drawable/grey_border_dark_indicator.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_language.xml b/app/src/main/res/drawable/ic_language.xml new file mode 100644 index 00000000..5897fbb8 --- /dev/null +++ b/app/src/main/res/drawable/ic_language.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/app/src/main/res/drawable/ico_profile.png b/app/src/main/res/drawable/ico_profile.png new file mode 100755 index 00000000..1687e85c Binary files /dev/null and b/app/src/main/res/drawable/ico_profile.png differ diff --git a/app/src/main/res/drawable/phonelink_lock_24px.xml b/app/src/main/res/drawable/phonelink_lock_24px.xml new file mode 100644 index 00000000..ff8ae552 --- /dev/null +++ b/app/src/main/res/drawable/phonelink_lock_24px.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/app/src/main/res/drawable/round_help_24px.xml b/app/src/main/res/drawable/round_help_24px.xml new file mode 100644 index 00000000..667b0201 --- /dev/null +++ b/app/src/main/res/drawable/round_help_24px.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/app/src/main/res/drawable/round_perm_phone_msg_24px.xml b/app/src/main/res/drawable/round_perm_phone_msg_24px.xml new file mode 100644 index 00000000..cf60f2f2 --- /dev/null +++ b/app/src/main/res/drawable/round_perm_phone_msg_24px.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/src/main/res/drawable/round_person_24px.xml b/app/src/main/res/drawable/round_person_24px.xml new file mode 100644 index 00000000..a3a1a128 --- /dev/null +++ b/app/src/main/res/drawable/round_person_24px.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/layout/banner_item.xml b/app/src/main/res/layout/banner_item.xml new file mode 100644 index 00000000..d0eec1db --- /dev/null +++ b/app/src/main/res/layout/banner_item.xml @@ -0,0 +1,27 @@ + + + + + + + diff --git a/app/src/main/res/layout/banner_view_layout.xml b/app/src/main/res/layout/banner_view_layout.xml new file mode 100644 index 00000000..8204ccf7 --- /dev/null +++ b/app/src/main/res/layout/banner_view_layout.xml @@ -0,0 +1,35 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_home_new.xml b/app/src/main/res/layout/fragment_home_new.xml index e76bb0b9..65383220 100644 --- a/app/src/main/res/layout/fragment_home_new.xml +++ b/app/src/main/res/layout/fragment_home_new.xml @@ -155,7 +155,7 @@ android:layout_width="@dimen/_30sdp" android:layout_height="@dimen/_30sdp" android:layout_marginRight="@dimen/_40sdp" - android:src="@drawable/flag_nepal" + android:src="@drawable/flag_japan" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_currency" @@ -362,5 +362,39 @@ android:layout_height="wrap_content" android:src="@drawable/ic_arrow_right" /> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_profile.xml b/app/src/main/res/layout/fragment_profile.xml new file mode 100644 index 00000000..eed21b74 --- /dev/null +++ b/app/src/main/res/layout/fragment_profile.xml @@ -0,0 +1,632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/row_fragment_beneficiaries.xml b/app/src/main/res/layout/row_fragment_beneficiaries.xml index 61cb7c52..a76682ed 100644 --- a/app/src/main/res/layout/row_fragment_beneficiaries.xml +++ b/app/src/main/res/layout/row_fragment_beneficiaries.xml @@ -2,6 +2,7 @@ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 0873b058..05b37a52 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -80,4 +80,7 @@ #1A0052FF #0000001F #CC0000 + #70e2cecf + #e0f4f4f4 + #F5F5F5 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 17c89f7b..8f0ac3f6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -661,4 +661,5 @@ ID Number Driving License Invalid Driving License + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index c9e5ee3c..2116724a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -21,6 +21,15 @@ true + + +