try {
String input = String.valueOf(b.accountRowAccAmounts.getText());
input = input.replace(decimalSeparator, decimalDot);
- b.accountRowAccAmounts.setText(
- String.format("%4.2f", Float.parseFloat(input)));
+ final String newText = String.format("%4.2f", Float.parseFloat(input));
+ if (!newText.equals(input))
+ b.accountRowAccAmounts.setText(newText);
}
catch (NumberFormatException ex) {
// ignored
b.currencyButton.setOnClickListener(v -> {
CurrencySelectorFragment cpf = new CurrencySelectorFragment();
cpf.showPositionAndPadding();
- cpf.setOnCurrencySelectedListener(
- c -> adapter.setItemCurrency(getAdapterPosition(), c.getName()));
+ cpf.setOnCurrencySelectedListener(c -> adapter.setItemCurrency(getAdapterPosition(),
+ (c == null) ? null : c.getName()));
cpf.show(activity.getSupportFragmentManager(), "currency-selector");
});
if (showCurrency) {
b.currency.setVisibility(View.VISIBLE);
b.currencyButton.setVisibility(View.VISIBLE);
- b.currency.setText(mProfile.getDefaultCommodity());
+ setCurrencyString(mProfile.getDefaultCommodity());
}
else {
b.currency.setVisibility(View.GONE);
b.currencyButton.setVisibility(View.GONE);
- b.currency.setText(null);
+ setCurrencyString(null);
}
});
private void setCurrencyString(String currency) {
@ColorInt int textColor = b.dummyText.getTextColors()
.getDefaultColor();
- if ((currency == null) || currency.isEmpty()) {
+ if (TextUtils.isEmpty(currency)) {
b.currency.setText(R.string.currency_symbol);
int alpha = (textColor >> 24) & 0xff;
alpha = alpha * 3 / 4;
return false;
}
+ if (getAdapterPosition() < 0) {
+ // probably the row was swiped out
+ Logger.debug("new-trans", "Ignoring request to suncData(): adapter position negative");
+ return false;
+ }
+
NewTransactionModel.Item item = getItem();
syncingData = true;
NewTransactionModel.TransactionAccount acc = item.toTransactionAccount();
// having account name is important
+ final Editable incomingAccountName = b.accountRowAccName.getText();
if (TextUtils.isEmpty(acc.getAccountName()) !=
- TextUtils.isEmpty(b.accountRowAccName.getText()))
+ TextUtils.isEmpty(incomingAccountName))
significantChange = true;
- acc.setAccountName(String.valueOf(b.accountRowAccName.getText()));
+ acc.setAccountName(String.valueOf(incomingAccountName));
+ final int accNameSelEnd = b.accountRowAccName.getSelectionEnd();
+ final int accNameSelStart = b.accountRowAccName.getSelectionStart();
+ acc.setAccountNameCursorPosition(accNameSelEnd);
acc.setComment(String.valueOf(b.comment.getText()));
b.ntrData.setVisibility(View.VISIBLE);
b.ntrAccount.setVisibility(View.GONE);
- b.ntrPadding.setVisibility(View.GONE);
setEditable(true);
}
else if (item instanceof NewTransactionModel.TransactionAccount) {
NewTransactionModel.TransactionAccount acc = item.toTransactionAccount();
- // avoid triggering completion pop-up
- AccountAutocompleteAdapter a =
- (AccountAutocompleteAdapter) b.accountRowAccName.getAdapter();
- try {
- b.accountRowAccName.setAdapter(null);
- b.accountRowAccName.setText(acc.getAccountName());
- }
- finally {
- b.accountRowAccName.setAdapter(a);
+ final String incomingAccountName = acc.getAccountName();
+ final String presentAccountName = String.valueOf(b.accountRowAccName.getText());
+ if (!TextUtils.equals(incomingAccountName, presentAccountName)) {
+ Logger.debug("bind",
+ String.format("Setting account name from '%s' to '%s' (| @ %d)",
+ presentAccountName, incomingAccountName,
+ acc.getAccountNameCursorPosition()));
+ // avoid triggering completion pop-up
+ AccountAutocompleteAdapter a =
+ (AccountAutocompleteAdapter) b.accountRowAccName.getAdapter();
+ try {
+ b.accountRowAccName.setAdapter(null);
+ b.accountRowAccName.setText(incomingAccountName);
+ b.accountRowAccName.setSelection(acc.getAccountNameCursorPosition());
+ }
+ finally {
+ b.accountRowAccName.setAdapter(a);
+ }
}
final String amountHint = acc.getAmountHint();
b.ntrData.setVisibility(View.GONE);
b.ntrAccount.setVisibility(View.VISIBLE);
- b.ntrPadding.setVisibility(View.GONE);
setEditable(true);
}