taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit 3e78218f35b9133162fde06f5fd4ff82c6841ea0
parent 7c963392e5f6fe1aa5ac33b813183339e964ec67
Author: Bohdan Potuzhnyi <bohdan.potuzhnyi@gmail.com>
Date:   Fri, 23 Jan 2026 13:20:35 +0100

[merchant-terminal] update of the amount order screen for smartphones

Diffstat:
M.idea/compiler.xml | 2+-
Mmerchant-terminal/build.gradle | 4++--
Amerchant-terminal/src/main/res/layout-sw600dp/fragment_amount_entry.xml | 276+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mmerchant-terminal/src/main/res/layout/dialog_mfa_challenge.xml | 15---------------
Mmerchant-terminal/src/main/res/layout/fragment_amount_entry.xml | 506++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mmerchant-terminal/src/main/res/values-night/styles.xml | 12++++++++++++
Mmerchant-terminal/src/main/res/values/styles.xml | 12++++++++++++
7 files changed, 557 insertions(+), 270 deletions(-)

diff --git a/.idea/compiler.xml b/.idea/compiler.xml @@ -11,7 +11,7 @@ <entry name="!?*.kt" /> <entry name="!?*.clj" /> </wildcardResourcePatterns> - <bytecodeTargetLevel target="21"> + <bytecodeTargetLevel target="17"> <module name="common_commonMain" target="1.6" /> <module name="common_commonTest" target="1.6" /> <module name="common_jvmMain" target="1.6" /> diff --git a/merchant-terminal/build.gradle b/merchant-terminal/build.gradle @@ -13,8 +13,8 @@ android { applicationId "net.taler.merchantpos" minSdkVersion 23 targetSdkVersion 36 - versionCode 18 - versionName "1.3.0" + versionCode 19 + versionName "1.3.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" buildConfigField("String", "BACKEND_API_VERSION", "\"20:0:8\"") diff --git a/merchant-terminal/src/main/res/layout-sw600dp/fragment_amount_entry.xml b/merchant-terminal/src/main/res/layout-sw600dp/fragment_amount_entry.xml @@ -0,0 +1,276 @@ +<?xml version="1.0" encoding="utf-8"?> + +<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" + android:padding="16dp"> + + <TextView + android:id="@+id/amountView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ellipsize="start" + android:gravity="end" + android:maxLines="1" + android:paddingHorizontal="12dp" + android:textAppearance="?attr/textAppearanceHeadlineLarge" + android:textSize="56sp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintEnd_toStartOf="@+id/currencyLayout" + app:layout_constraintHorizontal_chainStyle="packed" + tools:text="12.34" /> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/currencyLayout" + style="@style/Widget.Material3.TextInputLayout.OutlinedBox.Dense" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:boxBackgroundMode="outline" + app:endIconMode="dropdown_menu" + app:layout_constraintTop_toTopOf="@+id/amountView" + app:layout_constraintBottom_toBottomOf="@+id/amountView" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/amountView"> + + <com.google.android.material.textfield.MaterialAutoCompleteTextView + android:id="@+id/currencyView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:inputType="none" + android:paddingHorizontal="16dp" + tools:text="EUR" /> + </com.google.android.material.textfield.TextInputLayout> + + <androidx.constraintlayout.widget.Guideline + android:id="@+id/guidelineNumpadStart" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.2" /> + + <androidx.constraintlayout.widget.Guideline + android:id="@+id/guidelineNumpadEnd" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.8" /> + + <androidx.constraintlayout.widget.Guideline + android:id="@+id/guidelineCharge" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + app:layout_constraintGuide_percent="0.8" /> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/numpad" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginTop="16dp" + android:layout_marginBottom="12dp" + app:layout_constraintBottom_toTopOf="@+id/guidelineCharge" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toStartOf="@+id/guidelineNumpadEnd" + app:layout_constraintStart_toEndOf="@+id/guidelineNumpadStart" + app:layout_constraintTop_toBottomOf="@+id/amountView"> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key1" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="1" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key2" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@+id/key4" + app:layout_constraintHorizontal_chainStyle="spread" + app:layout_constraintVertical_chainStyle="spread" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key2" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="2" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key3" + app:layout_constraintStart_toEndOf="@+id/key1" + app:layout_constraintTop_toTopOf="@+id/key1" + app:layout_constraintBottom_toBottomOf="@+id/key1" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key3" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="3" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/key2" + app:layout_constraintTop_toTopOf="@+id/key1" + app:layout_constraintBottom_toBottomOf="@+id/key1" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key4" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="4" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/key1" + app:layout_constraintBottom_toTopOf="@+id/key7" + app:layout_constraintHorizontal_chainStyle="spread" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key5" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="5" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key6" + app:layout_constraintStart_toEndOf="@+id/key4" + app:layout_constraintTop_toTopOf="@+id/key4" + app:layout_constraintBottom_toBottomOf="@+id/key4" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key6" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="6" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/key5" + app:layout_constraintTop_toTopOf="@+id/key4" + app:layout_constraintBottom_toBottomOf="@+id/key4" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key7" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="7" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key8" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/key4" + app:layout_constraintBottom_toTopOf="@+id/keyClear" + app:layout_constraintHorizontal_chainStyle="spread" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key8" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="8" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key9" + app:layout_constraintStart_toEndOf="@+id/key7" + app:layout_constraintTop_toTopOf="@+id/key7" + app:layout_constraintBottom_toBottomOf="@+id/key7" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key9" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="9" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/key8" + app:layout_constraintTop_toTopOf="@+id/key7" + app:layout_constraintBottom_toBottomOf="@+id/key7" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/keyClear" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:singleLine="true" + android:text="@string/amount_entry_clear" + android:textColor="@color/amount_entry_key_text" + android:textSize="22sp" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/key7" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintHorizontal_chainStyle="spread" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key0" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:text="0" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/keyBackspace" + app:layout_constraintStart_toEndOf="@+id/keyClear" + app:layout_constraintTop_toTopOf="@+id/keyClear" + app:layout_constraintBottom_toBottomOf="@+id/keyClear" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/keyBackspace" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="4dp" + android:contentDescription="@string/amount_entry_backspace" + android:gravity="center" + android:padding="0dp" + android:singleLine="true" + android:text="" + app:backgroundTint="@color/amount_entry_key_background" + app:icon="@drawable/ic_backspace" + app:iconGravity="textStart" + app:iconPadding="0dp" + app:iconSize="34dp" + app:iconTint="@color/amount_entry_key_text" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/key0" + app:layout_constraintTop_toTopOf="@+id/keyClear" + app:layout_constraintBottom_toBottomOf="@+id/keyClear" /> + </androidx.constraintlayout.widget.ConstraintLayout> + + <Button + android:id="@+id/chargeButton" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginBottom="8dp" + android:backgroundTint="@color/complete_button_bottom" + android:text="@string/amount_entry_create_order_charge" + android:textAllCaps="false" + android:textSize="20sp" + app:layout_constraintTop_toBottomOf="@+id/guidelineCharge" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/guidelineNumpadEnd" + app:layout_constraintStart_toEndOf="@+id/guidelineNumpadStart" /> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/merchant-terminal/src/main/res/layout/dialog_mfa_challenge.xml b/merchant-terminal/src/main/res/layout/dialog_mfa_challenge.xml @@ -1,19 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- - ~ This file is part of GNU Taler - ~ (C) 2026 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/merchant-terminal/src/main/res/layout/fragment_amount_entry.xml b/merchant-terminal/src/main/res/layout/fragment_amount_entry.xml @@ -1,290 +1,291 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - ~ This file is part of GNU Taler - ~ (C) 2026 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/> - --> +<?xml version="1.0" encoding="utf-8"?> <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" - android:padding="16dp"> + android:layout_height="match_parent"> - <TextView - android:id="@+id/amountView" + <androidx.constraintlayout.widget.Guideline + android:id="@+id/guidelineSplit" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:ellipsize="start" - android:gravity="end" - android:maxLines="1" - android:paddingHorizontal="12dp" - android:textAppearance="?attr/textAppearanceHeadlineLarge" - android:textSize="56sp" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.3" /> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/amountPane" + android:layout_width="0dp" + android:layout_height="0dp" + android:padding="16dp" app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@+id/guidelineSplit" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintEnd_toStartOf="@+id/currencyLayout" - app:layout_constraintHorizontal_chainStyle="packed" - tools:text="12.34" /> + app:layout_constraintBottom_toBottomOf="parent"> - <com.google.android.material.textfield.TextInputLayout - android:id="@+id/currencyLayout" - style="@style/Widget.Material3.TextInputLayout.OutlinedBox.Dense" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - app:boxBackgroundMode="outline" - app:endIconMode="dropdown_menu" - app:layout_constraintTop_toTopOf="@+id/amountView" - app:layout_constraintBottom_toBottomOf="@+id/amountView" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@+id/amountView"> + <TextView + android:id="@+id/amountView" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:ellipsize="start" + android:gravity="end" + android:maxLines="1" + android:paddingHorizontal="12dp" + android:textAppearance="?attr/textAppearanceHeadlineLarge" + android:textSize="56sp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@+id/currencyLayout" + app:layout_constraintVertical_chainStyle="packed" + tools:text="12.34" /> - <com.google.android.material.textfield.MaterialAutoCompleteTextView - android:id="@+id/currencyView" + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/currencyLayout" + style="@style/Widget.Material3.TextInputLayout.OutlinedBox.Dense" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:inputType="none" - android:paddingHorizontal="16dp" - tools:text="EUR" /> - </com.google.android.material.textfield.TextInputLayout> - - <androidx.constraintlayout.widget.Guideline - android:id="@+id/guidelineNumpadStart" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="vertical" - app:layout_constraintGuide_percent="0.2" /> - - <androidx.constraintlayout.widget.Guideline - android:id="@+id/guidelineNumpadEnd" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="vertical" - app:layout_constraintGuide_percent="0.8" /> + app:boxBackgroundMode="outline" + app:endIconMode="dropdown_menu" + app:layout_constraintTop_toBottomOf="@+id/amountView" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent"> - <androidx.constraintlayout.widget.Guideline - android:id="@+id/guidelineCharge" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="horizontal" - app:layout_constraintGuide_percent="0.8" /> + <com.google.android.material.textfield.MaterialAutoCompleteTextView + android:id="@+id/currencyView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:inputType="none" + android:paddingHorizontal="16dp" + tools:text="EUR" /> + </com.google.android.material.textfield.TextInputLayout> + </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/numpad" + android:id="@+id/keypadPane" android:layout_width="0dp" android:layout_height="0dp" - android:layout_marginTop="16dp" - android:layout_marginBottom="12dp" - app:layout_constraintBottom_toTopOf="@+id/guidelineCharge" + android:padding="8dp" + app:layout_constraintStart_toStartOf="@+id/guidelineSplit" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintEnd_toStartOf="@+id/guidelineNumpadEnd" - app:layout_constraintStart_toEndOf="@+id/guidelineNumpadStart" - app:layout_constraintTop_toBottomOf="@+id/amountView"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent"> - <com.google.android.material.button.MaterialButton - android:id="@+id/key1" + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/numpad" android:layout_width="0dp" android:layout_height="0dp" - android:layout_margin="4dp" - android:text="1" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toStartOf="@+id/key2" - app:layout_constraintStart_toStartOf="parent" + android:layout_marginBottom="4dp" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toTopOf="@+id/key4" - app:layout_constraintHorizontal_chainStyle="spread" - app:layout_constraintVertical_chainStyle="spread" /> + app:layout_constraintBottom_toTopOf="@+id/chargeButton" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"> - <com.google.android.material.button.MaterialButton - android:id="@+id/key2" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:text="2" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toStartOf="@+id/key3" - app:layout_constraintStart_toEndOf="@+id/key1" - app:layout_constraintTop_toTopOf="@+id/key1" - app:layout_constraintBottom_toBottomOf="@+id/key1" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/key1" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="2dp" + android:text="1" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key2" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@+id/key4" + app:layout_constraintHorizontal_chainStyle="spread" + app:layout_constraintVertical_chainStyle="spread" /> - <com.google.android.material.button.MaterialButton - android:id="@+id/key3" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:text="3" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@+id/key2" - app:layout_constraintTop_toTopOf="@+id/key1" - app:layout_constraintBottom_toBottomOf="@+id/key1" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/key2" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginHorizontal="2dp" + android:text="2" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key3" + app:layout_constraintStart_toEndOf="@+id/key1" + app:layout_constraintTop_toTopOf="@+id/key1" + app:layout_constraintBottom_toBottomOf="@+id/key1" /> - <com.google.android.material.button.MaterialButton - android:id="@+id/key4" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:text="4" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toStartOf="@+id/key5" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/key1" - app:layout_constraintBottom_toTopOf="@+id/key7" - app:layout_constraintHorizontal_chainStyle="spread" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/key3" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginHorizontal="2dp" + android:text="3" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/key2" + app:layout_constraintTop_toTopOf="@+id/key1" + app:layout_constraintBottom_toBottomOf="@+id/key1" /> - <com.google.android.material.button.MaterialButton - android:id="@+id/key5" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:text="5" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toStartOf="@+id/key6" - app:layout_constraintStart_toEndOf="@+id/key4" - app:layout_constraintTop_toTopOf="@+id/key4" - app:layout_constraintBottom_toBottomOf="@+id/key4" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/key4" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="2dp" + android:text="4" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/key1" + app:layout_constraintBottom_toTopOf="@+id/key7" + app:layout_constraintHorizontal_chainStyle="spread" /> - <com.google.android.material.button.MaterialButton - android:id="@+id/key6" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:text="6" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@+id/key5" - app:layout_constraintTop_toTopOf="@+id/key4" - app:layout_constraintBottom_toBottomOf="@+id/key4" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/key5" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginHorizontal="2dp" + android:text="5" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key6" + app:layout_constraintStart_toEndOf="@+id/key4" + app:layout_constraintTop_toTopOf="@+id/key4" + app:layout_constraintBottom_toBottomOf="@+id/key4" /> - <com.google.android.material.button.MaterialButton - android:id="@+id/key7" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:text="7" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toStartOf="@+id/key8" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/key4" - app:layout_constraintBottom_toTopOf="@+id/keyClear" - app:layout_constraintHorizontal_chainStyle="spread" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/key6" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginHorizontal="2dp" + android:text="6" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/key5" + app:layout_constraintTop_toTopOf="@+id/key4" + app:layout_constraintBottom_toBottomOf="@+id/key4" /> - <com.google.android.material.button.MaterialButton - android:id="@+id/key8" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:text="8" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toStartOf="@+id/key9" - app:layout_constraintStart_toEndOf="@+id/key7" - app:layout_constraintTop_toTopOf="@+id/key7" - app:layout_constraintBottom_toBottomOf="@+id/key7" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/key7" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="2dp" + android:text="7" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key8" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/key4" + app:layout_constraintBottom_toTopOf="@+id/keyClear" + app:layout_constraintHorizontal_chainStyle="spread" /> - <com.google.android.material.button.MaterialButton - android:id="@+id/key9" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:text="9" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@+id/key8" - app:layout_constraintTop_toTopOf="@+id/key7" - app:layout_constraintBottom_toBottomOf="@+id/key7" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/key8" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginHorizontal="2dp" + android:text="8" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key9" + app:layout_constraintStart_toEndOf="@+id/key7" + app:layout_constraintTop_toTopOf="@+id/key7" + app:layout_constraintBottom_toBottomOf="@+id/key7" /> - <com.google.android.material.button.MaterialButton - android:id="@+id/keyClear" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:singleLine="true" - android:text="@string/amount_entry_clear" - android:textColor="@color/amount_entry_key_text" - android:textSize="22sp" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toStartOf="@+id/key0" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/key7" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintHorizontal_chainStyle="spread" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/key9" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginHorizontal="2dp" + android:text="9" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/key8" + app:layout_constraintTop_toTopOf="@+id/key7" + app:layout_constraintBottom_toBottomOf="@+id/key7" /> - <com.google.android.material.button.MaterialButton - android:id="@+id/key0" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:text="0" - android:textColor="@color/amount_entry_key_text" - android:textSize="@dimen/amount_entry_key_text_size" - app:backgroundTint="@color/amount_entry_key_background" - app:layout_constraintEnd_toStartOf="@+id/keyBackspace" - app:layout_constraintStart_toEndOf="@+id/keyClear" - app:layout_constraintTop_toTopOf="@+id/keyClear" - app:layout_constraintBottom_toBottomOf="@+id/keyClear" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/keyClear" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="2dp" + android:singleLine="true" + android:text="@string/amount_entry_clear" + android:textColor="@color/amount_entry_key_text" + android:textSize="22sp" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/key0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/key7" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintHorizontal_chainStyle="spread" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/key0" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginHorizontal="2dp" + android:text="0" + android:textColor="@color/amount_entry_key_text" + android:textSize="@dimen/amount_entry_key_text_size" + app:backgroundTint="@color/amount_entry_key_background" + app:layout_constraintEnd_toStartOf="@+id/keyBackspace" + app:layout_constraintStart_toEndOf="@+id/keyClear" + app:layout_constraintTop_toTopOf="@+id/keyClear" + app:layout_constraintBottom_toBottomOf="@+id/keyClear" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/keyBackspace" + style="@style/Widget.AmountEntry.Key" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginHorizontal="2dp" + android:contentDescription="@string/amount_entry_backspace" + android:gravity="center" + android:singleLine="true" + android:text="" + app:backgroundTint="@color/amount_entry_key_background" + app:icon="@drawable/ic_backspace" + app:iconGravity="textStart" + app:iconPadding="0dp" + app:iconSize="34dp" + app:iconTint="@color/amount_entry_key_text" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/key0" + app:layout_constraintTop_toTopOf="@+id/keyClear" + app:layout_constraintBottom_toBottomOf="@+id/keyClear" /> + </androidx.constraintlayout.widget.ConstraintLayout> - <com.google.android.material.button.MaterialButton - android:id="@+id/keyBackspace" + <Button + android:id="@+id/chargeButton" android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="4dp" - android:contentDescription="@string/amount_entry_backspace" - android:gravity="center" - android:padding="0dp" - android:singleLine="true" - android:text="" - app:backgroundTint="@color/amount_entry_key_background" - app:icon="@drawable/ic_backspace" - app:iconGravity="textStart" - app:iconPadding="0dp" - app:iconSize="34dp" - app:iconTint="@color/amount_entry_key_text" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@+id/key0" - app:layout_constraintTop_toTopOf="@+id/keyClear" - app:layout_constraintBottom_toBottomOf="@+id/keyClear" /> + android:layout_height="wrap_content" + android:backgroundTint="@color/complete_button_bottom" + android:text="@string/amount_entry_create_order_charge" + android:textAllCaps="false" + android:textSize="20sp" + app:layout_constraintTop_toBottomOf="@+id/numpad" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> - <Button - android:id="@+id/chargeButton" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_marginBottom="8dp" - android:backgroundTint="@color/complete_button_bottom" - android:text="@string/amount_entry_create_order_charge" - android:textAllCaps="false" - android:textSize="20sp" - app:layout_constraintTop_toBottomOf="@+id/guidelineCharge" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/guidelineNumpadEnd" - app:layout_constraintStart_toEndOf="@+id/guidelineNumpadStart" /> - -</androidx.constraintlayout.widget.ConstraintLayout> +</androidx.constraintlayout.widget.ConstraintLayout> +\ No newline at end of file diff --git a/merchant-terminal/src/main/res/values-night/styles.xml b/merchant-terminal/src/main/res/values-night/styles.xml @@ -15,5 +15,17 @@ <item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">false</item> </style> + <style name="Widget.AmountEntry.Key" parent="Widget.Material3.Button"> + <item name="android:minWidth">0dp</item> + <item name="android:minHeight">0dp</item> + + <item name="android:insetLeft">0dp</item> + <item name="android:insetRight">0dp</item> + <item name="android:insetTop">0dp</item> + <item name="android:insetBottom">0dp</item> + + <item name="android:padding">0dp</item> + </style> + </resources> diff --git a/merchant-terminal/src/main/res/values/styles.xml b/merchant-terminal/src/main/res/values/styles.xml @@ -95,4 +95,16 @@ <item name="android:statusBarColor">@color/colorPrimary</item> </style> + <style name="Widget.AmountEntry.Key" parent="Widget.Material3.Button"> + <item name="android:minWidth">0dp</item> + <item name="android:minHeight">0dp</item> + + <item name="android:insetLeft">0dp</item> + <item name="android:insetRight">0dp</item> + <item name="android:insetTop">0dp</item> + <item name="android:insetBottom">0dp</item> + + <item name="android:padding">0dp</item> + </style> + </resources>