commit 0682c6b3d3f7cef22725f3db15916346fdc4529e parent ea2abcac101645e429cab734c726e3b6a744dae9 Author: Torsten Grote <t@grobox.de> Date: Thu, 16 Apr 2020 13:37:45 -0300 [wallet] change main screen if there is only one currency If there is more than one currency, the screen shows a list of balances per currency like it used to. If there is only one currency, the main screen directly shows the list of transactions with the balance in the toolbar. Diffstat:
13 files changed, 281 insertions(+), 216 deletions(-)
diff --git a/wallet/src/main/java/net/taler/wallet/BalanceAdapter.kt b/wallet/src/main/java/net/taler/wallet/BalanceAdapter.kt @@ -1,79 +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.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.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/MainActivity.kt b/wallet/src/main/java/net/taler/wallet/MainActivity.kt @@ -75,7 +75,7 @@ class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener { setSupportActionBar(toolbar) val appBarConfiguration = AppBarConfiguration( - setOf(R.id.showBalance, R.id.settings, R.id.nav_pending_operations), + setOf(R.id.nav_main, R.id.nav_settings, R.id.nav_pending_operations), drawer_layout ) toolbar.setupWithNavController(nav, appBarConfiguration) @@ -113,8 +113,8 @@ class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener { override fun onNavigationItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.nav_home -> nav.navigate(R.id.showBalance) - R.id.nav_settings -> nav.navigate(R.id.settings) + R.id.nav_home -> nav.navigate(R.id.nav_main) + R.id.nav_settings -> nav.navigate(R.id.nav_settings) R.id.nav_pending_operations -> nav.navigate(R.id.nav_pending_operations) } drawer_layout.closeDrawer(START) @@ -142,12 +142,12 @@ class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener { when { url.toLowerCase(ROOT).startsWith("taler://pay/") -> { Log.v(TAG, "navigating!") - nav.navigate(R.id.action_showBalance_to_promptPayment) + nav.navigate(R.id.action_nav_main_to_promptPayment) model.paymentManager.preparePay(url) } url.toLowerCase(ROOT).startsWith("taler://withdraw/") -> { Log.v(TAG, "navigating!") - nav.navigate(R.id.action_showBalance_to_promptWithdraw) + nav.navigate(R.id.action_nav_main_to_promptWithdraw) model.withdrawManager.getWithdrawalInfo(url) } url.toLowerCase(ROOT).startsWith("taler://refund/") -> { diff --git a/wallet/src/main/java/net/taler/wallet/MainFragment.kt b/wallet/src/main/java/net/taler/wallet/MainFragment.kt @@ -17,41 +17,20 @@ package net.taler.wallet import android.os.Bundle -import android.transition.TransitionManager.beginDelayedTransition 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 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 com.google.zxing.integration.android.IntentIntegrator -import com.google.zxing.integration.android.IntentIntegrator.QR_CODE import kotlinx.android.synthetic.main.fragment_main.* +import net.taler.wallet.balances.BalancesFragment +import net.taler.wallet.transactions.TransactionsFragment -interface BalanceClickListener { - fun onBalanceClick(currency: String) -} - -class MainFragment : Fragment(), BalanceClickListener { +class MainFragment : Fragment() { private val model: MainViewModel by activityViewModels() - private val balancesAdapter = BalanceAdapter(this) - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -61,18 +40,12 @@ class MainFragment : Fragment(), BalanceClickListener { } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - mainList.apply { - layoutManager = LinearLayoutManager(context) - adapter = balancesAdapter - addItemDecoration(DividerItemDecoration(context, VERTICAL)) - } - model.balances.observe(viewLifecycleOwner, Observer { onBalancesChanged(it.values.toList()) }) mainFab.setOnClickListener { - onScanButtonClicked() + scanQrCode(requireActivity()) } } @@ -81,44 +54,18 @@ class MainFragment : Fragment(), BalanceClickListener { model.loadBalances() } - override fun onOptionsItemSelected(item: MenuItem): Boolean { - return when (item.itemId) { - else -> super.onOptionsItemSelected(item) - } - } - - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - inflater.inflate(R.menu.fragment_main, menu) - super.onCreateOptionsMenu(menu, inflater) - } - - private fun onScanButtonClicked() { - IntentIntegrator(activity).apply { - setPrompt("") - setBeepEnabled(true) - setOrientationLocked(false) - }.initiateScan(listOf(QR_CODE)) - } - private fun onBalancesChanged(balances: List<BalanceItem>) { - delayedTransition() - if (balances.isEmpty()) { - mainEmptyState.visibility = VISIBLE - mainList.visibility = GONE - } else { - balancesAdapter.setItems(balances) - mainEmptyState.visibility = GONE - mainList.visibility = VISIBLE + if (childFragmentManager.fragments.isEmpty()) { + val f = if (balances.size == 1) { + model.transactionManager.selectedCurrency = balances[0].available.currency + TransactionsFragment() + } else { + BalancesFragment() + } + childFragmentManager.beginTransaction() + .add(R.id.mainFragmentContainer, f) + .commitNow() } } - private fun delayedTransition() { - beginDelayedTransition(view as ViewGroup) - } - - override fun onBalanceClick(currency: String) { - model.transactionManager.selectedCurrency = currency - findNavController().navigate(R.id.nav_transactions) - } - } diff --git a/wallet/src/main/java/net/taler/wallet/Utils.kt b/wallet/src/main/java/net/taler/wallet/Utils.kt @@ -16,6 +16,17 @@ package net.taler.wallet +import android.app.Activity +import com.google.zxing.integration.android.IntentIntegrator + +fun scanQrCode(activity: Activity) { + IntentIntegrator(activity).apply { + setPrompt("") + setBeepEnabled(true) + setOrientationLocked(false) + }.initiateScan(listOf(IntentIntegrator.QR_CODE)) +} + fun cleanExchange(exchange: String) = exchange.let { if (it.startsWith("https://")) it.substring(8) else it }.trimEnd('/') diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt 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 @@ -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) + } + +} diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt @@ -30,7 +30,6 @@ 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 kotlinx.android.synthetic.main.fragment_transactions.* import net.taler.common.fadeIn @@ -46,6 +45,7 @@ class TransactionsFragment : Fragment(), OnEventClickListener { private val model: MainViewModel by activityViewModels() private val transactionManager by lazy { model.transactionManager } + private val transactionAdapter by lazy { TransactionAdapter(model.devMode.value == true, this) } private val currency by lazy { transactionManager.selectedCurrency!! } @@ -63,7 +63,6 @@ class TransactionsFragment : Fragment(), OnEventClickListener { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { list.apply { - layoutManager = LinearLayoutManager(context) adapter = transactionAdapter addItemDecoration(DividerItemDecoration(context, VERTICAL)) } @@ -102,7 +101,7 @@ class TransactionsFragment : Fragment(), OnEventClickListener { override fun onEventClicked(event: Transaction) { if (event.detailPageLayout != 0) { transactionManager.selectedEvent = event - findNavController().navigate(R.id.action_nav_transactions_to_nav_transaction_detail) + findNavController().navigate(R.id.action_nav_transaction_detail) } else if (model.devMode.value == true) { JsonDialogFragment.new(event.json.toString(2)) .show(parentFragmentManager, null) @@ -118,6 +117,7 @@ class TransactionsFragment : Fragment(), OnEventClickListener { is TransactionsResult.Success -> { emptyState.visibility = if (result.transactions.isEmpty()) VISIBLE else INVISIBLE transactionAdapter.update(result.transactions) + list.fadeIn() } } diff --git a/wallet/src/main/res/layout/fragment_balances.xml b/wallet/src/main/res/layout/fragment_balances.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ 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/> + --> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/mainList" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="invisible" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + tools:listitem="@layout/list_item_balance" + tools:visibility="visible" /> + + <TextView + android:id="@+id/mainEmptyState" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:autoLink="web" + android:gravity="center" + android:padding="16dp" + android:text="@string/balances_empty_state" + android:textSize="18sp" + android:visibility="invisible" + tools:visibility="visible" /> + +</FrameLayout> diff --git a/wallet/src/main/res/layout/fragment_main.xml b/wallet/src/main/res/layout/fragment_main.xml @@ -15,29 +15,13 @@ --> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/mainList" + <androidx.fragment.app.FragmentContainerView + android:id="@+id/mainFragmentContainer" android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="gone" - tools:listitem="@layout/list_item_balance" - tools:visibility="visible" /> - - <TextView - android:id="@+id/mainEmptyState" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:autoLink="web" - android:gravity="center" - android:padding="16dp" - android:text="@string/balances_empty_state" - android:textSize="18sp" - android:visibility="gone" - tools:visibility="visible" /> + android:layout_height="match_parent" /> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/mainFab" diff --git a/wallet/src/main/res/layout/fragment_transactions.xml b/wallet/src/main/res/layout/fragment_transactions.xml @@ -15,6 +15,7 @@ --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> @@ -23,7 +24,11 @@ android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" - android:scrollbars="vertical" /> + android:scrollbars="vertical" + android:visibility="invisible" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + tools:listitem="@layout/list_item_transaction" + tools:visibility="visible" /> <TextView android:id="@+id/emptyState" diff --git a/wallet/src/main/res/menu/fragment_main.xml b/wallet/src/main/res/menu/fragment_main.xml @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - ~ 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/> - --> - -<menu xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto"> -</menu> diff --git a/wallet/src/main/res/navigation/nav_graph.xml b/wallet/src/main/res/navigation/nav_graph.xml @@ -18,21 +18,24 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nav_graph" - app:startDestination="@id/showBalance" - tools:ignore="UnusedNavigation"> + app:startDestination="@id/nav_main"> <fragment - android:id="@+id/showBalance" + android:id="@+id/nav_main" android:name="net.taler.wallet.MainFragment" android:label="@string/balances_title" - tools:layout="@layout/fragment_main"> + tools:layout="@layout/fragment_balances"> <action - android:id="@+id/action_showBalance_to_promptPayment" + android:id="@+id/action_nav_main_to_promptPayment" app:destination="@id/promptPayment" /> <action - android:id="@+id/action_showBalance_to_promptWithdraw" + android:id="@+id/action_nav_main_to_promptWithdraw" app:destination="@id/promptWithdraw" /> + <action + android:id="@+id/action_nav_main_to_nav_transactions" + app:destination="@id/nav_transactions" /> </fragment> + <fragment android:id="@+id/promptPayment" android:name="net.taler.wallet.payment.PromptPaymentFragment" @@ -41,31 +44,28 @@ <action android:id="@+id/action_promptPayment_to_paymentSuccessful" app:destination="@id/paymentSuccessful" - app:popUpTo="@id/showBalance" /> + app:popUpTo="@id/nav_main" /> <action android:id="@+id/action_promptPayment_to_alreadyPaid" app:destination="@id/alreadyPaid" - app:popUpTo="@id/showBalance" /> + app:popUpTo="@id/nav_main" /> </fragment> <fragment android:id="@+id/paymentSuccessful" android:name="net.taler.wallet.payment.PaymentSuccessfulFragment" android:label="Payment Successful" tools:layout="@layout/fragment_payment_successful" /> + <fragment - android:id="@+id/settings" + android:id="@+id/nav_settings" android:name="net.taler.wallet.SettingsFragment" - android:label="Settings" /> + android:label="@string/menu_settings" /> <fragment android:id="@+id/nav_transactions" android:name="net.taler.wallet.transactions.TransactionsFragment" android:label="@string/transactions_title" - tools:layout="@layout/fragment_transactions"> - <action - android:id="@+id/action_nav_transactions_to_nav_transaction_detail" - app:destination="@id/nav_transactions_detail" /> - </fragment> + tools:layout="@layout/fragment_transactions" /> <fragment android:id="@+id/nav_transactions_detail" @@ -76,7 +76,7 @@ <fragment android:id="@+id/alreadyPaid" android:name="net.taler.wallet.payment.AlreadyPaidFragment" - android:label="Already Paid" + android:label="@string/payment_already_paid_title" tools:layout="@layout/fragment_already_paid" /> <fragment @@ -90,11 +90,11 @@ <action android:id="@+id/action_promptWithdraw_to_withdrawSuccessful" app:destination="@id/withdrawSuccessful" - app:popUpTo="@id/showBalance" /> + app:popUpTo="@id/nav_main" /> <action android:id="@+id/action_promptWithdraw_to_errorFragment" app:destination="@id/errorFragment" - app:popUpTo="@id/showBalance" /> + app:popUpTo="@id/nav_main" /> <action android:id="@+id/action_promptWithdraw_to_selectExchangeFragment" app:destination="@id/selectExchangeFragment" /> @@ -103,8 +103,9 @@ <fragment android:id="@+id/withdrawSuccessful" android:name="net.taler.wallet.withdraw.WithdrawSuccessfulFragment" - android:label="Withdrawal Confirmed" + android:label="@string/withdraw_accepted" tools:layout="@layout/fragment_withdraw_successful" /> + <fragment android:id="@+id/reviewExchangeTOS" android:name="net.taler.wallet.withdraw.ReviewExchangeTosFragment" @@ -113,7 +114,7 @@ <action android:id="@+id/action_reviewExchangeTOS_to_promptWithdraw" app:destination="@id/promptWithdraw" - app:popUpTo="@id/showBalance" /> + app:popUpTo="@id/nav_main" /> </fragment> <fragment android:id="@+id/selectExchangeFragment" @@ -124,8 +125,9 @@ <fragment android:id="@+id/nav_pending_operations" android:name="net.taler.wallet.pending.PendingOperationsFragment" - android:label="Pending Operations" + android:label="@string/pending_operations_title" tools:layout="@layout/fragment_pending_operations" /> + <fragment android:id="@+id/errorFragment" android:name="net.taler.wallet.withdraw.ErrorFragment" @@ -140,4 +142,8 @@ android:id="@+id/action_global_pending_operations" app:destination="@id/nav_pending_operations" /> -</navigation> -\ No newline at end of file + <action + android:id="@+id/action_nav_transaction_detail" + app:destination="@id/nav_transactions_detail" /> + +</navigation> diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml @@ -80,6 +80,7 @@ <string name="payment_hide_details">Hide Details</string> <string name="payment_successful">Payment was successful</string> <string name="payment_back_button">OK</string> + <string name="payment_already_paid_title">Already paid</string> <string name="payment_already_paid">You\'ve already paid for this order.</string> <string name="withdraw_accepted">Withdrawal accepted</string>