From d371e0f4e6a3c4c8877c73ccb859358d2bb10f22 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Thu, 4 Jun 2026 19:18:11 +0630 Subject: [PATCH 1/7] online pin for jcb --- .../baselib/viewModel/EmvBaseViewModel.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 540acac..3c56e1e 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java @@ -298,7 +298,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel { LogUtil.d(TAG, "TransData :" + transData.getTransAmount()); LogUtil.d(TAG, "start emv "); - emvHandler.emvDebugLog(true); + emvHandler.emvDebugLog(false); emvHandler.emvProcess(transData, emvProcessListener); @@ -1039,7 +1039,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel { "9F2A", "9F26", "9F27", "9F10", "9F37", "9F36", "95", "9A", "9C", "9F02", "5F2A", "5F34", "82", "9F1A", //field 55 tag "9F03", "9F33", "4F", "9F08", "9F34", "9F35", "9F1E", "9F52","9F53", "84", "9F09", "9F41", //field55 tag "9F5B", "8A", "9B", "9F6E", "9F7C", "9F4C", "50", "9F12", "DF01", "9F63", "5F20", "9F0B", "9F42", - "FF31", "9F7B", "8E","9F15", "9F01", "9F1B" + "FF31", "9F7B", "8E","9F15", "9F01", "9F1B", "9F09" }; try { @@ -1431,7 +1431,14 @@ private void configJcbContactlessParameter() { // emvHandler.setTlv(ByteUtils.hexString2ByteArray("DF8161"), ByteUtils.hexString2ByteArray("7F00")); byte[] tag9F53 = emvHandler.getJcbContactlessTIP(); Log.d("nexgo", "getJcbContactlessTIP: tag9F53->:" + ByteUtils.byteArray2HexString(tag9F53)); +// if (tag9F53 != null) { +// tag9F53[1] &= 0x7F; //disable issuer update +// emvHandler.setJcbContactlessTIP(tag9F53); +// Log.d("nexgo", "tag9F53->:" + ByteUtils.byteArray2HexString(tag9F53)); +// +// } if (tag9F53 != null) { + tag9F53[0] &= 0x72; //enable online pin tag9F53[1] &= 0x7F; //disable issuer update emvHandler.setJcbContactlessTIP(tag9F53); Log.d("nexgo", "tag9F53->:" + ByteUtils.byteArray2HexString(tag9F53)); From fad587f6324fa801b0a673bf4de2c17c3d502ba7 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Mon, 15 Jun 2026 16:06:04 +0630 Subject: [PATCH 2/7] auto settlement printing loop --- app/src/main/java/com/utsmm/kbz/MainActivity.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/MainActivity.java b/app/src/main/java/com/utsmm/kbz/MainActivity.java index c034b2f..7afa01f 100644 --- a/app/src/main/java/com/utsmm/kbz/MainActivity.java +++ b/app/src/main/java/com/utsmm/kbz/MainActivity.java @@ -58,15 +58,12 @@ import com.utsmm.kbz.ui.navigation.NaviMainFragment; import com.utsmm.kbz.ui.navigation.NaviSetupFragment; import com.utsmm.kbz.util.ecr.CoreUtils; import com.utsmm.kbz.util.tms.TMSUtil; - import java.util.Calendar; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; - import javax.inject.Inject; - import dagger.hilt.android.AndroidEntryPoint; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Observable; @@ -76,7 +73,6 @@ import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; import com.utsmyanmar.paylibs.utils.LogUtil; import com.utsmyanmar.paylibs.utils.params.Params; - /** * Main Activity handling application navigation and fragment interactions */ @@ -165,7 +161,7 @@ public class MainActivity extends AppCompatActivity implements // SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius"); // SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt"); SystemParamsOperation.getInstance().setTmsAddress("https://sirius-nest.utsmyanmar.com/api/v1"); - SystemParamsOperation.getInstance().setEReceiptAddress("https://receipt-nest.utsmyanmar.com/api/v1"); + SystemParamsOperation.getInstance().setEReceiptAddress("https://receipt-nest.utsmyanmar.com"); PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad(); byte[] encryptedPIK = SystemParamsOperation.getInstance().getPIK(); @@ -480,6 +476,11 @@ public class MainActivity extends AppCompatActivity implements boolean hasPOS = intent.getBooleanExtra("AUTO_SETTLEMENT", false); boolean hasQR = intent.getBooleanExtra("AUTO_QR_SETTLEMENT", false); + if (!hasPOS && !hasQR) return; + // Clear immediately so onResume won't re-trigger on next wake + intent.removeExtra("AUTO_SETTLEMENT"); + intent.removeExtra("AUTO_QR_SETTLEMENT"); + if (hasPOS) { PayDetail payDetail = (PayDetail) intent.getSerializableExtra("EXTRA_PAY_DETAIL"); if (payDetail != null) { From b5d3c601ce524b1c54c3df32822985c605ebb58d Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Mon, 15 Jun 2026 16:32:22 +0630 Subject: [PATCH 3/7] update for jcb response code --- .../utils/AuthorizationProcessUtil.java | 37 +++++++++++++++++-- .../core_utils/SystemParamsSettings.java | 2 +- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/AuthorizationProcessUtil.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/AuthorizationProcessUtil.java index fce4236..387a9f8 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/AuthorizationProcessUtil.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/AuthorizationProcessUtil.java @@ -55,7 +55,27 @@ public class AuthorizationProcessUtil { if(field39.getDataStr().equals("000")){ emvOnlineResult.setRejCode("00"); }else{ - emvOnlineResult.setRejCode(field39.getDataStr()); +// emvOnlineResult.setRejCode(field39.getDataStr()); + switch (field39.getDataStr()) { + case "103": + emvOnlineResult.setRejCode("01"); + break; + case "100": + emvOnlineResult.setRejCode("05"); + break; + case "117": + emvOnlineResult.setRejCode("55"); + break; + case "209": + emvOnlineResult.setRejCode("04"); + break; + case "104": + emvOnlineResult.setRejCode("62"); + break; + default: + emvOnlineResult.setRejCode(field39.getDataStr()); + break; + } } } @@ -165,15 +185,24 @@ public class AuthorizationProcessUtil { importOnlineProcessStatus(SdkResult.Success,emvOnlineResult); } else { - equals = TextUtils.equals("3035", valueF039) || TextUtils.equals("3531", valueF039); +// equals = TextUtils.equals("3035", valueF039) || TextUtils.equals("3531", valueF039); +// if (equals) { +// // Denial +// importOnlineProcessStatus(SdkResult.Fail,emvOnlineResult); +// } else { +// // Failed +// importOnlineProcessStatus(SdkResult.Fail,emvOnlineResult); +// } + equals = TextUtils.equals("3035", valueF039) || TextUtils.equals("3531", valueF039) || TextUtils.equals("313033", valueF039); if (equals) { // Denial - importOnlineProcessStatus(SdkResult.Fail,emvOnlineResult); + importOnlineProcessStatus(SdkResult.Success,emvOnlineResult); } else { // Failed - importOnlineProcessStatus(SdkResult.Fail,emvOnlineResult); + importOnlineProcessStatus(SdkResult.Success,emvOnlineResult); } } + LogUtil.d(TAG,"Field 39 value:"+valueF039); LogUtil.e(Constant.TAG, "status: " ); String scriptResult = ByteUtil.bytes2HexStr(outData); diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java index 3526404..fb5e440 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java @@ -45,7 +45,7 @@ public class SystemParamsSettings implements Serializable { // private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius"; // private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; private String tmsAddress = "https://sirius-nest.utsmyanmar.com/api/v1"; - private String ereceiptAddress = "https://receipt-nest.utsmyanmar.com/api/v1"; + private String ereceiptAddress = "https://receipt-nest.utsmyanmar.com"; private String binValues = ""; private String restrictedBinValues = ""; From e2f6b53fd26647b347c4787e978b1ed32540f717 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Mon, 15 Jun 2026 16:34:49 +0630 Subject: [PATCH 4/7] enable online pin --- .../java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3c56e1e..0d9352e 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java @@ -1438,7 +1438,7 @@ private void configJcbContactlessParameter() { // // } if (tag9F53 != null) { - tag9F53[0] &= 0x72; //enable online pin + tag9F53[0] &= 0x73; //enable online pin tag9F53[1] &= 0x7F; //disable issuer update emvHandler.setJcbContactlessTIP(tag9F53); Log.d("nexgo", "tag9F53->:" + ByteUtils.byteArray2HexString(tag9F53)); From 99adb4ffe3ee6b6539b503a0d4066074c34c5799 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Mon, 15 Jun 2026 22:28:59 +0630 Subject: [PATCH 5/7] removed previous manual disable logics --- .../ui/core_ui/ProcessingCardFragment.java | 84 ------------------- 1 file changed, 84 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java index 414b05a..6cab178 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java @@ -170,36 +170,6 @@ public class ProcessingCardFragment extends DataBindingFragment { transProcessViewModel.setTradeData(tradeData); pinPadViewModel.setTradeData(tradeData); - if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_VOID && SystemParamsOperation.getInstance().getPreAuthVoidManualEnabled() ) { - - sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel)); - routeId = R.id.action_processingCardFragment_to_errorFragment; - safeNavigateToRouteId(); - return; - - } - if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_SALE && SystemParamsOperation.getInstance().getPreAuthManualEnabled()) { - - sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel)); - routeId = R.id.action_processingCardFragment_to_errorFragment; - safeNavigateToRouteId(); - return; - - } - if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_COMPLETE && SystemParamsOperation.getInstance().getPreAuthCompleteManualEnabled()) { - - sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel)); - routeId = R.id.action_processingCardFragment_to_errorFragment; - safeNavigateToRouteId(); - return; - - } -// else if(sharedViewModel.transactionsType.getValue() == TransactionsType.REFUND) { -// sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_card_not_supported)); -// routeId = R.id.action_processingCardFragment_to_errorFragment; -// -// } - sharedViewModel.setCardDataExist(true); if(sharedViewModel.getTransMenu().getValue() != TransMenu.PRE_AUTH_FULL_VOID @@ -259,32 +229,6 @@ public class ProcessingCardFragment extends DataBindingFragment { transProcessViewModel.setTradeData(tradeData); } - if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_VOID && SystemParamsOperation.getInstance().getPreAuthVoidManualEnabled() ) { - - sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel)); - routeId = R.id.action_processingCardFragment_to_errorFragment; - - } - if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_SALE && SystemParamsOperation.getInstance().getPreAuthManualEnabled()) { - - sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel)); - routeId = R.id.action_processingCardFragment_to_errorFragment; - - - } - if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_COMPLETE && SystemParamsOperation.getInstance().getPreAuthCompleteManualEnabled()) { - - sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel)); - routeId = R.id.action_processingCardFragment_to_errorFragment; - - - } - - -// else if(sharedViewModel.transactionsType.getValue() == TransactionsType.REFUND) { -// routeId = R.id.action_processingCardFragment_to_errorFragment; -// } - sharedViewModel.setCardDataExist(true); if(sharedViewModel.getTransMenu().getValue() != TransMenu.PRE_AUTH_FULL_VOID && sharedViewModel.getAmountExist().getValue() != null && !sharedViewModel.getAmountExist().getValue()) { @@ -313,34 +257,6 @@ public class ProcessingCardFragment extends DataBindingFragment { prepareEmvTransaction(); - if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_VOID && SystemParamsOperation.getInstance().getPreAuthVoidManualEnabled() ) { - - sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel)); - routeId = R.id.action_processingCardFragment_to_errorFragment; - safeNavigateToRouteId(); - return; - - } - if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_SALE && SystemParamsOperation.getInstance().getPreAuthManualEnabled()) { - - sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel)); - routeId = R.id.action_processingCardFragment_to_errorFragment; - safeNavigateToRouteId(); - return; - - - } - if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_COMPLETE && SystemParamsOperation.getInstance().getPreAuthCompleteManualEnabled()) { - - sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel)); - routeId = R.id.action_processingCardFragment_to_errorFragment; - safeNavigateToRouteId(); - return; - - - } - - routeId = R.id.action_processingCardFragment_to_emvTransactionFragment; } else { From c729bce5a279d7f58b92613b407d2e9bb9ee6ebd Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Mon, 15 Jun 2026 22:29:23 +0630 Subject: [PATCH 6/7] hide manual entry btn --- app/src/main/res/layout/fragment_capture_card_screen.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/fragment_capture_card_screen.xml b/app/src/main/res/layout/fragment_capture_card_screen.xml index 6b25b95..eb347f6 100644 --- a/app/src/main/res/layout/fragment_capture_card_screen.xml +++ b/app/src/main/res/layout/fragment_capture_card_screen.xml @@ -290,6 +290,7 @@ Date: Mon, 15 Jun 2026 22:30:08 +0630 Subject: [PATCH 7/7] new logic in CardWaitingFragment --- .gitignore | 2 + .../kbz/ui/core_ui/CardWaitingFragment.java | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/.gitignore b/.gitignore index 98b1a3f..a9c4dff 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,5 @@ local.properties /.idea /app/prod/release nexdlkey-lib/build/ +/nexsdk-lib +/nexsdk-lib diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java index 5ae02ab..0d9f54f 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java @@ -129,12 +129,49 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind } } + private void updateManualEntryVisibility() { + TransactionsType type = sharedViewModel.transactionsType.getValue(); + boolean manualEntryStatus = SystemParamsOperation.getInstance().getManualEntryStatus(); + boolean preAuthManualEntryStatus = SystemParamsOperation.getInstance().getPreAuthManualEnabled(); + boolean preAuthCompManualEntryStatus = SystemParamsOperation.getInstance().getPreAuthCompleteManualEnabled(); + boolean preAuthCancelManualEntryStatus = SystemParamsOperation.getInstance().getPreAuthVoidManualEnabled(); + boolean show; + if (type == null) { + show = manualEntryStatus; + } else { + switch (type) { + case SALE: + case CASH_OUT: + case CASH_DEPOSIT: + case REFUND: + case VOID: + show = manualEntryStatus; + break; + case PRE_AUTH_SALE: + show = preAuthManualEntryStatus; + break; + case PRE_AUTH_VOID: + show = preAuthCancelManualEntryStatus; + break; + case PRE_AUTH_COMPLETE: + show = preAuthCompManualEntryStatus; + break; + default: + show = false; + break; + } + } + sharedViewModel.setManualEntryStatus(show); + } + @Override public void onResume() { super.onResume(); resetUI(); + updateManualEntryVisibility(); + setToolBarTitleWithBackIcon(getResourceString(R.string.txt_title_card_capture)); delayFunctionCall(()-> {