gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-android] branch master updated (3cf3abb -> f94169a)


From: gnunet
Subject: [taler-taler-android] branch master updated (3cf3abb -> f94169a)
Date: Tue, 03 Jan 2023 15:28:18 +0100

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a change to branch master
in repository taler-android.

    from 3cf3abb  [wallet] change send money texts for Bitcoin
     new 9bb3505  [wallet] Don't allow entering invalid amounts
     new f94169a  [cashier] Fix some lint warnings

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../main/java/net/taler/cashier/BalanceFragment.kt | 14 +++----
 .../main/java/net/taler/cashier/MainActivity.kt    |  1 +
 .../net/taler/cashier/withdraw/ErrorFragment.kt    |  2 +-
 taler-kotlin-android/build.gradle                  |  4 +-
 .../src/main/java/net/taler/common/Amount.kt       | 44 +++++++++++++++++-----
 .../java/net/taler/wallet/ReceiveFundsFragment.kt  |  4 +-
 .../java/net/taler/wallet/SendFundsFragment.kt     |  4 +-
 7 files changed, 50 insertions(+), 23 deletions(-)

diff --git a/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt 
b/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt
index b246e9f..4fd3143 100644
--- a/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt
+++ b/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt
@@ -54,19 +54,19 @@ class BalanceFragment : Fragment() {
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
         savedInstanceState: Bundle?,
-    ): View? {
+    ): View {
         setHasOptionsMenu(true)
         ui = FragmentBalanceBinding.inflate(layoutInflater, container, false)
         return ui.root
     }
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        withdrawManager.lastTransaction.observe(viewLifecycleOwner, { 
lastTransaction ->
+        withdrawManager.lastTransaction.observe(viewLifecycleOwner) { 
lastTransaction ->
             onLastTransaction(lastTransaction)
-        })
-        viewModel.balance.observe(viewLifecycleOwner, { result ->
+        }
+        viewModel.balance.observe(viewLifecycleOwner) { result ->
             onBalanceUpdated(result)
-        })
+        }
         ui.button5.setOnClickListener { onAmountButtonPressed(5) }
         ui.button10.setOnClickListener { onAmountButtonPressed(10) }
         ui.button20.setOnClickListener { onAmountButtonPressed(20) }
@@ -81,9 +81,9 @@ class BalanceFragment : Fragment() {
                 true
             } else false
         }
-        configManager.currency.observe(viewLifecycleOwner, { currency ->
+        configManager.currency.observe(viewLifecycleOwner) { currency ->
             ui.currencyView.text = currency
-        })
+        }
         ui.confirmWithdrawalButton.setOnClickListener { 
onAmountConfirmed(getAmountFromView()) }
     }
 
diff --git a/cashier/src/main/java/net/taler/cashier/MainActivity.kt 
b/cashier/src/main/java/net/taler/cashier/MainActivity.kt
index 2f4c4ec..aacc225 100644
--- a/cashier/src/main/java/net/taler/cashier/MainActivity.kt
+++ b/cashier/src/main/java/net/taler/cashier/MainActivity.kt
@@ -52,6 +52,7 @@ class MainActivity : AppCompatActivity() {
         }
     }
 
+    @Deprecated("Deprecated in Java")
     override fun onBackPressed() {
         if (!configManager.hasConfig() && nav.currentDestination?.id == 
R.id.configFragment) {
             // we are in the configuration screen and need a config to continue
diff --git a/cashier/src/main/java/net/taler/cashier/withdraw/ErrorFragment.kt 
b/cashier/src/main/java/net/taler/cashier/withdraw/ErrorFragment.kt
index 07b7415..c951bb8 100644
--- a/cashier/src/main/java/net/taler/cashier/withdraw/ErrorFragment.kt
+++ b/cashier/src/main/java/net/taler/cashier/withdraw/ErrorFragment.kt
@@ -37,7 +37,7 @@ class ErrorFragment : Fragment() {
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
         savedInstanceState: Bundle?,
-    ): View? {
+    ): View {
         ui = FragmentErrorBinding.inflate(inflater, container, false)
         return ui.root
     }
diff --git a/taler-kotlin-android/build.gradle 
b/taler-kotlin-android/build.gradle
index efd305f..69b4f4d 100644
--- a/taler-kotlin-android/build.gradle
+++ b/taler-kotlin-android/build.gradle
@@ -21,6 +21,7 @@ plugins {
 }
 
 android {
+    namespace 'net.taler.common'
     compileSdkVersion 32
     buildToolsVersion "$build_tools_version"
 
@@ -49,9 +50,6 @@ android {
             excludes += ['META-INF/*.kotlin_module']
         }
     }
-
-    namespace 'net.taler.common'
-
 }
 
 dependencies {
diff --git a/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt 
b/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt
index 4a6e4b3..750a1de 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt
@@ -25,8 +25,11 @@ import kotlin.math.floor
 import kotlin.math.pow
 import kotlin.math.roundToInt
 
-public class AmountParserException(msg: String? = null, cause: Throwable? = 
null) : Exception(msg, cause)
-public class AmountOverflowException(msg: String? = null, cause: Throwable? = 
null) : Exception(msg, cause)
+public class AmountParserException(msg: String? = null, cause: Throwable? = 
null) :
+    Exception(msg, cause)
+
+public class AmountOverflowException(msg: String? = null, cause: Throwable? = 
null) :
+    Exception(msg, cause)
 
 @Serializable(with = KotlinXAmountSerializer::class)
 public data class Amount(
@@ -50,7 +53,7 @@ public data class Amount(
      * of the base currency value.  For example, a fraction
      * of 50_000_000 would correspond to 50 cents.
      */
-    val fraction: Int
+    val fraction: Int,
 ) : Comparable<Amount> {
 
     public companion object {
@@ -63,8 +66,8 @@ public data class Amount(
         public const val MAX_FRACTION: Int = 99_999_999
 
         public fun fromDouble(currency: String, value: Double): Amount {
-            val intPart = Math.floor(value).toLong()
-            val fraPart = Math.floor((value - intPart) *  
FRACTIONAL_BASE).toInt()
+            val intPart = floor(value).toLong()
+            val fraPart = floor((value - intPart) * FRACTIONAL_BASE).toInt()
             return Amount(currency, intPart, fraPart)
         }
 
@@ -87,14 +90,34 @@ public data class Amount(
                 val fractionStr = valueSplit[1]
                 if (fractionStr.length > MAX_FRACTION_LENGTH)
                     throw AmountParserException("Fraction $fractionStr too 
long")
-                val fraction = "0.$fractionStr".toDoubleOrNull()
-                    ?.times(FRACTIONAL_BASE)
-                    ?.roundToInt()
-                checkFraction(fraction)
+                checkFraction(fractionStr.getFraction())
             } else 0
             return Amount(checkCurrency(currency), value, fraction)
         }
 
+        public fun isValidAmountStr(str: String): Boolean {
+            val split = str.split(".")
+            try {
+                checkValue(split[0].toLongOrNull())
+            } catch (e: AmountParserException) {
+                return false
+            }
+            // also check fraction, if it exists
+            if (split.size > 1) {
+                val fractionStr = split[1]
+                if (fractionStr.length > MAX_FRACTION_LENGTH) return false
+                val fraction = fractionStr.getFraction() ?: return false
+                return fraction <= MAX_FRACTION
+            }
+            return true
+        }
+
+        private fun String.getFraction(): Int? {
+            return "0.$this".toDoubleOrNull()
+                ?.times(FRACTIONAL_BASE)
+                ?.roundToInt()
+        }
+
         public fun min(currency: String): Amount = Amount(currency, 0, 1)
         public fun max(currency: String): Amount = Amount(currency, MAX_VALUE, 
MAX_FRACTION)
 
@@ -132,7 +155,8 @@ public data class Amount(
 
     public operator fun plus(other: Amount): Amount {
         check(currency == other.currency) { "Can only subtract from same 
currency" }
-        val resultValue = value + other.value + floor((fraction + 
other.fraction).toDouble() / FRACTIONAL_BASE).toLong()
+        val resultValue =
+            value + other.value + floor((fraction + other.fraction).toDouble() 
/ FRACTIONAL_BASE).toLong()
         if (resultValue > MAX_VALUE)
             throw AmountOverflowException()
         val resultFraction = (fraction + other.fraction) % FRACTIONAL_BASE
diff --git a/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt 
b/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
index 647512c..8ae96ad 100644
--- a/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
@@ -55,6 +55,7 @@ import androidx.fragment.app.activityViewModels
 import androidx.lifecycle.lifecycleScope
 import androidx.navigation.fragment.findNavController
 import net.taler.common.Amount
+import net.taler.common.Amount.Companion.isValidAmountStr
 import net.taler.wallet.exchanges.ExchangeItem
 
 class ReceiveFundsFragment : Fragment() {
@@ -136,7 +137,8 @@ private fun ReceiveFundsIntro(
                 keyboardOptions = KeyboardOptions.Default.copy(keyboardType = 
Decimal),
                 onValueChange = { input ->
                     isError = false
-                    text = input.filter { it.isDigit() || it == '.' }
+                    val filtered = input.filter { it.isDigit() || it == '.' }
+                    if (filtered.endsWith('.') || isValidAmountStr(filtered)) 
text = filtered
                 },
                 isError = isError,
                 label = {
diff --git a/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt 
b/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
index 640fbf7..c5348a3 100644
--- a/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
@@ -52,6 +52,7 @@ import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
 import androidx.navigation.fragment.findNavController
 import net.taler.common.Amount
+import net.taler.common.Amount.Companion.isValidAmountStr
 
 class SendFundsFragment : Fragment() {
     private val model: MainViewModel by activityViewModels()
@@ -126,7 +127,8 @@ private fun SendFundsIntro(
                 onValueChange = { input ->
                     isError = false
                     insufficientBalance = false
-                    text = input.filter { it.isDigit() || it == '.' }
+                    val filtered = input.filter { it.isDigit() || it == '.' }
+                    if (filtered.endsWith('.') || isValidAmountStr(filtered)) 
text = filtered
                 },
                 isError = isError || insufficientBalance,
                 label = {

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]