diff options
author | Torsten Grote <t@grobox.de> | 2020-04-15 09:37:37 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2020-04-15 09:37:37 -0300 |
commit | 8b7947a14349877120e74127a3949a73f917c3d2 (patch) | |
tree | 5cc34b7233eff3402e94690f0c75013edd964251 /wallet/src/main/java/net/taler/wallet/BalanceFragment.kt | |
parent | 10e49b74e29df50d8ac3e24438195063918ee265 (diff) | |
download | taler-android-8b7947a14349877120e74127a3949a73f917c3d2.tar.gz taler-android-8b7947a14349877120e74127a3949a73f917c3d2.tar.bz2 taler-android-8b7947a14349877120e74127a3949a73f917c3d2.zip |
[wallet] use floating action button for scan action
This prepares a layout change for display of balances and transactions.
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/BalanceFragment.kt')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/BalanceFragment.kt | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/BalanceFragment.kt b/wallet/src/main/java/net/taler/wallet/BalanceFragment.kt deleted file mode 100644 index 3d5364b..0000000 --- a/wallet/src/main/java/net/taler/wallet/BalanceFragment.kt +++ /dev/null @@ -1,205 +0,0 @@ -/* - * 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 - -import android.os.Bundle -import android.transition.TransitionManager.beginDelayedTransition -import android.util.Log -import android.view.LayoutInflater -import android.view.Menu -import android.view.MenuInflater -import android.view.MenuItem -import android.view.View -import android.view.View.GONE -import android.view.View.VISIBLE -import android.view.ViewGroup -import android.widget.TextView -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 -import androidx.recyclerview.widget.LinearLayoutManager.VERTICAL -import androidx.recyclerview.widget.RecyclerView.Adapter -import androidx.recyclerview.widget.RecyclerView.ViewHolder -import com.google.zxing.integration.android.IntentIntegrator -import com.google.zxing.integration.android.IntentIntegrator.QR_CODE -import kotlinx.android.synthetic.main.fragment_show_balance.* -import net.taler.wallet.BalanceAdapter.BalanceViewHolder - -interface BalanceClickListener { - fun onBalanceClick() -} - -class BalanceFragment : Fragment(), BalanceClickListener { - - private val model: WalletViewModel by activityViewModels() - private val withdrawManager by lazy { model.withdrawManager } - - private var reloadBalanceMenuItem: MenuItem? = null - private val balancesAdapter = BalanceAdapter(this) - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_show_balance, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - balancesList.apply { - layoutManager = LinearLayoutManager(context) - adapter = balancesAdapter - addItemDecoration(DividerItemDecoration(context, VERTICAL)) - } - - model.balances.observe(viewLifecycleOwner, Observer { - onBalancesChanged(it) - }) - - model.devMode.observe(viewLifecycleOwner, Observer { enabled -> - delayedTransition() - testWithdrawButton.visibility = if (enabled) VISIBLE else GONE - reloadBalanceMenuItem?.isVisible = enabled - }) - testWithdrawButton.setOnClickListener { - withdrawManager.withdrawTestkudos() - } - withdrawManager.testWithdrawalInProgress.observe(viewLifecycleOwner, Observer { loading -> - Log.v("taler-wallet", "observing balance loading $loading in show balance") - testWithdrawButton.isEnabled = !loading - model.showProgressBar.value = loading - }) - - scanButton.setOnClickListener { - IntentIntegrator(activity).apply { - setPrompt("") - setBeepEnabled(true) - setOrientationLocked(false) - }.initiateScan(listOf(QR_CODE)) - } - } - - override fun onStart() { - super.onStart() - model.loadBalances() - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - return when (item.itemId) { - R.id.reload_balance -> { - model.loadBalances() - true - } - R.id.developer_mode -> { - item.isChecked = !item.isChecked - model.devMode.value = item.isChecked - true - } - else -> super.onOptionsItemSelected(item) - } - } - - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - inflater.inflate(R.menu.balance, menu) - menu.findItem(R.id.developer_mode).isChecked = model.devMode.value!! - reloadBalanceMenuItem = menu.findItem(R.id.reload_balance).apply { - isVisible = model.devMode.value!! - } - super.onCreateOptionsMenu(menu, inflater) - } - - private fun onBalancesChanged(balances: List<BalanceItem>) { - delayedTransition() - if (balances.isEmpty()) { - balancesEmptyState.visibility = VISIBLE - balancesList.visibility = GONE - } else { - balancesAdapter.setItems(balances) - balancesEmptyState.visibility = GONE - balancesList.visibility = VISIBLE - } - } - - private fun delayedTransition() { - beginDelayedTransition(view as ViewGroup) - } - - override fun onBalanceClick() { - findNavController().navigate(R.id.walletHistory) - } - -} - -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) : 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() } - 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) - } - } - } - -} |