import net.ktnx.mobileledger.model.Data;
import net.ktnx.mobileledger.model.PatternDetailsItem;
import net.ktnx.mobileledger.ui.PatternDetailSourceSelectorFragment;
-import net.ktnx.mobileledger.ui.QRScanAbleFragment;
+import net.ktnx.mobileledger.ui.QRScanCapableFragment;
import net.ktnx.mobileledger.utils.Logger;
import net.ktnx.mobileledger.utils.Misc;
import org.jetbrains.annotations.NotNull;
+import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
if (header.hasLiteralDateYear()) {
b.patternDetailsYearSource.setText(R.string.pattern_details_source_literal);
- b.patternDetailsDateYear.setText(String.valueOf(header.getDateYear()));
+ final Integer dateYear = header.getDateYear();
+ b.patternDetailsDateYear.setText(
+ (dateYear == null) ? null : String.valueOf(dateYear));
b.patternDetailsDateYearLayout.setVisibility(View.VISIBLE);
}
else {
if (header.hasLiteralDateMonth()) {
b.patternDetailsMonthSource.setText(R.string.pattern_details_source_literal);
- b.patternDetailsDateMonth.setText(String.valueOf(header.getDateMonth()));
+ final Integer dateMonth = header.getDateMonth();
+ b.patternDetailsDateMonth.setText(
+ (dateMonth == null) ? null : String.valueOf(dateMonth));
b.patternDetailsDateMonthLayout.setVisibility(View.VISIBLE);
}
else {
if (header.hasLiteralDateDay()) {
b.patternDetailsDaySource.setText(R.string.pattern_details_source_literal);
- b.patternDetailsDateDay.setText(String.valueOf(header.getDateDay()));
+ final Integer dateDay = header.getDateDay();
+ b.patternDetailsDateDay.setText((dateDay == null) ? null : String.valueOf(dateDay));
b.patternDetailsDateDayLayout.setVisibility(View.VISIBLE);
}
else {
}
private void scanTestQR(View view) {
- QRScanAbleFragment.triggerQRScan();
+ QRScanCapableFragment.triggerQRScan();
}
}
}
};
b.patternDetailsAccountComment.addTextChangedListener(accountCommentWatcher);
+
+ b.patternDetailsAccountAmount.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+ }
+ @Override
+ public void afterTextChanged(Editable s) {
+ PatternDetailsItem.AccountRow accRow = getItem();
+
+ String str = String.valueOf(s);
+ if (Misc.emptyIsNull(str) == null) {
+ accRow.setAmount(null);
+ }
+ else {
+ try {
+ final float amount = Data.parseNumber(str);
+ accRow.setAmount(amount);
+ b.patternDetailsAccountAmountLayout.setError(null);
+
+ Logger.debug(D_PATTERN_UI, String.format(Locale.US,
+ "Storing changed account amount %s [%4.2f]; accRow=%s", s,
+ amount, accRow));
+ }
+ catch (NumberFormatException | ParseException e) {
+ b.patternDetailsAccountAmountLayout.setError("!");
+ }
+ }
+ }
+ });
+ b.patternDetailsAccountAmount.setOnFocusChangeListener((v, hasFocus) -> {
+ if (hasFocus)
+ return;
+
+ PatternDetailsItem.AccountRow accRow = getItem();
+ if (!accRow.hasLiteralAmount())
+ return;
+ Float amt = accRow.getAmount();
+ if (amt == null)
+ return;
+
+ b.patternDetailsAccountAmount.setText(Data.formatNumber(amt));
+ });
+
+ b.negateAmountSwitch.setOnCheckedChangeListener(
+ (buttonView, isChecked) -> getItem().setNegateAmount(isChecked));
}
@Override
void bind(PatternDetailsItem item) {
b.patternDetailsAccountAmountSource.setText(
R.string.pattern_details_source_literal);
b.patternDetailsAccountAmount.setVisibility(View.VISIBLE);
- b.patternDetailsAccountAmount.setText(Data.formatNumber(accRow.getAmount()));
+ Float amt = accRow.getAmount();
+ b.patternDetailsAccountAmount.setText((amt == null) ? null : String.format(
+ Data.locale.getValue(), "%,4.2f", (accRow.getAmount())));
+ b.negateAmountSwitch.setVisibility(View.GONE);
}
else {
b.patternDetailsAccountAmountSource.setText(
String.format(Locale.US, "Group %d (%s)", accRow.getAmountMatchGroup(),
getMatchGroupText(accRow.getAmountMatchGroup())));
b.patternDetailsAccountAmountLayout.setVisibility(View.GONE);
+ b.negateAmountSwitch.setVisibility(View.VISIBLE);
+ b.negateAmountSwitch.setChecked(accRow.isNegateAmount());
}
b.patternAccountNameSourceLabel.setOnClickListener(