5th fix for see phone

This commit is contained in:
kizzy 2026-02-20 10:53:40 +07:00
parent 4aab58d0bf
commit 538ae41938
4 changed files with 46 additions and 15 deletions

View File

@ -197,6 +197,17 @@ public class EmvTransactionFragment extends DataBindingFragment {
break; break;
case READ_CARD: case READ_CARD:
isCardInserted(new CardDetectCallback() {
@Override
public void onComplete() {
sharedViewModel.setIsFallback(true);
navigateToCheckCard();
}
});
break;
case SEE_PHONE:
isCardTaped("Please check your phone!",new CardDetectCallback() { isCardTaped("Please check your phone!",new CardDetectCallback() {
@Override @Override
public void onComplete() { public void onComplete() {
@ -204,7 +215,10 @@ public class EmvTransactionFragment extends DataBindingFragment {
navigateToCheckCard(); navigateToCheckCard();
} }
}); });
break;
case OTHER_INTERFACE:
sharedViewModel.set_errorFragmentMsg("Please use other interface!");
navigateToError();
break; break;
case PIN_PAD_CANCEL: case PIN_PAD_CANCEL:
navigateToMain(); navigateToMain();

View File

@ -176,9 +176,16 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
case EMV_SUCCESS_OFFLINE: case EMV_SUCCESS_OFFLINE:
transResult.postValue(TransResultStatus.OFFLINE_SUCCESS); transResult.postValue(TransResultStatus.OFFLINE_SUCCESS);
break; break;
case EMV_FAILURE_OFFLINE: case EMV_FAILURE_OFFLINE:
transResult.postValue(TransResultStatus.OFFLINE_FAILURE); transResult.postValue(TransResultStatus.OFFLINE_FAILURE);
break; break;
case EMV_SEE_PHONE:
emvResultStatus.postValue(EmvResultStatus.SEE_PHONE);
break;
case EMV_OTHER_INTERFACE:
emvResultStatus.postValue(EmvResultStatus.OTHER_INTERFACE);
break;
} }
} }
@ -210,6 +217,7 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
} else if (mProcessStep == EMV_ONLINE_PROCESS) { } else if (mProcessStep == EMV_ONLINE_PROCESS) {
importOnlineProcess(SdkResult.Success, new EmvOnlineResultEntity()); importOnlineProcess(SdkResult.Success, new EmvOnlineResultEntity());
} else if (mProcessStep == EMV_SIGNATURE) { } else if (mProcessStep == EMV_SIGNATURE) {
// emvHandler.
// importSignatureStatus(1); // importSignatureStatus(1);
} else if (mProcessStep == EMV_SHOW_PIN_PAD) { } else if (mProcessStep == EMV_SHOW_PIN_PAD) {
emvHandler.onSetPinInputResponse(false, false); emvHandler.onSetPinInputResponse(false, false);

View File

@ -28,5 +28,7 @@ public enum EmvResultStatus {
OFFLINE_DECLINE, OFFLINE_DECLINE,
CONFIRM_CODE_VERIFY, CONFIRM_CODE_VERIFY,
MPU_CARD MPU_CARD,
SEE_PHONE,
OTHER_INTERFACE
} }

View File

@ -66,6 +66,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
@ -157,6 +158,8 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
protected static final int EMV_FAILURE_ONLINE = 16; protected static final int EMV_FAILURE_ONLINE = 16;
protected static final int EMV_SUCCESS_OFFLINE = 17; protected static final int EMV_SUCCESS_OFFLINE = 17;
protected static final int EMV_FAILURE_OFFLINE = 18; protected static final int EMV_FAILURE_OFFLINE = 18;
protected static final int EMV_SEE_PHONE = 19;
protected static final int EMV_OTHER_INTERFACE = 22;
protected static final int EMV_TRANS_FAIL = 999; protected static final int EMV_TRANS_FAIL = 999;
protected static final int REMOVE_CARD = 1000; protected static final int REMOVE_CARD = 1000;
private String oldPin = ""; private String oldPin = "";
@ -638,6 +641,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
mProcessStep = EMV_APP_SELECT; mProcessStep = EMV_APP_SELECT;
LogUtil.d(TAG, "onWaitAppSelect :"); LogUtil.d(TAG, "onWaitAppSelect :");
String[] candidateNames = getCandidateNames(list); String[] candidateNames = getCandidateNames(list);
LogUtil.d(TAG, "onWaitAppSelect :" + Arrays.toString(candidateNames));
mHandler.obtainMessage(EMV_APP_SELECT, candidateNames).sendToTarget(); mHandler.obtainMessage(EMV_APP_SELECT, candidateNames).sendToTarget();
} }
@ -709,6 +713,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
public void onContactlessTapCardAgain() { public void onContactlessTapCardAgain() {
LogUtil.d(TAG, "onReadCardAgain"); LogUtil.d(TAG, "onReadCardAgain");
emvHandler.onSetContactlessTapCardResponse(true);
mHandler.sendEmptyMessage(EMV_TRY_AGAIN); mHandler.sendEmptyMessage(EMV_TRY_AGAIN);
//this method only used for EMV contactless card if the host response the script. Such as paywave , AMEX... //this method only used for EMV contactless card if the host response the script. Such as paywave , AMEX...
@ -788,7 +793,6 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
switch (retCode) { switch (retCode) {
case SdkResult.Emv_Success_Arpc_Fail: case SdkResult.Emv_Success_Arpc_Fail:
case SdkResult.Success: case SdkResult.Success:
case SdkResult.Emv_Declined:
case SdkResult.Emv_Script_Fail: case SdkResult.Emv_Script_Fail:
mHandler.postDelayed(new Runnable() { mHandler.postDelayed(new Runnable() {
@Override @Override
@ -815,22 +819,24 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
case SdkResult.Emv_Candidatelist_Empty:// Application have no aid list case SdkResult.Emv_Candidatelist_Empty:// Application have no aid list
case SdkResult.Emv_FallBack:// FallBack ,chip card reset failed case SdkResult.Emv_FallBack:// FallBack ,chip card reset failed
//fallback process
emvResultStatus.postValue(EmvResultStatus.READ_CARD_RETRY); emvResultStatus.postValue(EmvResultStatus.READ_CARD_RETRY);
break; break;
case SdkResult.Emv_Declined:
// case SdkResult.Emv_Arpc_Fail: // case SdkResult.Emv_Arpc_Fail: //
//// case SdkResult.Emv_Declined: //// case SdkResult.Emv_Declined:
// //online decline ,if it is in second gac, application should decide if it is need reversal the transaction // //online decline ,if it is in second gac, application should decide if it is need reversal the transaction
// break; break;
// //
// case SdkResult.Emv_Cancel:// Transaction Cancel case SdkResult.Emv_Cancel:// Transaction Cancel
// //user cancel // //user cancel
// break; mHandler.obtainMessage(EMV_ERROR, retCode, retCode, "Canceled").sendToTarget();
break;
// //
//// case SdkResult.Emv_Offline_Declined: // // case SdkResult.Emv_Offline_Declined: //
//// //offline decline // //offline decline
//// offlineDenial(); // offlineDenial();
//// break; // break;
// //
// case SdkResult.Emv_Card_Block: //Card Block // case SdkResult.Emv_Card_Block: //Card Block
// //card is blocked // //card is blocked
@ -849,11 +855,12 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
// break; // break;
case SdkResult.Emv_Other_Interface: case SdkResult.Emv_Other_Interface:
emvResultStatus.postValue(EmvResultStatus.READ_CARD_NO_APP); mHandler.sendEmptyMessage(EMV_OTHER_INTERFACE);
break; break;
case SdkResult.Emv_Plz_See_Phone: case SdkResult.Emv_Plz_See_Phone:
mHandler.sendEmptyMessage(EMV_TRY_AGAIN); mHandler.sendEmptyMessage(EMV_SEE_PHONE);
//see phone flow //see phone flow
//prompt a dialog to user to check phone-->search contactless card(another card) -->start new emvProcess again //prompt a dialog to user to check phone-->search contactless card(another card) -->start new emvProcess again
break; break;