import net.ktnx.mobileledger.R;
import net.ktnx.mobileledger.db.DB;
-import net.ktnx.mobileledger.db.PatternAccount;
-import net.ktnx.mobileledger.db.PatternHeader;
+import net.ktnx.mobileledger.db.TemplateAccount;
+import net.ktnx.mobileledger.db.TemplateHeader;
import net.ktnx.mobileledger.json.API;
import net.ktnx.mobileledger.model.Data;
import net.ktnx.mobileledger.model.LedgerTransaction;
import net.ktnx.mobileledger.model.LedgerTransactionAccount;
import net.ktnx.mobileledger.model.MobileLedgerProfile;
import net.ktnx.mobileledger.ui.QRScanCapableFragment;
-import net.ktnx.mobileledger.ui.patterns.PatternsActivity;
+import net.ktnx.mobileledger.ui.templates.TemplatesActivity;
import net.ktnx.mobileledger.utils.Logger;
import net.ktnx.mobileledger.utils.Misc;
import net.ktnx.mobileledger.utils.SimpleDate;
setHasOptionsMenu(true);
}
private void startNewPatternActivity(String scanned) {
- Intent intent = new Intent(requireContext(), PatternsActivity.class);
+ Intent intent = new Intent(requireContext(), TemplatesActivity.class);
Bundle args = new Bundle();
- args.putString(PatternsActivity.ARG_ADD_PATTERN, scanned);
+ args.putString(TemplatesActivity.ARG_ADD_TEMPLATE, scanned);
requireContext().startActivity(intent, args);
}
private void alertNoPatternMatch(String scanned) {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext());
builder.setCancelable(true)
- .setMessage(R.string.no_pattern_matches)
+ .setMessage(R.string.no_template_matches)
.setPositiveButton(R.string.add_button,
(dialog, which) -> startNewPatternActivity(scanned))
.create()
if (Misc.emptyIsNull(text) == null)
return;
- LiveData<List<PatternHeader>> allPatterns = DB.get()
- .getPatternDAO()
- .getPatterns();
+ LiveData<List<TemplateHeader>> allPatterns = DB.get()
+ .getPatternDAO()
+ .getTemplates();
allPatterns.observe(getViewLifecycleOwner(), patternHeaders -> {
- ArrayList<PatternHeader> matchingPatterns = new ArrayList<>();
+ ArrayList<TemplateHeader> matchingPatterns = new ArrayList<>();
- for (PatternHeader ph : patternHeaders) {
+ for (TemplateHeader ph : patternHeaders) {
String patternSource = ph.getRegularExpression();
if (Misc.emptyIsNull(patternSource) == null)
continue;
choosePattern(matchingPatterns, text);
});
}
- private void choosePattern(ArrayList<PatternHeader> matchingPatterns, String matchedText) {
- final String patternNameColumn = getString(R.string.pattern_name);
+ private void choosePattern(ArrayList<TemplateHeader> matchingPatterns, String matchedText) {
+ final String patternNameColumn = "name";
AbstractCursor cursor = new AbstractCursor() {
@Override
public int getCount() {
}
@Override
public String[] getColumnNames() {
- return new String[]{patternNameColumn};
+ return new String[]{"_id", patternNameColumn};
}
@Override
public String getString(int column) {
+ if (column == 0)
+ return String.valueOf(getPosition());
return matchingPatterns.get(getPosition())
.getName();
}
@Override
public short getShort(int column) {
+ if (column == 0)
+ return (short) getPosition();
return -1;
}
@Override
public int getInt(int column) {
- return -1;
+ return getShort(column);
}
@Override
public long getLong(int column) {
- return -1;
+ return getShort(column);
}
@Override
public float getFloat(int column) {
- return -1;
+ return getShort(column);
}
@Override
public double getDouble(int column) {
- return -1;
+ return getShort(column);
}
@Override
public boolean isNull(int column) {
return false;
}
+ @Override
+ public int getColumnCount() {
+ return 2;
+ }
};
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext());
builder.setCancelable(true)
- .setTitle(R.string.choose_pattern_to_apply)
- .setSingleChoiceItems(cursor, -1, patternNameColumn,
- (dialog, which) -> applyPattern(matchingPatterns.get(which), matchedText))
+ .setTitle(R.string.choose_template_to_apply)
+ .setIcon(R.drawable.ic_baseline_auto_graph_24)
+ .setSingleChoiceItems(cursor, -1, patternNameColumn, (dialog, which) -> {
+ applyPattern(matchingPatterns.get(which), matchedText);
+ dialog.dismiss();
+ })
.create()
.show();
}
- private void applyPattern(PatternHeader patternHeader, String text) {
+ private void applyPattern(TemplateHeader patternHeader, String text) {
Pattern pattern = Pattern.compile(patternHeader.getRegularExpression());
Matcher m = pattern.matcher(text);
DB.get()
.getPatternDAO()
- .getPatternWithAccounts(patternHeader.getId())
+ .getTemplateWithAccounts(patternHeader.getId())
.observe(getViewLifecycleOwner(), entry -> {
int rowIndex = 0;
final boolean accountsInInitialState = viewModel.accountsInInitialState();
- for (PatternAccount acc : entry.accounts) {
+ for (TemplateAccount acc : entry.accounts) {
rowIndex++;
String accountName = extractStringFromMatches(m, acc.getAccountNameMatchGroup(),
acc.getAccountComment());
Float amount =
extractFloatFromMatches(m, acc.getAmountMatchGroup(), acc.getAmount());
+ if (amount != null && acc.getNegateAmount() != null && acc.getNegateAmount())
+ amount = -amount;
if (accountsInInitialState) {
NewTransactionModel.Item item = viewModel.getItem(rowIndex);