From e03c883a9c3ea5b7c32db8bbd51bbf5829f9b71d Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sat, 29 Nov 2025 11:59:31 +0100 Subject: [PATCH] Swap currency and balance fields to reduce chance of accidental conversions This swaps the currency and balance fields to reduce the risk of users entering a decimal value (1,23) first and having to changed to 1 due to the default currency (Points) having no decimals. The changes in the LoyaltyCardEditActivity are purely cosmetic, just a swap of function order to more closely stick to the order in the XML layout file --- .../card_locker/LoyaltyCardEditActivity.java | 68 +++++++++---------- .../res/layout/loyalty_card_edit_activity.xml | 36 +++++----- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 99d2c04bf..2d57dd5a9 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -123,8 +123,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements ChipGroup groupsChips; AutoCompleteTextView validFromField; AutoCompleteTextView expiryField; - EditText balanceField; AutoCompleteTextView balanceCurrencyField; + EditText balanceField; TextView cardIdFieldView; AutoCompleteTextView barcodeIdField; AutoCompleteTextView barcodeTypeField; @@ -148,9 +148,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements boolean onRestoring = false; AlertDialog confirmExitDialog = null; - boolean validBalance = true; HashMap currencies = new HashMap<>(); HashMap currencySymbols = new HashMap<>(); + boolean validBalance = true; ActivityResultLauncher mPhotoTakerLauncher; ActivityResultLauncher mPhotoPickerLauncher; @@ -193,14 +193,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements viewModel.setHasChanged(true); } - protected void setLoyaltyCardBalance(@NonNull BigDecimal balance) { - viewModel.getLoyaltyCard().setBalance(balance); + protected void setLoyaltyCardBalanceType(@Nullable Currency balanceType) { + viewModel.getLoyaltyCard().setBalanceType(balanceType); viewModel.setHasChanged(true); } - protected void setLoyaltyCardBalanceType(@Nullable Currency balanceType) { - viewModel.getLoyaltyCard().setBalanceType(balanceType); + protected void setLoyaltyCardBalance(@NonNull BigDecimal balance) { + viewModel.getLoyaltyCard().setBalance(balance); viewModel.setHasChanged(true); } @@ -329,8 +329,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements groupsChips = binding.groupChips; validFromField = binding.validFromField; expiryField = binding.expiryField; - balanceField = binding.balanceField; balanceCurrencyField = binding.balanceCurrencyField; + balanceField = binding.balanceField; cardIdFieldView = binding.cardIdView; barcodeIdField = binding.barcodeIdField; barcodeTypeField = binding.barcodeTypeField; @@ -373,33 +373,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements setMaterialDatePickerResultListener(); - balanceField.setOnFocusChangeListener((v, hasFocus) -> { - if (!hasFocus && !onResuming && !onRestoring) { - if (balanceField.getText().toString().isEmpty()) { - setLoyaltyCardBalance(BigDecimal.valueOf(0)); - } - - balanceField.setText(Utils.formatBalanceWithoutCurrencySymbol(viewModel.getLoyaltyCard().balance, viewModel.getLoyaltyCard().balanceType)); - } - }); - - balanceField.addTextChangedListener(new SimpleTextWatcher() { - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - if (onResuming || onRestoring) return; - try { - BigDecimal balance = Utils.parseBalance(s.toString(), viewModel.getLoyaltyCard().balanceType); - setLoyaltyCardBalance(balance); - balanceField.setError(null); - validBalance = true; - } catch (ParseException e) { - e.printStackTrace(); - balanceField.setError(getString(R.string.balanceParsingFailed)); - validBalance = false; - } - } - }); - balanceCurrencyField.addTextChangedListener(new SimpleTextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { @@ -452,6 +425,33 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements } }); + balanceField.setOnFocusChangeListener((v, hasFocus) -> { + if (!hasFocus && !onResuming && !onRestoring) { + if (balanceField.getText().toString().isEmpty()) { + setLoyaltyCardBalance(BigDecimal.valueOf(0)); + } + + balanceField.setText(Utils.formatBalanceWithoutCurrencySymbol(viewModel.getLoyaltyCard().balance, viewModel.getLoyaltyCard().balanceType)); + } + }); + + balanceField.addTextChangedListener(new SimpleTextWatcher() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (onResuming || onRestoring) return; + try { + BigDecimal balance = Utils.parseBalance(s.toString(), viewModel.getLoyaltyCard().balanceType); + setLoyaltyCardBalance(balance); + balanceField.setError(null); + validBalance = true; + } catch (ParseException e) { + e.printStackTrace(); + balanceField.setError(getString(R.string.balanceParsingFailed)); + validBalance = false; + } + } + }); + cardIdFieldView.addTextChangedListener(new SimpleTextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { diff --git a/app/src/main/res/layout/loyalty_card_edit_activity.xml b/app/src/main/res/layout/loyalty_card_edit_activity.xml index d310cc5e2..83861d226 100644 --- a/app/src/main/res/layout/loyalty_card_edit_activity.xml +++ b/app/src/main/res/layout/loyalty_card_edit_activity.xml @@ -276,6 +276,24 @@ android:paddingTop="@dimen/inputPadding" android:orientation="horizontal"> + + + + + + + - - - - - - -