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() {