diff options
Diffstat (limited to 'wallet/src/main')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/BalanceAdapter.kt | 2 | ||||
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/MainActivity.kt | 12 | ||||
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/MainFragment.kt | 33 | ||||
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/SettingsFragment.kt | 144 | ||||
-rw-r--r-- | wallet/src/main/res/drawable/ic_cash_usd_outline.xml | 1 | ||||
-rw-r--r-- | wallet/src/main/res/drawable/ic_developer_mode.xml | 10 | ||||
-rw-r--r-- | wallet/src/main/res/layout/fragment_settings.xml | 104 | ||||
-rw-r--r-- | wallet/src/main/res/menu/balance.xml | 9 | ||||
-rw-r--r-- | wallet/src/main/res/values/strings.xml | 6 | ||||
-rw-r--r-- | wallet/src/main/res/xml/settings_main.xml | 41 |
10 files changed, 105 insertions, 257 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/BalanceAdapter.kt b/wallet/src/main/java/net/taler/wallet/BalanceAdapter.kt index 96cfb99..b7b2ef0 100644 --- a/wallet/src/main/java/net/taler/wallet/BalanceAdapter.kt +++ b/wallet/src/main/java/net/taler/wallet/BalanceAdapter.kt @@ -59,7 +59,7 @@ class BalanceAdapter(private val listener: BalanceClickListener) : Adapter<Balan private val balanceInboundLabel: TextView = v.findViewById(R.id.balanceInboundLabel) fun bind(item: BalanceItem) { - v.setOnClickListener { listener.onBalanceClick() } + v.setOnClickListener { listener.onBalanceClick(item.available.currency) } currencyView.text = item.available.currency amountView.text = item.available.amountStr diff --git a/wallet/src/main/java/net/taler/wallet/MainActivity.kt b/wallet/src/main/java/net/taler/wallet/MainActivity.kt index a43cbf2..fa78b16 100644 --- a/wallet/src/main/java/net/taler/wallet/MainActivity.kt +++ b/wallet/src/main/java/net/taler/wallet/MainActivity.kt @@ -54,8 +54,7 @@ import net.taler.wallet.HostCardEmulatorService.Companion.TRIGGER_PAYMENT_ACTION import net.taler.wallet.refund.RefundStatus import java.util.Locale.ROOT -class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener, - ResetDialogEventListener { +class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener { private val model: MainViewModel by viewModels() @@ -205,13 +204,4 @@ class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener, } } - override fun onResetConfirmed() { - model.dangerouslyReset() - Snackbar.make(nav_view, "Wallet has been reset", LENGTH_SHORT).show() - } - - override fun onResetCancelled() { - Snackbar.make(nav_view, "Reset cancelled", LENGTH_SHORT).show() - } - } diff --git a/wallet/src/main/java/net/taler/wallet/MainFragment.kt b/wallet/src/main/java/net/taler/wallet/MainFragment.kt index a0eb8ff..f587aca 100644 --- a/wallet/src/main/java/net/taler/wallet/MainFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/MainFragment.kt @@ -38,15 +38,13 @@ import com.google.zxing.integration.android.IntentIntegrator.QR_CODE import kotlinx.android.synthetic.main.fragment_show_balance.* interface BalanceClickListener { - fun onBalanceClick() + fun onBalanceClick(currency: String) } class MainFragment : Fragment(), BalanceClickListener { private val model: MainViewModel by activityViewModels() - private val withdrawManager by lazy { model.withdrawManager } - private var reloadBalanceMenuItem: MenuItem? = null private val balancesAdapter = BalanceAdapter(this) override fun onCreate(savedInstanceState: Bundle?) { @@ -73,20 +71,6 @@ class MainFragment : Fragment(), BalanceClickListener { 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 -// }) - mainFab.setOnClickListener { onScanButtonClicked() } @@ -99,25 +83,12 @@ class MainFragment : Fragment(), BalanceClickListener { 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) } @@ -145,7 +116,7 @@ class MainFragment : Fragment(), BalanceClickListener { beginDelayedTransition(view as ViewGroup) } - override fun onBalanceClick() { + override fun onBalanceClick(currency: String) { findNavController().navigate(R.id.walletHistory) } diff --git a/wallet/src/main/java/net/taler/wallet/SettingsFragment.kt b/wallet/src/main/java/net/taler/wallet/SettingsFragment.kt index 559b162..a38a5a3 100644 --- a/wallet/src/main/java/net/taler/wallet/SettingsFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/SettingsFragment.kt @@ -16,127 +16,73 @@ package net.taler.wallet -import android.app.Dialog -import android.content.Context -import android.content.Intent -import android.content.Intent.ACTION_CREATE_DOCUMENT -import android.content.Intent.ACTION_OPEN_DOCUMENT -import android.content.Intent.CATEGORY_OPENABLE -import android.content.Intent.EXTRA_TITLE import android.os.Bundle -import android.util.Log -import android.view.LayoutInflater import android.view.View -import android.view.View.GONE -import android.view.View.VISIBLE -import android.view.ViewGroup import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.DialogFragment -import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.Observer -import kotlinx.android.synthetic.main.fragment_settings.* +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import androidx.preference.SwitchPreferenceCompat +import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_SHORT +import com.google.android.material.snackbar.Snackbar -interface ResetDialogEventListener { - fun onResetConfirmed() - fun onResetCancelled() -} - - -class ResetDialogFragment : DialogFragment() { - private lateinit var listener: ResetDialogEventListener - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - return activity?.let { - // Use the Builder class for convenient dialog construction - val builder = AlertDialog.Builder(it) - builder.setMessage("Do you really want to reset the wallet and lose all coins and purchases? Consider making a backup first.") - .setPositiveButton("Reset") { _, _ -> - listener.onResetConfirmed() - } - .setNegativeButton("Cancel") { _, _ -> - listener.onResetCancelled() - } - // Create the AlertDialog object and return it - builder.create() - } ?: throw IllegalStateException("Activity cannot be null") - } - - override fun onAttach(context: Context) { - super.onAttach(context) - // Verify that the host activity implements the callback interface - try { - // Instantiate the NoticeDialogListener so we can send events to the host - listener = context as ResetDialogEventListener - } catch (e: ClassCastException) { - // The activity doesn't implement the interface, throw exception - throw ClassCastException( - (context.toString() + - " must implement ResetDialogEventListener") - ) - } - } -} - -class SettingsFragment : Fragment() { - - companion object { - private const val TAG = "taler-wallet" - private const val CREATE_FILE = 1 - private const val PICK_FILE = 2 - } +class SettingsFragment : PreferenceFragmentCompat() { private val model: MainViewModel by activityViewModels() + private val withdrawManager by lazy { model.withdrawManager } + + private lateinit var prefDevMode: SwitchPreferenceCompat + private lateinit var prefWithdrawTest: Preference + private lateinit var prefReset: Preference - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_settings, container, false) + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.settings_main, rootKey) + prefDevMode = findPreference("pref_dev_mode")!! + prefWithdrawTest = findPreference("pref_testkudos")!! + prefReset = findPreference("pref_reset")!! } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + model.devMode.observe(viewLifecycleOwner, Observer { enabled -> - val visibility = if (enabled) VISIBLE else GONE - devSettingsTitle.visibility = visibility - button_reset_wallet_dangerously.visibility = visibility + prefDevMode.isChecked = enabled + prefWithdrawTest.isVisible = enabled + prefReset.isVisible = enabled }) - - textView4.text = BuildConfig.VERSION_NAME - button_reset_wallet_dangerously.setOnClickListener { - val d = ResetDialogFragment() - d.show(parentFragmentManager, "walletResetDialog") + prefDevMode.setOnPreferenceChangeListener { _, newValue -> + model.devMode.value = newValue as Boolean + true } - button_backup_export.setOnClickListener { - val intent = Intent(ACTION_CREATE_DOCUMENT).apply { - addCategory(CATEGORY_OPENABLE) - type = "application/json" - putExtra(EXTRA_TITLE, "taler-wallet-backup.json") - // Optionally, specify a URI for the directory that should be opened in - // the system file picker before your app creates the document. - //putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri) - } - startActivityForResult(intent, CREATE_FILE) + withdrawManager.testWithdrawalInProgress.observe(viewLifecycleOwner, Observer { loading -> + prefWithdrawTest.isEnabled = !loading + model.showProgressBar.value = loading + }) + prefWithdrawTest.setOnPreferenceClickListener { + withdrawManager.withdrawTestkudos() + true } - button_backup_import.setOnClickListener { - val intent = Intent(ACTION_OPEN_DOCUMENT).apply { - addCategory(CATEGORY_OPENABLE) - type = "application/json" - //putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri) - } - startActivityForResult(intent, PICK_FILE) + prefReset.setOnPreferenceClickListener { + showResetDialog() + true } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (data == null) return - when (requestCode) { - CREATE_FILE -> Log.i(TAG, "got createFile result with URL ${data.data}") - PICK_FILE -> Log.i(TAG, "got pickFile result with URL ${data.data}") - } + private fun showResetDialog() { + AlertDialog.Builder(requireContext()) + .setMessage("Do you really want to reset the wallet and lose all coins and purchases?") + .setPositiveButton("Reset") { _, _ -> + model.dangerouslyReset() + Snackbar.make(view!!, "Wallet has been reset", LENGTH_SHORT).show() + } + .setNegativeButton("Cancel") { _, _ -> + Snackbar.make(view!!, "Reset cancelled", LENGTH_SHORT).show() + } + .show() } } diff --git a/wallet/src/main/res/drawable/ic_cash_usd_outline.xml b/wallet/src/main/res/drawable/ic_cash_usd_outline.xml index 0e26eef..aa5b85f 100644 --- a/wallet/src/main/res/drawable/ic_cash_usd_outline.xml +++ b/wallet/src/main/res/drawable/ic_cash_usd_outline.xml @@ -17,6 +17,7 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" + android:tint="?attr/colorControlNormal" android:viewportWidth="24" android:viewportHeight="24"> <path diff --git a/wallet/src/main/res/drawable/ic_developer_mode.xml b/wallet/src/main/res/drawable/ic_developer_mode.xml new file mode 100644 index 0000000..c401182 --- /dev/null +++ b/wallet/src/main/res/drawable/ic_developer_mode.xml @@ -0,0 +1,10 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:tint="?attr/colorControlNormal" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M7,5h10v2h2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99L7,1c-1.1,0 -2,0.9 -2,2v4h2L7,5zM15.41,16.59L20,12l-4.59,-4.59L14,8.83 17.17,12 14,15.17l1.41,1.42zM10,15.17L6.83,12 10,8.83 8.59,7.41 4,12l4.59,4.59L10,15.17zM17,19L7,19v-2L5,17v4c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2v-4h-2v2z" /> +</vector> diff --git a/wallet/src/main/res/layout/fragment_settings.xml b/wallet/src/main/res/layout/fragment_settings.xml deleted file mode 100644 index 27c5f57..0000000 --- a/wallet/src/main/res/layout/fragment_settings.xml +++ /dev/null @@ -1,104 +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/> - --> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_margin="10dp" - android:orientation="vertical" - tools:context=".SettingsFragment"> - - - <TextView - android:id="@+id/editText2" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:ems="10" - android:text="@string/settings_version" - android:textSize="18sp" /> - - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - - <TextView - android:id="@+id/textView5" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1" - android:text="@string/app_name" /> - - <TextView - android:id="@+id/textView4" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1" - tools:text="0.6.0pre8" /> - - </LinearLayout> - - <Space - android:layout_width="0dp" - android:layout_height="15dp" /> - - <TextView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:ems="10" - android:text="@string/settings_backups" - android:textSize="18sp" - android:visibility="gone" /> - - <Button - android:id="@+id/button_backup_export" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/settings_export_to_file" - android:visibility="gone" /> - - <Button - android:id="@+id/button_backup_import" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/settings_import_from_file" - android:visibility="gone" /> - - - <TextView - android:id="@+id/devSettingsTitle" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:ems="10" - android:text="@string/settings_developer" - android:textSize="18sp" /> - - <!-- - <Button - android:text="Withdraw TESTKUDOS" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:id="@+id/button_withdraw_testkudos"/>--> - - <Button - android:id="@+id/button_reset_wallet_dangerously" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/settings_reset" /> - -</LinearLayout> diff --git a/wallet/src/main/res/menu/balance.xml b/wallet/src/main/res/menu/balance.xml index 1685526..d4568d4 100644 --- a/wallet/src/main/res/menu/balance.xml +++ b/wallet/src/main/res/menu/balance.xml @@ -16,13 +16,4 @@ <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> - <item - android:id="@+id/reload_balance" - android:title="@string/menu_balance_reload" - app:showAsAction="never" /> - <item - android:id="@+id/developer_mode" - android:checkable="true" - android:title="@string/menu_developer_mode" - app:showAsAction="never" /> </menu> diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml index 357aedc..8eec297 100644 --- a/wallet/src/main/res/values/strings.xml +++ b/wallet/src/main/res/values/strings.xml @@ -97,7 +97,6 @@ <string name="withdraw_total">Withdraw</string> <string name="withdraw_fees">Fee</string> <string name="withdraw_exchange">Exchange</string> - <string name="withdraw_button_testkudos">Withdraw TESTKUDOS</string> <string name="withdraw_button_confirm">Confirm Withdraw</string> <string name="withdraw_button_tos">Review Terms</string> <string name="withdraw_error_title">Withdrawal Error</string> @@ -129,8 +128,11 @@ <string name="settings_backups">Backups</string> <string name="settings_export_to_file">Export wallet to file</string> <string name="settings_import_from_file">Import from file</string> - <string name="settings_developer">Developer Settings (use with caution!)</string> + <string name="settings_withdraw_testkudos">Withdraw TESTKUDOS</string> + <string name="settings_withdraw_testkudos_summary">Get money for testing</string> <string name="settings_reset">Reset Wallet (dangerous!)</string> + <string name="settings_reset_summary">Throws away your money</string> + <string name="settings_dev_mode_summary">Shows more information intended for debugging</string> <string name="refund_error">Error processing refund</string> <string name="refund_success">Refund received</string> diff --git a/wallet/src/main/res/xml/settings_main.xml b/wallet/src/main/res/xml/settings_main.xml new file mode 100644 index 0000000..90f5f6c --- /dev/null +++ b/wallet/src/main/res/xml/settings_main.xml @@ -0,0 +1,41 @@ +<?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/> + --> + +<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + + <SwitchPreferenceCompat + app:icon="@drawable/ic_developer_mode" + app:key="pref_dev_mode" + app:summary="@string/settings_dev_mode_summary" + app:title="@string/menu_developer_mode" /> + + <Preference + app:icon="@drawable/ic_cash_usd_outline" + app:isPreferenceVisible="false" + app:key="pref_testkudos" + app:summary="@string/settings_withdraw_testkudos_summary" + app:title="@string/settings_withdraw_testkudos" + tools:isPreferenceVisible="true" /> + + <Preference + app:isPreferenceVisible="false" + app:key="pref_reset" + app:summary="@string/settings_reset_summary" + app:title="@string/settings_reset" + tools:isPreferenceVisible="true" /> + +</PreferenceScreen> |