From ef74f2cc828a845cf0c8f4482f6f9a3b3513586e Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Thu, 12 Mar 2026 16:46:56 +0630 Subject: [PATCH] toast for wrong password --- .../kbz/ui/core_ui/EmvTransactionFragment.java | 11 +++++++++++ app/src/main/res/layout/fragment_emv_input_pin.xml | 7 ++++--- .../baselib/viewModel/EmvBaseViewModel.java | 13 +++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java index 575d1ba..babb908 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java @@ -3,6 +3,7 @@ package com.utsmm.kbz.ui.core_ui; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -158,6 +159,7 @@ public class EmvTransactionFragment extends DataBindingFragment { } observeEmvResultStatus(); + observePinWarning(); } private boolean isNotManualTransaction() { @@ -349,6 +351,15 @@ public class EmvTransactionFragment extends DataBindingFragment { }); } + private void observePinWarning() { + emvTransactionViewModel.pinRemainingCount.observe(getViewLifecycleOwner(), msg -> { + if (!TextUtils.isEmpty(msg)) { + Toast.makeText(requireContext(), msg, Toast.LENGTH_SHORT).show(); + emvTransactionViewModel.pinRemainingCount.setValue(""); + } + }); + } + private void observeEmvErrorCode() { dismissLoadingDialog(); emvTransactionViewModel.errorCodeMsg.observe(getViewLifecycleOwner(), pair -> { diff --git a/app/src/main/res/layout/fragment_emv_input_pin.xml b/app/src/main/res/layout/fragment_emv_input_pin.xml index bef418c..d6771fa 100644 --- a/app/src/main/res/layout/fragment_emv_input_pin.xml +++ b/app/src/main/res/layout/fragment_emv_input_pin.xml @@ -120,16 +120,17 @@ diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java index eecb78d..feddaa5 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java @@ -1,5 +1,6 @@ package com.utsmyanmar.baselib.viewModel; +import android.app.AlertDialog; import android.graphics.Rect; import android.os.Handler; import android.os.Looper; @@ -8,6 +9,7 @@ import android.os.RemoteException; import android.util.Log; import android.view.View; import android.view.ViewTreeObserver; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.lifecycle.MutableLiveData; @@ -106,6 +108,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel { public MutableLiveData pinPadVisibility = new MutableLiveData<>(8); protected int pinEnterCount; + private int offlinePinIncorrectPromptCount; public CustomPinPadKeyboard customPinPadKeyboard; private int mWidth = 239; // Single item width of password keyboard @@ -636,6 +639,9 @@ public abstract class EmvBaseViewModel extends BaseViewModel { public void onCardHolderInputPin(boolean isOnlinePin, int leftTimes) { LogUtil.d(TAG, "onCardHolderInputPin isOnlinePin = " + isOnlinePin); LogUtil.d(TAG, "onCardHolderInputPin leftTimes = " + leftTimes); + if (isOnlinePin) { + pinRemainingCount.postValue(""); + } // startPinProcess(isOnlinePin ? 1 : 0); mProcessStep = EMV_SHOW_PIN_PAD; // mHandler.obtainMessage(EMV_SHOW_PIN_PAD, isOnlinePin ? 1 : 0).sendToTarget(); @@ -675,7 +681,13 @@ public abstract class EmvBaseViewModel extends BaseViewModel { public void onPrompt(PromptEnum promptEnum) { LogUtil.d(TAG, "onPrompt->" + promptEnum); if( promptEnum == PromptEnum.OFFLINE_PIN_INCORRECT_TRY_AGAIN) { + offlinePinIncorrectPromptCount++; + pinEnterCount = 0; + pinText.postValue(""); + int attemptLeft = Math.max(0, 3 - offlinePinIncorrectPromptCount); + pinRemainingCount.postValue("Please try again!\n" + attemptLeft + " attempt left!"); emvHandler.onSetPromptResponse(false); + } else { emvHandler.onSetPromptResponse(true); } @@ -902,6 +914,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel { emvCardType.postValue(""); pinText.setValue(""); pinEnterCount = 0; + offlinePinIncorrectPromptCount = 0; } protected void getCardInfo() {