diff --git a/pos_android_app/src/main/java/com/dspread/pos/ui/pinpad/PinpadFragment.java b/pos_android_app/src/main/java/com/dspread/pos/ui/pinpad/PinpadFragment.java index e459d73..96cb1be 100644 --- a/pos_android_app/src/main/java/com/dspread/pos/ui/pinpad/PinpadFragment.java +++ b/pos_android_app/src/main/java/com/dspread/pos/ui/pinpad/PinpadFragment.java @@ -16,12 +16,10 @@ import com.dspread.pos_android_app.databinding.FragmentPinpadBinding; import me.goldze.mvvmhabit.utils.ToastUtils; public class PinpadFragment extends BaseFragment implements TitleProviderListener { - private static final String TAG = "PinpadFragment"; private boolean canShow = true; private CountDownTimer showTimer; private String amountToPass; - private CountDownTimer autoNavigationTimer; @Override public int initContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -48,8 +46,7 @@ public class PinpadFragment extends BaseFragment navigateToPayment()); + // Observe the payment start event (signal-based) + viewModel.paymentStartEvent.observe(this, amount -> { + Log.d(TAG, "Payment start signal received with amount: " + amount); + navigateToPayment(amount); + }); } @Override @@ -126,21 +108,6 @@ public class PinpadFragment extends BaseFragment currencyCode = new ObservableField<>("RUB"); public ObservableField amount = new ObservableField<>("10.00"); public ObservableField countdown = new ObservableField<>("10"); + // Add this SingleLiveEvent for signal-based navigation + public SingleLiveEvent paymentStartEvent = new SingleLiveEvent<>(); + public PinpadViewModel(@NonNull Application application) { super(application); } @@ -33,4 +42,56 @@ public class PinpadViewModel extends BaseAppViewModel { return "0.00"; } } + + @Override + protected void onPaymentRedirected(String jsonString) { + Log.d(TAG, "onPaymentRedirected - processing redirect payment"); + Log.d(TAG, "jsonString" + jsonString); + + try { + JSONObject results = new JSONObject(jsonString); + String status = results.optString("status", ""); + + switch (status) { + case "signal": + Log.d(TAG, "Signal Redirect Payment received"); + + // Get the amount from the signal (or use the current amount) + String signalAmount = results.optString("amount", null); + if (signalAmount != null) { + amount.set(formatAmount(signalAmount)); + } + + // Trigger navigation via the event + String amountToPass = results.optString("rawAmount", getRawAmount()); + paymentStartEvent.postValue(amountToPass); + break; + + default: + Log.w(TAG, "Unknown JSON type: " + status); + } + } catch (JSONException e) { + Log.e(TAG, "Error parsing JSON", e); + } + } + + // Helper method to get raw amount (without formatting) + private String getRawAmount() { + try { + // Convert formatted amount back to raw cents + String formatted = amount.get(); + if (formatted != null) { + double amountDouble = Double.parseDouble(formatted); + return String.valueOf((int)(amountDouble * 100)); + } + } catch (NumberFormatException e) { + Log.e(TAG, "Error converting amount back to raw", e); + } + return "1000"; // default fallback + } + + // Method to manually trigger payment (if needed) + public void triggerPayment() { + paymentStartEvent.postValue(getRawAmount()); + } } \ No newline at end of file diff --git a/pos_android_app/src/main/res/layout/fragment_pinpad.xml b/pos_android_app/src/main/res/layout/fragment_pinpad.xml index 38525d2..32d19d8 100644 --- a/pos_android_app/src/main/res/layout/fragment_pinpad.xml +++ b/pos_android_app/src/main/res/layout/fragment_pinpad.xml @@ -17,7 +17,7 @@ @@ -32,17 +32,16 @@ + android:layout_marginBottom="5dp"/> + android:text="@{viewModel.currencyCode}" + android:textSize="18sp" + android:textStyle="bold"/> \ No newline at end of file