diff options
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/balances')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt | 81 | ||||
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/balances/BalancesFragment.kt | 86 |
2 files changed, 167 insertions, 0 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt b/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt new file mode 100644 index 0000000..0ccfeb2 --- /dev/null +++ b/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt @@ -0,0 +1,81 @@ +/* + * This file is part of GNU Taler + * (C) 2020 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +package net.taler.wallet.balances + +import android.view.LayoutInflater +import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.Adapter +import net.taler.wallet.BalanceItem +import net.taler.wallet.R +import net.taler.wallet.balances.BalanceAdapter.BalanceViewHolder + +class BalanceAdapter(private val listener: BalanceClickListener) : Adapter<BalanceViewHolder>() { + + private var items = emptyList<BalanceItem>() + + init { + setHasStableIds(false) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BalanceViewHolder { + val v = + LayoutInflater.from(parent.context).inflate(R.layout.list_item_balance, parent, false) + return BalanceViewHolder(v) + } + + override fun getItemCount() = items.size + + override fun onBindViewHolder(holder: BalanceViewHolder, position: Int) { + val item = items[position] + holder.bind(item) + } + + fun setItems(items: List<BalanceItem>) { + this.items = items + this.notifyDataSetChanged() + } + + inner class BalanceViewHolder(private val v: View) : RecyclerView.ViewHolder(v) { + private val currencyView: TextView = v.findViewById(R.id.balance_currency) + private val amountView: TextView = v.findViewById(R.id.balance_amount) + private val balanceInboundAmount: TextView = v.findViewById(R.id.balanceInboundAmount) + private val balanceInboundLabel: TextView = v.findViewById(R.id.balanceInboundLabel) + + fun bind(item: BalanceItem) { + v.setOnClickListener { listener.onBalanceClick(item.available.currency) } + currencyView.text = item.available.currency + amountView.text = item.available.amountStr + + val amountIncoming = item.pendingIncoming + if (amountIncoming.isZero()) { + balanceInboundAmount.visibility = GONE + balanceInboundLabel.visibility = GONE + } else { + balanceInboundAmount.visibility = VISIBLE + balanceInboundLabel.visibility = VISIBLE + balanceInboundAmount.text = + v.context.getString(R.string.amount_positive, amountIncoming) + } + } + } + +} diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalancesFragment.kt b/wallet/src/main/java/net/taler/wallet/balances/BalancesFragment.kt new file mode 100644 index 0000000..0a2b29a --- /dev/null +++ b/wallet/src/main/java/net/taler/wallet/balances/BalancesFragment.kt @@ -0,0 +1,86 @@ +/* + * This file is part of GNU Taler + * (C) 2020 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +package net.taler.wallet.balances + +import android.os.Bundle +import android.transition.TransitionManager.beginDelayedTransition +import android.view.LayoutInflater +import android.view.View +import android.view.View.GONE +import android.view.View.INVISIBLE +import android.view.View.VISIBLE +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Observer +import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager.VERTICAL +import kotlinx.android.synthetic.main.fragment_balances.* +import net.taler.common.fadeIn +import net.taler.wallet.BalanceItem +import net.taler.wallet.MainViewModel +import net.taler.wallet.R + +interface BalanceClickListener { + fun onBalanceClick(currency: String) +} + +class BalancesFragment : Fragment(), + BalanceClickListener { + + private val model: MainViewModel by activityViewModels() + + private val balancesAdapter = BalanceAdapter(this) + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_balances, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + mainList.apply { + adapter = balancesAdapter + addItemDecoration(DividerItemDecoration(context, VERTICAL)) + } + + model.balances.observe(viewLifecycleOwner, Observer { + onBalancesChanged(it.values.toList()) + }) + } + + private fun onBalancesChanged(balances: List<BalanceItem>) { + beginDelayedTransition(view as ViewGroup) + if (balances.isEmpty()) { + mainEmptyState.visibility = VISIBLE + mainList.visibility = GONE + } else { + balancesAdapter.setItems(balances) + mainEmptyState.visibility = INVISIBLE + mainList.fadeIn() + } + } + + override fun onBalanceClick(currency: String) { + model.transactionManager.selectedCurrency = currency + findNavController().navigate(R.id.action_nav_main_to_nav_transactions) + } + +} |