gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-android] branch master updated (451157d -> 5cf637b)


From: gnunet
Subject: [taler-taler-android] branch master updated (451157d -> 5cf637b)
Date: Tue, 18 Aug 2020 18:24:54 +0200

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 451157d  [wallet] Fix unit tests by including non-Android JSON 
dependency
     new 612876e  Include Taler common Kotlin library as a submodule
     new 5cf637b  Bootstrap new submodule in CI

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:
 .gitlab-ci.yml                                     |   4 +-
 .gitmodules                                        |   3 +
 .idea/compiler.xml                                 |   4 +
 .idea/gradle.xml                                   |   3 +-
 .idea/jarRepositories.xml                          |   5 +
 .../ui/authentication/AuthenticationFragment.kt    |   5 +-
 bootstrap                                          |  14 ++
 .../main/java/net/taler/cashier/BalanceFragment.kt |   2 +-
 .../main/java/net/taler/cashier/MainViewModel.kt   |   4 +-
 .../net/taler/cashier/withdraw/WithdrawManager.kt  |   2 +-
 .../java/net/taler/merchantlib/OrderHistory.kt     |   4 +-
 .../src/main/java/net/taler/merchantlib/Orders.kt  |   2 +-
 .../src/main/java/net/taler/merchantlib/Refunds.kt |   2 +-
 .../java/net/taler/merchantlib/MerchantApiTest.kt  |   4 +-
 .../net/taler/merchantpos/config/ConfigManager.kt  |   2 +-
 .../java/net/taler/merchantpos/config/PosConfig.kt |   2 +-
 .../java/net/taler/merchantpos/order/LiveOrder.kt  |   2 +-
 .../main/java/net/taler/merchantpos/order/Order.kt |   4 +-
 .../taler/merchantpos/payment/PaymentManager.kt    |   2 +-
 .../net/taler/merchantpos/refund/RefundFragment.kt |   4 +-
 .../net/taler/merchantpos/refund/RefundManager.kt  |   2 +-
 .../taler/merchantpos/order/OrderManagerTest.kt    |   2 +-
 settings.gradle                                    |   4 +-
 taler-kotlin-android/build.gradle                  |   2 +-
 .../src/main/java/net/taler/common/AndroidUtils.kt |   1 +
 .../main/java/net/taler/common/ContractTerms.kt    |   2 +
 .../src/main/java/net/taler/common/SignedAmount.kt |   4 +-
 .../java/net/taler/{ => lib}/common/AmountMixin.kt |   2 +-
 .../net/taler/{ => lib}/common/TimestampMixin.kt   |   2 +-
 .../java/net/taler/common/ContractTermsTest.kt     |   6 +-
 taler-kotlin-common/.gitignore                     |   1 -
 taler-kotlin-common/.gitlab-ci.yml                 |   7 -
 taler-kotlin-common/build.gradle                   |  82 --------
 .../commonMain/kotlin/net/taler/common/Amount.kt   | 198 -----------------
 .../src/commonMain/kotlin/net/taler/common/Time.kt | 106 ----------
 .../commonMain/kotlin/net/taler/common/Version.kt  |  70 ------
 .../kotlin/net/taler/common/AmountTest.kt          | 234 ---------------------
 .../kotlin/net/taler/common/TestUtils.kt           |  26 ---
 .../commonTest/kotlin/net/taler/common/TimeTest.kt |  49 -----
 .../kotlin/net/taler/common/VersionTest.kt         |  65 ------
 .../src/jsMain/kotlin/net/taler/common/Time.kt     |  23 --
 .../src/jvmMain/kotlin/net/taler/common/Time.kt    |  21 --
 .../src/nativeMain/kotlin/net/taler/common/Time.kt |  23 --
 wallet-kotlin                                      |   1 +
 wallet/build.gradle                                |   4 +-
 .../main/java/net/taler/wallet/MainViewModel.kt    |   8 +-
 .../net/taler/wallet/balances/BalanceAdapter.kt    |   2 +-
 .../net/taler/wallet/exchanges/ExchangeFees.kt     |   4 +-
 .../wallet/exchanges/SelectExchangeFragment.kt     |   2 +-
 .../net/taler/wallet/payment/PaymentManager.kt     |   2 +-
 .../net/taler/wallet/payment/PaymentResponses.kt   |   2 +-
 .../taler/wallet/payment/PromptPaymentFragment.kt  |   2 +-
 .../java/net/taler/wallet/refund/RefundManager.kt  |   2 +-
 .../transactions/TransactionDetailFragment.kt      |   2 +-
 .../net/taler/wallet/transactions/Transactions.kt  |   4 +-
 .../wallet/withdraw/ManualWithdrawFragment.kt      |   2 +-
 .../wallet/withdraw/PromptWithdrawFragment.kt      |   2 +-
 .../net/taler/wallet/withdraw/WithdrawManager.kt   |   2 +-
 .../net/taler/wallet/backend/WalletResponseTest.kt |   8 +-
 59 files changed, 94 insertions(+), 961 deletions(-)
 create mode 100644 .gitmodules
 create mode 100755 bootstrap
 rename taler-kotlin-android/src/main/java/net/taler/{ => 
lib}/common/AmountMixin.kt (98%)
 rename taler-kotlin-android/src/main/java/net/taler/{ => 
lib}/common/TimestampMixin.kt (98%)
 delete mode 100644 taler-kotlin-common/.gitignore
 delete mode 100644 taler-kotlin-common/.gitlab-ci.yml
 delete mode 100644 taler-kotlin-common/build.gradle
 delete mode 100644 
taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Amount.kt
 delete mode 100644 
taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Time.kt
 delete mode 100644 
taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Version.kt
 delete mode 100644 
taler-kotlin-common/src/commonTest/kotlin/net/taler/common/AmountTest.kt
 delete mode 100644 
taler-kotlin-common/src/commonTest/kotlin/net/taler/common/TestUtils.kt
 delete mode 100644 
taler-kotlin-common/src/commonTest/kotlin/net/taler/common/TimeTest.kt
 delete mode 100644 
taler-kotlin-common/src/commonTest/kotlin/net/taler/common/VersionTest.kt
 delete mode 100644 
taler-kotlin-common/src/jsMain/kotlin/net/taler/common/Time.kt
 delete mode 100644 
taler-kotlin-common/src/jvmMain/kotlin/net/taler/common/Time.kt
 delete mode 100644 
taler-kotlin-common/src/nativeMain/kotlin/net/taler/common/Time.kt
 create mode 160000 wallet-kotlin

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6dc4426..7f304d8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,11 +9,13 @@ stages:
   - test
   - deploy
 
+before_script:
+  - ./bootstrap
+
 include:
   - local: 'cashier/.gitlab-ci.yml'
   - local: 'merchant-lib/.gitlab-ci.yml'
   - local: 'merchant-terminal/.gitlab-ci.yml'
-  - local: 'taler-kotlin-common/.gitlab-ci.yml'
   - local: 'taler-kotlin-android/.gitlab-ci.yml'
   - local: 'wallet/.gitlab-ci.yml'
 
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..7171b3d
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "wallet-kotlin"]
+       path = wallet-kotlin
+       url = git://git.taler.net/wallet-kotlin.git
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 40ed937..2b48706 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -11,5 +11,9 @@
       <entry name="!?*.kt" />
       <entry name="!?*.clj" />
     </wildcardResourcePatterns>
+    <bytecodeTargetLevel>
+      <module name="taler-kotlin-common_jvmMain" target="1.6" />
+      <module name="taler-kotlin-common_jvmTest" target="1.6" />
+    </bytecodeTargetLevel>
   </component>
 </project>
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 01ed15f..25f810e 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -15,8 +15,9 @@
             <option value="$PROJECT_DIR$/merchant-lib" />
             <option value="$PROJECT_DIR$/merchant-terminal" />
             <option value="$PROJECT_DIR$/taler-kotlin-android" />
-            <option value="$PROJECT_DIR$/taler-kotlin-common" />
             <option value="$PROJECT_DIR$/wallet" />
+            <option value="$PROJECT_DIR$/wallet-kotlin" />
+            <option value="$PROJECT_DIR$/wallet-kotlin/common" />
           </set>
         </option>
         <option name="resolveModulePerSourceSet" value="false" />
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index eb2873e..1e2d92c 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -26,5 +26,10 @@
       <option name="name" value="Google" />
       <option name="url" value="https://dl.google.com/dl/android/maven2/"; />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenRepo" />
+      <option name="name" value="MavenRepo" />
+      <option name="url" value="https://repo.maven.apache.org/maven2/"; />
+    </remote-repository>
   </component>
 </project>
\ No newline at end of file
diff --git 
a/anastasis-ui/src/main/java/org/gnu/anastasis/ui/authentication/AuthenticationFragment.kt
 
b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/authentication/AuthenticationFragment.kt
index 607917d..fd770cb 100644
--- 
a/anastasis-ui/src/main/java/org/gnu/anastasis/ui/authentication/AuthenticationFragment.kt
+++ 
b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/authentication/AuthenticationFragment.kt
@@ -31,7 +31,7 @@ import androidx.navigation.fragment.FragmentNavigatorExtras
 import androidx.navigation.fragment.findNavController
 import com.google.android.material.card.MaterialCardView
 import kotlinx.android.synthetic.main.fragment_authentication.*
-import net.taler.common.Amount
+import net.taler.lib.common.Amount
 import org.gnu.anastasis.ui.MainViewModel
 import org.gnu.anastasis.ui.R
 
@@ -42,7 +42,8 @@ class AuthenticationFragment : Fragment() {
     private var price: Amount = Amount.zero("KUDOS")
 
     override fun onCreateView(
-        inflater: LayoutInflater, container: ViewGroup?,
+        inflater: LayoutInflater,
+        container: ViewGroup?,
         savedInstanceState: Bundle?
     ): View? {
         return inflater.inflate(R.layout.fragment_authentication, container, 
false)
diff --git a/bootstrap b/bootstrap
new file mode 100755
index 0000000..8efb636
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Bootstrap the repository.  Used when the repository is checked out from git.
+# When using the source tarball, running this script is not necessary.
+
+set -eu
+
+if ! git --version >/dev/null; then
+  echo "git not installed"
+  exit 1
+fi
+
+git submodule sync --recursive
+git submodule update --init --recursive
diff --git a/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt 
b/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt
index 246cba0..5b963a0 100644
--- a/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt
+++ b/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt
@@ -33,11 +33,11 @@ import kotlinx.android.synthetic.main.fragment_balance.*
 import 
net.taler.cashier.BalanceFragmentDirections.Companion.actionBalanceFragmentToTransactionFragment
 import net.taler.cashier.withdraw.LastTransaction
 import net.taler.cashier.withdraw.WithdrawStatus
-import net.taler.common.Amount
 import net.taler.common.SignedAmount
 import net.taler.common.exhaustive
 import net.taler.common.fadeIn
 import net.taler.common.fadeOut
+import net.taler.lib.common.Amount
 
 sealed class BalanceResult {
     class Error(val msg: String) : BalanceResult()
diff --git a/cashier/src/main/java/net/taler/cashier/MainViewModel.kt 
b/cashier/src/main/java/net/taler/cashier/MainViewModel.kt
index 1740494..a0796df 100644
--- a/cashier/src/main/java/net/taler/cashier/MainViewModel.kt
+++ b/cashier/src/main/java/net/taler/cashier/MainViewModel.kt
@@ -34,11 +34,11 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import net.taler.cashier.HttpHelper.makeJsonGetRequest
 import net.taler.cashier.withdraw.WithdrawManager
-import net.taler.common.AmountParserException
 import net.taler.common.SignedAmount
-import net.taler.common.Version
 import net.taler.common.getIncompatibleStringOrNull
 import net.taler.common.isOnline
+import net.taler.lib.common.AmountParserException
+import net.taler.lib.common.Version
 
 private val TAG = MainViewModel::class.java.simpleName
 
diff --git 
a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt 
b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
index 59e0c50..9f3cf54 100644
--- a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
+++ b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
@@ -34,9 +34,9 @@ import net.taler.cashier.HttpJsonResult.Error
 import net.taler.cashier.HttpJsonResult.Success
 import net.taler.cashier.MainViewModel
 import net.taler.cashier.R
-import net.taler.common.Amount
 import net.taler.common.QrCodeManager.makeQrCode
 import net.taler.common.isOnline
+import net.taler.lib.common.Amount
 import org.json.JSONObject
 import java.util.concurrent.TimeUnit.MINUTES
 import java.util.concurrent.TimeUnit.SECONDS
diff --git a/merchant-lib/src/main/java/net/taler/merchantlib/OrderHistory.kt 
b/merchant-lib/src/main/java/net/taler/merchantlib/OrderHistory.kt
index b1ff5b1..dfd989b 100644
--- a/merchant-lib/src/main/java/net/taler/merchantlib/OrderHistory.kt
+++ b/merchant-lib/src/main/java/net/taler/merchantlib/OrderHistory.kt
@@ -18,8 +18,8 @@ package net.taler.merchantlib
 
 import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
-import net.taler.common.Amount
-import net.taler.common.Timestamp
+import net.taler.lib.common.Amount
+import net.taler.lib.common.Timestamp
 
 @Serializable
 data class OrderHistory(
diff --git a/merchant-lib/src/main/java/net/taler/merchantlib/Orders.kt 
b/merchant-lib/src/main/java/net/taler/merchantlib/Orders.kt
index 783dd19..0a405ad 100644
--- a/merchant-lib/src/main/java/net/taler/merchantlib/Orders.kt
+++ b/merchant-lib/src/main/java/net/taler/merchantlib/Orders.kt
@@ -25,7 +25,7 @@ import kotlinx.serialization.Serializer
 import kotlinx.serialization.json.JsonInput
 import kotlinx.serialization.json.JsonObject
 import net.taler.common.ContractTerms
-import net.taler.common.Duration
+import net.taler.lib.common.Duration
 
 @Serializable
 data class PostOrderRequest(
diff --git a/merchant-lib/src/main/java/net/taler/merchantlib/Refunds.kt 
b/merchant-lib/src/main/java/net/taler/merchantlib/Refunds.kt
index 61f0ab7..b78b571 100644
--- a/merchant-lib/src/main/java/net/taler/merchantlib/Refunds.kt
+++ b/merchant-lib/src/main/java/net/taler/merchantlib/Refunds.kt
@@ -18,7 +18,7 @@ package net.taler.merchantlib
 
 import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
-import net.taler.common.Amount
+import net.taler.lib.common.Amount
 
 @Serializable
 data class RefundRequest(
diff --git 
a/merchant-lib/src/test/java/net/taler/merchantlib/MerchantApiTest.kt 
b/merchant-lib/src/test/java/net/taler/merchantlib/MerchantApiTest.kt
index 992af6f..1e6a634 100644
--- a/merchant-lib/src/test/java/net/taler/merchantlib/MerchantApiTest.kt
+++ b/merchant-lib/src/test/java/net/taler/merchantlib/MerchantApiTest.kt
@@ -20,10 +20,10 @@ import io.ktor.http.HttpStatusCode.Companion.NotFound
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.test.TestCoroutineDispatcher
 import kotlinx.coroutines.test.runBlockingTest
-import net.taler.common.Amount
 import net.taler.common.ContractProduct
 import net.taler.common.ContractTerms
-import net.taler.common.Timestamp
+import net.taler.lib.common.Amount
+import net.taler.lib.common.Timestamp
 import net.taler.merchantlib.MockHttpClient.giveJsonResponse
 import net.taler.merchantlib.MockHttpClient.httpClient
 import org.junit.Assert.assertEquals
diff --git 
a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt 
b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
index 67e3685..23abe7d 100644
--- 
a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
+++ 
b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
@@ -34,8 +34,8 @@ import io.ktor.http.HttpStatusCode.Companion.Unauthorized
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
-import net.taler.common.Version
 import net.taler.common.getIncompatibleStringOrNull
+import net.taler.lib.common.Version
 import net.taler.merchantlib.ConfigResponse
 import net.taler.merchantlib.MerchantApi
 import net.taler.merchantlib.MerchantConfig
diff --git 
a/merchant-terminal/src/main/java/net/taler/merchantpos/config/PosConfig.kt 
b/merchant-terminal/src/main/java/net/taler/merchantpos/config/PosConfig.kt
index 2d8c040..cc8caf6 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/config/PosConfig.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/config/PosConfig.kt
@@ -18,10 +18,10 @@ package net.taler.merchantpos.config
 
 import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
-import net.taler.common.Amount
 import net.taler.common.ContractProduct
 import net.taler.common.Product
 import net.taler.common.TalerUtils
+import net.taler.lib.common.Amount
 import java.util.UUID
 
 data class Config(
diff --git 
a/merchant-terminal/src/main/java/net/taler/merchantpos/order/LiveOrder.kt 
b/merchant-terminal/src/main/java/net/taler/merchantpos/order/LiveOrder.kt
index a77e39b..738e32b 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/LiveOrder.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/LiveOrder.kt
@@ -20,8 +20,8 @@ import androidx.annotation.UiThread
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.Transformations
-import net.taler.common.Amount
 import net.taler.common.CombinedLiveData
+import net.taler.lib.common.Amount
 import net.taler.merchantpos.config.Category
 import net.taler.merchantpos.config.ConfigProduct
 import net.taler.merchantpos.order.RestartState.DISABLED
diff --git 
a/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt 
b/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
index 4053d4b..4fc2907 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
@@ -16,10 +16,10 @@
 
 package net.taler.merchantpos.order
 
-import net.taler.common.Amount
 import net.taler.common.ContractTerms
-import net.taler.common.Timestamp
 import net.taler.common.now
+import net.taler.lib.common.Amount
+import net.taler.lib.common.Timestamp
 import net.taler.merchantpos.config.Category
 import net.taler.merchantpos.config.ConfigProduct
 import java.net.URLEncoder
diff --git 
a/merchant-terminal/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
 
b/merchant-terminal/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
index b39355a..af340f1 100644
--- 
a/merchant-terminal/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
+++ 
b/merchant-terminal/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
@@ -26,8 +26,8 @@ import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.isActive
 import kotlinx.coroutines.launch
-import net.taler.common.Duration
 import net.taler.common.assertUiThread
+import net.taler.lib.common.Duration
 import net.taler.merchantlib.CheckPaymentResponse
 import net.taler.merchantlib.MerchantApi
 import net.taler.merchantlib.PostOrderRequest
diff --git 
a/merchant-terminal/src/main/java/net/taler/merchantpos/refund/RefundFragment.kt
 
b/merchant-terminal/src/main/java/net/taler/merchantpos/refund/RefundFragment.kt
index edb2758..752b7aa 100644
--- 
a/merchant-terminal/src/main/java/net/taler/merchantpos/refund/RefundFragment.kt
+++ 
b/merchant-terminal/src/main/java/net/taler/merchantpos/refund/RefundFragment.kt
@@ -27,11 +27,11 @@ import androidx.navigation.fragment.findNavController
 import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_LONG
 import com.google.android.material.snackbar.Snackbar
 import kotlinx.android.synthetic.main.fragment_refund.*
-import net.taler.common.Amount
-import net.taler.common.AmountParserException
 import net.taler.common.fadeIn
 import net.taler.common.fadeOut
 import net.taler.common.navigate
+import net.taler.lib.common.Amount
+import net.taler.lib.common.AmountParserException
 import net.taler.merchantlib.OrderHistoryEntry
 import net.taler.merchantpos.MainViewModel
 import net.taler.merchantpos.R
diff --git 
a/merchant-terminal/src/main/java/net/taler/merchantpos/refund/RefundManager.kt 
b/merchant-terminal/src/main/java/net/taler/merchantpos/refund/RefundManager.kt
index 25c7c5e..de6cdde 100644
--- 
a/merchant-terminal/src/main/java/net/taler/merchantpos/refund/RefundManager.kt
+++ 
b/merchant-terminal/src/main/java/net/taler/merchantpos/refund/RefundManager.kt
@@ -21,8 +21,8 @@ import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
-import net.taler.common.Amount
 import net.taler.common.assertUiThread
+import net.taler.lib.common.Amount
 import net.taler.merchantlib.MerchantApi
 import net.taler.merchantlib.OrderHistoryEntry
 import net.taler.merchantlib.RefundRequest
diff --git 
a/merchant-terminal/src/test/java/net/taler/merchantpos/order/OrderManagerTest.kt
 
b/merchant-terminal/src/test/java/net/taler/merchantpos/order/OrderManagerTest.kt
index bb8dcb7..ca48b6e 100644
--- 
a/merchant-terminal/src/test/java/net/taler/merchantpos/order/OrderManagerTest.kt
+++ 
b/merchant-terminal/src/test/java/net/taler/merchantpos/order/OrderManagerTest.kt
@@ -20,7 +20,7 @@ import android.app.Application
 import androidx.test.core.app.ApplicationProvider.getApplicationContext
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import kotlinx.coroutines.runBlocking
-import net.taler.common.Amount
+import net.taler.lib.common.Amount
 import net.taler.merchantlib.MerchantConfig
 import net.taler.merchantpos.R
 import net.taler.merchantpos.config.Category
diff --git a/settings.gradle b/settings.gradle
index 2240bc2..1e16e26 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,7 +1,5 @@
-enableFeaturePreview('GRADLE_METADATA')
-
+include ':wallet-kotlin:common'
 include ':cashier', ':merchant-terminal', ':wallet'
-include ':taler-kotlin-common'
 include ':taler-kotlin-android'
 include ':merchant-lib'
 include ':anastasis-ui'
diff --git a/taler-kotlin-android/build.gradle 
b/taler-kotlin-android/build.gradle
index 20590e0..e6a376c 100644
--- a/taler-kotlin-android/build.gradle
+++ b/taler-kotlin-android/build.gradle
@@ -50,7 +50,7 @@ android {
 }
 
 dependencies {
-    api project(":taler-kotlin-common")
+    api project(":wallet-kotlin:common")
 
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     implementation 'androidx.appcompat:appcompat:1.2.0'
diff --git 
a/taler-kotlin-android/src/main/java/net/taler/common/AndroidUtils.kt 
b/taler-kotlin-android/src/main/java/net/taler/common/AndroidUtils.kt
index b46f306..ceb5ead 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/AndroidUtils.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/common/AndroidUtils.kt
@@ -43,6 +43,7 @@ import androidx.core.content.ContextCompat.getSystemService
 import androidx.fragment.app.Fragment
 import androidx.navigation.NavDirections
 import androidx.navigation.fragment.findNavController
+import net.taler.lib.common.Version
 
 fun View.fadeIn(endAction: () -> Unit = {}) {
     if (visibility == VISIBLE && alpha == 1f) return
diff --git 
a/taler-kotlin-android/src/main/java/net/taler/common/ContractTerms.kt 
b/taler-kotlin-android/src/main/java/net/taler/common/ContractTerms.kt
index ab442f2..8bf77e8 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/ContractTerms.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/common/ContractTerms.kt
@@ -24,6 +24,8 @@ import com.fasterxml.jackson.annotation.JsonProperty
 import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
 import net.taler.common.TalerUtils.getLocalizedString
+import net.taler.lib.common.Amount
+import net.taler.lib.common.Timestamp
 
 @Serializable
 data class ContractTerms(
diff --git 
a/taler-kotlin-android/src/main/java/net/taler/common/SignedAmount.kt 
b/taler-kotlin-android/src/main/java/net/taler/common/SignedAmount.kt
index 03a0d6e..e95685a 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/SignedAmount.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/common/SignedAmount.kt
@@ -17,6 +17,8 @@
 package net.taler.common
 
 import android.annotation.SuppressLint
+import net.taler.lib.common.Amount
+import net.taler.lib.common.AmountParserException
 
 data class SignedAmount(
     val positive: Boolean,
@@ -37,4 +39,4 @@ data class SignedAmount(
         return if (positive) "$amount" else "-$amount"
     }
 
-}
\ No newline at end of file
+}
diff --git a/taler-kotlin-android/src/main/java/net/taler/common/AmountMixin.kt 
b/taler-kotlin-android/src/main/java/net/taler/lib/common/AmountMixin.kt
similarity index 98%
rename from taler-kotlin-android/src/main/java/net/taler/common/AmountMixin.kt
rename to taler-kotlin-android/src/main/java/net/taler/lib/common/AmountMixin.kt
index f9b1330..59285b6 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/AmountMixin.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/lib/common/AmountMixin.kt
@@ -14,7 +14,7 @@
  * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-package net.taler.common
+package net.taler.lib.common
 
 import com.fasterxml.jackson.core.JsonGenerator
 import com.fasterxml.jackson.core.JsonParser
diff --git 
a/taler-kotlin-android/src/main/java/net/taler/common/TimestampMixin.kt 
b/taler-kotlin-android/src/main/java/net/taler/lib/common/TimestampMixin.kt
similarity index 98%
rename from 
taler-kotlin-android/src/main/java/net/taler/common/TimestampMixin.kt
rename to 
taler-kotlin-android/src/main/java/net/taler/lib/common/TimestampMixin.kt
index 6c1bebf..40c03f6 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/TimestampMixin.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/lib/common/TimestampMixin.kt
@@ -14,7 +14,7 @@
  * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-package net.taler.common
+package net.taler.lib.common
 
 import com.fasterxml.jackson.annotation.JsonProperty
 import com.fasterxml.jackson.core.JsonParser
diff --git 
a/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt 
b/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
index 077ff51..62e8922 100644
--- a/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
+++ b/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
@@ -20,7 +20,11 @@ import com.fasterxml.jackson.databind.DeserializationFeature
 import com.fasterxml.jackson.databind.ObjectMapper
 import com.fasterxml.jackson.module.kotlin.KotlinModule
 import com.fasterxml.jackson.module.kotlin.readValue
-import net.taler.common.Timestamp.Companion.NEVER
+import net.taler.lib.common.Amount
+import net.taler.lib.common.AmountMixin
+import net.taler.lib.common.Timestamp
+import net.taler.lib.common.Timestamp.Companion.NEVER
+import net.taler.lib.common.TimestampMixin
 import org.junit.Assert.assertEquals
 import org.junit.Test
 
diff --git a/taler-kotlin-common/.gitignore b/taler-kotlin-common/.gitignore
deleted file mode 100644
index 796b96d..0000000
--- a/taler-kotlin-common/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
diff --git a/taler-kotlin-common/.gitlab-ci.yml 
b/taler-kotlin-common/.gitlab-ci.yml
deleted file mode 100644
index c241e31..0000000
--- a/taler-kotlin-common/.gitlab-ci.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-taler_kotlin_common_test:
-  stage: test
-  only:
-    changes:
-      - taler-kotlin-common/**/*
-      - build.gradle
-  script: ./gradlew :taler-kotlin-common:jvmTest
diff --git a/taler-kotlin-common/build.gradle b/taler-kotlin-common/build.gradle
deleted file mode 100644
index 129881d..0000000
--- a/taler-kotlin-common/build.gradle
+++ /dev/null
@@ -1,82 +0,0 @@
-plugins {
-    id 'org.jetbrains.kotlin.multiplatform'
-    id 'kotlinx-serialization'
-}
-
-group 'net.taler'
-version '0.0.1'
-
-apply plugin: 'maven-publish'
-
-kotlin {
-    jvm()
-    // This is for iPhone simulator
-    // Switch here to iosArm64 (or iosArm32) to build library for iPhone device
-    iosX64("ios") {
-        binaries {
-            framework()
-        }
-    }
-    linuxX64("linux")
-    js {
-        browser {
-        }
-        nodejs {
-        }
-    }
-    sourceSets {
-        def serialization_version = "0.20.0"
-        commonMain {
-            dependencies {
-                implementation kotlin('stdlib-common')
-                implementation 
"org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
-            }
-        }
-        commonTest {
-            dependencies {
-                implementation kotlin('test-common')
-                implementation kotlin('test-annotations-common')
-            }
-        }
-        jvmMain {
-            dependencies {
-                implementation kotlin('stdlib-jdk8')
-                implementation 
"org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version"
-            }
-        }
-        jvmTest {
-            dependencies {
-                implementation kotlin('test')
-                implementation kotlin('test-junit')
-            }
-        }
-        jsMain {
-            dependencies {
-                implementation kotlin('stdlib-js')
-                implementation 
"org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serialization_version"
-            }
-        }
-        jsTest {
-            dependencies {
-                implementation kotlin('test-js')
-            }
-        }
-        nativeMain {
-            dependsOn commonMain
-            dependencies {
-                implementation 
"org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version"
-            }
-        }
-        nativeTest {
-            dependsOn commonTest
-        }
-        configure([targets.linux, targets.ios]) {
-            compilations.main.source(sourceSets.nativeMain)
-            compilations.test.source(sourceSets.nativeTest)
-        }
-    }
-}
-
-configurations {
-    compileClasspath
-}
diff --git 
a/taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Amount.kt 
b/taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Amount.kt
deleted file mode 100644
index 84d10c5..0000000
--- a/taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Amount.kt
+++ /dev/null
@@ -1,198 +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.common
-
-import kotlinx.serialization.Decoder
-import kotlinx.serialization.Encoder
-import kotlinx.serialization.KSerializer
-import kotlinx.serialization.Serializable
-import kotlinx.serialization.Serializer
-import kotlin.math.floor
-import kotlin.math.pow
-import kotlin.math.roundToInt
-
-class AmountParserException(msg: String? = null, cause: Throwable? = null) : 
Exception(msg, cause)
-class AmountOverflowException(msg: String? = null, cause: Throwable? = null) : 
Exception(msg, cause)
-
-@Serializable(with = KotlinXAmountSerializer::class)
-data class Amount(
-    /**
-     * name of the currency using either a three-character ISO 4217 currency 
code,
-     * or a regional currency identifier starting with a "*" followed by at 
most 10 characters.
-     * ISO 4217 exponents in the name are not supported,
-     * although the "fraction" is corresponds to an ISO 4217 exponent of 6.
-     */
-    val currency: String,
-
-    /**
-     * The integer part may be at most 2^52.
-     * Note that "1" here would correspond to 1 EUR or 1 USD, depending on 
currency, not 1 cent.
-     */
-    val value: Long,
-
-    /**
-     * Unsigned 32 bit fractional value to be added to value representing
-     * an additional currency fraction, in units of one hundred millionth 
(1e-8)
-     * of the base currency value.  For example, a fraction
-     * of 50_000_000 would correspond to 50 cents.
-     */
-    val fraction: Int
-) : Comparable<Amount> {
-
-    companion object {
-
-        private const val FRACTIONAL_BASE: Int = 100000000 // 1e8
-
-        private val REGEX_CURRENCY = Regex("""^[-_*A-Za-z0-9]{1,12}$""")
-        val MAX_VALUE = 2.0.pow(52).toLong()
-        private const val MAX_FRACTION_LENGTH = 8
-        const val MAX_FRACTION = 99_999_999
-
-        fun zero(currency: String): Amount {
-            return Amount(checkCurrency(currency), 0, 0)
-        }
-
-        fun fromJSONString(str: String): Amount {
-            val split = str.split(":")
-            if (split.size != 2) throw AmountParserException("Invalid Amount 
Format")
-            return fromString(split[0], split[1])
-        }
-
-        fun fromString(currency: String, str: String): Amount {
-            // value
-            val valueSplit = str.split(".")
-            val value = checkValue(valueSplit[0].toLongOrNull())
-            // fraction
-            val fraction: Int = if (valueSplit.size > 1) {
-                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)
-            } else 0
-            return Amount(checkCurrency(currency), value, fraction)
-        }
-
-        fun min(currency: String): Amount = Amount(currency, 0, 1)
-        fun max(currency: String): Amount = Amount(currency, MAX_VALUE, 
MAX_FRACTION)
-
-
-        internal fun checkCurrency(currency: String): String {
-            if (!REGEX_CURRENCY.matches(currency))
-                throw AmountParserException("Invalid currency: $currency")
-            return currency
-        }
-
-        internal fun checkValue(value: Long?): Long {
-            if (value == null || value > MAX_VALUE)
-                throw AmountParserException("Value $value greater than 
$MAX_VALUE")
-            return value
-        }
-
-        internal fun checkFraction(fraction: Int?): Int {
-            if (fraction == null || fraction > MAX_FRACTION)
-                throw AmountParserException("Fraction $fraction greater than 
$MAX_FRACTION")
-            return fraction
-        }
-
-    }
-
-    val amountStr: String
-        get() = if (fraction == 0) "$value" else {
-            var f = fraction
-            var fractionStr = ""
-            while (f > 0) {
-                fractionStr += f / (FRACTIONAL_BASE / 10)
-                f = (f * 10) % FRACTIONAL_BASE
-            }
-            "$value.$fractionStr"
-        }
-
-    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()
-        if (resultValue > MAX_VALUE)
-            throw AmountOverflowException()
-        val resultFraction = (fraction + other.fraction) % FRACTIONAL_BASE
-        return Amount(currency, resultValue, resultFraction)
-    }
-
-    operator fun times(factor: Int): Amount {
-        // TODO consider replacing with a faster implementation
-        if (factor == 0) return zero(currency)
-        var result = this
-        for (i in 1 until factor) result += this
-        return result
-    }
-
-    operator fun minus(other: Amount): Amount {
-        check(currency == other.currency) { "Can only subtract from same 
currency" }
-        var resultValue = value
-        var resultFraction = fraction
-        if (resultFraction < other.fraction) {
-            if (resultValue < 1L)
-                throw AmountOverflowException()
-            resultValue--
-            resultFraction += FRACTIONAL_BASE
-        }
-        check(resultFraction >= other.fraction)
-        resultFraction -= other.fraction
-        if (resultValue < other.value)
-            throw AmountOverflowException()
-        resultValue -= other.value
-        return Amount(currency, resultValue, resultFraction)
-    }
-
-    fun isZero(): Boolean {
-        return value == 0L && fraction == 0
-    }
-
-    fun toJSONString(): String {
-        return "$currency:$amountStr"
-    }
-
-    override fun toString(): String {
-        return "$amountStr $currency"
-    }
-
-    override fun compareTo(other: Amount): Int {
-        check(currency == other.currency) { "Can only compare amounts with the 
same currency" }
-        when {
-            value == other.value -> {
-                if (fraction < other.fraction) return -1
-                if (fraction > other.fraction) return 1
-                return 0
-            }
-            value < other.value -> return -1
-            else -> return 1
-        }
-    }
-
-}
-
-@Serializer(forClass = Amount::class)
-object KotlinXAmountSerializer: KSerializer<Amount> {
-    override fun serialize(encoder: Encoder, value: Amount) {
-        encoder.encodeString(value.toJSONString())
-    }
-
-    override fun deserialize(decoder: Decoder): Amount {
-        return Amount.fromJSONString(decoder.decodeString())
-    }
-}
diff --git a/taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Time.kt 
b/taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Time.kt
deleted file mode 100644
index 37b6606..0000000
--- a/taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Time.kt
+++ /dev/null
@@ -1,106 +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.common
-
-import kotlinx.serialization.SerialName
-import kotlinx.serialization.Serializable
-import kotlinx.serialization.builtins.serializer
-import kotlinx.serialization.json.JsonElement
-import kotlinx.serialization.json.JsonPrimitive
-import kotlinx.serialization.json.JsonTransformingSerializer
-import kotlinx.serialization.json.contentOrNull
-import kotlinx.serialization.json.longOrNull
-import net.taler.common.Duration.Companion.FOREVER
-import kotlin.math.max
-
-expect fun nowMillis(): Long
-
-@Serializable
-data class Timestamp(
-    @SerialName("t_ms")
-    @Serializable(NeverSerializer::class)
-    val ms: Long
-) : Comparable<Timestamp> {
-
-    companion object {
-        const val NEVER: Long = -1
-        fun now(): Timestamp = Timestamp(nowMillis())
-    }
-
-    /**
-     * Returns a copy of this [Timestamp] rounded to seconds.
-     */
-    fun truncateSeconds(): Timestamp {
-        if (ms == NEVER) return Timestamp(ms)
-        return Timestamp((ms / 1000L) * 1000L)
-    }
-
-    operator fun minus(other: Timestamp): Duration = when {
-        ms == NEVER -> Duration(FOREVER)
-        other.ms == NEVER -> throw Error("Invalid argument for timestamp 
comparision")
-        ms < other.ms -> Duration(0)
-        else -> Duration(ms - other.ms)
-    }
-
-    operator fun minus(other: Duration): Timestamp = when {
-        ms == NEVER -> this
-        other.ms == FOREVER -> Timestamp(0)
-        else -> Timestamp(max(0, ms - other.ms))
-    }
-
-    override fun compareTo(other: Timestamp): Int {
-        return if (ms == NEVER) {
-            if (other.ms == NEVER) 0
-            else 1
-        } else {
-            if (other.ms == NEVER) -1
-            else ms.compareTo(other.ms)
-        }
-    }
-
-}
-
-@Serializable
-data class Duration(
-    /**
-     * Duration in milliseconds.
-     */
-    @SerialName("d_ms")
-    @Serializable(ForeverSerializer::class)
-    val ms: Long
-) {
-    companion object {
-        const val FOREVER: Long = -1
-    }
-}
-
-abstract class MinusOneSerializer(private val keyword: String) :
-    JsonTransformingSerializer<Long>(Long.serializer(), keyword) {
-
-    override fun readTransform(element: JsonElement): JsonElement {
-        return if (element.contentOrNull == keyword) return JsonPrimitive(-1)
-        else super.readTransform(element)
-    }
-
-    override fun writeTransform(element: JsonElement): JsonElement {
-        return if (element.longOrNull == -1L) return JsonPrimitive(keyword)
-        else element
-    }
-}
-
-object NeverSerializer : MinusOneSerializer("never")
-object ForeverSerializer : MinusOneSerializer("forever")
diff --git 
a/taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Version.kt 
b/taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Version.kt
deleted file mode 100644
index 8774115..0000000
--- a/taler-kotlin-common/src/commonMain/kotlin/net/taler/common/Version.kt
+++ /dev/null
@@ -1,70 +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.common
-
-import kotlin.math.sign
-
-/**
- * Semantic versioning, but libtool-style.
- * See 
https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
- */
-data class Version(
-    val current: Int,
-    val revision: Int,
-    val age: Int
-) {
-    companion object {
-        fun parse(v: String): Version? {
-            val elements = v.split(":")
-            if (elements.size != 3) return null
-            val (currentStr, revisionStr, ageStr) = elements
-            val current = currentStr.toIntOrNull()
-            val revision = revisionStr.toIntOrNull()
-            val age = ageStr.toIntOrNull()
-            if (current == null || revision == null || age == null) return null
-            return Version(current, revision, age)
-        }
-    }
-
-    /**
-     * Compare two libtool-style versions.
-     *
-     * Returns a [VersionMatchResult] or null if the given version was null.
-     */
-    fun compare(other: Version?): VersionMatchResult? {
-        if (other == null) return null
-        val compatible = current - age <= other.current &&
-                current >= other.current - other.age
-        val currentCmp = sign((current - other.current).toDouble()).toInt()
-        return VersionMatchResult(compatible, currentCmp)
-    }
-
-    /**
-     * Result of comparing two libtool versions.
-     */
-    data class VersionMatchResult(
-        /**
-         * Is the first version compatible with the second?
-         */
-        val compatible: Boolean,
-        /**
-         * Is the first version older (-1), newer (+1) or identical (0)?
-         */
-        val currentCmp: Int
-    )
-
-}
diff --git 
a/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/AmountTest.kt 
b/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/AmountTest.kt
deleted file mode 100644
index e184307..0000000
--- a/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/AmountTest.kt
+++ /dev/null
@@ -1,234 +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.common
-
-import kotlin.random.Random
-import kotlin.test.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertFalse
-import kotlin.test.assertTrue
-import kotlin.test.fail
-
-class AmountTest {
-
-    companion object {
-        fun getRandomAmount() = getRandomAmount(getRandomString(1, 
Random.nextInt(1, 12)))
-        fun getRandomAmount(currency: String): Amount {
-            val value = Random.nextLong(0, Amount.MAX_VALUE)
-            val fraction = Random.nextInt(0, Amount.MAX_FRACTION)
-            return Amount(currency, value, fraction)
-        }
-    }
-
-    @Test
-    fun testFromJSONString() {
-        var str = "TESTKUDOS:23.42"
-        var amount = Amount.fromJSONString(str)
-        assertEquals(str, amount.toJSONString())
-        assertEquals("TESTKUDOS", amount.currency)
-        assertEquals(23, amount.value)
-        assertEquals((0.42 * 1e8).toInt(), amount.fraction)
-        assertEquals("23.42 TESTKUDOS", amount.toString())
-
-        str = "EUR:500000000.00000001"
-        amount = Amount.fromJSONString(str)
-        assertEquals(str, amount.toJSONString())
-        assertEquals("EUR", amount.currency)
-        assertEquals(500000000, amount.value)
-        assertEquals(1, amount.fraction)
-        assertEquals("500000000.00000001 EUR", amount.toString())
-
-        str = "EUR:1500000000.00000003"
-        amount = Amount.fromJSONString(str)
-        assertEquals(str, amount.toJSONString())
-        assertEquals("EUR", amount.currency)
-        assertEquals(1500000000, amount.value)
-        assertEquals(3, amount.fraction)
-        assertEquals("1500000000.00000003 EUR", amount.toString())
-    }
-
-    @Test
-    fun testFromJSONStringAcceptsMaxValuesRejectsAbove() {
-        val maxValue = 4503599627370496
-        val str = "TESTKUDOS123:$maxValue.99999999"
-        val amount = Amount.fromJSONString(str)
-        assertEquals(str, amount.toJSONString())
-        assertEquals("TESTKUDOS123", amount.currency)
-        assertEquals(maxValue, amount.value)
-        assertEquals("$maxValue.99999999 TESTKUDOS123", amount.toString())
-
-        // longer currency not accepted
-        assertThrows<AmountParserException>("longer currency was accepted") {
-            Amount.fromJSONString("TESTKUDOS1234:$maxValue.99999999")
-        }
-
-        // max value + 1 not accepted
-        assertThrows<AmountParserException>("max value + 1 was accepted") {
-            Amount.fromJSONString("TESTKUDOS123:${maxValue + 1}.99999999")
-        }
-
-        // max fraction + 1 not accepted
-        assertThrows<AmountParserException>("max fraction + 1 was accepted") {
-            Amount.fromJSONString("TESTKUDOS123:$maxValue.999999990")
-        }
-    }
-
-    @Test
-    fun testFromJSONStringRejections() {
-        assertThrows<AmountParserException> {
-            Amount.fromJSONString("TESTKUDOS:0,5")
-        }
-        assertThrows<AmountParserException> {
-            Amount.fromJSONString("+TESTKUDOS:0.5")
-        }
-        assertThrows<AmountParserException> {
-            Amount.fromJSONString("0.5")
-        }
-        assertThrows<AmountParserException> {
-            Amount.fromJSONString(":0.5")
-        }
-        assertThrows<AmountParserException> {
-            Amount.fromJSONString("EUR::0.5")
-        }
-        assertThrows<AmountParserException> {
-            Amount.fromJSONString("EUR:.5")
-        }
-    }
-
-    @Test
-    fun testAddition() {
-        assertEquals(
-            Amount.fromJSONString("EUR:2"),
-            Amount.fromJSONString("EUR:1") + Amount.fromJSONString("EUR:1")
-        )
-        assertEquals(
-            Amount.fromJSONString("EUR:3"),
-            Amount.fromJSONString("EUR:1.5") + Amount.fromJSONString("EUR:1.5")
-        )
-        assertEquals(
-            Amount.fromJSONString("EUR:500000000.00000002"),
-            Amount.fromJSONString("EUR:500000000.00000001") + 
Amount.fromJSONString("EUR:0.00000001")
-        )
-        assertThrows<AmountOverflowException>("addition didn't overflow") {
-            Amount.fromJSONString("EUR:4503599627370496.99999999") + 
Amount.fromJSONString("EUR:0.00000001")
-        }
-        assertThrows<AmountOverflowException>("addition didn't overflow") {
-            Amount.fromJSONString("EUR:4000000000000000") + 
Amount.fromJSONString("EUR:4000000000000000")
-        }
-    }
-
-    @Test
-    fun testTimes() {
-        assertEquals(
-            Amount.fromJSONString("EUR:2"),
-            Amount.fromJSONString("EUR:2") * 1
-        )
-        assertEquals(
-            Amount.fromJSONString("EUR:2"),
-            Amount.fromJSONString("EUR:1") * 2
-        )
-        assertEquals(
-            Amount.fromJSONString("EUR:4.5"),
-            Amount.fromJSONString("EUR:1.5") * 3
-        )
-        assertEquals(Amount.fromJSONString("EUR:0"), 
Amount.fromJSONString("EUR:1.11") * 0)
-        assertEquals(Amount.fromJSONString("EUR:1.11"), 
Amount.fromJSONString("EUR:1.11") * 1)
-        assertEquals(Amount.fromJSONString("EUR:2.22"), 
Amount.fromJSONString("EUR:1.11") * 2)
-        assertEquals(Amount.fromJSONString("EUR:3.33"), 
Amount.fromJSONString("EUR:1.11") * 3)
-        assertEquals(Amount.fromJSONString("EUR:4.44"), 
Amount.fromJSONString("EUR:1.11") * 4)
-        assertEquals(Amount.fromJSONString("EUR:5.55"), 
Amount.fromJSONString("EUR:1.11") * 5)
-        assertEquals(
-            Amount.fromJSONString("EUR:1500000000.00000003"),
-            Amount.fromJSONString("EUR:500000000.00000001") * 3
-        )
-        assertThrows<AmountOverflowException>("times didn't overflow") {
-            Amount.fromJSONString("EUR:4000000000000000") * 2
-        }
-    }
-
-    @Test
-    fun testSubtraction() {
-        assertEquals(
-            Amount.fromJSONString("EUR:0"),
-            Amount.fromJSONString("EUR:1") - Amount.fromJSONString("EUR:1")
-        )
-        assertEquals(
-            Amount.fromJSONString("EUR:1.5"),
-            Amount.fromJSONString("EUR:3") - Amount.fromJSONString("EUR:1.5")
-        )
-        assertEquals(
-            Amount.fromJSONString("EUR:500000000.00000001"),
-            Amount.fromJSONString("EUR:500000000.00000002") - 
Amount.fromJSONString("EUR:0.00000001")
-        )
-        assertThrows<AmountOverflowException>("subtraction didn't underflow") {
-            Amount.fromJSONString("EUR:23.42") - 
Amount.fromJSONString("EUR:42.23")
-        }
-        assertThrows<AmountOverflowException>("subtraction didn't underflow") {
-            Amount.fromJSONString("EUR:0.5") - 
Amount.fromJSONString("EUR:0.50000001")
-        }
-    }
-
-    @Test
-    fun testIsZero() {
-        assertTrue(Amount.zero("EUR").isZero())
-        assertTrue(Amount.fromJSONString("EUR:0").isZero())
-        assertTrue(Amount.fromJSONString("EUR:0.0").isZero())
-        assertTrue(Amount.fromJSONString("EUR:0.00000").isZero())
-        assertTrue((Amount.fromJSONString("EUR:1.001") - 
Amount.fromJSONString("EUR:1.001")).isZero())
-
-        assertFalse(Amount.fromJSONString("EUR:0.00000001").isZero())
-        assertFalse(Amount.fromJSONString("EUR:1.0").isZero())
-        assertFalse(Amount.fromJSONString("EUR:0001.0").isZero())
-    }
-
-    @Test
-    fun testComparision() {
-        assertTrue(Amount.fromJSONString("EUR:0") <= 
Amount.fromJSONString("EUR:0"))
-        assertTrue(Amount.fromJSONString("EUR:0") <= 
Amount.fromJSONString("EUR:0.00000001"))
-        assertTrue(Amount.fromJSONString("EUR:0") < 
Amount.fromJSONString("EUR:0.00000001"))
-        assertTrue(Amount.fromJSONString("EUR:0") < 
Amount.fromJSONString("EUR:1"))
-        assertEquals(Amount.fromJSONString("EUR:0"), 
Amount.fromJSONString("EUR:0"))
-        assertEquals(Amount.fromJSONString("EUR:42"), 
Amount.fromJSONString("EUR:42"))
-        assertEquals(
-            Amount.fromJSONString("EUR:42.00000001"),
-            Amount.fromJSONString("EUR:42.00000001")
-        )
-        assertTrue(Amount.fromJSONString("EUR:42.00000001") >= 
Amount.fromJSONString("EUR:42.00000001"))
-        assertTrue(Amount.fromJSONString("EUR:42.00000002") >= 
Amount.fromJSONString("EUR:42.00000001"))
-        assertTrue(Amount.fromJSONString("EUR:42.00000002") > 
Amount.fromJSONString("EUR:42.00000001"))
-        assertTrue(Amount.fromJSONString("EUR:0.00000002") > 
Amount.fromJSONString("EUR:0.00000001"))
-        assertTrue(Amount.fromJSONString("EUR:0.00000001") > 
Amount.fromJSONString("EUR:0"))
-        assertTrue(Amount.fromJSONString("EUR:2") > 
Amount.fromJSONString("EUR:1"))
-
-        assertThrows<IllegalStateException>("could compare amounts with 
different currencies") {
-            Amount.fromJSONString("EUR:0.5") < 
Amount.fromJSONString("USD:0.50000001")
-        }
-    }
-
-    private inline fun <reified T : Throwable> assertThrows(
-        msg: String? = null,
-        function: () -> Any
-    ) {
-        try {
-            function.invoke()
-            fail(msg)
-        } catch (e: Exception) {
-            assertTrue(e is T)
-        }
-    }
-
-}
diff --git 
a/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/TestUtils.kt 
b/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/TestUtils.kt
deleted file mode 100644
index e3a6c17..0000000
--- a/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/TestUtils.kt
+++ /dev/null
@@ -1,26 +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.common
-
-import kotlin.random.Random
-
-private val charPool: List<Char> = ('a'..'z') + ('A'..'Z') + ('0'..'9')
-fun getRandomString(minLength: Int = 1, maxLength: Int = Random.nextInt(0, 
1337)) =
-    (minLength..maxLength)
-        .map { Random.nextInt(0, charPool.size) }
-        .map(charPool::get)
-        .joinToString("")
diff --git 
a/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/TimeTest.kt 
b/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/TimeTest.kt
deleted file mode 100644
index 3ee0a99..0000000
--- a/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/TimeTest.kt
+++ /dev/null
@@ -1,49 +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.common
-
-import kotlinx.serialization.UnstableDefault
-import kotlinx.serialization.json.Json.Default.parse
-import kotlinx.serialization.json.Json.Default.stringify
-import net.taler.common.Timestamp.Companion.NEVER
-import kotlin.random.Random
-import kotlin.test.Test
-import kotlin.test.assertEquals
-
-// TODO test other functionality of Timestamp and Duration
-@UnstableDefault
-class TimeTest {
-
-    @Test
-    fun testSerialize() {
-        for (i in 0 until 42) {
-            val t = Random.nextLong()
-            assertEquals("""{"t_ms":$t}""", stringify(Timestamp.serializer(), 
Timestamp(t)))
-        }
-        assertEquals("""{"t_ms":"never"}""", stringify(Timestamp.serializer(), 
Timestamp(NEVER)))
-    }
-
-    @Test
-    fun testDeserialize() {
-        for (i in 0 until 42) {
-            val t = Random.nextLong()
-            assertEquals(Timestamp(t), parse(Timestamp.serializer(), """{ 
"t_ms": $t }"""))
-        }
-        assertEquals(Timestamp(NEVER), parse(Timestamp.serializer(), """{ 
"t_ms": "never" }"""))
-    }
-
-}
diff --git 
a/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/VersionTest.kt 
b/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/VersionTest.kt
deleted file mode 100644
index f4f17ea..0000000
--- a/taler-kotlin-common/src/commonTest/kotlin/net/taler/common/VersionTest.kt
+++ /dev/null
@@ -1,65 +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.common
-
-import kotlin.test.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertNull
-
-class VersionTest {
-
-    @Test
-    fun testParse() {
-        assertNull(Version.parse(""))
-        assertNull(Version.parse("foo"))
-        assertNull(Version.parse("foo:bar:foo"))
-        assertNull(Version.parse("0:0:0:"))
-        assertNull(Version.parse("0:0:"))
-        assertEquals(Version(0, 0, 0), Version.parse("0:0:0"))
-        assertEquals(Version(1, 2, 3), Version.parse("1:2:3"))
-        assertEquals(Version(1337, 42, 23), Version.parse("1337:42:23"))
-    }
-
-    @Test
-    fun testComparision() {
-        assertEquals(
-            Version.VersionMatchResult(true, 0),
-            Version.parse("0:0:0")!!.compare(Version.parse("0:0:0"))
-        )
-        assertEquals(
-            Version.VersionMatchResult(true, -1),
-            Version.parse("0:0:0")!!.compare(Version.parse("1:0:1"))
-        )
-        assertEquals(
-            Version.VersionMatchResult(true, -1),
-            Version.parse("0:0:0")!!.compare(Version.parse("1:5:1"))
-        )
-        assertEquals(
-            Version.VersionMatchResult(false, -1),
-            Version.parse("0:0:0")!!.compare(Version.parse("1:5:0"))
-        )
-        assertEquals(
-            Version.VersionMatchResult(false, 1),
-            Version.parse("1:0:0")!!.compare(Version.parse("0:5:0"))
-        )
-        assertEquals(
-            Version.VersionMatchResult(true, 0),
-            Version.parse("1:0:1")!!.compare(Version.parse("1:5:1"))
-        )
-    }
-
-}
diff --git a/taler-kotlin-common/src/jsMain/kotlin/net/taler/common/Time.kt 
b/taler-kotlin-common/src/jsMain/kotlin/net/taler/common/Time.kt
deleted file mode 100644
index b114022..0000000
--- a/taler-kotlin-common/src/jsMain/kotlin/net/taler/common/Time.kt
+++ /dev/null
@@ -1,23 +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.common
-
-import kotlin.js.Date
-
-actual fun nowMillis(): Long {
-    return Date().getMilliseconds().toLong()
-}
diff --git a/taler-kotlin-common/src/jvmMain/kotlin/net/taler/common/Time.kt 
b/taler-kotlin-common/src/jvmMain/kotlin/net/taler/common/Time.kt
deleted file mode 100644
index 6cd9040..0000000
--- a/taler-kotlin-common/src/jvmMain/kotlin/net/taler/common/Time.kt
+++ /dev/null
@@ -1,21 +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.common
-
-actual fun nowMillis(): Long {
-    return System.currentTimeMillis()
-}
diff --git a/taler-kotlin-common/src/nativeMain/kotlin/net/taler/common/Time.kt 
b/taler-kotlin-common/src/nativeMain/kotlin/net/taler/common/Time.kt
deleted file mode 100644
index 8a4091a..0000000
--- a/taler-kotlin-common/src/nativeMain/kotlin/net/taler/common/Time.kt
+++ /dev/null
@@ -1,23 +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.common
-
-import kotlin.system.getTimeMillis
-
-actual fun nowMillis(): Long {
-    return getTimeMillis()
-}
diff --git a/wallet-kotlin b/wallet-kotlin
new file mode 160000
index 0000000..dade047
--- /dev/null
+++ b/wallet-kotlin
@@ -0,0 +1 @@
+Subproject commit dade0470c7e378c72ac2f2fd2a623416dadbff10
diff --git a/wallet/build.gradle b/wallet/build.gradle
index 4b204ec..af15619 100644
--- a/wallet/build.gradle
+++ b/wallet/build.gradle
@@ -124,7 +124,7 @@ dependencies {
     implementation 'me.zhanghai.android.materialprogressbar:library:1.6.1'
 
     // Markdown rendering
-    final def markwon_version = '4.3.1'
+    final def markwon_version = '4.5.1'
     implementation "io.noties.markwon:core:$markwon_version"
     implementation "io.noties.markwon:ext-tables:$markwon_version"
     implementation "io.noties.markwon:recycler:$markwon_version"
@@ -133,7 +133,7 @@ dependencies {
     implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.10.2'
 
     testImplementation 'junit:junit:4.13'
-    testImplementation 'org.json:json:20190722'
+    testImplementation 'org.json:json:20200518'
     androidTestImplementation 'androidx.test:runner:1.2.0'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
 }
diff --git a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt 
b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
index b4aa1dc..3fc49a9 100644
--- a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
+++ b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
@@ -29,13 +29,13 @@ import com.fasterxml.jackson.databind.ObjectMapper
 import com.fasterxml.jackson.module.kotlin.KotlinModule
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.launch
-import net.taler.common.Amount
-import net.taler.common.AmountMixin
 import net.taler.common.Event
-import net.taler.common.Timestamp
-import net.taler.common.TimestampMixin
 import net.taler.common.assertUiThread
 import net.taler.common.toEvent
+import net.taler.lib.common.Amount
+import net.taler.lib.common.AmountMixin
+import net.taler.lib.common.Timestamp
+import net.taler.lib.common.TimestampMixin
 import net.taler.wallet.backend.WalletBackendApi
 import net.taler.wallet.balances.BalanceItem
 import net.taler.wallet.balances.BalanceResponse
diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt 
b/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt
index 24ee1a1..09ae353 100644
--- a/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt
+++ b/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt
@@ -25,7 +25,7 @@ import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
 import androidx.recyclerview.widget.RecyclerView.Adapter
 import kotlinx.serialization.Serializable
-import net.taler.common.Amount
+import net.taler.lib.common.Amount
 import net.taler.wallet.R
 import net.taler.wallet.balances.BalanceAdapter.BalanceViewHolder
 
diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeFees.kt 
b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeFees.kt
index a026283..1da9b49 100644
--- a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeFees.kt
+++ b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeFees.kt
@@ -16,8 +16,8 @@
 
 package net.taler.wallet.exchanges
 
-import net.taler.common.Amount
-import net.taler.common.Timestamp
+import net.taler.lib.common.Amount
+import net.taler.lib.common.Timestamp
 
 data class CoinFee(
     val coin: Amount,
diff --git 
a/wallet/src/main/java/net/taler/wallet/exchanges/SelectExchangeFragment.kt 
b/wallet/src/main/java/net/taler/wallet/exchanges/SelectExchangeFragment.kt
index ef4894d..9f5a916 100644
--- a/wallet/src/main/java/net/taler/wallet/exchanges/SelectExchangeFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/exchanges/SelectExchangeFragment.kt
@@ -28,7 +28,7 @@ import androidx.fragment.app.activityViewModels
 import androidx.recyclerview.widget.RecyclerView.Adapter
 import androidx.recyclerview.widget.RecyclerView.ViewHolder
 import kotlinx.android.synthetic.main.fragment_select_exchange.*
-import net.taler.common.Amount
+import net.taler.lib.common.Amount
 import net.taler.common.toRelativeTime
 import net.taler.common.toShortDate
 import net.taler.wallet.MainViewModel
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt 
b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
index 041fcd3..4924752 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
@@ -24,7 +24,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
 import com.fasterxml.jackson.module.kotlin.readValue
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
-import net.taler.common.Amount
+import net.taler.lib.common.Amount
 import net.taler.common.ContractTerms
 import net.taler.wallet.TAG
 import net.taler.wallet.backend.WalletBackendApi
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt 
b/wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt
index 120489d..c490654 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt
@@ -21,8 +21,8 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME
 import com.fasterxml.jackson.annotation.JsonTypeName
 import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
-import net.taler.common.Amount
 import net.taler.common.ContractTerms
+import net.taler.lib.common.Amount
 import net.taler.wallet.transactions.TransactionError
 
 @JsonTypeInfo(use = NAME, property = "status")
diff --git 
a/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt 
b/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
index 40664e3..3d00900 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
@@ -34,10 +34,10 @@ import com.google.android.material.snackbar.Snackbar
 import com.google.android.material.snackbar.Snackbar.LENGTH_LONG
 import kotlinx.android.synthetic.main.payment_bottom_bar.*
 import kotlinx.android.synthetic.main.payment_details.*
-import net.taler.common.Amount
 import net.taler.common.ContractTerms
 import net.taler.common.fadeIn
 import net.taler.common.fadeOut
+import net.taler.lib.common.Amount
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 
diff --git a/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt 
b/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
index fdacb0d..559b91d 100644
--- a/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
@@ -22,7 +22,7 @@ import androidx.lifecycle.MutableLiveData
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 import kotlinx.serialization.Serializable
-import net.taler.common.Amount
+import net.taler.lib.common.Amount
 import net.taler.wallet.TAG
 import net.taler.wallet.backend.WalletBackendApi
 
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
index be83b09..f5a4fc9 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
@@ -35,9 +35,9 @@ import 
kotlinx.android.synthetic.main.fragment_transaction_payment.*
 import kotlinx.android.synthetic.main.fragment_transaction_withdrawal.*
 import kotlinx.android.synthetic.main.fragment_transaction_withdrawal.feeView
 import kotlinx.android.synthetic.main.fragment_transaction_withdrawal.timeView
-import net.taler.common.Amount
 import net.taler.common.isSafe
 import net.taler.common.toAbsoluteTime
+import net.taler.lib.common.Amount
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.cleanExchange
diff --git a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
index d227183..1ed6788 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
@@ -28,10 +28,10 @@ import 
com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY
 import com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME
 import com.fasterxml.jackson.annotation.JsonTypeName
 import kotlinx.serialization.Serializable
-import net.taler.common.Amount
+import net.taler.lib.common.Amount
 import net.taler.common.ContractMerchant
 import net.taler.common.ContractProduct
-import net.taler.common.Timestamp
+import net.taler.lib.common.Timestamp
 import net.taler.wallet.R
 import net.taler.wallet.cleanExchange
 import net.taler.wallet.transactions.WithdrawalDetails.ManualTransfer
diff --git 
a/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt 
b/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt
index 9788d1c..fbee6ae 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt
@@ -26,8 +26,8 @@ import android.widget.Toast.LENGTH_SHORT
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
 import kotlinx.android.synthetic.main.fragment_manual_withdraw.*
-import net.taler.common.Amount
 import net.taler.common.hideKeyboard
+import net.taler.lib.common.Amount
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.scanQrCode
diff --git 
a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt 
b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt
index 5a98a89..ffc64d4 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt
@@ -29,9 +29,9 @@ import androidx.navigation.fragment.findNavController
 import com.google.android.material.snackbar.Snackbar
 import com.google.android.material.snackbar.Snackbar.LENGTH_LONG
 import kotlinx.android.synthetic.main.fragment_prompt_withdraw.*
-import net.taler.common.Amount
 import net.taler.common.fadeIn
 import net.taler.common.fadeOut
+import net.taler.lib.common.Amount
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.cleanExchange
diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt 
b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
index 2aaa5dc..730f704 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
@@ -22,7 +22,7 @@ import androidx.lifecycle.MutableLiveData
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 import kotlinx.serialization.Serializable
-import net.taler.common.Amount
+import net.taler.lib.common.Amount
 import net.taler.wallet.TAG
 import net.taler.wallet.backend.WalletBackendApi
 import net.taler.wallet.backend.WalletErrorInfo
diff --git 
a/wallet/src/test/java/net/taler/wallet/backend/WalletResponseTest.kt 
b/wallet/src/test/java/net/taler/wallet/backend/WalletResponseTest.kt
index 698c90a..d8f28c5 100644
--- a/wallet/src/test/java/net/taler/wallet/backend/WalletResponseTest.kt
+++ b/wallet/src/test/java/net/taler/wallet/backend/WalletResponseTest.kt
@@ -22,10 +22,10 @@ import com.fasterxml.jackson.module.kotlin.KotlinModule
 import com.fasterxml.jackson.module.kotlin.readValue
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.JsonConfiguration
-import net.taler.common.Amount
-import net.taler.common.AmountMixin
-import net.taler.common.Timestamp
-import net.taler.common.TimestampMixin
+import net.taler.lib.common.Amount
+import net.taler.lib.common.AmountMixin
+import net.taler.lib.common.Timestamp
+import net.taler.lib.common.TimestampMixin
 import net.taler.wallet.balances.BalanceResponse
 import org.junit.Assert.assertEquals
 import org.junit.Test

-- 
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]