X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Fpatterns%2FPatternDetailsAdapter.java;h=4fd35a520173f9df5d5b14bca5401a240a85430d;hb=33a5b8bfc0c637efa1c2a66bd175381da93d4490;hp=5b6ab814c4930bd8103dfa276ce89a86b2cd0901;hpb=4d2ce14d526978de65113314cc50ab5ecf9c7d09;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/patterns/PatternDetailsAdapter.java b/app/src/main/java/net/ktnx/mobileledger/ui/patterns/PatternDetailsAdapter.java index 5b6ab814..4fd35a52 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/patterns/PatternDetailsAdapter.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/patterns/PatternDetailsAdapter.java @@ -17,7 +17,6 @@ package net.ktnx.mobileledger.ui.patterns; -import android.annotation.SuppressLint; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; @@ -37,13 +36,16 @@ import net.ktnx.mobileledger.db.PatternBase; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.PatternDetailsItem; import net.ktnx.mobileledger.ui.PatternDetailSourceSelectorFragment; -import net.ktnx.mobileledger.ui.QRScanAbleFragment; +import net.ktnx.mobileledger.ui.QRScanCapableFragment; import net.ktnx.mobileledger.utils.Logger; +import net.ktnx.mobileledger.utils.Misc; +import org.jetbrains.annotations.NotNull; + +import java.text.ParseException; import java.util.ArrayList; import java.util.List; import java.util.Locale; -import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -59,18 +61,20 @@ class PatternDetailsAdapter extends RecyclerView.Adapter= groupNumber) return m.group(groupNumber); else @@ -161,121 +168,105 @@ class PatternDetailsAdapter extends RecyclerView.Adapter selectHeaderDetailSource(v, header, HeaderDetail.DATE_YEAR)); - b.patternDetailsYearSource.setOnClickListener( - v -> selectHeaderDetailSource(v, header, HeaderDetail.DATE_YEAR)); - - if (header.hasLiteralDateMonth()) { - b.patternDetailsMonthSource.setText(R.string.pattern_details_source_literal); - b.patternDetailsDateMonth.setText(String.valueOf(header.getDateMonth())); - b.patternDetailsDateMonthLayout.setVisibility(View.VISIBLE); - } - else { - b.patternDetailsDateMonthLayout.setVisibility(View.GONE); - b.patternDetailsMonthSource.setText(String.format(Locale.US, "Group %d (%s)", - header.getDateMonthMatchGroup(), getMatchGroupText( - header.getDateMonthMatchGroup()))); - } - b.patternDetailsMonthSourceLabel.setOnClickListener( - v -> selectHeaderDetailSource(v, header, HeaderDetail.DATE_MONTH)); - b.patternDetailsMonthSource.setOnClickListener( - v -> selectHeaderDetailSource(v, header, HeaderDetail.DATE_MONTH)); - - if (header.hasLiteralDateDay()) { - b.patternDetailsDaySource.setText(R.string.pattern_details_source_literal); - b.patternDetailsDateDay.setText(String.valueOf(header.getDateDay())); - b.patternDetailsDateDayLayout.setVisibility(View.VISIBLE); - } - else { - b.patternDetailsDateDayLayout.setVisibility(View.GONE); - b.patternDetailsDaySource.setText(String.format(Locale.US, "Group %d (%s)", - header.getDateDayMatchGroup(), getMatchGroupText( - header.getDateDayMatchGroup()))); - } - b.patternDetailsDaySourceLabel.setOnClickListener( - v -> selectHeaderDetailSource(v, header, HeaderDetail.DATE_DAY)); - b.patternDetailsDaySource.setOnClickListener( - v -> selectHeaderDetailSource(v, header, HeaderDetail.DATE_DAY)); - - if (header.hasLiteralTransactionDescription()) { - b.patternTransactionDescriptionSource.setText( - R.string.pattern_details_source_literal); - b.transactionDescription.setText(header.getTransactionDescription()); - b.transactionDescriptionLayout.setVisibility(View.VISIBLE); - } - else { - b.transactionDescriptionLayout.setVisibility(View.GONE); - b.patternTransactionDescriptionSource.setText( - String.format(Locale.US, "Group %d (%s)", - header.getTransactionDescriptionMatchGroup(), getMatchGroupText( - header.getTransactionDescriptionMatchGroup()))); - - } - b.patternTransactionDescriptionSourceLabel.setOnClickListener( - v -> selectHeaderDetailSource(v, header, HeaderDetail.DESCRIPTION)); - b.patternTransactionDescriptionSource.setOnClickListener( - v -> selectHeaderDetailSource(v, header, HeaderDetail.DESCRIPTION)); - - if (header.hasLiteralTransactionComment()) { - b.patternTransactionCommentSource.setText( - R.string.pattern_details_source_literal); - b.transactionComment.setText(header.getTransactionComment()); - b.transactionCommentLayout.setVisibility(View.VISIBLE); - } - else { - b.transactionCommentLayout.setVisibility(View.GONE); - b.patternTransactionCommentSource.setText( - String.format(Locale.US, "Group %d (%s)", - header.getTransactionCommentMatchGroup(), - getMatchGroupText(header.getTransactionCommentMatchGroup()))); + Logger.debug(D_PATTERN_UI, "Binding to header " + header); + + b.patternName.setText(header.getName()); + b.pattern.setText(header.getPattern()); + b.testText.setText(header.getTestText()); + + if (header.hasLiteralDateYear()) { + b.patternDetailsYearSource.setText(R.string.pattern_details_source_literal); + final Integer dateYear = header.getDateYear(); + b.patternDetailsDateYear.setText( + (dateYear == null) ? null : String.valueOf(dateYear)); + b.patternDetailsDateYearLayout.setVisibility(View.VISIBLE); + } + else { + b.patternDetailsDateYearLayout.setVisibility(View.GONE); + b.patternDetailsYearSource.setText( + String.format(Locale.US, "Group %d (%s)", header.getDateYearMatchGroup(), + getMatchGroupText(header.getDateYearMatchGroup()))); + } + b.patternDetailsYearSourceLabel.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.DATE_YEAR)); + b.patternDetailsYearSource.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.DATE_YEAR)); + + if (header.hasLiteralDateMonth()) { + b.patternDetailsMonthSource.setText(R.string.pattern_details_source_literal); + final Integer dateMonth = header.getDateMonth(); + b.patternDetailsDateMonth.setText( + (dateMonth == null) ? null : String.valueOf(dateMonth)); + b.patternDetailsDateMonthLayout.setVisibility(View.VISIBLE); + } + else { + b.patternDetailsDateMonthLayout.setVisibility(View.GONE); + b.patternDetailsMonthSource.setText( + String.format(Locale.US, "Group %d (%s)", header.getDateMonthMatchGroup(), + getMatchGroupText(header.getDateMonthMatchGroup()))); + } + b.patternDetailsMonthSourceLabel.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.DATE_MONTH)); + b.patternDetailsMonthSource.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.DATE_MONTH)); + + if (header.hasLiteralDateDay()) { + b.patternDetailsDaySource.setText(R.string.pattern_details_source_literal); + final Integer dateDay = header.getDateDay(); + b.patternDetailsDateDay.setText((dateDay == null) ? null : String.valueOf(dateDay)); + b.patternDetailsDateDayLayout.setVisibility(View.VISIBLE); + } + else { + b.patternDetailsDateDayLayout.setVisibility(View.GONE); + b.patternDetailsDaySource.setText( + String.format(Locale.US, "Group %d (%s)", header.getDateDayMatchGroup(), + getMatchGroupText(header.getDateDayMatchGroup()))); + } + b.patternDetailsDaySourceLabel.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.DATE_DAY)); + b.patternDetailsDaySource.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.DATE_DAY)); - } - b.patternTransactionCommentSourceLabel.setOnClickListener( - v -> selectHeaderDetailSource(v, header, HeaderDetail.COMMENT)); - b.patternTransactionCommentSource.setOnClickListener( - v -> selectHeaderDetailSource(v, header, HeaderDetail.COMMENT)); - - b.patternDetailsHeadScanQrButton.setOnClickListener(this::scanTestQR); - - final Object prevTag = b.patternDetailsItemHead.getTag(); - if (!(prevTag instanceof PatternDetailsItem)) { - Logger.debug(D_PATTERN_UI, "Hooked text change listeners"); - - b.patternName.addTextChangedListener(patternNameWatcher); - b.pattern.addTextChangedListener(patternWatcher); - b.testText.addTextChangedListener(testTextWatcher); - b.transactionDescription.addTextChangedListener(transactionDescriptionWatcher); - b.transactionComment.addTextChangedListener(transactionCommentWatcher); - } + if (header.hasLiteralTransactionDescription()) { + b.patternTransactionDescriptionSource.setText( + R.string.pattern_details_source_literal); + b.transactionDescription.setText(header.getTransactionDescription()); + b.transactionDescriptionLayout.setVisibility(View.VISIBLE); + } + else { + b.transactionDescriptionLayout.setVisibility(View.GONE); + b.patternTransactionDescriptionSource.setText( + String.format(Locale.US, "Group %d (%s)", + header.getTransactionDescriptionMatchGroup(), + getMatchGroupText(header.getTransactionDescriptionMatchGroup()))); - b.patternDetailsItemHead.setTag(item); } - finally { - finishUpdate(); + b.patternTransactionDescriptionSourceLabel.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.DESCRIPTION)); + b.patternTransactionDescriptionSource.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.DESCRIPTION)); + + if (header.hasLiteralTransactionComment()) { + b.patternTransactionCommentSource.setText(R.string.pattern_details_source_literal); + b.transactionComment.setText(header.getTransactionComment()); + b.transactionCommentLayout.setVisibility(View.VISIBLE); } + else { + b.transactionCommentLayout.setVisibility(View.GONE); + b.patternTransactionCommentSource.setText(String.format(Locale.US, "Group %d (%s)", + header.getTransactionCommentMatchGroup(), + getMatchGroupText(header.getTransactionCommentMatchGroup()))); + + } + b.patternTransactionCommentSourceLabel.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.COMMENT)); + b.patternTransactionCommentSource.setOnClickListener( + v -> selectHeaderDetailSource(v, HeaderDetail.COMMENT)); + + b.patternDetailsHeadScanQrButton.setOnClickListener(this::scanTestQR); + } private void scanTestQR(View view) { - QRScanAbleFragment.triggerQRScan(); + QRScanCapableFragment.triggerQRScan(); } } @@ -454,10 +431,85 @@ class PatternDetailsAdapter extends RecyclerView.Adapter { + if (hasFocus) + return; + + PatternDetailsItem.AccountRow accRow = getItem(); + if (!accRow.hasLiteralAmount()) + return; + Float amt = accRow.getAmount(); + if (amt == null) + return; + + b.patternDetailsAccountAmount.setText(Data.formatNumber(amt)); + }); + + b.negateAmountSwitch.setOnCheckedChangeListener( + (buttonView, isChecked) -> getItem().setNegateAmount(isChecked)); } @Override void bind(PatternDetailsItem item) { @@ -492,30 +544,40 @@ class PatternDetailsAdapter extends RecyclerView.Adapter selectAccountRowDetailSource(v, accRow, AccDetail.ACCOUNT)); + v -> selectAccountRowDetailSource(v, AccDetail.ACCOUNT)); b.patternDetailsAccountNameSource.setOnClickListener( - v -> selectAccountRowDetailSource(v, accRow, AccDetail.ACCOUNT)); + v -> selectAccountRowDetailSource(v, AccDetail.ACCOUNT)); b.patternAccountCommentSourceLabel.setOnClickListener( - v -> selectAccountRowDetailSource(v, accRow, AccDetail.COMMENT)); + v -> selectAccountRowDetailSource(v, AccDetail.COMMENT)); b.patternDetailsAccountCommentSource.setOnClickListener( - v -> selectAccountRowDetailSource(v, accRow, AccDetail.COMMENT)); + v -> selectAccountRowDetailSource(v, AccDetail.COMMENT)); b.patternAccountAmountSourceLabel.setOnClickListener( - v -> selectAccountRowDetailSource(v, accRow, AccDetail.AMOUNT)); + v -> selectAccountRowDetailSource(v, AccDetail.AMOUNT)); b.patternDetailsAccountAmountSource.setOnClickListener( - v -> selectAccountRowDetailSource(v, accRow, AccDetail.AMOUNT)); + v -> selectAccountRowDetailSource(v, AccDetail.AMOUNT)); + } + private @NotNull PatternDetailsItem.AccountRow getItem() { + return differ.getCurrentList() + .get(getAdapterPosition()) + .asAccountRowItem(); } - private void selectAccountRowDetailSource(View v, PatternDetailsItem.AccountRow accRow, - AccDetail detail) { + private void selectAccountRowDetailSource(View v, AccDetail detail) { + PatternDetailsItem.AccountRow accRow = getItem(); final PatternDetailsItem.Header header = getHeader(); Logger.debug(D_PATTERN_UI, "header is " + header); PatternDetailSourceSelectorFragment sel =