]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionFragment.java
rename patterns to templates
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / new_transaction / NewTransactionFragment.java
index 0b82c27ba5c87b7c2365cb1d144f5c5aaaf19a7a..e708c5fe3f2d7a37e88e684fdede50b52f57d3b3 100644 (file)
@@ -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,9 +90,9 @@ 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) {
@@ -110,13 +110,13 @@ public class NewTransactionFragment extends QRScanCapableFragment {
         if (Misc.emptyIsNull(text) == null)
             return;
 
-        LiveData<List<PatternHeader>> allPatterns = DB.get()
-                                                      .getPatternDAO()
-                                                      .getPatterns();
+        LiveData<List<TemplateHeader>> allPatterns = DB.get()
+                                                       .getPatternDAO()
+                                                       .getPatterns();
         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;
@@ -147,8 +147,8 @@ public class NewTransactionFragment extends QRScanCapableFragment {
                 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() {
@@ -156,48 +156,58 @@ public class NewTransactionFragment extends QRScanCapableFragment {
             }
             @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))
+               .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);
@@ -252,7 +262,7 @@ public class NewTransactionFragment extends QRScanCapableFragment {
           .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,6 +272,8 @@ public class NewTransactionFragment extends QRScanCapableFragment {
                                   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);