From 890b1c55a8aeff567363a793bdc400a7923187cd Mon Sep 17 00:00:00 2001 From: kizzy Date: Thu, 26 Mar 2026 17:23:23 +0700 Subject: [PATCH] fixed sending multiple transaction if there has reversal --- .../kbz/ui/core_ui/ProcessingFragment.java | 70 +++++++++++-------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java index 1b9cec3..18b2c6a 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java @@ -6,6 +6,7 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; import androidx.navigation.NavController; import androidx.navigation.NavDestination; @@ -129,43 +130,52 @@ public class ProcessingFragment extends DataBindingFragment { } private void checkReversal() { - sharedViewModel.getLastReversalTransaction().observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(PayDetail payDetail) { - if(payDetail != null) { - TradeData tradeData = new TradeData(); - tradeData.setPayDetail(payDetail); - LogUtil.d(TAG,"Sending Reversal!"); - sharedViewModel.loadingMsg(getResourceString(R.string.txt_sending_reversal)); + observeOnce(sharedViewModel.getLastReversalTransaction(), payDetail -> { + if (payDetail != null) { + TradeData tradeData = new TradeData(); + tradeData.setPayDetail(payDetail); + LogUtil.d(TAG, "Sending Reversal!"); + sharedViewModel.loadingMsg(getResourceString(R.string.txt_sending_reversal)); - ReversalAction.getInstance().setData(tradeData).enqueue().startReversal(new ReversalListener() { - @Override - public void onSuccessReversal() { - LogUtil.d(TAG,"Reversal Success!"); - payDetail.setIsNeedReversal(false); - sharedViewModel.updatePayDetail(payDetail); - startTransactionProcess(); - } + ReversalAction.getInstance().setData(tradeData).enqueue().startReversal(new ReversalListener() { + @Override + public void onSuccessReversal() { + LogUtil.d(TAG, "Reversal Success!"); + payDetail.setIsNeedReversal(false); + sharedViewModel.updatePayDetail(payDetail); + delayFunctionCall(()->startTransactionProcess()); + } - @Override - public void onNetworkFail(String msg) { - LogUtil.d(TAG,"Reversal Network Fail!"+msg); - startTransactionProcess(); - } + @Override + public void onNetworkFail(String msg) { + LogUtil.d(TAG, "Reversal Network Fail!" + msg); + startTransactionProcess(); + } - @Override - public void onFailReversal(String msg) { - LogUtil.d(TAG,"Reversal Fail!"+msg); - startTransactionProcess(); - } - }); - } else { - startTransactionProcess(); - } + @Override + public void onFailReversal(String msg) { + LogUtil.d(TAG, "Reversal Fail!" + msg); + startTransactionProcess(); + } + }); + } else { + LogUtil.d(TAG,"No reversal found!"); + startTransactionProcess(); } }); } + private void observeOnce(LiveData liveData, Observer observer) { + liveData.observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(T t) { + liveData.removeObserver(this); + observer.onChanged(t); + } + }); + } + + private boolean isEmvTrans() { return sharedViewModel.isEmv.getValue() != null && sharedViewModel.isEmv.getValue(); }