Browse Source

send money issue fixes and update beneficiary fixes

new_design
Mohan Shiwakoti 1 year ago
parent
commit
2e6b6f1227
  1. 108
      app/src/main/java/com/remit/jmecustomer/common/customwidgets/EndlessRecyclerViewScrollListener.java
  2. 54
      app/src/main/java/com/remit/jmecustomer/features/beneficiaryDetail/BeneficiaryDetailActivity.kt
  3. 6
      app/src/main/java/com/remit/jmecustomer/features/beneficiaryDetail/adapters/SendMethodAdapter.kt
  4. 68
      app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt
  5. 48
      app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyBeneficiaryAllActivity.kt
  6. 75
      app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt
  7. 19
      app/src/main/res/layout/fragment_beneficiary_all.xml
  8. 10
      app/src/main/res/layout/fragment_my_transfers.xml

108
app/src/main/java/com/remit/jmecustomer/common/customwidgets/EndlessRecyclerViewScrollListener.java

@ -0,0 +1,108 @@
package com.remit.jmecustomer.common.customwidgets;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
public abstract class EndlessRecyclerViewScrollListener extends RecyclerView.OnScrollListener {
// The minimum amount of items to have below your current scroll position
// before loading more.
private int visibleThreshold = 5;
// The current offset index of data you have loaded
private int currentPage = 0;
// The total number of items in the dataset after the last load
private int previousTotalItemCount = 0;
// True if we are still waiting for the last set of data to load.
private boolean loading = true;
// Sets the starting page index
private int startingPageIndex = 0;
RecyclerView.LayoutManager mLayoutManager;
public EndlessRecyclerViewScrollListener(LinearLayoutManager layoutManager) {
this.mLayoutManager = layoutManager;
}
public EndlessRecyclerViewScrollListener(GridLayoutManager layoutManager) {
this.mLayoutManager = layoutManager;
visibleThreshold = visibleThreshold * layoutManager.getSpanCount();
}
public EndlessRecyclerViewScrollListener(StaggeredGridLayoutManager layoutManager) {
this.mLayoutManager = layoutManager;
visibleThreshold = visibleThreshold * layoutManager.getSpanCount();
}
public int getLastVisibleItem(int[] lastVisibleItemPositions) {
int maxSize = 0;
for (int i = 0; i < lastVisibleItemPositions.length; i++) {
if (i == 0) {
maxSize = lastVisibleItemPositions[i];
}
else if (lastVisibleItemPositions[i] > maxSize) {
maxSize = lastVisibleItemPositions[i];
}
}
return maxSize;
}
// This happens many times a second during a scroll, so be wary of the code you place here.
// We are given a few useful parameters to help us work out if we need to load some more data,
// but first we check if we are waiting for the previous load to finish.
@Override
public void onScrolled(RecyclerView view, int dx, int dy) {
int lastVisibleItemPosition = 0;
int totalItemCount = mLayoutManager.getItemCount();
if (mLayoutManager instanceof StaggeredGridLayoutManager) {
int[] lastVisibleItemPositions = ((StaggeredGridLayoutManager) mLayoutManager).findLastVisibleItemPositions(null);
// get maximum element within the list
lastVisibleItemPosition = getLastVisibleItem(lastVisibleItemPositions);
} else if (mLayoutManager instanceof GridLayoutManager) {
lastVisibleItemPosition = ((GridLayoutManager) mLayoutManager).findLastVisibleItemPosition();
} else if (mLayoutManager instanceof LinearLayoutManager) {
lastVisibleItemPosition = ((LinearLayoutManager) mLayoutManager).findLastVisibleItemPosition();
}
// If the total item count is zero and the previous isn't, assume the
// list is invalidated and should be reset back to initial state
if (totalItemCount < previousTotalItemCount) {
this.currentPage = this.startingPageIndex;
this.previousTotalItemCount = totalItemCount;
if (totalItemCount == 0) {
this.loading = true;
}
}
// If its still loading, we check to see if the dataset count has
// changed, if so we conclude it has finished loading and update the current page
// number and total item count.
if (loading && (totalItemCount > previousTotalItemCount)) {
loading = false;
previousTotalItemCount = totalItemCount;
}
// If it isnt currently loading, we check to see if we have breached
// the visibleThreshold and need to reload more data.
// If we do need to reload some more data, we execute onLoadMore to fetch the data.
// threshold should reflect how many total columns there are too
if (!loading && (lastVisibleItemPosition + visibleThreshold) > totalItemCount) {
currentPage++;
onLoadMore(currentPage, totalItemCount, view);
loading = true;
}
}
// Call this method whenever performing new searches
public void resetState() {
this.currentPage = this.startingPageIndex;
this.previousTotalItemCount = 0;
this.loading = true;
}
// Defines the process for actually loading more data based on page
public abstract void onLoadMore(int page, int totalItemsCount, RecyclerView view);
}

54
app/src/main/java/com/remit/jmecustomer/features/beneficiaryDetail/BeneficiaryDetailActivity.kt

@ -11,13 +11,13 @@ import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog
import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog.GenericDialogPromptListener
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.gateway.recipientlistingV3.RecipientListingV3Gateway
import com.remit.jmecustomer.features.recipientmanagement.model.recipientModelV5.Receiver
import com.remit.jmecustomer.features.recipientmanagement.model.recipientlistingV3.PaymentMethodV3Model
import com.remit.jmecustomer.features.recipientmanagement.model.recipientlistingV3.ReceiverInfoV3Model
import com.remit.jmecustomer.features.recipientmanagement.presenter.recipientlistingV3.RecipientListingV3Presenter
import com.remit.jmecustomer.features.recipientmanagement.presenter.recipientlistingV3.RecipientListingV3PresenterInterface
import com.remit.jmecustomer.features.recipientmanagement.view.recepientTermsConditions.BeneficiaryAddEditV3TermsActivity
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
@ -50,6 +50,7 @@ class BeneficiaryDetailActivity : BaseActivity(),
binding.rvPayType.layoutManager = layoutManagerVertical
receiverInfoModel = ReceiverInfoV3Model()
receiver = intent.extras?.getParcelable("receiverInfoModel")
receiver?.paymentMethods?.get(0)?.isSelected = true
sendMethodAdapter = SendMethodAdapter(receiver?.paymentMethods!!)
binding.rvPayType.adapter = sendMethodAdapter
sendMethodAdapter?.setOnItemClickListener(object : SendMethodAdapter.ItemClickListener {
@ -103,29 +104,47 @@ class BeneficiaryDetailActivity : BaseActivity(),
binding.tvLocation.text = receiverInfoModel?.country
binding.tvInitial.text = getInitials(receiverInfoModel?.fullName ?: "")
binding.tvUpdate.setOnClickListener {
val intent = Intent(applicationContext, RecipientAddEditActivity::class.java)
intent.putExtra(RecipientAddEditActivity.RECIPIENT_INFO_BUNDLE_KEY, receiverInfoModel)
val intent = Intent(applicationContext, RecipientAddEditV3Activity::class.java)
intent.putExtra(
RecipientAddEditV3Activity.RECIPIENT_INFO_BUNDLE_KEY_v3,
receiverInfoModel
)
startActivityForResult(
intent,
RecipientAddEditActivity.RECIPIENT_INFO_ACTION_EDIT_REQUEST_CODE
RecipientAddEditV3Activity.RECIPIENT_ACTION_EDIT_REQUEST_CODE_v3
)
}
binding.agreeButton.setOnClickListener {
if (isPaymentSelected) {
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
)
if (receiverInfoModel?.hasVerifiedOTP!!) {
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
)
} else {
val intent = Intent(
applicationContext,
BeneficiaryAddEditV3TermsActivity::class.java
)
intent.putExtra(
BeneficiaryAddEditV3TermsActivity.RECIPIENT_TERMS_BUNDLE_KEY_v3,
receiverInfoModel
)
startActivityForResult(
intent,
RecipientAddEditV3Activity.RECIPIENT_ACTION_EDIT_REQUEST_CODE_v3
)
}
} else {
Toast.makeText(
applicationContext,
@ -134,7 +153,6 @@ class BeneficiaryDetailActivity : BaseActivity(),
).show()
}
}
}
private fun getInitials(fullName: String): String {

6
app/src/main/java/com/remit/jmecustomer/features/beneficiaryDetail/adapters/SendMethodAdapter.kt

@ -13,7 +13,7 @@ import com.remit.jmecustomer.features.recipientmanagement.model.recipientlisting
class SendMethodAdapter(private val items: List<PaymentMethodV3Model>) :
RecyclerView.Adapter<SendMethodAdapter.ViewHolder>() {
var itemClickListener: ItemClickListener? = null
private var lastPosition = -1
private var lastPosition = 0
class ViewHolder(private val binding: RowSendMethodBinding) :
RecyclerView.ViewHolder(binding.root) {
@ -39,10 +39,8 @@ class SendMethodAdapter(private val items: List<PaymentMethodV3Model>) :
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(holder: ViewHolder, @SuppressLint("RecyclerView") position: Int) {
val item = items[position]
itemClickListener?.onItemClicked(items[0])
holder.itemView.setOnClickListener {
if (lastPosition > -1) {
items[lastPosition].isSelected = false
}
itemClickListener?.onItemClicked(item)
item.isSelected = true
lastPosition = position

68
app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt

@ -507,44 +507,46 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener,
var timer: Timer? = null;
fun setBannerData(bannerImages: MutableList<BannerImage>) {
val bannerViewAdapter = BannerViewAdapter(bannerImages)
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)
try {
val bannerViewAdapter = BannerViewAdapter(bannerImages)
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 (bannerImages.size > 1) {
if (bannerImages.size > 1) {
// bannerView.addItemDecoration(new LinePagerIndicatorDecoration());
binding.indicator.attachToRecyclerView(binding.bannerView, snapHelper)
}
binding.indicator.attachToRecyclerView(binding.bannerView, snapHelper)
}
if (timer != null) return
timer = Timer()
timer!!.scheduleAtFixedRate(object : TimerTask() {
override fun run() {
if (scrollPosition >= bannerImages.size) scrollPosition = 0
binding.bannerView.post { // scrollPosition = lm.findFirstVisibleItemPosition();
scrollPosition =
binding.indicator.getSnapPosition(binding.bannerView.layoutManager);
++scrollPosition
if (scrollPosition > bannerImages.size - 1) {
scrollPosition = 0
binding.bannerView.scrollToPosition(scrollPosition)
} else {
binding.bannerView.smoothScrollToPosition(scrollPosition)
if (timer != null) return
timer = Timer()
timer!!.scheduleAtFixedRate(object : TimerTask() {
override fun run() {
if (scrollPosition >= bannerImages.size) scrollPosition = 0
binding.bannerView.post { // scrollPosition = lm.findFirstVisibleItemPosition();
scrollPosition =
binding.indicator.getSnapPosition(binding.bannerView.layoutManager);
++scrollPosition
if (scrollPosition > bannerImages.size - 1) {
scrollPosition = 0
binding.bannerView.scrollToPosition(scrollPosition)
} else {
binding.bannerView.smoothScrollToPosition(scrollPosition)
}
}
}
}
}, 500, 3500)
}, 500, 3500)
} catch (ex: java.lang.Exception) {
ex.printStackTrace()
}
}
private fun showNotificationView(notificationViewDTO: HomeNotificationViewDTO) {

48
app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyBeneficiaryAllActivity.kt

@ -3,10 +3,12 @@ package com.remit.jmecustomer.features.myTransfers.view
import MyBeneficiariesAllAdapter
import android.content.Intent
import android.os.Bundle
import android.text.Editable
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import com.remit.jmecustomer.R
import com.remit.jmecustomer.base.BaseActivity
import com.remit.jmecustomer.common.customwidgets.TextWatcherAdapter
import com.remit.jmecustomer.common.customwidgets.common.GenericEditTextPromptDialog
import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog
import com.remit.jmecustomer.databinding.FragmentBeneficiaryAllBinding
@ -20,6 +22,8 @@ import com.remit.jmecustomer.features.recipientmanagement.presenter.recipientlis
import com.remit.jmecustomer.features.recipientmanagement.view.recepientTermsConditions.BeneficiaryAddEditV3TermsActivity
import com.remit.jmecustomer.features.recipientmanagement.view.recipientaddeditV3.RecipientAddEditV3Activity
import com.remit.jmecustomer.features.sendmoney.model.SendMoneyRequiredDataV3
import java.util.*
import kotlin.collections.ArrayList
class MyBeneficiaryAllActivity : BaseActivity(),
MyBeneficiariesAllAdapter.RecipientSelectionListener,
@ -30,6 +34,7 @@ class MyBeneficiaryAllActivity : BaseActivity(),
private var mainList: ArrayList<Receiver>? = ArrayList()
var presenter: RecipientListingV3PresenterInterface? = null
private var genericEditTextPromptDialog: GenericEditTextPromptDialog? = null
private var data: MutableList<Receiver>? = null
override fun onCreate(savedInstanceState: Bundle?) {
@ -46,13 +51,14 @@ class MyBeneficiaryAllActivity : BaseActivity(),
fun init() {
presenter = RecipientListingV3Presenter(this, RecipientListingV3Gateway())
presenter!!.getAllRecipientListV5(null, "0", "","","")
presenter!!.getAllRecipientListV5(null, "0", "", "", "")
var data: ArrayList<Receiver> = ArrayList()
adapter = MyBeneficiariesAllAdapter(data, this)
val layoutManagerVertical = LinearLayoutManager(this)
binding.recipientListRv.layoutManager = layoutManagerVertical
binding.recipientListRv.adapter = adapter
adapter?.setData(mainList)
binding.edtSearchTransfers.addTextChangedListener(SearchEdittextTextChangeListener())
}
@ -75,6 +81,9 @@ class MyBeneficiaryAllActivity : BaseActivity(),
recentTransactionList: MutableList<RecentTransaction>?,
changeLayoutBehavior: Boolean
) {
if (data == null) {
data = recipientInfoModelList
}
adapter?.setData(recipientInfoModelList)
}
@ -183,4 +192,41 @@ class MyBeneficiaryAllActivity : BaseActivity(),
}
override fun onAllRecipientDeleted() {}
inner class SearchEdittextTextChangeListener : TextWatcherAdapter() {
override fun afterTextChanged(s: Editable) {
searchForText(s.toString())
}
}
fun searchForText(keyWord: String) {
// if (keyWord.length > 0) {
try {
val searchedData: MutableList<Receiver> =
java.util.ArrayList()
for (item in data!!) {
if (item.fullName.lowercase(Locale.getDefault())
.contains(keyWord.lowercase(Locale.getDefault()))
) {
searchedData.add(item)
}
}
if (searchedData.size > 0) {
// showTransactionNotFoundView(false)
} else {
// showTransactionNotFoundView(
// true
// )
return
}
adapter?.setData(searchedData)
// } else {
// hideKeyBoard()
//// showTransactionNotFoundView(false)
//// recentAdapter?.setData(data!!)
// }
} catch (ex: java.lang.Exception) {
ex.printStackTrace()
}
}
}

75
app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt

@ -12,8 +12,10 @@ import android.view.ViewGroup
import android.widget.EditText
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.remit.jmecustomer.R
import com.remit.jmecustomer.base.BaseFragment
import com.remit.jmecustomer.common.customwidgets.EndlessRecyclerViewScrollListener
import com.remit.jmecustomer.common.customwidgets.TextWatcherAdapter
import com.remit.jmecustomer.common.customwidgets.common.GenericEditTextPromptDialog
import com.remit.jmecustomer.common.customwidgets.common.GenericEditTextPromptDialog.GenericEditTextPromptListener
@ -66,6 +68,14 @@ class MyTransfersFragment : BaseFragment(),
private var presenterTransaction: TransactionHistoryV2Presenter? = null
private var genericEditTextPromptDialog: GenericEditTextPromptDialog? = null
private var homeViewModel: HomeViewModel? = null
var currentPage = 1
var totalPages = 100
var scrollListener: EndlessRecyclerViewScrollListener? = null
var startDate = ""
var endDate = ""
var isRecentEmpty = false
var isFirstCall = false;
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@ -98,7 +108,48 @@ class MyTransfersFragment : BaseFragment(),
binding.transactionHistoryRv.adapter = recentAdapter
binding.recipientListRv.isNestedScrollingEnabled = false
binding.transactionHistoryRv.isNestedScrollingEnabled = false
// binding.transactionHistoryRv.isNestedScrollingEnabled = false
binding.nestedScrollView.isNestedScrollingEnabled = false
scrollListener = object : EndlessRecyclerViewScrollListener(layoutManagerVertical) {
override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView?) {
if (currentPage <= totalPages && recentAdapter?.itemCount!! > 5) {
currentPage++
Handler().postDelayed({
presenter?.getAllRecipientListV5(
null,
Constants.CURRENT_COUNTRY_ID,
this@MyTransfersFragment.startDate,
this@MyTransfersFragment.endDate,
this@MyTransfersFragment.currentPage.toString()
)
}, 1500)
}
}
}
binding.recipientListRv.addOnScrollListener(scrollListener!!)
binding.nestedScrollView.viewTreeObserver.addOnScrollChangedListener {
// val view = binding.nestedScrollView.getChildAt(binding.nestedScrollView.childCount - 1)
// val diff =
// view.bottom - (binding.nestedScrollView.height + binding.nestedScrollView.scrollY)
//
// // Check if the user has reached the bottom of the scroll view
// if (diff <= 0 && binding.nestedScrollView.scrollY > 0) {
// if (!isRecentEmpty) {
// currentPage++
// Handler().postDelayed({
// presenter?.getAllRecipientListV5(
// null,
// Constants.CURRENT_COUNTRY_ID,
// this@MyTransfersFragment.startDate,
// this@MyTransfersFragment.endDate,
// this@MyTransfersFragment.currentPage.toString()
// )
// }, 1500)
// }
// }
}
}
override fun onStart() {
@ -139,6 +190,7 @@ class MyTransfersFragment : BaseFragment(),
fun performDefaultAction(countryId: String?) {
// iv_cancel!!.visibility = View.INVISIBLE
currentPage = 1
presenter!!.getAllRecipientListV5(null, countryId, "", "", "")
}
@ -156,9 +208,24 @@ class MyTransfersFragment : BaseFragment(),
) {
adapter?.setData(recipientInfoModelList)
if (data == null) {
if (currentPage > 1) {
isRecentEmpty = true
}
data = recentTransactionList
} else {
if (recentTransactionList != null && recentTransactionList.isEmpty()) {
isFirstCall = false
if (currentPage > 1) {
isRecentEmpty = true
}
}
if (currentPage == 1) {
data = recentTransactionList
} else {
data?.addAll(recentTransactionList!!)
}
}
recentAdapter?.setData(recentTransactionList)
recentAdapter?.setData(data)
recentAdapter?.setTransactionClickListener(object :
RecentTransactionsAdapter.OutboundTransactionItemClickListener {
override fun navigateToChangeTransactionScreen(itemModel: RecentTransaction) {
@ -524,12 +591,14 @@ class MyTransfersFragment : BaseFragment(),
if (binding.dateContainer.getVisibility() != View.VISIBLE) binding.dateContainer.setVisibility(
View.VISIBLE
)
this@MyTransfersFragment.startDate = startDate
this@MyTransfersFragment.endDate = endDate
presenter!!.getAllRecipientListV5(
null,
Constants.CURRENT_COUNTRY_ID,
startDate,
endDate,
"5"
"1"
)
}
})

19
app/src/main/res/layout/fragment_beneficiary_all.xml

@ -10,8 +10,27 @@
layout="@layout/toolbaar_new"
app:layout_constraintTop_toTopOf="parent" />
<EditText
app:layout_constraintTop_toBottomOf="@+id/toolbar"
style="@style/TextStyle.VolteSemiBold14"
android:id="@+id/edt_search_transfers"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_10sdp"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginEnd="@dimen/_10sdp"
android:textColor="@color/light_blue"
android:inputType="text"
android:imeOptions="actionDone"
android:background="@drawable/blue_border_background"
android:hint="Search your transfers"
android:padding="@dimen/_10sdp"
app:layout_constraintStart_toStartOf="parent"
/>
<androidx.recyclerview.widget.RecyclerView
android:layout_marginTop="@dimen/_10sdp"
android:id="@+id/recipientListRv"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

10
app/src/main/res/layout/fragment_my_transfers.xml

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nestedScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -242,6 +243,15 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dateContainer" />
<ProgressBar
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/transactionHistoryRv"
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.remit.jmecustomer.common.customwidgets.GmeEditText
android:paddingTop="50dp"
android:id="@+id/noTransactionFoundTextView"

Loading…
Cancel
Save