import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import net.ktnx.mobileledger.R;
import net.ktnx.mobileledger.databinding.TemplateDetailsAccountBinding;
import net.ktnx.mobileledger.databinding.TemplateDetailsHeaderBinding;
+import net.ktnx.mobileledger.db.AccountAutocompleteAdapter;
import net.ktnx.mobileledger.db.TemplateBase;
import net.ktnx.mobileledger.model.Data;
import net.ktnx.mobileledger.model.TemplateDetailsItem;
}
};
b.templateName.addTextChangedListener(templateNameWatcher);
+
TextWatcher patternWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
Logger.debug(D_TEMPLATE_UI,
"Storing changed pattern " + s + "; header=" + header);
header.setPattern(String.valueOf(s));
+
+ checkPatternError(header);
}
};
b.pattern.addTextChangedListener(patternWatcher);
+
TextWatcher testTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
Logger.debug(D_TEMPLATE_UI,
"Storing changed test text " + s + "; header=" + header);
header.setTestText(String.valueOf(s));
+
+ checkPatternError(header);
}
};
b.testText.addTextChangedListener(testTextWatcher);
+
TextWatcher transactionDescriptionWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
TemplateDetailsItem.Header header = item.asHeaderItem();
Logger.debug(D_TEMPLATE_UI, "Binding to header " + header);
+ String groupNoText = b.getRoot()
+ .getResources()
+ .getString(R.string.template_item_match_group_source);
+
b.templateName.setText(header.getName());
b.pattern.setText(header.getPattern());
b.testText.setText(header.getTestText());
else {
b.templateDetailsDateYearLayout.setVisibility(View.GONE);
b.templateDetailsYearSource.setText(
- String.format(Locale.US, "Group %d (%s)", header.getDateYearMatchGroup(),
+ String.format(Locale.US, groupNoText, header.getDateYearMatchGroup(),
getMatchGroupText(header.getDateYearMatchGroup())));
}
b.templateDetailsYearSourceLabel.setOnClickListener(
else {
b.templateDetailsDateMonthLayout.setVisibility(View.GONE);
b.templateDetailsMonthSource.setText(
- String.format(Locale.US, "Group %d (%s)", header.getDateMonthMatchGroup(),
+ String.format(Locale.US, groupNoText, header.getDateMonthMatchGroup(),
getMatchGroupText(header.getDateMonthMatchGroup())));
}
b.templateDetailsMonthSourceLabel.setOnClickListener(
else {
b.templateDetailsDateDayLayout.setVisibility(View.GONE);
b.templateDetailsDaySource.setText(
- String.format(Locale.US, "Group %d (%s)", header.getDateDayMatchGroup(),
+ String.format(Locale.US, groupNoText, header.getDateDayMatchGroup(),
getMatchGroupText(header.getDateDayMatchGroup())));
}
b.templateDetailsDaySourceLabel.setOnClickListener(
}
else {
b.transactionDescriptionLayout.setVisibility(View.GONE);
- b.templateTransactionDescriptionSource.setText(
- String.format(Locale.US, "Group %d (%s)",
- header.getTransactionDescriptionMatchGroup(),
- getMatchGroupText(header.getTransactionDescriptionMatchGroup())));
+ b.templateTransactionDescriptionSource.setText(String.format(Locale.US, groupNoText,
+ header.getTransactionDescriptionMatchGroup(),
+ getMatchGroupText(header.getTransactionDescriptionMatchGroup())));
}
b.templateTransactionDescriptionSourceLabel.setOnClickListener(
}
else {
b.transactionCommentLayout.setVisibility(View.GONE);
- b.templateTransactionCommentSource.setText(String.format(Locale.US, "Group %d (%s)",
+ b.templateTransactionCommentSource.setText(String.format(Locale.US, groupNoText,
header.getTransactionCommentMatchGroup(),
getMatchGroupText(header.getTransactionCommentMatchGroup())));
b.templateDetailsHeadScanQrButton.setOnClickListener(this::scanTestQR);
+ checkPatternError(header);
+ }
+ private void checkPatternError(TemplateDetailsItem.Header item) {
+ if (item.getPatternError() != null) {
+ b.patternLayout.setError(item.getPatternError());
+ b.patternHintTitle.setVisibility(View.GONE);
+ b.patternHintText.setVisibility(View.GONE);
+ }
+ else {
+ b.patternLayout.setError(null);
+ if (item.testMatch() != null) {
+ b.patternHintText.setText(item.testMatch());
+ b.patternHintTitle.setVisibility(View.VISIBLE);
+ b.patternHintText.setVisibility(View.VISIBLE);
+ }
+ else {
+ b.patternLayout.setError(null);
+ b.patternHintTitle.setVisibility(View.GONE);
+ b.patternHintText.setVisibility(View.GONE);
+ }
+ }
+
}
private void scanTestQR(View view) {
QRScanCapableFragment.triggerQRScan();
}
};
b.templateDetailsAccountName.addTextChangedListener(accountNameWatcher);
+ b.templateDetailsAccountName.setAdapter(new AccountAutocompleteAdapter(b.getRoot()
+ .getContext()));
+ b.templateDetailsAccountName.setOnItemClickListener(
+ (parent, view, position, id) -> b.templateDetailsAccountName.setText(
+ ((TextView) view).getText()));
TextWatcher accountCommentWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
}
@Override
void bind(TemplateDetailsItem item) {
+ String groupNoText = b.getRoot()
+ .getResources()
+ .getString(R.string.template_item_match_group_source);
+
TemplateDetailsItem.AccountRow accRow = item.asAccountRowItem();
if (accRow.hasLiteralAccountName()) {
b.templateDetailsAccountNameLayout.setVisibility(View.VISIBLE);
else {
b.templateDetailsAccountNameLayout.setVisibility(View.GONE);
b.templateDetailsAccountNameSource.setText(
- String.format(Locale.US, "Group %d (%s)", accRow.getAccountNameMatchGroup(),
+ String.format(Locale.US, groupNoText, accRow.getAccountNameMatchGroup(),
getMatchGroupText(accRow.getAccountNameMatchGroup())));
}
else {
b.templateDetailsAccountCommentLayout.setVisibility(View.GONE);
b.templateDetailsAccountCommentSource.setText(
- String.format(Locale.US, "Group %d (%s)",
- accRow.getAccountCommentMatchGroup(),
+ String.format(Locale.US, groupNoText, accRow.getAccountCommentMatchGroup(),
getMatchGroupText(accRow.getAccountCommentMatchGroup())));
}
}
else {
b.templateDetailsAccountAmountSource.setText(
- String.format(Locale.US, "Group %d (%s)", accRow.getAmountMatchGroup(),
+ String.format(Locale.US, groupNoText, accRow.getAmountMatchGroup(),
getMatchGroupText(accRow.getAmountMatchGroup())));
b.templateDetailsAccountAmountLayout.setVisibility(View.GONE);
b.negateAmountSwitch.setVisibility(View.VISIBLE);