fixed sending multiple transaction if there has reversal

This commit is contained in:
kizzy 2026-03-26 17:23:23 +07:00
parent 01043dbbca
commit 890b1c55a8

View File

@ -6,6 +6,7 @@ import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.navigation.NavController; import androidx.navigation.NavController;
import androidx.navigation.NavDestination; import androidx.navigation.NavDestination;
@ -129,43 +130,52 @@ public class ProcessingFragment extends DataBindingFragment {
} }
private void checkReversal() { private void checkReversal() {
sharedViewModel.getLastReversalTransaction().observe(getViewLifecycleOwner(), new Observer<PayDetail>() { observeOnce(sharedViewModel.getLastReversalTransaction(), payDetail -> {
@Override if (payDetail != null) {
public void onChanged(PayDetail payDetail) {
if(payDetail != null) {
TradeData tradeData = new TradeData(); TradeData tradeData = new TradeData();
tradeData.setPayDetail(payDetail); tradeData.setPayDetail(payDetail);
LogUtil.d(TAG,"Sending Reversal!"); LogUtil.d(TAG, "Sending Reversal!");
sharedViewModel.loadingMsg(getResourceString(R.string.txt_sending_reversal)); sharedViewModel.loadingMsg(getResourceString(R.string.txt_sending_reversal));
ReversalAction.getInstance().setData(tradeData).enqueue().startReversal(new ReversalListener() { ReversalAction.getInstance().setData(tradeData).enqueue().startReversal(new ReversalListener() {
@Override @Override
public void onSuccessReversal() { public void onSuccessReversal() {
LogUtil.d(TAG,"Reversal Success!"); LogUtil.d(TAG, "Reversal Success!");
payDetail.setIsNeedReversal(false); payDetail.setIsNeedReversal(false);
sharedViewModel.updatePayDetail(payDetail); sharedViewModel.updatePayDetail(payDetail);
startTransactionProcess(); delayFunctionCall(()->startTransactionProcess());
} }
@Override @Override
public void onNetworkFail(String msg) { public void onNetworkFail(String msg) {
LogUtil.d(TAG,"Reversal Network Fail!"+msg); LogUtil.d(TAG, "Reversal Network Fail!" + msg);
startTransactionProcess(); startTransactionProcess();
} }
@Override @Override
public void onFailReversal(String msg) { public void onFailReversal(String msg) {
LogUtil.d(TAG,"Reversal Fail!"+msg); LogUtil.d(TAG, "Reversal Fail!" + msg);
startTransactionProcess(); startTransactionProcess();
} }
}); });
} else { } else {
LogUtil.d(TAG,"No reversal found!");
startTransactionProcess(); startTransactionProcess();
} }
}
}); });
} }
private <T> void observeOnce(LiveData<T> liveData, Observer<T> observer) {
liveData.observe(getViewLifecycleOwner(), new Observer<T>() {
@Override
public void onChanged(T t) {
liveData.removeObserver(this);
observer.onChanged(t);
}
});
}
private boolean isEmvTrans() { private boolean isEmvTrans() {
return sharedViewModel.isEmv.getValue() != null && sharedViewModel.isEmv.getValue(); return sharedViewModel.isEmv.getValue() != null && sharedViewModel.isEmv.getValue();
} }