taler-android

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

commit 1b3a3558731b796f8421dac2f8769be3aa67d73b
parent fb39e545e1f688f216671aafc69b8c4a4d5381f0
Author: Bohdan Potuzhnyi <bohdan.potuzhnyi@gmail.com>
Date:   Wed, 21 Jan 2026 12:03:00 +0100

changing mfa dialog

Diffstat:
Mmerchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFragment.kt | 28+++++++++++++++++-----------
Amerchant-terminal/src/main/res/layout/dialog_mfa_challenge.xml | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Amerchant-terminal/src/main/res/values-sw600dp/bools.xml | 4++++
Amerchant-terminal/src/main/res/values/bools.xml | 4++++
Mmerchant-terminal/src/main/res/values/strings.xml | 1+
5 files changed, 78 insertions(+), 11 deletions(-)

diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFragment.kt @@ -24,7 +24,6 @@ import android.content.pm.PackageManager import android.media.Image import android.os.Bundle import android.util.Log -import android.text.InputType import android.view.LayoutInflater import android.view.View import android.view.View.GONE @@ -32,11 +31,9 @@ import android.view.View.INVISIBLE import android.view.View.VISIBLE import android.view.ViewGroup import android.widget.Button -import android.widget.EditText import android.widget.RadioButton import android.widget.TextView import android.widget.Toast -import androidx.appcompat.app.AlertDialog import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.OptIn import androidx.camera.core.CameraSelector @@ -50,6 +47,9 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import com.google.android.material.button.MaterialButtonToggleGroup +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.textfield.TextInputEditText +import com.google.android.material.textfield.TextInputLayout import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_LONG import com.google.android.material.snackbar.Snackbar import kotlinx.coroutines.Dispatchers @@ -413,7 +413,7 @@ class ConfigFragment : Fragment() { val labels = challenges.map { c -> "${c.tan_channel}: ${c.tan_info}" }.toTypedArray() - AlertDialog.Builder(requireContext()) + MaterialAlertDialogBuilder(requireContext()) .setTitle(R.string.mfa_choose_title) .setItems(labels) { _, which -> cont.resume(challenges[which]) @@ -426,20 +426,26 @@ class ConfigFragment : Fragment() { private suspend fun promptForTan(challenge: Challenge): String? = withContext(Dispatchers.Main) { suspendCancellableCoroutine { cont -> - val input = EditText(requireContext()).apply { - inputType = InputType.TYPE_CLASS_NUMBER - } val message = getString( R.string.mfa_challenge_message, challenge.tan_channel, challenge.tan_info ) - AlertDialog.Builder(requireContext()) + val dialogView = layoutInflater.inflate( + R.layout.dialog_mfa_challenge, + null, + false + ) + val messageView = dialogView.findViewById<TextView>(R.id.mfaMessageView) + val inputLayout = dialogView.findViewById<TextInputLayout>(R.id.mfaCodeInputLayout) + val input = dialogView.findViewById<TextInputEditText>(R.id.mfaCodeInput) + messageView.text = message + inputLayout.isErrorEnabled = false + MaterialAlertDialogBuilder(requireContext()) .setTitle(R.string.mfa_challenge_title) - .setMessage(message) - .setView(input) + .setView(dialogView) .setPositiveButton(android.R.string.ok) { _, _ -> - cont.resume(input.text.toString().trim()) + cont.resume(input?.text?.toString()?.trim().orEmpty()) } .setNegativeButton(android.R.string.cancel) { _, _ -> cont.resume(null) diff --git a/merchant-terminal/src/main/res/layout/dialog_mfa_challenge.xml b/merchant-terminal/src/main/res/layout/dialog_mfa_challenge.xml @@ -0,0 +1,52 @@ +<?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" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingStart="24dp" + android:paddingTop="16dp" + android:paddingEnd="24dp" + android:paddingBottom="8dp"> + + <TextView + android:id="@+id/mfaMessageView" + style="@style/TextAppearance.Material3.BodyMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="16dp" + android:textColor="?attr/colorOnSurfaceVariant" /> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/mfaCodeInputLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/mfa_challenge_code_hint" + app:boxBackgroundMode="outline" + app:boxBackgroundColor="@android:color/transparent"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/mfaCodeInput" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:imeOptions="actionDone" + android:inputType="number" /> + </com.google.android.material.textfield.TextInputLayout> + +</LinearLayout> diff --git a/merchant-terminal/src/main/res/values-sw600dp/bools.xml b/merchant-terminal/src/main/res/values-sw600dp/bools.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <bool name="is_tablet">true</bool> +</resources> diff --git a/merchant-terminal/src/main/res/values/bools.xml b/merchant-terminal/src/main/res/values/bools.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <bool name="is_tablet">false</bool> +</resources> diff --git a/merchant-terminal/src/main/res/values/strings.xml b/merchant-terminal/src/main/res/values/strings.xml @@ -106,6 +106,7 @@ <string name="token_validity_deadline">Token validity deadline:</string> <string name="mfa_challenge_title">Two-factor authentication</string> <string name="mfa_challenge_message">A confirmation code was sent via %1$s (%2$s). Enter the code to continue.</string> + <string name="mfa_challenge_code_hint">Verification code</string> <string name="mfa_choose_title">Choose verification method</string> <string name="mfa_challenge_invalid">Incorrect code. Please try again.</string> <string name="mfa_challenge_retry">Too many attempts. A new code has been sent.</string>