gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-android] branch master updated (c20a794 -> 9b07cda)


From: gnunet
Subject: [taler-wallet-android] branch master updated (c20a794 -> 9b07cda)
Date: Fri, 21 Feb 2020 19:01:49 +0100

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

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

    from c20a794  Don't crash on and show unknown events
     new ada3828  Refactor payment code to make it easier to extend
     new b2db61a  Show products included in contract terms when paying
     new 497af85  Automatically abort payment proposals when backing out of 
payment
     new 6f022dd  Add updated copyright to all project files
     new 5522993  Redesign payment screen
     new 9b07cda  Fix nav drawer item selection and other minor issues

The 6 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:
 .idea/codeStyles/Project.xml                       |   2 +
 .idea/copyright/Taler.xml                          |   7 +
 .idea/copyright/profiles_settings.xml              |   7 +
 akono/build.gradle                                 |  16 ++
 app/build.gradle                                   |  40 +++--
 .../net/taler/wallet/ExampleInstrumentedTest.kt    |  20 ++-
 app/src/main/AndroidManifest.xml                   |  31 +++-
 app/src/main/java/net/taler/wallet/AlreadyPaid.kt  |  46 ------
 app/src/main/java/net/taler/wallet/Amount.kt       |  42 +++--
 .../net/taler/wallet/HostCardEmulatorService.kt    |  26 +--
 app/src/main/java/net/taler/wallet/MainActivity.kt | 160 ++++++++-----------
 .../java/net/taler/wallet/PaymentSuccessful.kt     |  46 ------
 .../main/java/net/taler/wallet/PromptPayment.kt    | 174 ---------------------
 .../main/java/net/taler/wallet/PromptWithdraw.kt   |  26 +--
 .../java/net/taler/wallet/ReviewExchangeTOS.kt     |  26 +--
 app/src/main/java/net/taler/wallet/Settings.kt     |  26 +--
 app/src/main/java/net/taler/wallet/ShowBalance.kt  |  43 ++---
 app/src/main/java/net/taler/wallet/Utils.kt        |  35 +++++
 .../main/java/net/taler/wallet/WalletViewModel.kt  | 143 ++++-------------
 .../java/net/taler/wallet/WithdrawSuccessful.kt    |  28 ++--
 .../net/taler/wallet/backend/WalletBackendApi.kt   |  26 +--
 .../taler/wallet/backend/WalletBackendService.kt   |  26 +--
 .../main/java/net/taler/wallet/crypto/Encoding.kt  |  26 +--
 .../java/net/taler/wallet/history/HistoryEvent.kt  |  26 +--
 .../net/taler/wallet/history/JsonDialogFragment.kt |  26 +--
 .../net/taler/wallet/history/ReserveTransaction.kt |  26 +--
 .../java/net/taler/wallet/history/WalletHistory.kt |  26 +--
 .../taler/wallet/history/WalletHistoryAdapter.kt   |  26 +--
 .../taler/wallet/payment/AlreadyPaidFragment.kt    |  47 ++++++
 .../java/net/taler/wallet/payment/ContractTerms.kt |  54 +++++++
 .../net/taler/wallet/payment/PaymentManager.kt     | 143 +++++++++++++++++
 .../wallet/payment/PaymentSuccessfulFragment.kt    |  49 ++++++
 .../net/taler/wallet/payment/ProductAdapter.kt     |  63 ++++++++
 .../taler/wallet/payment/PromptPaymentFragment.kt  | 161 +++++++++++++++++++
 .../main/res/drawable/history_payment_aborted.xml  |  16 ++
 app/src/main/res/drawable/history_refresh.xml      |  16 ++
 app/src/main/res/drawable/history_refund.xml       |  16 ++
 app/src/main/res/drawable/history_tip_accepted.xml |  16 ++
 app/src/main/res/drawable/history_tip_declined.xml |  16 ++
 app/src/main/res/drawable/history_withdrawn.xml    |  16 ++
 app/src/main/res/drawable/ic_account_balance.xml   |  16 ++
 app/src/main/res/drawable/ic_add_circle.xml        |  16 ++
 app/src/main/res/drawable/ic_cancel.xml            |  16 ++
 app/src/main/res/drawable/ic_cash_usd_outline.xml  |  16 ++
 app/src/main/res/drawable/ic_check_circle.xml      |  26 +++
 app/src/main/res/drawable/ic_directions.xml        |  16 ++
 .../main/res/drawable/ic_history_black_24dp.xml    |  16 ++
 app/src/main/res/drawable/ic_home_black_24dp.xml   |  16 ++
 .../main/res/drawable/ic_launcher_foreground.xml   |  16 ++
 app/src/main/res/drawable/ic_logo_taler.xml        |  16 ++
 app/src/main/res/drawable/ic_menu_camera.xml       |  16 ++
 app/src/main/res/drawable/ic_menu_gallery.xml      |  16 ++
 app/src/main/res/drawable/ic_menu_manage.xml       |  16 ++
 app/src/main/res/drawable/ic_menu_send.xml         |  16 ++
 app/src/main/res/drawable/ic_menu_share.xml        |  16 ++
 app/src/main/res/drawable/ic_menu_slideshow.xml    |  16 ++
 app/src/main/res/drawable/ic_scan_qr.xml           |  16 ++
 app/src/main/res/drawable/pending_border.xml       |  16 ++
 app/src/main/res/drawable/side_nav_bar.xml         |  16 ++
 .../main/res/layout-w550dp/payment_bottom_bar.xml  | 124 +++++++++++++++
 app/src/main/res/layout/activity_main.xml          |  16 ++
 app/src/main/res/layout/app_bar_main.xml           |  23 ++-
 app/src/main/res/layout/balance_row.xml            |  16 ++
 app/src/main/res/layout/content_main.xml           |  20 ++-
 app/src/main/res/layout/fragment_already_paid.xml  |  20 ++-
 app/src/main/res/layout/fragment_json.xml          |  16 ++
 .../res/layout/fragment_payment_successful.xml     | 101 +++++++-----
 .../main/res/layout/fragment_prompt_payment.xml    | 162 +++++--------------
 .../main/res/layout/fragment_prompt_withdraw.xml   |  20 ++-
 .../res/layout/fragment_review_exchange_tos.xml    |  16 ++
 app/src/main/res/layout/fragment_settings.xml      |  16 ++
 app/src/main/res/layout/fragment_show_balance.xml  |  16 ++
 app/src/main/res/layout/fragment_show_history.xml  |  16 ++
 .../res/layout/fragment_withdraw_successful.xml    |  18 ++-
 app/src/main/res/layout/history_payment.xml        |  16 ++
 app/src/main/res/layout/history_receive.xml        |  16 ++
 app/src/main/res/layout/history_row.xml            |  16 ++
 app/src/main/res/layout/list_item_product.xml      |  56 +++++++
 app/src/main/res/layout/nav_header_main.xml        |  16 ++
 app/src/main/res/layout/payment_bottom_bar.xml     | 124 +++++++++++++++
 app/src/main/res/layout/payment_details.xml        | 119 ++++++++++++++
 app/src/main/res/layout/pending_row.xml            |  16 ++
 app/src/main/res/menu/activity_main_drawer.xml     |  16 ++
 app/src/main/res/menu/balance.xml                  |  16 ++
 app/src/main/res/menu/history.xml                  |  16 ++
 app/src/main/res/menu/main.xml                     |   8 -
 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml |  16 ++
 .../res/mipmap-anydpi-v26/ic_launcher_round.xml    |  16 ++
 app/src/main/res/navigation/nav_graph.xml          |  39 +++--
 app/src/main/res/values-v21/styles.xml             |   7 -
 app/src/main/res/values/colors.xml                 |  16 ++
 app/src/main/res/values/dimens.xml                 |  16 ++
 app/src/main/res/values/ic_launcher_background.xml |  16 ++
 app/src/main/res/values/strings.xml                |  30 +++-
 app/src/main/res/values/styles.xml                 |  28 +++-
 app/src/main/res/xml/apduservice.xml               |  16 ++
 .../test/java/net/taler/wallet/ExampleUnitTest.kt  |  16 ++
 .../net/taler/wallet/crypto/Base32CrockfordTest.kt |  26 +--
 .../net/taler/wallet/history/HistoryEventTest.kt   |  26 +--
 .../taler/wallet/history/ReserveTransactionTest.kt |  26 +--
 build.gradle                                       |  16 ++
 gradle.properties                                  |  16 ++
 gradle/wrapper/gradle-wrapper.properties           |  16 ++
 settings.gradle                                    |  16 ++
 104 files changed, 2543 insertions(+), 929 deletions(-)
 create mode 100644 .idea/copyright/Taler.xml
 create mode 100644 .idea/copyright/profiles_settings.xml
 delete mode 100644 app/src/main/java/net/taler/wallet/AlreadyPaid.kt
 delete mode 100644 app/src/main/java/net/taler/wallet/PaymentSuccessful.kt
 delete mode 100644 app/src/main/java/net/taler/wallet/PromptPayment.kt
 create mode 100644 app/src/main/java/net/taler/wallet/Utils.kt
 create mode 100644 
app/src/main/java/net/taler/wallet/payment/AlreadyPaidFragment.kt
 create mode 100644 app/src/main/java/net/taler/wallet/payment/ContractTerms.kt
 create mode 100644 app/src/main/java/net/taler/wallet/payment/PaymentManager.kt
 create mode 100644 
app/src/main/java/net/taler/wallet/payment/PaymentSuccessfulFragment.kt
 create mode 100644 app/src/main/java/net/taler/wallet/payment/ProductAdapter.kt
 create mode 100644 
app/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
 create mode 100644 app/src/main/res/drawable/ic_check_circle.xml
 create mode 100644 app/src/main/res/layout-w550dp/payment_bottom_bar.xml
 create mode 100644 app/src/main/res/layout/list_item_product.xml
 create mode 100644 app/src/main/res/layout/payment_bottom_bar.xml
 create mode 100644 app/src/main/res/layout/payment_details.xml
 delete mode 100644 app/src/main/res/menu/main.xml
 delete mode 100644 app/src/main/res/values-v21/styles.xml

diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index a88ded0..a705caf 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -4,6 +4,8 @@
       <option name="ARRANGEMENT_SETTINGS_MIGRATED_TO_191" value="true" />
     </AndroidXmlCodeStyleSettings>
     <JetCodeStyleSettings>
+      <option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
+      <option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" 
value="2147483647" />
       <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
     </JetCodeStyleSettings>
     <codeStyleSettings language="XML">
diff --git a/.idea/copyright/Taler.xml b/.idea/copyright/Taler.xml
new file mode 100644
index 0000000..96abfa5
--- /dev/null
+++ b/.idea/copyright/Taler.xml
@@ -0,0 +1,7 @@
+<component name="CopyrightManager">
+  <copyright>
+    <option name="keyword" value="(Copyright|Public License)" />
+    <option name="notice" value="This file is part of GNU Taler&#10;(C) 
&amp;#36;today.year Taler Systems S.A.&#10;&#10;GNU Taler is free software; you 
can redistribute it and/or modify it under the&#10;terms of the GNU General 
Public License as published by the Free Software&#10;Foundation; either version 
3, or (at your option) any later version.&#10;&#10;GNU Taler is distributed in 
the hope that it will be useful, but WITHOUT ANY&#10;WARRANTY; without even the 
implied warranty of MERCH [...]
+    <option name="myName" value="Taler" />
+  </copyright>
+</component>
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml 
b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..0040fda
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,7 @@
+<component name="CopyrightManager">
+  <settings default="Taler">
+    <module2copyright>
+      <element module="Project Files" copyright="Taler" />
+    </module2copyright>
+  </settings>
+</component>
\ No newline at end of file
diff --git a/akono/build.gradle b/akono/build.gradle
index 17c3bfd..45fbf89 100644
--- a/akono/build.gradle
+++ b/akono/build.gradle
@@ -1,2 +1,18 @@
+/*
+ * 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/>
+ */
+
 configurations.maybeCreate("default")
 artifacts.add("default", file('akono.aar'))
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c40ddef..921bbb1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,3 +1,19 @@
+/*
+ * 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/>
+ */
+
 apply plugin: 'com.android.application'
 apply plugin: 'kotlin-android'
 apply plugin: 'kotlin-kapt'
@@ -32,25 +48,21 @@ android {
 }
 
 dependencies {
-    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    implementation project(":akono")
+
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
     implementation 'androidx.appcompat:appcompat:1.1.0'
-    implementation 'androidx.core:core-ktx:1.1.0'
-    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
-    implementation 'com.google.android.material:material:1.0.0'
+    implementation 'androidx.core:core-ktx:1.2.0'
+    implementation 'com.google.android.material:material:1.1.0'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
-    testImplementation 'junit:junit:4.12'
-    androidTestImplementation 'androidx.test:runner:1.2.0'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
-    implementation project(":akono")
-    implementation 'com.google.guava:guava:28.0-android'
 
-    def nav_version = "2.2.0-rc04"
+    // Navigation Library
+    def nav_version = "2.2.1"
     implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
     implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
 
     // ViewModel and LiveData
-    def lifecycle_version = "2.2.0-rc03"
+    def lifecycle_version = "2.2.0"
     implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
     implementation 
"androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
     implementation 
"androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
@@ -63,5 +75,9 @@ dependencies {
     implementation 'me.zhanghai.android.materialprogressbar:library:1.6.1'
 
     // JSON parsing and serialization
-    implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.9.7"
+    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.10.2'
+
+    testImplementation 'junit:junit:4.13'
+    androidTestImplementation 'androidx.test:runner:1.2.0'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
 }
diff --git 
a/app/src/androidTest/java/net/taler/wallet/ExampleInstrumentedTest.kt 
b/app/src/androidTest/java/net/taler/wallet/ExampleInstrumentedTest.kt
index e6b19ba..5f0c423 100644
--- a/app/src/androidTest/java/net/taler/wallet/ExampleInstrumentedTest.kt
+++ b/app/src/androidTest/java/net/taler/wallet/ExampleInstrumentedTest.kt
@@ -1,13 +1,27 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
 package net.taler.wallet
 
 import androidx.test.InstrumentationRegistry
 import androidx.test.runner.AndroidJUnit4
-
+import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
 
-import org.junit.Assert.*
-
 /**
  * Instrumented test, which will execute on an Android device.
  *
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0855b92..4b9e4da 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,10 +1,26 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?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/>
+  -->
+
 <manifest xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:tools="http://schemas.android.com/tools";
         package="net.taler.wallet">
 
     <uses-permission android:name="android.permission.NFC" />
-    <uses-feature android:name="android.hardware.nfc.hce"
+    <uses-feature
+            android:name="android.hardware.nfc.hce"
             android:required="false" />
 
     <application
@@ -20,17 +36,24 @@
                 android:label="@string/app_name"
                 android:theme="@style/AppTheme.NoActionBar">
             <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.LAUNCHER"/>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
+
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.BROWSABLE" />
+
                 <data android:scheme="taler" />
             </intent-filter>
         </activity>
 
+        <activity
+                android:name="com.journeyapps.barcodescanner.CaptureActivity"
+                android:screenOrientation="fullSensor"
+                tools:replace="screenOrientation" />
+
         <service
                 android:name=".HostCardEmulatorService"
                 android:exported="true"
diff --git a/app/src/main/java/net/taler/wallet/AlreadyPaid.kt 
b/app/src/main/java/net/taler/wallet/AlreadyPaid.kt
deleted file mode 100644
index 65785b9..0000000
--- a/app/src/main/java/net/taler/wallet/AlreadyPaid.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2019 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-package net.taler.wallet
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Button
-import androidx.navigation.findNavController
-
-/**
- * Display the message that the user already paid for the order
- * that the merchant is proposing.
- */
-class AlreadyPaid : Fragment() {
-
-    override fun onCreateView(
-        inflater: LayoutInflater, container: ViewGroup?,
-        savedInstanceState: Bundle?
-    ): View? {
-        // Inflate the layout for this fragment
-        val view = inflater.inflate(R.layout.fragment_already_paid, container, 
false)
-        view.findViewById<Button>(R.id.button_success_back).setOnClickListener 
{
-            activity!!.findNavController(R.id.nav_host_fragment).navigateUp()
-        }
-        return view
-    }
-
-
-}
diff --git a/app/src/main/java/net/taler/wallet/Amount.kt 
b/app/src/main/java/net/taler/wallet/Amount.kt
index 2b41be1..4954815 100644
--- a/app/src/main/java/net/taler/wallet/Amount.kt
+++ b/app/src/main/java/net/taler/wallet/Amount.kt
@@ -1,28 +1,33 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * 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/>
  */
 
 @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
 
 package net.taler.wallet
 
+import com.fasterxml.jackson.core.JsonParser
+import com.fasterxml.jackson.databind.DeserializationContext
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer
 import org.json.JSONObject
 import kotlin.math.round
 
 private const val FRACTIONAL_BASE = 1e8
 
+@JsonDeserialize(using = AmountDeserializer::class)
 data class Amount(val currency: String, val amount: String) {
     fun isZero(): Boolean {
         return amount.toDouble() == 0.0
@@ -46,6 +51,17 @@ data class Amount(val currency: String, val amount: String) {
             return Amount(components[0], components[1])
         }
     }
+
+    override fun toString(): String {
+        return String.format("%.2f $currency", amount.toDouble())
+    }
+}
+
+class AmountDeserializer : StdDeserializer<Amount>(Amount::class.java) {
+    override fun deserialize(p: JsonParser, ctxt: DeserializationContext): 
Amount {
+        val node = p.codec.readValue(p, String::class.java)
+        return Amount.fromString(node)
+    }
 }
 
 class ParsedAmount(
diff --git a/app/src/main/java/net/taler/wallet/HostCardEmulatorService.kt 
b/app/src/main/java/net/taler/wallet/HostCardEmulatorService.kt
index 77f3153..c38bc10 100644
--- a/app/src/main/java/net/taler/wallet/HostCardEmulatorService.kt
+++ b/app/src/main/java/net/taler/wallet/HostCardEmulatorService.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet
diff --git a/app/src/main/java/net/taler/wallet/MainActivity.kt 
b/app/src/main/java/net/taler/wallet/MainActivity.kt
index 3f38a44..299fbfe 100644
--- a/app/src/main/java/net/taler/wallet/MainActivity.kt
+++ b/app/src/main/java/net/taler/wallet/MainActivity.kt
@@ -1,66 +1,59 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-
 package net.taler.wallet
 
-
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
 import android.content.IntentFilter
 import android.os.Bundle
 import android.util.Log
-import android.view.Menu
 import android.view.MenuItem
-import android.view.View
+import android.view.View.INVISIBLE
+import android.view.View.VISIBLE
+import androidx.activity.viewModels
 import androidx.appcompat.app.AppCompatActivity
-import androidx.appcompat.widget.Toolbar
 import androidx.core.view.GravityCompat
 import androidx.drawerlayout.widget.DrawerLayout
-import androidx.lifecycle.ViewModelProviders
+import androidx.lifecycle.Observer
 import androidx.navigation.NavController
-import androidx.navigation.findNavController
+import androidx.navigation.fragment.NavHostFragment
 import androidx.navigation.ui.AppBarConfiguration
 import androidx.navigation.ui.setupWithNavController
-import com.google.android.material.floatingactionbutton.FloatingActionButton
-import com.google.android.material.navigation.NavigationView
+import 
com.google.android.material.navigation.NavigationView.OnNavigationItemSelectedListener
 import com.google.android.material.snackbar.Snackbar
+import com.google.android.material.snackbar.Snackbar.LENGTH_SHORT
 import com.google.zxing.integration.android.IntentIntegrator
 import com.google.zxing.integration.android.IntentResult
-import me.zhanghai.android.materialprogressbar.MaterialProgressBar
-import java.util.*
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.app_bar_main.*
+import java.util.Locale.ROOT
 
+class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener,
+    ResetDialogEventListener {
 
-class MainActivity : AppCompatActivity(), 
NavigationView.OnNavigationItemSelectedListener, ResetDialogEventListener {
+    private val model: WalletViewModel by viewModels()
 
-    lateinit var model: WalletViewModel
+    private lateinit var nav: NavController
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
-        val toolbar: Toolbar = findViewById(R.id.toolbar)
-        setSupportActionBar(toolbar)
 
-        val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
-        val navView: NavigationView = findViewById(R.id.nav_view)
-
-        navView.menu.getItem(0).isChecked = true
-
-        val fab: FloatingActionButton = findViewById(R.id.fab)
         fab.setOnClickListener {
             val integrator = IntentIntegrator(this)
             integrator.setPrompt("Place merchant's QR Code inside the 
viewfinder rectangle to initiate payment.")
@@ -68,36 +61,39 @@ class MainActivity : AppCompatActivity(), 
NavigationView.OnNavigationItemSelecte
         }
         fab.hide()
 
-        navView.setNavigationItemSelectedListener(this)
-
-        val navController = findNavController(R.id.nav_host_fragment)
-
-        val appBarConfiguration =
-            AppBarConfiguration(setOf(R.id.showBalance, R.id.settings, 
R.id.walletHistory), drawerLayout)
-
-        findViewById<Toolbar>(R.id.toolbar)
-            .setupWithNavController(navController, appBarConfiguration)
-
-        model = ViewModelProviders.of(this)[WalletViewModel::class.java]
+        val navHostFragment =
+            supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as 
NavHostFragment
+        nav = navHostFragment.navController
+        nav_view.setupWithNavController(nav)
+        nav_view.setNavigationItemSelectedListener(this)
+        if (savedInstanceState == null) {
+            nav_view.menu.getItem(0).isChecked = true
+        }
 
-        val progressBar = findViewById<MaterialProgressBar>(R.id.progress_bar)
-        progressBar.visibility = View.INVISIBLE
+        val appBarConfiguration = AppBarConfiguration(
+            setOf(R.id.showBalance, R.id.settings, R.id.walletHistory), 
drawer_layout
+        )
+        toolbar.setupWithNavController(nav, appBarConfiguration)
 
         model.init()
         model.getBalances()
 
+        model.showProgressBar.observe(this, Observer { show ->
+            progress_bar.visibility = if (show) VISIBLE else INVISIBLE
+        })
+
         val triggerPaymentFilter = 
IntentFilter(HostCardEmulatorService.TRIGGER_PAYMENT_ACTION)
         registerReceiver(object : BroadcastReceiver() {
             override fun onReceive(p0: Context?, p1: Intent?) {
 
-                if (navController.currentDestination?.id == 
R.id.promptPayment) {
+                if (nav.currentDestination?.id == R.id.promptPayment) {
                     return
                 }
 
                 val url = p1!!.extras!!.get("contractUrl") as String
 
-                
findNavController(R.id.nav_host_fragment).navigate(R.id.action_global_promptPayment)
-                model.preparePay(url)
+                nav.navigate(R.id.action_global_promptPayment)
+                model.paymentManager.preparePay(url)
 
             }
         }, triggerPaymentFilter)
@@ -145,33 +141,17 @@ class MainActivity : AppCompatActivity(), 
NavigationView.OnNavigationItemSelecte
         }
     }
 
-    override fun onCreateOptionsMenu(menu: Menu): Boolean {
-        // Inflate the menu; this adds items to the action bar if it is 
present.
-        //menuInflater.inflate(R.menu.main, menu)
-        return false
-    }
-
-    override fun onOptionsItemSelected(item: MenuItem): Boolean {
-        // Handle action bar item clicks here. The action bar will
-        // automatically handle clicks on the Home/Up button, so long
-        // as you specify a parent activity in AndroidManifest.xml.
-        return when (item.itemId) {
-            R.id.action_settings -> true
-            else -> super.onOptionsItemSelected(item)
-        }
-    }
-
     override fun onNavigationItemSelected(item: MenuItem): Boolean {
         // Handle navigation view item clicks here.
         when (item.itemId) {
             R.id.nav_home -> {
-                
findNavController(R.id.nav_host_fragment).navigate(R.id.showBalance)
+                nav.navigate(R.id.showBalance)
             }
             R.id.nav_settings -> {
-                
findNavController(R.id.nav_host_fragment).navigate(R.id.settings)
+                nav.navigate(R.id.settings)
             }
             R.id.nav_history -> {
-                
findNavController(R.id.nav_host_fragment).navigate(R.id.walletHistory)
+                nav.navigate(R.id.walletHistory)
             }
         }
         val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
@@ -185,15 +165,11 @@ class MainActivity : AppCompatActivity(), 
NavigationView.OnNavigationItemSelecte
             return
         }
 
-        val scanResult: IntentResult? = 
IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
+        val scanResult: IntentResult? =
+            IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
 
         if (scanResult == null || scanResult.contents == null) {
-            val bar: Snackbar = Snackbar.make(
-                findViewById(R.id.nav_host_fragment),
-                "QR Code scan canceled.",
-                Snackbar.LENGTH_SHORT
-            )
-            bar.show()
+            Snackbar.make(nav_view, "QR Code scan canceled.", 
LENGTH_SHORT).show()
             return
         }
 
@@ -203,35 +179,37 @@ class MainActivity : AppCompatActivity(), 
NavigationView.OnNavigationItemSelecte
 
     private fun handleTalerUri(url: String, from: String) {
         when {
-            url.toLowerCase(Locale.ROOT).startsWith("taler://pay/") -> {
+            url.toLowerCase(ROOT).startsWith("taler://pay/") -> {
                 Log.v(TAG, "navigating!")
-                
findNavController(R.id.nav_host_fragment).navigate(R.id.action_showBalance_to_promptPayment)
-                model.preparePay(url)
+                nav.navigate(R.id.action_showBalance_to_promptPayment)
+                model.paymentManager.preparePay(url)
             }
-            url.toLowerCase(Locale.ROOT).startsWith("taler://withdraw/") -> {
+            url.toLowerCase(ROOT).startsWith("taler://withdraw/") -> {
                 Log.v(TAG, "navigating!")
-                
findNavController(R.id.nav_host_fragment).navigate(R.id.action_showBalance_to_promptWithdraw)
+                nav.navigate(R.id.action_showBalance_to_promptWithdraw)
                 model.getWithdrawalInfo(url)
             }
+            url.toLowerCase(ROOT).startsWith("taler://refund/") -> {
+                // TODO implement refunds
+                Snackbar.make(nav_view, "Refunds are not yet implemented", 
LENGTH_SHORT).show()
+            }
             else -> {
-                val bar: Snackbar = Snackbar.make(
-                    findViewById(R.id.nav_host_fragment),
-                    "URL from $from doesn't contain Taler payment.",
-                    Snackbar.LENGTH_SHORT
-                )
-                bar.show()
+                Snackbar.make(
+                    nav_view,
+                    "URL from $from doesn't contain a supported Taler Uri.",
+                    LENGTH_SHORT
+                ).show()
             }
         }
     }
 
     override fun onResetConfirmed() {
         model.dangerouslyReset()
-        val snackbar = Snackbar.make(findViewById(R.id.nav_host_fragment), 
"Wallet has been reset", Snackbar.LENGTH_SHORT)
-        snackbar.show()
+        Snackbar.make(nav_view, "Wallet has been reset", LENGTH_SHORT).show()
     }
 
     override fun onResetCancelled() {
-        val snackbar = Snackbar.make(findViewById(R.id.nav_host_fragment), 
"Reset cancelled", Snackbar.LENGTH_SHORT)
-        snackbar.show()
+        Snackbar.make(nav_view, "Reset cancelled", LENGTH_SHORT).show()
     }
+
 }
diff --git a/app/src/main/java/net/taler/wallet/PaymentSuccessful.kt 
b/app/src/main/java/net/taler/wallet/PaymentSuccessful.kt
deleted file mode 100644
index 6332c39..0000000
--- a/app/src/main/java/net/taler/wallet/PaymentSuccessful.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2019 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-
-package net.taler.wallet
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Button
-import androidx.fragment.app.Fragment
-import androidx.navigation.findNavController
-
-
-/**
- * Fragment that shows the success message for a payment.
- *
- */
-class PaymentSuccessful : Fragment() {
-
-    override fun onCreateView(
-        inflater: LayoutInflater, container: ViewGroup?,
-        savedInstanceState: Bundle?
-    ): View? {
-        // Inflate the layout for this fragment
-        val view = inflater.inflate(R.layout.fragment_payment_successful, 
container, false)
-        view.findViewById<Button>(R.id.button_success_back).setOnClickListener 
{
-            activity!!.findNavController(R.id.nav_host_fragment).navigateUp()
-        }
-        return view
-    }
-}
diff --git a/app/src/main/java/net/taler/wallet/PromptPayment.kt 
b/app/src/main/java/net/taler/wallet/PromptPayment.kt
deleted file mode 100644
index aa7512d..0000000
--- a/app/src/main/java/net/taler/wallet/PromptPayment.kt
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2019 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-package net.taler.wallet
-
-import android.annotation.SuppressLint
-import android.os.Bundle
-import android.util.Log
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Button
-import android.widget.TextView
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProviders
-import androidx.navigation.findNavController
-import com.google.android.material.snackbar.Snackbar
-import me.zhanghai.android.materialprogressbar.MaterialProgressBar
-
-/**
- * Show a payment and ask the user to accept/decline.
- */
-class PromptPayment : Fragment() {
-
-    lateinit var model: WalletViewModel
-
-    var fragmentView: View? = null
-
-    private fun triggerLoading() {
-        val loading = model.payStatus.value == null || (model.payStatus.value 
is PayStatus.Loading)
-        val progressBar = 
requireActivity().findViewById<MaterialProgressBar>(R.id.progress_bar)
-        if (loading) {
-            progressBar.visibility = View.VISIBLE
-        } else {
-            progressBar.visibility = View.INVISIBLE
-        }
-    }
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-
-        model = activity?.run {
-            ViewModelProviders.of(this)[WalletViewModel::class.java]
-        } ?: throw Exception("Invalid Activity")
-    }
-
-    override fun onResume() {
-        super.onResume()
-        Log.v("taler-wallet", "called onResume on PromptPayment")
-        triggerLoading()
-    }
-
-    private fun fillOrderInfo(view: View, contractTerms: ContractTerms, 
totalFees: Amount?) {
-        val feesAmountView = 
view.findViewById<TextView>(R.id.order_fees_amount)
-        val amountView = view.findViewById<TextView>(R.id.order_amount)
-        val summaryView = view.findViewById<TextView>(R.id.order_summary)
-        summaryView.text = contractTerms.summary
-        val amount = contractTerms.amount
-        @SuppressLint("SetTextI18n")
-        amountView.text = "${amount.amount} ${amount.currency}"
-        val feesBox = view.findViewById<View>(R.id.order_fees_box)
-        if (totalFees != null) {
-            @SuppressLint("SetTextI18n")
-            feesAmountView.text = "${totalFees.amount} ${totalFees.currency}"
-            feesBox.visibility = View.VISIBLE
-        } else {
-            feesBox.visibility = View.INVISIBLE
-        }
-
-    }
-
-
-    private fun showPayStatus(view: View, payStatus: PayStatus) {
-        val promptPaymentDetails = 
view.findViewById<View>(R.id.prompt_payment_details)
-        val balanceInsufficientWarning = 
view.findViewById<View>(R.id.balance_insufficient_warning)
-        val errorTextView = view.findViewById<TextView>(R.id.pay_error_text)
-        val confirmPaymentButton = 
view.findViewById<Button>(R.id.button_confirm_payment)
-        when (payStatus) {
-            is PayStatus.Prepared -> {
-                fillOrderInfo(view, payStatus.contractTerms, 
payStatus.totalFees)
-                promptPaymentDetails.visibility = View.VISIBLE
-                balanceInsufficientWarning.visibility = View.GONE
-                errorTextView.visibility = View.GONE
-                confirmPaymentButton.isEnabled = true
-
-                confirmPaymentButton.setOnClickListener {
-                    model.confirmPay(payStatus.proposalId)
-                    confirmPaymentButton.isEnabled = false
-                }
-            }
-            is PayStatus.InsufficientBalance -> {
-                fillOrderInfo(view, payStatus.contractTerms, null)
-                promptPaymentDetails.visibility = View.VISIBLE
-                balanceInsufficientWarning.visibility = View.VISIBLE
-                errorTextView.visibility = View.GONE
-                confirmPaymentButton.isEnabled = false
-            }
-            is PayStatus.Success -> {
-                model.payStatus.value = PayStatus.None()
-                
activity!!.findNavController(R.id.nav_host_fragment).navigate(R.id.action_promptPayment_to_paymentSuccessful)
-            }
-            is PayStatus.AlreadyPaid -> {
-                
activity!!.findNavController(R.id.nav_host_fragment).navigate(R.id.action_promptPayment_to_alreadyPaid)
-                model.payStatus.value = PayStatus.None()
-            }
-            is PayStatus.Error -> {
-                errorTextView.visibility = View.VISIBLE
-                errorTextView.text = "Error: ${payStatus.error}"
-            }
-            is PayStatus.None -> {
-                // No payment active.
-            }
-            is PayStatus.Loading -> {
-                // Wait until loaded ...
-            }
-            else -> {
-                val bar = Snackbar.make(view , "Bug: Unexpected result", 
Snackbar.LENGTH_SHORT)
-                bar.show()
-            }
-        }
-    }
-
-
-    override fun onCreateView(
-        inflater: LayoutInflater, container: ViewGroup?,
-        savedInstanceState: Bundle?
-    ): View? {
-        // Inflate the layout for this fragment
-
-        val view = inflater.inflate(R.layout.fragment_prompt_payment, 
container, false)
-        fragmentView = view
-
-        val promptPaymentDetails = 
view.findViewById<View>(R.id.prompt_payment_details)
-        // Set invisible until data is loaded.
-        promptPaymentDetails.visibility = View.INVISIBLE
-
-        val abortPaymentButton = 
view.findViewById<Button>(R.id.button_abort_payment)
-
-        val errorTextView = view.findViewById<TextView>(R.id.pay_error_text)
-        errorTextView.visibility = View.GONE
-
-        abortPaymentButton.setOnClickListener {
-            when (val ps = model.payStatus.value) {
-                is PayStatus.Prepared -> {
-                    model.abortProposal(ps.proposalId)
-                }
-            }
-            model.payStatus.value = PayStatus.None()
-            
requireActivity().findNavController(R.id.nav_host_fragment).navigateUp()
-        }
-
-        triggerLoading()
-
-        model.payStatus.observe(viewLifecycleOwner, Observer {
-            triggerLoading()
-            showPayStatus(view, it)
-        })
-        return view
-    }
-}
diff --git a/app/src/main/java/net/taler/wallet/PromptWithdraw.kt 
b/app/src/main/java/net/taler/wallet/PromptWithdraw.kt
index 0e0e680..ec65b0e 100644
--- a/app/src/main/java/net/taler/wallet/PromptWithdraw.kt
+++ b/app/src/main/java/net/taler/wallet/PromptWithdraw.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet
diff --git a/app/src/main/java/net/taler/wallet/ReviewExchangeTOS.kt 
b/app/src/main/java/net/taler/wallet/ReviewExchangeTOS.kt
index ffde82e..662bb8d 100644
--- a/app/src/main/java/net/taler/wallet/ReviewExchangeTOS.kt
+++ b/app/src/main/java/net/taler/wallet/ReviewExchangeTOS.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet
diff --git a/app/src/main/java/net/taler/wallet/Settings.kt 
b/app/src/main/java/net/taler/wallet/Settings.kt
index 7087e78..66e6a34 100644
--- a/app/src/main/java/net/taler/wallet/Settings.kt
+++ b/app/src/main/java/net/taler/wallet/Settings.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet
diff --git a/app/src/main/java/net/taler/wallet/ShowBalance.kt 
b/app/src/main/java/net/taler/wallet/ShowBalance.kt
index c4c96d6..b9e52ff 100644
--- a/app/src/main/java/net/taler/wallet/ShowBalance.kt
+++ b/app/src/main/java/net/taler/wallet/ShowBalance.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet
@@ -19,7 +19,12 @@ package net.taler.wallet
 
 import android.os.Bundle
 import android.util.Log
-import android.view.*
+import android.view.LayoutInflater
+import android.view.Menu
+import android.view.MenuInflater
+import android.view.MenuItem
+import android.view.View
+import android.view.ViewGroup
 import android.widget.Button
 import android.widget.LinearLayout
 import android.widget.TextView
@@ -31,6 +36,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.google.android.material.snackbar.Snackbar
 import com.google.zxing.integration.android.IntentIntegrator
+import com.google.zxing.integration.android.IntentIntegrator.QR_CODE_TYPES
 import me.zhanghai.android.materialprogressbar.MaterialProgressBar
 import org.json.JSONObject
 
@@ -239,9 +245,10 @@ class ShowBalance : Fragment(), 
PendingOperationClickListener {
         val view = inflater.inflate(R.layout.fragment_show_balance, container, 
false)
         val payQrButton = view.findViewById<Button>(R.id.button_pay_qr)
         payQrButton.setOnClickListener {
-            val integrator = IntentIntegrator(activity)
-            integrator.setPrompt("Place merchant's QR Code inside the 
viewfinder rectangle to initiate payment.")
-            integrator.initiateScan(listOf("QR_CODE"))
+            IntentIntegrator(activity).apply {
+                setBeepEnabled(true)
+                setOrientationLocked(false)
+            }.initiateScan(QR_CODE_TYPES)
         }
 
         this.balancesView = view.findViewById(R.id.list_balances)
@@ -320,7 +327,7 @@ class ShowBalance : Fragment(), 
PendingOperationClickListener {
                 if (proposalId == "") {
                     return
                 }
-                model.abortProposal(proposalId)
+                model.paymentManager.abortProposal(proposalId)
             }
         }
     }
diff --git a/app/src/main/java/net/taler/wallet/Utils.kt 
b/app/src/main/java/net/taler/wallet/Utils.kt
new file mode 100644
index 0000000..673fa2b
--- /dev/null
+++ b/app/src/main/java/net/taler/wallet/Utils.kt
@@ -0,0 +1,35 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet
+
+import android.view.View
+import android.view.View.INVISIBLE
+import android.view.View.VISIBLE
+
+fun View.fadeIn() {
+    alpha = 0f
+    visibility = VISIBLE
+    animate().alpha(1f).start()
+}
+
+fun View.fadeOut() {
+    if (visibility == INVISIBLE) return
+    animate().alpha(0f).withEndAction {
+        visibility = INVISIBLE
+        alpha = 1f
+    }.start()
+}
diff --git a/app/src/main/java/net/taler/wallet/WalletViewModel.kt 
b/app/src/main/java/net/taler/wallet/WalletViewModel.kt
index ad41e77..2942805 100644
--- a/app/src/main/java/net/taler/wallet/WalletViewModel.kt
+++ b/app/src/main/java/net/taler/wallet/WalletViewModel.kt
@@ -1,24 +1,28 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet
 
 import android.app.Application
 import android.util.Log
-import androidx.lifecycle.*
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.asLiveData
+import androidx.lifecycle.switchMap
 import 
com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
 import com.fasterxml.jackson.databind.ObjectMapper
 import com.fasterxml.jackson.module.kotlin.KotlinModule
@@ -31,6 +35,7 @@ import kotlinx.coroutines.flow.onStart
 import net.taler.wallet.backend.WalletBackendApi
 import net.taler.wallet.history.History
 import net.taler.wallet.history.HistoryEvent
+import net.taler.wallet.payment.PaymentManager
 import org.json.JSONObject
 
 const val TAG = "taler-wallet"
@@ -41,23 +46,6 @@ data class BalanceEntry(val available: Amount, val 
pendingIncoming: Amount)
 
 data class WalletBalances(val initialized: Boolean, val byCurrency: 
List<BalanceEntry>)
 
-data class ContractTerms(val summary: String, val amount: Amount)
-
-open class PayStatus {
-    class None : PayStatus()
-    class Loading : PayStatus()
-    data class Prepared(
-        val contractTerms: ContractTerms,
-        val proposalId: String,
-        val totalFees: Amount
-    ) : PayStatus()
-
-    data class InsufficientBalance(val contractTerms: ContractTerms) : 
PayStatus()
-    data class AlreadyPaid(val contractTerms: ContractTerms) : PayStatus()
-    data class Error(val error: String) : PayStatus()
-    class Success : PayStatus()
-}
-
 open class WithdrawStatus {
     class None : WithdrawStatus()
     data class Loading(val talerWithdrawUri: String) : WithdrawStatus()
@@ -100,10 +88,6 @@ class WalletViewModel(val app: Application) : 
AndroidViewModel(app) {
         value = WalletBalances(false, listOf())
     }
 
-    val payStatus = MutableLiveData<PayStatus>().apply {
-        value = PayStatus.None()
-    }
-
     val withdrawStatus = MutableLiveData<WithdrawStatus>().apply {
         value = WithdrawStatus.None()
     }
@@ -124,17 +108,21 @@ class WalletViewModel(val app: Application) : 
AndroidViewModel(app) {
             .asLiveData(Dispatchers.IO)
     }
 
+    val showProgressBar = MutableLiveData<Boolean>()
+
     private var activeGetBalance = 0
     private var activeGetPending = 0
 
-    private var currentPayRequestId = 0
     private var currentWithdrawRequestId = 0
 
     private val walletBackendApi = WalletBackendApi(app)
+
     private val mapper = ObjectMapper()
         .registerModule(KotlinModule())
         .configure(FAIL_ON_UNKNOWN_PROPERTIES, false)
 
+    val paymentManager = PaymentManager(walletBackendApi, mapper)
+
     fun init() {
         if (initialized) {
             Log.e(TAG, "WalletViewModel already initialized")
@@ -241,83 +229,6 @@ class WalletViewModel(val app: Application) : 
AndroidViewModel(app) {
         }
     }
 
-
-    fun preparePay(url: String) {
-        val args = JSONObject()
-        args.put("url", url)
-
-        this.currentPayRequestId += 1
-        val myPayRequestId = this.currentPayRequestId
-        this.payStatus.value = PayStatus.Loading()
-
-        walletBackendApi.sendRequest("preparePay", args) { isError, result ->
-            if (isError) {
-                Log.v(TAG, "got preparePay error result")
-                payStatus.value = PayStatus.Error(result.toString(0))
-                return@sendRequest
-            }
-            Log.v(TAG, "got preparePay result")
-            if (myPayRequestId != this.currentPayRequestId) {
-                Log.v(TAG, "preparePay result was for old request")
-                return@sendRequest
-            }
-            val status = result.getString("status")
-            var contractTerms: ContractTerms? = null
-            var proposalId: String? = null
-            var totalFees: Amount? = null
-            if (result.has("proposalId")) {
-                proposalId = result.getString("proposalId")
-            }
-            if (result.has("contractTermsRaw")) {
-                val ctJson = JSONObject(result.getString("contractTermsRaw"))
-                val amount = Amount.fromString(ctJson.getString("amount"))
-                val summary = ctJson.getString("summary")
-                contractTerms = ContractTerms(summary, amount)
-            }
-            if (result.has("totalFees")) {
-                totalFees = Amount.fromJson(result.getJSONObject("totalFees"))
-            }
-            val res = when (status) {
-                "payment-possible" -> PayStatus.Prepared(
-                    contractTerms!!,
-                    proposalId!!,
-                    totalFees!!
-                )
-                "paid" -> PayStatus.AlreadyPaid(contractTerms!!)
-                "insufficient-balance" -> PayStatus.InsufficientBalance(
-                    contractTerms!!
-                )
-                "error" -> PayStatus.Error("got some error")
-                else -> PayStatus.Error("unknown status")
-            }
-            payStatus.postValue(res)
-        }
-    }
-
-    fun abortProposal(proposalId: String) {
-        val args = JSONObject()
-        args.put("proposalId", proposalId)
-
-        Log.i(TAG, "aborting proposal")
-
-        walletBackendApi.sendRequest("abortProposal", args) { isError, _ ->
-            if (isError) {
-                Log.e(TAG, "received error response to abortProposal")
-                return@sendRequest
-            }
-            payStatus.postValue(PayStatus.None())
-        }
-    }
-
-    fun confirmPay(proposalId: String) {
-        val args = JSONObject()
-        args.put("proposalId", proposalId)
-
-        walletBackendApi.sendRequest("confirmPay", args) { isError, result ->
-            payStatus.postValue(PayStatus.Success())
-        }
-    }
-
     fun dangerouslyReset() {
         walletBackendApi.sendRequest("reset", null)
         testWithdrawalInProgress.value = false
@@ -348,9 +259,12 @@ class WalletViewModel(val app: Application) : 
AndroidViewModel(app) {
 
         walletBackendApi.sendRequest("getWithdrawDetailsForUri", args) { 
isError, result ->
             if (isError) {
+                Log.e(TAG, "Error getWithdrawDetailsForUri 
${result.toString(4)}")
                 return@sendRequest
             }
             if (myWithdrawRequestId != this.currentWithdrawRequestId) {
+                val mismatch = "$myWithdrawRequestId != 
${this.currentWithdrawRequestId}"
+                Log.w(TAG, "Got withdraw result for different request id 
$mismatch")
                 return@sendRequest
             }
             Log.v(TAG, "got getWithdrawDetailsForUri result")
@@ -377,9 +291,12 @@ class WalletViewModel(val app: Application) : 
AndroidViewModel(app) {
 
         walletBackendApi.sendRequest("getWithdrawDetailsForUri", args) { 
isError, result ->
             if (isError) {
+                Log.e(TAG, "Error getWithdrawDetailsForUri 
${result.toString(4)}")
                 return@sendRequest
             }
             if (myWithdrawRequestId != this.currentWithdrawRequestId) {
+                val mismatch = "$myWithdrawRequestId != 
${this.currentWithdrawRequestId}"
+                Log.w(TAG, "Got withdraw result for different request id 
$mismatch")
                 return@sendRequest
             }
             Log.v(TAG, "got getWithdrawDetailsForUri result (with exchange 
details)")
diff --git a/app/src/main/java/net/taler/wallet/WithdrawSuccessful.kt 
b/app/src/main/java/net/taler/wallet/WithdrawSuccessful.kt
index 127f8f7..4ff7478 100644
--- a/app/src/main/java/net/taler/wallet/WithdrawSuccessful.kt
+++ b/app/src/main/java/net/taler/wallet/WithdrawSuccessful.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet
@@ -34,7 +34,7 @@ class WithdrawSuccessful : Fragment() {
         savedInstanceState: Bundle?
     ): View? {
         val view = inflater.inflate(R.layout.fragment_withdraw_successful, 
container, false)
-        view.findViewById<Button>(R.id.button_success_back).setOnClickListener 
{
+        view.findViewById<Button>(R.id.backButton).setOnClickListener {
             activity!!.findNavController(R.id.nav_host_fragment).navigateUp()
         }
         return view
diff --git a/app/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt 
b/app/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
index 0d078a9..8f37ff3 100644
--- a/app/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
+++ b/app/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * 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/>
  */
 
 
diff --git a/app/src/main/java/net/taler/wallet/backend/WalletBackendService.kt 
b/app/src/main/java/net/taler/wallet/backend/WalletBackendService.kt
index 6ae77cc..d97ccf2 100644
--- a/app/src/main/java/net/taler/wallet/backend/WalletBackendService.kt
+++ b/app/src/main/java/net/taler/wallet/backend/WalletBackendService.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * 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/>
  */
 
 
diff --git a/app/src/main/java/net/taler/wallet/crypto/Encoding.kt 
b/app/src/main/java/net/taler/wallet/crypto/Encoding.kt
index 9322196..91a4c14 100644
--- a/app/src/main/java/net/taler/wallet/crypto/Encoding.kt
+++ b/app/src/main/java/net/taler/wallet/crypto/Encoding.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet.crypto
diff --git a/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt 
b/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt
index 787b430..fbae49c 100644
--- a/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt
+++ b/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet.history
diff --git a/app/src/main/java/net/taler/wallet/history/JsonDialogFragment.kt 
b/app/src/main/java/net/taler/wallet/history/JsonDialogFragment.kt
index a9ed514..f51dba9 100644
--- a/app/src/main/java/net/taler/wallet/history/JsonDialogFragment.kt
+++ b/app/src/main/java/net/taler/wallet/history/JsonDialogFragment.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet.history
diff --git a/app/src/main/java/net/taler/wallet/history/ReserveTransaction.kt 
b/app/src/main/java/net/taler/wallet/history/ReserveTransaction.kt
index f4cfcb8..45c539c 100644
--- a/app/src/main/java/net/taler/wallet/history/ReserveTransaction.kt
+++ b/app/src/main/java/net/taler/wallet/history/ReserveTransaction.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet.history
diff --git a/app/src/main/java/net/taler/wallet/history/WalletHistory.kt 
b/app/src/main/java/net/taler/wallet/history/WalletHistory.kt
index 5652e66..a534f24 100644
--- a/app/src/main/java/net/taler/wallet/history/WalletHistory.kt
+++ b/app/src/main/java/net/taler/wallet/history/WalletHistory.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet.history
diff --git a/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt 
b/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt
index 7df8d0c..d47c31f 100644
--- a/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt
+++ b/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet.history
diff --git a/app/src/main/java/net/taler/wallet/payment/AlreadyPaidFragment.kt 
b/app/src/main/java/net/taler/wallet/payment/AlreadyPaidFragment.kt
new file mode 100644
index 0000000..33e3a1d
--- /dev/null
+++ b/app/src/main/java/net/taler/wallet/payment/AlreadyPaidFragment.kt
@@ -0,0 +1,47 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet.payment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.navigation.fragment.findNavController
+import kotlinx.android.synthetic.main.fragment_already_paid.*
+import net.taler.wallet.R
+
+/**
+ * Display the message that the user already paid for the order
+ * that the merchant is proposing.
+ */
+class AlreadyPaidFragment : Fragment() {
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.fragment_already_paid, container, 
false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        backButton.setOnClickListener {
+            findNavController().navigateUp()
+        }
+    }
+
+}
diff --git a/app/src/main/java/net/taler/wallet/payment/ContractTerms.kt 
b/app/src/main/java/net/taler/wallet/payment/ContractTerms.kt
new file mode 100644
index 0000000..a9f75ed
--- /dev/null
+++ b/app/src/main/java/net/taler/wallet/payment/ContractTerms.kt
@@ -0,0 +1,54 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet.payment
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties
+import com.fasterxml.jackson.annotation.JsonProperty
+import net.taler.wallet.Amount
+
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+data class ContractTerms(
+    val summary: String,
+    val products: List<ContractProduct>,
+    val amount: Amount
+)
+
+interface Product {
+    val id: String
+    val description: String
+    val price: Amount
+    val location: String?
+}
+
+@JsonIgnoreProperties("totalPrice")
+data class ContractProduct(
+    @JsonProperty("product_id")
+    override val id: String,
+    override val description: String,
+    override val price: Amount,
+    @JsonProperty("delivery_location")
+    override val location: String?,
+    val quantity: Int
+) : Product {
+
+    val totalPrice: Amount by lazy {
+        val amount = price.amount.toDouble() * quantity
+        Amount(price.currency, amount.toString())
+    }
+
+}
diff --git a/app/src/main/java/net/taler/wallet/payment/PaymentManager.kt 
b/app/src/main/java/net/taler/wallet/payment/PaymentManager.kt
new file mode 100644
index 0000000..a00a686
--- /dev/null
+++ b/app/src/main/java/net/taler/wallet/payment/PaymentManager.kt
@@ -0,0 +1,143 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet.payment
+
+import android.util.Log
+import androidx.annotation.UiThread
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.module.kotlin.readValue
+import net.taler.wallet.Amount
+import net.taler.wallet.TAG
+import net.taler.wallet.backend.WalletBackendApi
+import org.json.JSONObject
+
+class PaymentManager(
+    private val walletBackendApi: WalletBackendApi,
+    private val mapper: ObjectMapper
+) {
+
+    private val mPayStatus = MutableLiveData<PayStatus>(PayStatus.None)
+    internal val payStatus: LiveData<PayStatus> = mPayStatus
+
+    private val mDetailsShown = MutableLiveData<Boolean>()
+    internal val detailsShown: LiveData<Boolean> = mDetailsShown
+
+    private var currentPayRequestId = 0
+
+    @UiThread
+    fun preparePay(url: String) {
+        mPayStatus.value = PayStatus.Loading
+        mDetailsShown.value = false
+
+        val args = JSONObject(mapOf("url" to url))
+
+        currentPayRequestId += 1
+        val payRequestId = currentPayRequestId
+
+        walletBackendApi.sendRequest("preparePay", args) { isError, result ->
+            when {
+                isError -> {
+                    Log.v(TAG, "got preparePay error result")
+                    mPayStatus.value = PayStatus.Error(result.toString())
+                }
+                payRequestId != this.currentPayRequestId -> {
+                    Log.v(TAG, "preparePay result was for old request")
+                }
+                else -> {
+                    val status = result.getString("status")
+                    mPayStatus.postValue(getPayStatusUpdate(status, result))
+                }
+            }
+        }
+    }
+
+    private fun getPayStatusUpdate(status: String, json: JSONObject) = when 
(status) {
+        "payment-possible" -> PayStatus.Prepared(
+            contractTerms = getContractTerms(json),
+            proposalId = json.getString("proposalId"),
+            totalFees = Amount.fromJson(json.getJSONObject("totalFees"))
+        )
+        "paid" -> PayStatus.AlreadyPaid(getContractTerms(json))
+        "insufficient-balance" -> 
PayStatus.InsufficientBalance(getContractTerms(json))
+        "error" -> PayStatus.Error("got some error")
+        else -> PayStatus.Error("unknown status")
+    }
+
+    private fun getContractTerms(json: JSONObject): ContractTerms {
+        return mapper.readValue(json.getString("contractTermsRaw"))
+    }
+
+    @UiThread
+    fun toggleDetailsShown() {
+        val oldValue = mDetailsShown.value ?: false
+        mDetailsShown.value = !oldValue
+    }
+
+    fun confirmPay(proposalId: String) {
+        val args = JSONObject(mapOf("proposalId" to proposalId))
+
+        walletBackendApi.sendRequest("confirmPay", args) { _, _ ->
+            mPayStatus.postValue(PayStatus.Success)
+        }
+    }
+
+    @UiThread
+    fun abortPay() {
+        val ps = payStatus.value
+        if (ps is PayStatus.Prepared) {
+            abortProposal(ps.proposalId)
+        }
+        resetPayStatus()
+    }
+
+    internal fun abortProposal(proposalId: String) {
+        val args = JSONObject(mapOf("proposalId" to proposalId))
+
+        Log.i(TAG, "aborting proposal")
+
+        walletBackendApi.sendRequest("abortProposal", args) { isError, _ ->
+            if (isError) {
+                Log.e(TAG, "received error response to abortProposal")
+                return@sendRequest
+            }
+            mPayStatus.postValue(PayStatus.None)
+        }
+    }
+
+    @UiThread
+    fun resetPayStatus() {
+        mPayStatus.value = PayStatus.None
+    }
+
+}
+
+sealed class PayStatus {
+    object None : PayStatus()
+    object Loading : PayStatus()
+    data class Prepared(
+        val contractTerms: ContractTerms,
+        val proposalId: String,
+        val totalFees: Amount
+    ) : PayStatus()
+
+    data class InsufficientBalance(val contractTerms: ContractTerms) : 
PayStatus()
+    data class AlreadyPaid(val contractTerms: ContractTerms) : PayStatus()
+    data class Error(val error: String) : PayStatus()
+    object Success : PayStatus()
+}
diff --git 
a/app/src/main/java/net/taler/wallet/payment/PaymentSuccessfulFragment.kt 
b/app/src/main/java/net/taler/wallet/payment/PaymentSuccessfulFragment.kt
new file mode 100644
index 0000000..2084c45
--- /dev/null
+++ b/app/src/main/java/net/taler/wallet/payment/PaymentSuccessfulFragment.kt
@@ -0,0 +1,49 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet.payment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.navigation.fragment.findNavController
+import kotlinx.android.synthetic.main.fragment_payment_successful.*
+import net.taler.wallet.R
+import net.taler.wallet.fadeIn
+
+/**
+ * Fragment that shows the success message for a payment.
+ */
+class PaymentSuccessfulFragment : Fragment() {
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.fragment_payment_successful, 
container, false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        successImageView.fadeIn()
+        successTextView.fadeIn()
+        backButton.setOnClickListener {
+            findNavController().navigateUp()
+        }
+    }
+
+}
diff --git a/app/src/main/java/net/taler/wallet/payment/ProductAdapter.kt 
b/app/src/main/java/net/taler/wallet/payment/ProductAdapter.kt
new file mode 100644
index 0000000..3a0dca6
--- /dev/null
+++ b/app/src/main/java/net/taler/wallet/payment/ProductAdapter.kt
@@ -0,0 +1,63 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet.payment
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import androidx.recyclerview.widget.RecyclerView.ViewHolder
+import net.taler.wallet.R
+import net.taler.wallet.payment.ProductAdapter.ProductViewHolder
+
+
+internal class ProductAdapter : RecyclerView.Adapter<ProductViewHolder>() {
+
+    private val items = ArrayList<ContractProduct>()
+
+    override fun getItemCount() = items.size
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): 
ProductViewHolder {
+        val view =
+            
LayoutInflater.from(parent.context).inflate(R.layout.list_item_product, parent, 
false)
+        return ProductViewHolder(view)
+    }
+
+    override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
+        holder.bind(items[position])
+    }
+
+    fun setItems(items: List<ContractProduct>) {
+        this.items.clear()
+        this.items.addAll(items)
+        notifyDataSetChanged()
+    }
+
+    internal inner class ProductViewHolder(v: View) : ViewHolder(v) {
+        private val quantity: TextView = v.findViewById(R.id.quantity)
+        private val name: TextView = v.findViewById(R.id.name)
+        private val price: TextView = v.findViewById(R.id.price)
+
+        fun bind(product: ContractProduct) {
+            quantity.text = product.quantity.toString()
+            name.text = product.description
+            price.text = product.totalPrice.toString()
+        }
+    }
+
+}
diff --git 
a/app/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt 
b/app/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
new file mode 100644
index 0000000..2f7807a
--- /dev/null
+++ b/app/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
@@ -0,0 +1,161 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet.payment
+
+import android.annotation.SuppressLint
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.View.GONE
+import android.view.View.VISIBLE
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.Observer
+import androidx.lifecycle.observe
+import androidx.navigation.fragment.findNavController
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.transition.TransitionManager.beginDelayedTransition
+import kotlinx.android.synthetic.main.payment_bottom_bar.*
+import kotlinx.android.synthetic.main.payment_details.*
+import net.taler.wallet.Amount
+import net.taler.wallet.R
+import net.taler.wallet.WalletViewModel
+import net.taler.wallet.fadeIn
+import net.taler.wallet.fadeOut
+
+/**
+ * Show a payment and ask the user to accept/decline.
+ */
+class PromptPaymentFragment : Fragment() {
+
+    private val model: WalletViewModel by activityViewModels()
+    private val paymentManager by lazy { model.paymentManager }
+    private val adapter = ProductAdapter()
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.fragment_prompt_payment, container, 
false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        paymentManager.payStatus.observe(viewLifecycleOwner, 
this::onPaymentStatusChanged)
+        paymentManager.detailsShown.observe(viewLifecycleOwner, Observer { 
shown ->
+            beginDelayedTransition(view as ViewGroup)
+            val res = if (shown) R.string.payment_hide_details else 
R.string.payment_show_details
+            detailsButton.setText(res)
+            productsList.visibility = if (shown) VISIBLE else GONE
+        })
+
+        detailsButton.setOnClickListener {
+            paymentManager.toggleDetailsShown()
+        }
+        productsList.apply {
+            adapter = this@PromptPaymentFragment.adapter
+            layoutManager = LinearLayoutManager(requireContext())
+        }
+
+        abortButton.setOnClickListener {
+            paymentManager.abortPay()
+            findNavController().navigateUp()
+        }
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        if (!requireActivity().isChangingConfigurations) {
+            paymentManager.abortPay()
+        }
+    }
+
+    private fun showLoading(show: Boolean) {
+        model.showProgressBar.value = show
+        if (show) {
+            progressBar.fadeIn()
+        } else {
+            progressBar.fadeOut()
+        }
+    }
+
+    private fun onPaymentStatusChanged(payStatus: PayStatus) {
+        when (payStatus) {
+            is PayStatus.Prepared -> {
+                showLoading(false)
+                showOrder(payStatus.contractTerms, payStatus.totalFees)
+                confirmButton.isEnabled = true
+                confirmButton.setOnClickListener {
+                    model.showProgressBar.value = true
+                    paymentManager.confirmPay(payStatus.proposalId)
+                    confirmButton.fadeOut()
+                    confirmProgressBar.fadeIn()
+                }
+            }
+            is PayStatus.InsufficientBalance -> {
+                showLoading(false)
+                showOrder(payStatus.contractTerms, null)
+                errorView.setText(R.string.payment_balance_insufficient)
+                errorView.fadeIn()
+            }
+            is PayStatus.Success -> {
+                showLoading(false)
+                paymentManager.resetPayStatus()
+                
findNavController().navigate(R.id.action_promptPayment_to_paymentSuccessful)
+            }
+            is PayStatus.AlreadyPaid -> {
+                showLoading(false)
+                paymentManager.resetPayStatus()
+                
findNavController().navigate(R.id.action_promptPayment_to_alreadyPaid)
+            }
+            is PayStatus.Error -> {
+                showLoading(false)
+                errorView.text = getString(R.string.payment_error, 
payStatus.error)
+                errorView.fadeIn()
+            }
+            is PayStatus.None -> {
+                // No payment active.
+                showLoading(false)
+            }
+            is PayStatus.Loading -> {
+                // Wait until loaded ...
+                showLoading(true)
+            }
+        }
+    }
+
+    private fun showOrder(contractTerms: ContractTerms, totalFees: Amount?) {
+        orderView.text = contractTerms.summary
+        adapter.setItems(contractTerms.products)
+        val amount = contractTerms.amount
+        @SuppressLint("SetTextI18n")
+        totalView.text = "${amount.amount} ${amount.currency}"
+        if (totalFees != null && !totalFees.isZero()) {
+            val fee = "${totalFees.amount} ${totalFees.currency}"
+            feeView.text = getString(R.string.payment_fee, fee)
+            feeView.fadeIn()
+        } else {
+            feeView.visibility = GONE
+        }
+        orderLabelView.fadeIn()
+        orderView.fadeIn()
+        if (contractTerms.products.isNotEmpty()) detailsButton.fadeIn()
+        totalLabelView.fadeIn()
+        totalView.fadeIn()
+    }
+
+}
diff --git a/app/src/main/res/drawable/history_payment_aborted.xml 
b/app/src/main/res/drawable/history_payment_aborted.xml
index ffe74a5..03cd7b2 100644
--- a/app/src/main/res/drawable/history_payment_aborted.xml
+++ b/app/src/main/res/drawable/history_payment_aborted.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/history_refresh.xml 
b/app/src/main/res/drawable/history_refresh.xml
index 58d11dd..f5d8972 100644
--- a/app/src/main/res/drawable/history_refresh.xml
+++ b/app/src/main/res/drawable/history_refresh.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/history_refund.xml 
b/app/src/main/res/drawable/history_refund.xml
index 0d2a946..60872a9 100644
--- a/app/src/main/res/drawable/history_refund.xml
+++ b/app/src/main/res/drawable/history_refund.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/history_tip_accepted.xml 
b/app/src/main/res/drawable/history_tip_accepted.xml
index b4a0934..794d1bf 100644
--- a/app/src/main/res/drawable/history_tip_accepted.xml
+++ b/app/src/main/res/drawable/history_tip_accepted.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/history_tip_declined.xml 
b/app/src/main/res/drawable/history_tip_declined.xml
index 6d490f9..4838ee4 100644
--- a/app/src/main/res/drawable/history_tip_declined.xml
+++ b/app/src/main/res/drawable/history_tip_declined.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/history_withdrawn.xml 
b/app/src/main/res/drawable/history_withdrawn.xml
index f6bb884..f524474 100644
--- a/app/src/main/res/drawable/history_withdrawn.xml
+++ b/app/src/main/res/drawable/history_withdrawn.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_account_balance.xml 
b/app/src/main/res/drawable/ic_account_balance.xml
index 03224e2..e9f51a2 100644
--- a/app/src/main/res/drawable/ic_account_balance.xml
+++ b/app/src/main/res/drawable/ic_account_balance.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_add_circle.xml 
b/app/src/main/res/drawable/ic_add_circle.xml
index 01d5f90..c32faa6 100644
--- a/app/src/main/res/drawable/ic_add_circle.xml
+++ b/app/src/main/res/drawable/ic_add_circle.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_cancel.xml 
b/app/src/main/res/drawable/ic_cancel.xml
index 7d2b57e..6dc55cf 100644
--- a/app/src/main/res/drawable/ic_cancel.xml
+++ b/app/src/main/res/drawable/ic_cancel.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_cash_usd_outline.xml 
b/app/src/main/res/drawable/ic_cash_usd_outline.xml
index 604b40e..428a466 100644
--- a/app/src/main/res/drawable/ic_cash_usd_outline.xml
+++ b/app/src/main/res/drawable/ic_cash_usd_outline.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_check_circle.xml 
b/app/src/main/res/drawable/ic_check_circle.xml
new file mode 100644
index 0000000..c299cc3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_check_circle.xml
@@ -0,0 +1,26 @@
+<!--
+  ~ 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/>
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android";
+        android:width="24dp"
+        android:height="24dp"
+        android:alpha="0.56"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+            android:fillColor="@color/green"
+            android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 
10,-10S17.52,2 12,2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z" />
+</vector>
diff --git a/app/src/main/res/drawable/ic_directions.xml 
b/app/src/main/res/drawable/ic_directions.xml
index 739dd20..7fc7fe7 100644
--- a/app/src/main/res/drawable/ic_directions.xml
+++ b/app/src/main/res/drawable/ic_directions.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_history_black_24dp.xml 
b/app/src/main/res/drawable/ic_history_black_24dp.xml
index a61de1b..4404ee4 100644
--- a/app/src/main/res/drawable/ic_history_black_24dp.xml
+++ b/app/src/main/res/drawable/ic_history_black_24dp.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_home_black_24dp.xml 
b/app/src/main/res/drawable/ic_home_black_24dp.xml
index 70fb291..ed8aa1e 100644
--- a/app/src/main/res/drawable/ic_home_black_24dp.xml
+++ b/app/src/main/res/drawable/ic_home_black_24dp.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml 
b/app/src/main/res/drawable/ic_launcher_foreground.xml
index 4ab24a4..e37d18e 100644
--- a/app/src/main/res/drawable/ic_launcher_foreground.xml
+++ b/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
     android:width="108dp"
     android:height="108dp"
diff --git a/app/src/main/res/drawable/ic_logo_taler.xml 
b/app/src/main/res/drawable/ic_logo_taler.xml
index 2a6cb4f..8f80c3a 100644
--- a/app/src/main/res/drawable/ic_logo_taler.xml
+++ b/app/src/main/res/drawable/ic_logo_taler.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
     android:width="14dp"
     android:height="14dp"
diff --git a/app/src/main/res/drawable/ic_menu_camera.xml 
b/app/src/main/res/drawable/ic_menu_camera.xml
index 41688d5..18973f9 100644
--- a/app/src/main/res/drawable/ic_menu_camera.xml
+++ b/app/src/main/res/drawable/ic_menu_camera.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_menu_gallery.xml 
b/app/src/main/res/drawable/ic_menu_gallery.xml
index ff8ce52..ffeed82 100644
--- a/app/src/main/res/drawable/ic_menu_gallery.xml
+++ b/app/src/main/res/drawable/ic_menu_gallery.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_menu_manage.xml 
b/app/src/main/res/drawable/ic_menu_manage.xml
index a0e423c..f104384 100644
--- a/app/src/main/res/drawable/ic_menu_manage.xml
+++ b/app/src/main/res/drawable/ic_menu_manage.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_menu_send.xml 
b/app/src/main/res/drawable/ic_menu_send.xml
index 9745066..4db00c9 100644
--- a/app/src/main/res/drawable/ic_menu_send.xml
+++ b/app/src/main/res/drawable/ic_menu_send.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_menu_share.xml 
b/app/src/main/res/drawable/ic_menu_share.xml
index b3e39e2..1905038 100644
--- a/app/src/main/res/drawable/ic_menu_share.xml
+++ b/app/src/main/res/drawable/ic_menu_share.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_menu_slideshow.xml 
b/app/src/main/res/drawable/ic_menu_slideshow.xml
index ae51e49..db43ecc 100644
--- a/app/src/main/res/drawable/ic_menu_slideshow.xml
+++ b/app/src/main/res/drawable/ic_menu_slideshow.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
         android:width="24dp"
         android:height="24dp"
diff --git a/app/src/main/res/drawable/ic_scan_qr.xml 
b/app/src/main/res/drawable/ic_scan_qr.xml
index c99daff..40dabaf 100644
--- a/app/src/main/res/drawable/ic_scan_qr.xml
+++ b/app/src/main/res/drawable/ic_scan_qr.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android";
     android:width="278dp"
     android:height="278dp"
diff --git a/app/src/main/res/drawable/pending_border.xml 
b/app/src/main/res/drawable/pending_border.xml
index d003891..bb50fea 100644
--- a/app/src/main/res/drawable/pending_border.xml
+++ b/app/src/main/res/drawable/pending_border.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <shape xmlns:android="http://schemas.android.com/apk/res/android";
         android:shape="rectangle" >
 
diff --git a/app/src/main/res/drawable/side_nav_bar.xml 
b/app/src/main/res/drawable/side_nav_bar.xml
index ff85523..6be80a8 100644
--- a/app/src/main/res/drawable/side_nav_bar.xml
+++ b/app/src/main/res/drawable/side_nav_bar.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <shape xmlns:android="http://schemas.android.com/apk/res/android";
        android:shape="rectangle">
     <gradient
diff --git a/app/src/main/res/layout-w550dp/payment_bottom_bar.xml 
b/app/src/main/res/layout-w550dp/payment_bottom_bar.xml
new file mode 100644
index 0000000..f9fa32a
--- /dev/null
+++ b/app/src/main/res/layout-w550dp/payment_bottom_bar.xml
@@ -0,0 +1,124 @@
+<?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/>
+  -->
+
+<com.google.android.material.card.MaterialCardView 
xmlns:android="http://schemas.android.com/apk/res/android";
+        xmlns:app="http://schemas.android.com/apk/res-auto";
+        xmlns:tools="http://schemas.android.com/tools";
+        android:id="@+id/bottomView"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        app:cardCornerRadius="0dp"
+        app:cardElevation="8dp"
+        tools:showIn="@layout/fragment_prompt_payment">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+        <TextView
+                android:id="@+id/totalLabelView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="8dp"
+                android:text="@string/payment_label_amount_total"
+                android:visibility="invisible"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/totalView"
+                app:layout_constraintHorizontal_bias="1.0"
+                app:layout_constraintHorizontal_chainStyle="packed"
+                app:layout_constraintStart_toEndOf="@+id/abortButton"
+                app:layout_constraintTop_toTopOf="@+id/totalView"
+                app:layout_constraintVertical_bias="0.0"
+                tools:visibility="visible" />
+
+        <TextView
+                android:id="@+id/totalView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="8dp"
+                android:layout_marginTop="8dp"
+                android:layout_marginEnd="16dp"
+                android:textColor="?android:attr/textColorPrimary"
+                android:textStyle="bold"
+                android:visibility="invisible"
+                app:layout_constraintBottom_toTopOf="@+id/feeView"
+                app:layout_constraintEnd_toStartOf="@+id/confirmButton"
+                app:layout_constraintHorizontal_chainStyle="packed"
+                app:layout_constraintStart_toEndOf="@+id/totalLabelView"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_goneMarginBottom="8dp"
+                tools:text="10 TESTKUDOS"
+                tools:visibility="visible" />
+
+        <TextView
+                android:id="@+id/feeView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="16dp"
+                android:layout_marginBottom="8dp"
+                android:visibility="gone"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/confirmButton"
+                app:layout_constraintHorizontal_bias="1.0"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/totalView"
+                tools:text="@string/payment_fee"
+                tools:visibility="visible" />
+
+        <Button
+                android:id="@+id/abortButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="8dp"
+                android:backgroundTint="@color/red"
+                android:text="@string/payment_button_abort"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/confirmButton"
+                app:layout_constraintHorizontal_chainStyle="spread_inside"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+        <Button
+                android:id="@+id/confirmButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="8dp"
+                android:backgroundTint="@color/green"
+                android:enabled="false"
+                android:text="@string/payment_button_confirm"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintHorizontal_bias="0.5"
+                app:layout_constraintStart_toEndOf="@+id/abortButton"
+                app:layout_constraintTop_toTopOf="parent"
+                tools:enabled="true" />
+
+        <ProgressBar
+                android:id="@+id/confirmProgressBar"
+                style="?android:attr/progressBarStyle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:visibility="invisible"
+                app:layout_constraintBottom_toBottomOf="@+id/confirmButton"
+                app:layout_constraintEnd_toEndOf="@+id/confirmButton"
+                app:layout_constraintStart_toStartOf="@+id/confirmButton"
+                app:layout_constraintTop_toTopOf="@+id/confirmButton"
+                tools:visibility="visible" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</com.google.android.material.card.MaterialCardView>
diff --git a/app/src/main/res/layout/activity_main.xml 
b/app/src/main/res/layout/activity_main.xml
index ac9a123..9598673 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <androidx.drawerlayout.widget.DrawerLayout
         xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:app="http://schemas.android.com/apk/res-auto";
diff --git a/app/src/main/res/layout/app_bar_main.xml 
b/app/src/main/res/layout/app_bar_main.xml
index 7bf5acd..87d08b4 100644
--- a/app/src/main/res/layout/app_bar_main.xml
+++ b/app/src/main/res/layout/app_bar_main.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <androidx.coordinatorlayout.widget.CoordinatorLayout
         xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:app="http://schemas.android.com/apk/res-auto";
@@ -23,15 +39,18 @@
                     android:layout_height="?attr/actionBarSize"
                     android:background="?attr/colorPrimary"
                     app:popupTheme="@style/AppTheme.PopupOverlay"/>
+
             <me.zhanghai.android.materialprogressbar.MaterialProgressBar
                     android:id="@+id/progress_bar"
+                    
style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal"
                     android:layout_width="match_parent"
                     android:layout_height="4dp"
+                    android:layout_alignParentBottom="true"
                     android:indeterminate="true"
+                    android:visibility="invisible"
                     app:mpb_progressStyle="horizontal"
                     app:mpb_useIntrinsicPadding="false"
-                    android:layout_alignParentBottom="true"
-                    
style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal"/>
+                    tools:visibility="visible" />
         </RelativeLayout>
 
     </com.google.android.material.appbar.AppBarLayout>
diff --git a/app/src/main/res/layout/balance_row.xml 
b/app/src/main/res/layout/balance_row.xml
index 9a81489..c6b72bc 100644
--- a/app/src/main/res/layout/balance_row.xml
+++ b/app/src/main/res/layout/balance_row.xml
@@ -1,4 +1,20 @@
 <?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:orientation="vertical"
diff --git a/app/src/main/res/layout/content_main.xml 
b/app/src/main/res/layout/content_main.xml
index 112382e..c43af48 100644
--- a/app/src/main/res/layout/content_main.xml
+++ b/app/src/main/res/layout/content_main.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <androidx.constraintlayout.widget.ConstraintLayout
         xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:tools="http://schemas.android.com/tools";
@@ -9,7 +25,7 @@
         tools:showIn="@layout/app_bar_main"
         tools:context=".MainActivity">
 
-    <fragment
+    <androidx.fragment.app.FragmentContainerView
             android:id="@+id/nav_host_fragment"
             android:name="androidx.navigation.fragment.NavHostFragment"
             android:layout_width="0dp"
@@ -21,4 +37,4 @@
             app:defaultNavHost="true"
             app:navGraph="@navigation/nav_graph" />
 
-</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_already_paid.xml 
b/app/src/main/res/layout/fragment_already_paid.xml
index 69c949e..beda615 100644
--- a/app/src/main/res/layout/fragment_already_paid.xml
+++ b/app/src/main/res/layout/fragment_already_paid.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ This file is part of GNU Taler
+  ~ (C) 2020 Taler Systems S.A.
+  ~
+  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
+  ~ terms of the GNU General Public License as published by the Free Software
+  ~ Foundation; either version 3, or (at your option) any later version.
+  ~
+  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
+  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License along 
with
+  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
+  -->
+
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:tools="http://schemas.android.com/tools";
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_margin="15dp"
-        tools:context=".PaymentSuccessful">
+        tools:context=".payment.PaymentSuccessfulFragment">
 
 
     <LinearLayout
@@ -31,7 +47,7 @@
                 android:text="Go Back"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:id="@+id/button_success_back"/>
+                android:id="@+id/backButton"/>
 
     </LinearLayout>
 
diff --git a/app/src/main/res/layout/fragment_json.xml 
b/app/src/main/res/layout/fragment_json.xml
index fe40156..1e0c047 100644
--- a/app/src/main/res/layout/fragment_json.xml
+++ b/app/src/main/res/layout/fragment_json.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:app="http://schemas.android.com/apk/res-auto";
         xmlns:tools="http://schemas.android.com/tools";
diff --git a/app/src/main/res/layout/fragment_payment_successful.xml 
b/app/src/main/res/layout/fragment_payment_successful.xml
index 64ddad9..cf9e5e8 100644
--- a/app/src/main/res/layout/fragment_payment_successful.xml
+++ b/app/src/main/res/layout/fragment_payment_successful.xml
@@ -1,38 +1,63 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout 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="15dp"
-             tools:context=".PaymentSuccessful">
-
-
-    <LinearLayout
-            android:orientation="vertical"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent">
-
-        <Space android:layout_width="match_parent" android:layout_height="0dp"
-        android:layout_weight="1"/>
-
-        <TextView
-                android:layout_gravity="center"
-                android:layout_width="match_parent"
-                android:textAlignment="center"
-                android:layout_height="50dp"
-                android:text="Payment was Successful"
-                android:autoSizeTextType="uniform"
-                android:textColor="@android:color/holo_green_dark"/>
-
-
-        <Space android:layout_width="match_parent" android:layout_height="0dp"
-               android:layout_weight="1"/>
-        <Button
-                android:text="Go Back"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:id="@+id/button_success_back"/>
-
-    </LinearLayout>
-
-</FrameLayout>
\ No newline at end of file
+<?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/>
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android";
+        xmlns:app="http://schemas.android.com/apk/res-auto";
+        xmlns:tools="http://schemas.android.com/tools";
+        android:id="@+id/frameLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_margin="16dp"
+        tools:context=".payment.PaymentSuccessfulFragment">
+
+    <ImageView
+            android:id="@+id/successImageView"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_margin="32dp"
+            android:src="@drawable/ic_check_circle"
+            app:layout_constraintBottom_toTopOf="@+id/successTextView"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:ignore="ContentDescription" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/successTextView"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginBottom="16dp"
+            android:text="@string/payment_successful"
+            android:textAlignment="center"
+            android:textColor="@color/green"
+            app:autoSizeMaxTextSize="48sp"
+            app:autoSizeMinTextSize="10sp"
+            app:autoSizeTextType="uniform"
+            app:layout_constraintBottom_toTopOf="@+id/backButton"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/successImageView" />
+
+    <Button
+            android:id="@+id/backButton"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:text="@string/payment_back_button"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_prompt_payment.xml 
b/app/src/main/res/layout/fragment_prompt_payment.xml
index 1febf9f..26cbeb6 100644
--- a/app/src/main/res/layout/fragment_prompt_payment.xml
+++ b/app/src/main/res/layout/fragment_prompt_payment.xml
@@ -1,122 +1,44 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout 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="15dp"
-             tools:context=".PromptPayment">
-
-    <TextView
-            android:text="Error: (placeholder)"
-            android:layout_width="wrap_content"
+<?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/>
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android";
+        xmlns:app="http://schemas.android.com/apk/res-auto";
+        xmlns:tools="http://schemas.android.com/tools";
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        tools:context=".payment.PromptPaymentFragment">
+
+    <include
+            android:id="@+id/scrollView"
+            layout="@layout/payment_details"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toTopOf="@+id/bottomView"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    <include
+            android:id="@+id/bottomView"
+            layout="@layout/payment_bottom_bar"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:textSize="15sp"
-            android:layout_gravity="center"
-            android:id="@+id/pay_error_text" 
android:textColor="@android:color/holo_red_dark"/>
-
-
-    <LinearLayout
-            android:orientation="vertical"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:id="@+id/prompt_payment_details">
-
-        <Space android:layout_width="match_parent"
-               android:layout_height="15dp"
-               android:layout_weight="1"/>
-
-        <TextView
-                android:text="Order Summary"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:id="@+id/textView2"/>
-
-        <TextView
-                android:text="One Cappuccino"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textSize="25sp"
-                android:layout_gravity="center"
-                android:id="@+id/order_summary"/>
-
-        <Space android:layout_width="match_parent"
-               android:layout_height="25dp"/>
-
-
-        <TextView
-                android:text="Amount"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:id="@+id/textView3"/>
-        <TextView
-                android:text="10 TESTKUDOS"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textSize="25sp"
-                android:layout_gravity="center"
-                android:id="@+id/order_amount"/>
-
-        <LinearLayout android:layout_width="wrap_content"
-                      android:layout_height="wrap_content"
-                      android:orientation="horizontal"
-                      android:layout_gravity="center"
-                      android:id="@+id/order_fees_box">
-
-            <TextView
-                    android:text="(plus additional "
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center"/>
-
-            <TextView
-                    android:text="0.5 TESTKUDOS"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center"
-                    android:id="@+id/order_fees_amount"/>
-
-            <TextView
-                    android:text=" payment fees)"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center"
-                    />
-
-        </LinearLayout>
-
-        <Space android:layout_width="match_parent"
-               android:layout_height="15dp"
-               android:layout_weight="1"/>
-
-        <TextView
-                android:text="Balance Insufficient!"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textSize="25sp"
-                android:layout_gravity="center"
-                android:id="@+id/balance_insufficient_warning" 
android:textColor="@android:color/holo_red_dark"/>
-
-
-        <Space android:layout_width="match_parent"
-               android:layout_height="15dp"
-               android:layout_weight="1"/>
-
-        <LinearLayout android:layout_width="match_parent"
-                      android:layout_height="wrap_content"
-                      android:orientation="horizontal">
-            <Button android:layout_width="wrap_content" 
android:layout_height="wrap_content"
-                    android:text="Abort Payment"
-                    android:id="@+id/button_abort_payment"/>
-
-            <Space android:layout_width="15dp" 
android:layout_height="match_parent"
-                   android:layout_weight="1"/>
-
-            <Button android:layout_width="wrap_content" 
android:layout_height="wrap_content"
-                    android:id="@+id/button_confirm_payment"
-                    android:text="Confirm Payment"/>
-        </LinearLayout>
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/scrollView" />
 
-    </LinearLayout>
-</FrameLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_prompt_withdraw.xml 
b/app/src/main/res/layout/fragment_prompt_withdraw.xml
index fc8046b..c9525a6 100644
--- a/app/src/main/res/layout/fragment_prompt_withdraw.xml
+++ b/app/src/main/res/layout/fragment_prompt_withdraw.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ This file is part of GNU Taler
+  ~ (C) 2020 Taler Systems S.A.
+  ~
+  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
+  ~ terms of the GNU General Public License as published by the Free Software
+  ~ Foundation; either version 3, or (at your option) any later version.
+  ~
+  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
+  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License along 
with
+  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
+  -->
+
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:tools="http://schemas.android.com/tools";
         android:layout_width="match_parent"
@@ -21,7 +37,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
-                android:id="@+id/textView2"/>
+                android:id="@+id/order_summary_label"/>
 
         <TextView
                 android:text="(amount)"
@@ -47,7 +63,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
-                android:id="@+id/textView3"/>
+                android:id="@+id/order_amount_label"/>
         <TextView
                 android:text="(exchange base url)"
                 android:layout_width="wrap_content"
diff --git a/app/src/main/res/layout/fragment_review_exchange_tos.xml 
b/app/src/main/res/layout/fragment_review_exchange_tos.xml
index 6db6587..15f1c91 100644
--- a/app/src/main/res/layout/fragment_review_exchange_tos.xml
+++ b/app/src/main/res/layout/fragment_review_exchange_tos.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ This file is part of GNU Taler
+  ~ (C) 2020 Taler Systems S.A.
+  ~
+  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
+  ~ terms of the GNU General Public License as published by the Free Software
+  ~ Foundation; either version 3, or (at your option) any later version.
+  ~
+  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
+  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License along 
with
+  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
+  -->
+
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:tools="http://schemas.android.com/tools";
         android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/fragment_settings.xml 
b/app/src/main/res/layout/fragment_settings.xml
index 6965ac0..dffc26f 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ This file is part of GNU Taler
+  ~ (C) 2020 Taler Systems S.A.
+  ~
+  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
+  ~ terms of the GNU General Public License as published by the Free Software
+  ~ Foundation; either version 3, or (at your option) any later version.
+  ~
+  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
+  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License along 
with
+  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
+  -->
+
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android";
              xmlns:tools="http://schemas.android.com/tools";
              android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/fragment_show_balance.xml 
b/app/src/main/res/layout/fragment_show_balance.xml
index 21a1fe9..8fc483b 100644
--- a/app/src/main/res/layout/fragment_show_balance.xml
+++ b/app/src/main/res/layout/fragment_show_balance.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <androidx.core.widget.NestedScrollView
         xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:tools="http://schemas.android.com/tools";
diff --git a/app/src/main/res/layout/fragment_show_history.xml 
b/app/src/main/res/layout/fragment_show_history.xml
index dc93889..3e84b0f 100644
--- a/app/src/main/res/layout/fragment_show_history.xml
+++ b/app/src/main/res/layout/fragment_show_history.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ This file is part of GNU Taler
+  ~ (C) 2020 Taler Systems S.A.
+  ~
+  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
+  ~ terms of the GNU General Public License as published by the Free Software
+  ~ Foundation; either version 3, or (at your option) any later version.
+  ~
+  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
+  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License along 
with
+  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
+  -->
+
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:tools="http://schemas.android.com/tools";
         android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/fragment_withdraw_successful.xml 
b/app/src/main/res/layout/fragment_withdraw_successful.xml
index 717ca20..b1474de 100644
--- a/app/src/main/res/layout/fragment_withdraw_successful.xml
+++ b/app/src/main/res/layout/fragment_withdraw_successful.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ This file is part of GNU Taler
+  ~ (C) 2020 Taler Systems S.A.
+  ~
+  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
+  ~ terms of the GNU General Public License as published by the Free Software
+  ~ Foundation; either version 3, or (at your option) any later version.
+  ~
+  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
+  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License along 
with
+  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
+  -->
+
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:tools="http://schemas.android.com/tools";
         android:layout_width="match_parent"
@@ -44,7 +60,7 @@
                 android:layout_weight="1" />
 
         <Button
-                android:id="@+id/button_success_back"
+                android:id="@+id/backButton"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="Go Back" />
diff --git a/app/src/main/res/layout/history_payment.xml 
b/app/src/main/res/layout/history_payment.xml
index 62bfa79..660e315 100644
--- a/app/src/main/res/layout/history_payment.xml
+++ b/app/src/main/res/layout/history_payment.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:app="http://schemas.android.com/apk/res-auto";
         xmlns:tools="http://schemas.android.com/tools";
diff --git a/app/src/main/res/layout/history_receive.xml 
b/app/src/main/res/layout/history_receive.xml
index adb6ecd..85cfccf 100644
--- a/app/src/main/res/layout/history_receive.xml
+++ b/app/src/main/res/layout/history_receive.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:app="http://schemas.android.com/apk/res-auto";
         xmlns:tools="http://schemas.android.com/tools";
diff --git a/app/src/main/res/layout/history_row.xml 
b/app/src/main/res/layout/history_row.xml
index 51647ee..e741d19 100644
--- a/app/src/main/res/layout/history_row.xml
+++ b/app/src/main/res/layout/history_row.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:app="http://schemas.android.com/apk/res-auto";
         xmlns:tools="http://schemas.android.com/tools";
diff --git a/app/src/main/res/layout/list_item_product.xml 
b/app/src/main/res/layout/list_item_product.xml
new file mode 100644
index 0000000..606022e
--- /dev/null
+++ b/app/src/main/res/layout/list_item_product.xml
@@ -0,0 +1,56 @@
+<?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/>
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android";
+        xmlns:app="http://schemas.android.com/apk/res-auto";
+        xmlns:tools="http://schemas.android.com/tools";
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingStart="8dp"
+        android:paddingTop="8dp"
+        android:paddingEnd="8dp">
+
+    <TextView
+            android:id="@+id/quantity"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:gravity="end"
+            android:minWidth="24dp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="31" />
+
+    <TextView
+            android:id="@+id/name"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="8dp"
+            android:layout_marginEnd="8dp"
+            app:layout_constraintEnd_toStartOf="@+id/price"
+            app:layout_constraintStart_toEndOf="@+id/quantity"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="A product item that in some cases could have a very 
long name" />
+
+    <TextView
+            android:id="@+id/price"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="23.42" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/nav_header_main.xml 
b/app/src/main/res/layout/nav_header_main.xml
index 8f4f926..37559fb 100644
--- a/app/src/main/res/layout/nav_header_main.xml
+++ b/app/src/main/res/layout/nav_header_main.xml
@@ -1,4 +1,20 @@
 <?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:app="http://schemas.android.com/apk/res-auto";
diff --git a/app/src/main/res/layout/payment_bottom_bar.xml 
b/app/src/main/res/layout/payment_bottom_bar.xml
new file mode 100644
index 0000000..5b5c9f3
--- /dev/null
+++ b/app/src/main/res/layout/payment_bottom_bar.xml
@@ -0,0 +1,124 @@
+<?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/>
+  -->
+
+<com.google.android.material.card.MaterialCardView 
xmlns:android="http://schemas.android.com/apk/res/android";
+        xmlns:app="http://schemas.android.com/apk/res-auto";
+        xmlns:tools="http://schemas.android.com/tools";
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        app:cardCornerRadius="0dp"
+        app:cardElevation="8dp"
+        tools:showIn="@layout/fragment_prompt_payment">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+        <TextView
+                android:id="@+id/totalLabelView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="8dp"
+                android:layout_marginTop="8dp"
+                android:layout_marginBottom="8dp"
+                android:text="@string/payment_label_amount_total"
+                android:visibility="invisible"
+                app:layout_constraintBottom_toTopOf="@+id/abortButton"
+                app:layout_constraintEnd_toStartOf="@+id/totalView"
+                app:layout_constraintHorizontal_bias="1.0"
+                app:layout_constraintHorizontal_chainStyle="spread_inside"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_bias="0.0"
+                tools:visibility="visible" />
+
+        <TextView
+                android:id="@+id/totalView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="8dp"
+                android:layout_marginTop="8dp"
+                android:layout_marginEnd="8dp"
+                android:textColor="?android:attr/textColorPrimary"
+                android:textStyle="bold"
+                android:visibility="invisible"
+                app:layout_constraintBottom_toTopOf="@+id/feeView"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintHorizontal_bias="1.0"
+                app:layout_constraintHorizontal_chainStyle="packed"
+                app:layout_constraintStart_toEndOf="@+id/totalLabelView"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_bias="0.0"
+                tools:text="10 TESTKUDOS"
+                tools:visibility="visible" />
+
+        <TextView
+                android:id="@+id/feeView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:visibility="gone"
+                app:layout_constraintBottom_toTopOf="@+id/confirmButton"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintHorizontal_bias="1.0"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/totalView"
+                tools:text="@string/payment_fee"
+                tools:visibility="visible" />
+
+        <Button
+                android:id="@+id/abortButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="8dp"
+                android:backgroundTint="@color/red"
+                android:text="@string/payment_button_abort"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/confirmButton"
+                app:layout_constraintHorizontal_chainStyle="spread_inside"
+                app:layout_constraintStart_toStartOf="parent" />
+
+        <Button
+                android:id="@+id/confirmButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="8dp"
+                android:backgroundTint="@color/green"
+                android:enabled="false"
+                android:text="@string/payment_button_confirm"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintHorizontal_bias="0.5"
+                app:layout_constraintStart_toEndOf="@+id/abortButton"
+                app:layout_constraintTop_toBottomOf="@+id/feeView"
+                tools:enabled="true" />
+
+        <ProgressBar
+                android:id="@+id/confirmProgressBar"
+                style="?android:attr/progressBarStyle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:visibility="invisible"
+                app:layout_constraintBottom_toBottomOf="@+id/confirmButton"
+                app:layout_constraintEnd_toEndOf="@+id/confirmButton"
+                app:layout_constraintStart_toStartOf="@+id/confirmButton"
+                app:layout_constraintTop_toTopOf="@+id/confirmButton"
+                tools:visibility="visible" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</com.google.android.material.card.MaterialCardView>
diff --git a/app/src/main/res/layout/payment_details.xml 
b/app/src/main/res/layout/payment_details.xml
new file mode 100644
index 0000000..60d1d73
--- /dev/null
+++ b/app/src/main/res/layout/payment_details.xml
@@ -0,0 +1,119 @@
+<?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/>
+  -->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android";
+        xmlns:app="http://schemas.android.com/apk/res-auto";
+        xmlns:tools="http://schemas.android.com/tools";
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:fillViewport="true"
+        tools:showIn="@layout/fragment_prompt_payment">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+        <TextView
+                android:id="@+id/errorView"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_margin="@dimen/activity_horizontal_margin"
+                android:textAlignment="center"
+                android:textColor="@android:color/holo_red_dark"
+                android:textSize="22sp"
+                android:visibility="gone"
+                app:layout_constraintBottom_toTopOf="@+id/orderLabelView"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_chainStyle="packed"
+                tools:text="@string/payment_balance_insufficient"
+                tools:visibility="visible" />
+
+        <TextView
+                android:id="@+id/orderLabelView"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/activity_horizontal_margin"
+                android:layout_marginTop="@dimen/activity_horizontal_margin"
+                android:layout_marginEnd="@dimen/activity_horizontal_margin"
+                android:text="@string/payment_label_order_summary"
+                android:textAlignment="center"
+                android:visibility="invisible"
+                app:layout_constraintBottom_toTopOf="@+id/orderView"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/errorView"
+                tools:visibility="visible" />
+
+        <TextView
+                android:id="@+id/orderView"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_margin="@dimen/activity_horizontal_margin"
+                android:layout_marginTop="16dp"
+                android:textAlignment="center"
+                
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
+                android:textSize="25sp"
+                android:visibility="invisible"
+                app:layout_constraintBottom_toTopOf="@+id/detailsButton"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/orderLabelView"
+                tools:text="2 x Cappuccino, 1 x Hot Meals, 1 x Dessert"
+                tools:visibility="visible" />
+
+        <Button
+                android:id="@+id/detailsButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/payment_show_details"
+                android:visibility="gone"
+                app:layout_constraintBottom_toTopOf="@+id/productsList"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/orderView"
+                tools:visibility="visible" />
+
+        <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/productsList"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_margin="@dimen/activity_horizontal_margin"
+                android:visibility="gone"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/detailsButton"
+                tools:listitem="@layout/list_item_product"
+                tools:visibility="visible" />
+
+        <ProgressBar
+                android:id="@+id/progressBar"
+                style="?android:attr/progressBarStyleLarge"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:indeterminate="false"
+                android:visibility="invisible"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                tools:visibility="visible" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</ScrollView>
diff --git a/app/src/main/res/layout/pending_row.xml 
b/app/src/main/res/layout/pending_row.xml
index 79d7250..3505398 100644
--- a/app/src/main/res/layout/pending_row.xml
+++ b/app/src/main/res/layout/pending_row.xml
@@ -1,4 +1,20 @@
 <?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:id="@+id/pending_container"
diff --git a/app/src/main/res/menu/activity_main_drawer.xml 
b/app/src/main/res/menu/activity_main_drawer.xml
index 14dc779..9b31ba0 100644
--- a/app/src/main/res/menu/activity_main_drawer.xml
+++ b/app/src/main/res/menu/activity_main_drawer.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ This file is part of GNU Taler
+  ~ (C) 2020 Taler Systems S.A.
+  ~
+  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
+  ~ terms of the GNU General Public License as published by the Free Software
+  ~ Foundation; either version 3, or (at your option) any later version.
+  ~
+  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
+  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License along 
with
+  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
+  -->
+
 <menu xmlns:android="http://schemas.android.com/apk/res/android";
       xmlns:tools="http://schemas.android.com/tools";
       tools:showIn="navigation_view">
diff --git a/app/src/main/res/menu/balance.xml 
b/app/src/main/res/menu/balance.xml
index f1565b1..bc23595 100644
--- a/app/src/main/res/menu/balance.xml
+++ b/app/src/main/res/menu/balance.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ This file is part of GNU Taler
+  ~ (C) 2020 Taler Systems S.A.
+  ~
+  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
+  ~ terms of the GNU General Public License as published by the Free Software
+  ~ Foundation; either version 3, or (at your option) any later version.
+  ~
+  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
+  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License along 
with
+  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
+  -->
+
 <menu xmlns:android="http://schemas.android.com/apk/res/android";
       xmlns:app="http://schemas.android.com/apk/res-auto";>
     <item android:id="@+id/reload_balance"
diff --git a/app/src/main/res/menu/history.xml 
b/app/src/main/res/menu/history.xml
index 8c2aa69..755323b 100644
--- a/app/src/main/res/menu/history.xml
+++ b/app/src/main/res/menu/history.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ This file is part of GNU Taler
+  ~ (C) 2020 Taler Systems S.A.
+  ~
+  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
+  ~ terms of the GNU General Public License as published by the Free Software
+  ~ Foundation; either version 3, or (at your option) any later version.
+  ~
+  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
+  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License along 
with
+  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
+  -->
+
 <menu xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:app="http://schemas.android.com/apk/res-auto";>
     <item
diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml
deleted file mode 100644
index d579f6f..0000000
--- a/app/src/main/res/menu/main.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android";
-      xmlns:app="http://schemas.android.com/apk/res-auto";>
-    <item android:id="@+id/action_settings"
-          android:title="@string/action_settings"
-          android:orderInCategory="100"
-          app:showAsAction="never"/>
-</menu>
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml 
b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index 7353dbd..7acad4e 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android";>
     <background android:drawable="@color/ic_launcher_background"/>
     <foreground android:drawable="@drawable/ic_launcher_foreground"/>
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml 
b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index 7353dbd..7acad4e 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android";>
     <background android:drawable="@color/ic_launcher_background"/>
     <foreground android:drawable="@drawable/ic_launcher_foreground"/>
diff --git a/app/src/main/res/navigation/nav_graph.xml 
b/app/src/main/res/navigation/nav_graph.xml
index f958b9c..a82d7be 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -1,4 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?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/>
+  -->
+
 <navigation xmlns:android="http://schemas.android.com/apk/res/android";
         xmlns:app="http://schemas.android.com/apk/res-auto";
         xmlns:tools="http://schemas.android.com/tools";
@@ -19,7 +34,7 @@
     </fragment>
     <fragment
             android:id="@+id/promptPayment"
-            android:name="net.taler.wallet.PromptPayment"
+            android:name="net.taler.wallet.payment.PromptPaymentFragment"
             android:label="Review Payment"
             tools:layout="@layout/fragment_prompt_payment">
         <action
@@ -33,7 +48,7 @@
     </fragment>
     <fragment
             android:id="@+id/paymentSuccessful"
-            android:name="net.taler.wallet.PaymentSuccessful"
+            android:name="net.taler.wallet.payment.PaymentSuccessfulFragment"
             android:label="Payment Successful"
             tools:layout="@layout/fragment_payment_successful" />
     <fragment
@@ -48,7 +63,7 @@
             tools:layout="@layout/fragment_show_history" />
     <fragment
             android:id="@+id/alreadyPaid"
-            android:name="net.taler.wallet.AlreadyPaid"
+            android:name="net.taler.wallet.payment.AlreadyPaidFragment"
             android:label="Already Paid"
             tools:layout="@layout/fragment_already_paid" />
     <fragment
@@ -63,24 +78,26 @@
         <action
                 android:id="@+id/action_promptWithdraw_to_reviewExchangeTOS"
                 app:destination="@id/reviewExchangeTOS"
-                app:popUpTo="@id/showBalance"/>
+                app:popUpTo="@id/showBalance" />
     </fragment>
     <fragment
             android:id="@+id/withdrawSuccessful"
             android:name="net.taler.wallet.WithdrawSuccessful"
             android:label="Withdrawal Confirmed"
             tools:layout="@layout/fragment_withdraw_successful" />
-    <action
-            android:id="@+id/action_global_promptPayment"
-            app:destination="@id/promptPayment" />
     <fragment
             android:id="@+id/reviewExchangeTOS"
             android:name="net.taler.wallet.ReviewExchangeTOS"
             android:label="Exchange's Terms of Service"
-            tools:layout="@layout/fragment_review_exchange_tos" >
+            tools:layout="@layout/fragment_review_exchange_tos">
         <action
                 android:id="@+id/action_reviewExchangeTOS_to_promptWithdraw"
-                app:popUpTo="@id/showBalance"
-                app:destination="@id/promptWithdraw" />
+                app:destination="@id/promptWithdraw"
+                app:popUpTo="@id/showBalance" />
     </fragment>
+
+    <action
+            android:id="@+id/action_global_promptPayment"
+            app:destination="@id/promptPayment" />
+
 </navigation>
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/styles.xml 
b/app/src/main/res/values-v21/styles.xml
deleted file mode 100644
index e546804..0000000
--- a/app/src/main/res/values-v21/styles.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<resources>
-    <style name="AppTheme.NoActionBar">
-        <item name="windowActionBar">false</item>
-        <item name="windowNoTitle">true</item>
-        <item name="android:statusBarColor">@android:color/transparent</item>
-    </style>
-</resources>
diff --git a/app/src/main/res/values/colors.xml 
b/app/src/main/res/values/colors.xml
index 0fe76cc..2d1f0d7 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <resources>
     <color name="colorPrimary">#283593</color>
     <color name="colorPrimaryDark">#1A237E</color>
diff --git a/app/src/main/res/values/dimens.xml 
b/app/src/main/res/values/dimens.xml
index 4ab4520..2bbc14d 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <resources>
     <!-- Default screen margins, per the Android Design guidelines. -->
     <dimen name="activity_horizontal_margin">16dp</dimen>
diff --git a/app/src/main/res/values/ic_launcher_background.xml 
b/app/src/main/res/values/ic_launcher_background.xml
index beab31f..758b965 100644
--- a/app/src/main/res/values/ic_launcher_background.xml
+++ b/app/src/main/res/values/ic_launcher_background.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <resources>
     <color name="ic_launcher_background">#000000</color>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml 
b/app/src/main/res/values/strings.xml
index 39fd3a6..7bfb004 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,19 @@
+<!--
+  ~ 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/>
+  -->
+
 <resources>
     <string name="app_name">Taler Wallet</string>
     <string name="navigation_drawer_open">Open navigation drawer</string>
@@ -36,6 +52,16 @@
     <string name="history_reload">Reload History</string>
     <string name="history_empty">The wallet history is empty</string>
 
-    <!-- TODO: Remove or change this placeholder text -->
-    <string name="hello_blank_fragment">Hello blank fragment</string>
+    <string name="payment_fee">+%s payment fee</string>
+    <string name="payment_button_confirm">Confirm Payment</string>
+    <string name="payment_button_abort">Abort</string>
+    <string name="payment_label_amount_total">Total Amount:</string>
+    <string name="payment_label_order_summary">Order</string>
+    <string name="payment_error">Error: %s</string>
+    <string name="payment_balance_insufficient">Balance Insufficient!</string>
+    <string name="payment_show_details">Show Details</string>
+    <string name="payment_hide_details">Hide Details</string>
+    <string name="payment_successful">Payment was successful</string>
+    <string name="payment_back_button">Go Back</string>
+
 </resources>
diff --git a/app/src/main/res/values/styles.xml 
b/app/src/main/res/values/styles.xml
index f2eca8b..630196a 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,18 +1,36 @@
+<!--
+  ~ 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/>
+  -->
+
 <resources>
 
-    <!-- Base application theme. -->
-    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
-        <!-- Customize your theme here. -->
+    <style name="AppTheme" 
parent="Theme.MaterialComponents.DayNight.DarkActionBar">
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
         <item name="colorAccent">@color/colorAccent</item>
+        <item name="colorOnPrimary">@android:color/white</item>
     </style>
+
     <style name="AppTheme.NoActionBar">
         <item name="windowActionBar">false</item>
         <item name="windowNoTitle">true</item>
+        <item name="android:statusBarColor">@android:color/transparent</item>
     </style>
-    <style name="AppTheme.AppBarOverlay" 
parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
-    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
+
+    <style name="AppTheme.AppBarOverlay" 
parent="ThemeOverlay.MaterialComponents.Dark.ActionBar"/>
+    <style name="AppTheme.PopupOverlay" 
parent="ThemeOverlay.MaterialComponents.Light"/>
 
     <style name="HistoryTitle">
         <item name="android:textSize">17sp</item>
diff --git a/app/src/main/res/xml/apduservice.xml 
b/app/src/main/res/xml/apduservice.xml
index 4a48065..fde348c 100644
--- a/app/src/main/res/xml/apduservice.xml
+++ b/app/src/main/res/xml/apduservice.xml
@@ -1,4 +1,20 @@
 <?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/>
+  -->
+
 <host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android";
         android:description="@string/servicedesc"
         android:requireDeviceUnlock="true">
diff --git a/app/src/test/java/net/taler/wallet/ExampleUnitTest.kt 
b/app/src/test/java/net/taler/wallet/ExampleUnitTest.kt
index c01881a..de74f68 100644
--- a/app/src/test/java/net/taler/wallet/ExampleUnitTest.kt
+++ b/app/src/test/java/net/taler/wallet/ExampleUnitTest.kt
@@ -1,3 +1,19 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
 package net.taler.wallet
 
 import org.junit.Test
diff --git a/app/src/test/java/net/taler/wallet/crypto/Base32CrockfordTest.kt 
b/app/src/test/java/net/taler/wallet/crypto/Base32CrockfordTest.kt
index 711a519..7c8cb4c 100644
--- a/app/src/test/java/net/taler/wallet/crypto/Base32CrockfordTest.kt
+++ b/app/src/test/java/net/taler/wallet/crypto/Base32CrockfordTest.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet.crypto
diff --git a/app/src/test/java/net/taler/wallet/history/HistoryEventTest.kt 
b/app/src/test/java/net/taler/wallet/history/HistoryEventTest.kt
index 361d2ec..ba18dfb 100644
--- a/app/src/test/java/net/taler/wallet/history/HistoryEventTest.kt
+++ b/app/src/test/java/net/taler/wallet/history/HistoryEventTest.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet.history
diff --git 
a/app/src/test/java/net/taler/wallet/history/ReserveTransactionTest.kt 
b/app/src/test/java/net/taler/wallet/history/ReserveTransactionTest.kt
index 208995a..d3d66f5 100644
--- a/app/src/test/java/net/taler/wallet/history/ReserveTransactionTest.kt
+++ b/app/src/test/java/net/taler/wallet/history/ReserveTransactionTest.kt
@@ -1,17 +1,17 @@
 /*
- This file is part of GNU Taler
- (C) 2019 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/>
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
 package net.taler.wallet.history
diff --git a/build.gradle b/build.gradle
index 819d034..df21dcd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,3 +1,19 @@
+/*
+ * 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/>
+ */
+
 // Top-level build file where you can add configuration options common to all 
sub-projects/modules.
 
 buildscript {
diff --git a/gradle.properties b/gradle.properties
index 23339e0..15b061a 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,3 +1,19 @@
+#
+# 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/>
+#
+
 # Project-wide Gradle settings.
 # IDE (e.g. Android Studio) users:
 # Gradle settings configured through the IDE *will override*
diff --git a/gradle/wrapper/gradle-wrapper.properties 
b/gradle/wrapper/gradle-wrapper.properties
index 15c2d72..d432222 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,3 +1,19 @@
+#
+# 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/>
+#
+
 #Wed Aug 14 17:39:00 CEST 2019
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
diff --git a/settings.gradle b/settings.gradle
index c34479d..6ed6b2c 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1,17 @@
+/*
+ * 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/>
+ */
+
 include ':app', ':akono'

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

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