X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Fnew_transaction%2FNewTransactionFragment.java;h=5edf252d72858ceccacef8663fe388e897a7810f;hb=b946450e2333ba9730631ddaacb1e7fdb7f32032;hp=cdd06c09dc7eabcf938281cb655d50f9ef426020;hpb=b2f45c881924d9a172241700e682f1051128bd59;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionFragment.java b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionFragment.java index cdd06c09..5edf252d 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionFragment.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionFragment.java @@ -49,15 +49,15 @@ import com.google.android.material.snackbar.Snackbar; 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; @@ -90,15 +90,15 @@ public class NewTransactionFragment extends QRScanCapableFragment { 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) { + private void alertNoTemplateMatch(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() @@ -110,13 +110,14 @@ public class NewTransactionFragment extends QRScanCapableFragment { if (Misc.emptyIsNull(text) == null) return; - LiveData> allPatterns = DB.get() - .getPatternDAO() - .getPatterns(); - allPatterns.observe(getViewLifecycleOwner(), patternHeaders -> { - ArrayList matchingPatterns = new ArrayList<>(); + LiveData> allTemplates = DB.get() + .getTemplateDAO() + .getTemplates(); + allTemplates.observe(getViewLifecycleOwner(), templateHeaders -> { + ArrayList matchingFallbackTemplates = new ArrayList<>(); + ArrayList matchingTemplates = new ArrayList<>(); - for (PatternHeader ph : patternHeaders) { + for (TemplateHeader ph : templateHeaders) { String patternSource = ph.getRegularExpression(); if (Misc.emptyIsNull(patternSource) == null) continue; @@ -129,7 +130,10 @@ public class NewTransactionFragment extends QRScanCapableFragment { Logger.debug("pattern", String.format("Pattern '%s' [%s] matches '%s'", ph.getName(), patternSource, text)); - matchingPatterns.add(ph); + if (ph.isFallback()) + matchingFallbackTemplates.add(ph); + else + matchingTemplates.add(ph); } catch (ParcelFormatException e) { // ignored @@ -139,65 +143,79 @@ public class NewTransactionFragment extends QRScanCapableFragment { } } - if (matchingPatterns.isEmpty()) - alertNoPatternMatch(text); - else if (matchingPatterns.size() == 1) - applyPattern(matchingPatterns.get(0), text); + if (matchingTemplates.isEmpty()) + matchingTemplates = matchingFallbackTemplates; + + if (matchingTemplates.isEmpty()) + alertNoTemplateMatch(text); + else if (matchingTemplates.size() == 1) + applyTemplate(matchingTemplates.get(0), text); else - choosePattern(matchingPatterns, text); + chooseTemplate(matchingTemplates, text); }); } - private void choosePattern(ArrayList matchingPatterns, String matchedText) { - final String patternNameColumn = getString(R.string.pattern_name); + private void chooseTemplate(ArrayList matchingTemplates, String matchedText) { + final String templateNameColumn = "name"; AbstractCursor cursor = new AbstractCursor() { @Override public int getCount() { - return matchingPatterns.size(); + return matchingTemplates.size(); } @Override public String[] getColumnNames() { - return new String[]{patternNameColumn}; + return new String[]{"_id", templateNameColumn}; } @Override public String getString(int column) { - return matchingPatterns.get(getPosition()) - .getName(); + if (column == 0) + return String.valueOf(getPosition()); + return matchingTemplates.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, templateNameColumn, (dialog, which) -> { + applyTemplate(matchingTemplates.get(which), matchedText); + dialog.dismiss(); + }) .create() .show(); } - private void applyPattern(PatternHeader patternHeader, String text) { + private void applyTemplate(TemplateHeader patternHeader, String text) { Pattern pattern = Pattern.compile(patternHeader.getRegularExpression()); Matcher m = pattern.matcher(text); @@ -247,12 +265,12 @@ public class NewTransactionFragment extends QRScanCapableFragment { listAdapter.notifyItemChanged(0); DB.get() - .getPatternDAO() - .getPatternWithAccounts(patternHeader.getId()) + .getTemplateDAO() + .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(), @@ -262,7 +280,7 @@ public class NewTransactionFragment extends QRScanCapableFragment { acc.getAccountComment()); Float amount = extractFloatFromMatches(m, acc.getAmountMatchGroup(), acc.getAmount()); - if (amount != null && acc.getNegateAmount()) + if (amount != null && acc.getNegateAmount() != null && acc.getNegateAmount()) amount = -amount; if (accountsInInitialState) {