]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsAdapter.java
self-explanatory amount reversal switch
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / templates / TemplateDetailsAdapter.java
index 46bdba55280bdc182a7b4a0d6be761a5f6a0dd51..23260e008f515d8a55f0105b196c485c72c96d3c 100644 (file)
@@ -196,6 +196,7 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
                 }
             };
             b.templateName.addTextChangedListener(templateNameWatcher);
+
             TextWatcher patternWatcher = new TextWatcher() {
                 @Override
                 public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@@ -207,9 +208,12 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
                     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) {}
@@ -221,9 +225,12 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
                     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) {
@@ -327,6 +334,10 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
             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());
@@ -341,7 +352,7 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
             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(
@@ -359,7 +370,7 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
             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(
@@ -377,7 +388,7 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
             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(
@@ -393,10 +404,9 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
             }
             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(
@@ -412,7 +422,7 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
             }
             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())));
 
@@ -424,6 +434,28 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
 
             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();
@@ -517,11 +549,24 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
                 b.templateDetailsAccountAmount.setText(Data.formatNumber(amt));
             });
 
-            b.negateAmountSwitch.setOnCheckedChangeListener(
-                    (buttonView, isChecked) -> getItem().setNegateAmount(isChecked));
+            b.negateAmountSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
+                getItem().setNegateAmount(isChecked);
+                b.templateDetailsNegateAmountText.setText(
+                        isChecked ? R.string.template_account_change_amount_sign
+                                  : R.string.template_account_keep_amount_sign);
+            });
+            final View.OnClickListener negLabelClickListener = (view) -> {
+                b.negateAmountSwitch.toggle();
+            };
+            b.templateDetailsNegateAmountLabel.setOnClickListener(negLabelClickListener);
+            b.templateDetailsNegateAmountText.setOnClickListener(negLabelClickListener);
         }
         @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);
@@ -532,7 +577,7 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
             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())));
             }
 
@@ -545,8 +590,7 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
             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())));
             }
 
@@ -561,11 +605,14 @@ class TemplateDetailsAdapter extends RecyclerView.Adapter<TemplateDetailsAdapter
             }
             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);
                 b.negateAmountSwitch.setChecked(accRow.isNegateAmount());
+                b.templateDetailsNegateAmountText.setText(
+                        accRow.isNegateAmount() ? R.string.template_account_change_amount_sign
+                                                : R.string.template_account_keep_amount_sign);
             }
 
             b.templateAccountNameSourceLabel.setOnClickListener(