import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
+import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import androidx.annotation.ColorInt;
class NewTransactionItemHolder extends RecyclerView.ViewHolder
implements DatePickerFragment.DatePickedListener, DescriptionSelectedCallback {
- private final String decimalDot;
+ private final String decimalDot = ".";
private final MobileLedgerProfile mProfile;
private final NewTransactionRowBinding b;
private final NewTransactionItemsAdapter mAdapter;
mProfile = Data.getProfile();
- View.OnFocusChangeListener focusMonitor = (v, hasFocus) -> {
+ @SuppressLint("DefaultLocale") View.OnFocusChangeListener focusMonitor = (v, hasFocus) -> {
final int id = v.getId();
if (hasFocus) {
boolean wasSyncing = syncingData;
syncingData = wasSyncing;
}
}
+ else { // lost focus
+ if (id == R.id.account_row_acc_amounts) {
+ try {
+ String input = String.valueOf(b.accountRowAccAmounts.getText());
+ input = input.replace(decimalSeparator, decimalDot);
+ b.accountRowAccAmounts.setText(
+ String.format("%4.2f", Float.parseFloat(input)));
+ }
+ catch (NumberFormatException ex) {
+ // ignored
+ }
+ }
+ }
if (id == R.id.comment) {
commentFocusChanged(b.comment, hasFocus);
DecimalFormatSymbols.getInstance(locale)
.getMonetaryDecimalSeparator()));
- decimalDot = ".";
-
final TextWatcher tw = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
ignoreFocusChanges = true;
try {
- if (((focusInfo == null) ||
+ if (((focusInfo == null) || (focusInfo.element == null) ||
focusInfo.position != getAdapterPosition()) ||
itemView.hasFocus())
return;
ignoreFocusChanges = false;
}
});
- adapter.model.getAccountCount()
- .observe(activity, count -> {
- final int adapterPosition = getAdapterPosition();
- final int layoutPosition = getLayoutPosition();
-
- if (adapterPosition == count)
- b.accountRowAccAmounts.setImeOptions(EditorInfo.IME_ACTION_DONE);
- else
- b.accountRowAccAmounts.setImeOptions(EditorInfo.IME_ACTION_NEXT);
- });
Data.currencyGap.observe(activity,
hasGap -> updateCurrencyPositionAndPadding(Data.currencySymbolPosition.getValue(),
if (item instanceof NewTransactionModel.TransactionHead) {
NewTransactionModel.TransactionHead head = item.toTransactionHead();
b.newTransactionDate.setText(head.getFormattedDate());
- b.newTransactionDescription.setText(head.getDescription());
+
+ // avoid triggering completion pop-up
+ SimpleCursorAdapter a =
+ (SimpleCursorAdapter) b.newTransactionDescription.getAdapter();
+ try {
+ b.newTransactionDescription.setAdapter(null);
+ b.newTransactionDescription.setText(head.getDescription());
+ }
+ finally {
+ b.newTransactionDescription.setAdapter(a);
+ }
b.transactionComment.setText(head.getComment());
//styleComment(b.transactionComment, head.getComment());
else if (item instanceof NewTransactionModel.TransactionAccount) {
NewTransactionModel.TransactionAccount acc = item.toTransactionAccount();
- b.accountRowAccName.setText(acc.getAccountName());
+ // 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 amountHint = acc.getAmountHint();
if (amountHint == null) {
b.accountRowAccAmounts.setHint(amountHint);
}
+ b.accountRowAccAmounts.setImeOptions(
+ acc.isLast() ? EditorInfo.IME_ACTION_DONE : EditorInfo.IME_ACTION_NEXT);
+
setCurrencyString(acc.getCurrency());
b.accountRowAccAmounts.setText(
acc.isAmountSet() ? String.format("%4.2f", acc.getAmount()) : null);
b.ntrData.setVisibility(View.GONE);
b.ntrAccount.setVisibility(View.VISIBLE);
b.ntrPadding.setVisibility(View.GONE);
+
setEditable(true);
}
else {