X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Fnew_transaction%2FNewTransactionHeaderItemHolder.java;h=cac93b6b63326513e354e893abb65ce2ec75a099;hb=311cb018cc9cd6be1f189e2fc674a517ff4d47fc;hp=81afa05dc69fbe938c22ee4229f0fe8e592d43bd;hpb=9ebf60c045fdf01d6f8d1243061e69232c2841ea;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionHeaderItemHolder.java b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionHeaderItemHolder.java index 81afa05d..cac93b6b 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionHeaderItemHolder.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionHeaderItemHolder.java @@ -29,11 +29,13 @@ import android.widget.TextView; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.databinding.NewTransactionHeaderRowBinding; import net.ktnx.mobileledger.db.TransactionDescriptionAutocompleteAdapter; import net.ktnx.mobileledger.model.Data; +import net.ktnx.mobileledger.model.FutureDates; import net.ktnx.mobileledger.ui.DatePickerFragment; import net.ktnx.mobileledger.utils.Logger; import net.ktnx.mobileledger.utils.Misc; @@ -52,7 +54,7 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder //TODO multiple amounts with different currencies per posting? NewTransactionHeaderItemHolder(@NonNull NewTransactionHeaderRowBinding b, NewTransactionItemsAdapter adapter) { - super(b.getRoot(), adapter); + super(b.getRoot()); this.b = b; b.newTransactionDescription.setNextFocusForwardId(View.NO_ID); @@ -70,7 +72,7 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder boolean wasSyncing = syncingData; syncingData = true; try { - final int pos = getAdapterPosition(); + final int pos = getBindingAdapterPosition(); if (id == R.id.transaction_comment) { adapter.noteFocusIsOnTransactionComment(pos); } @@ -99,7 +101,7 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder b.newTransactionDescription.setAdapter( new TransactionDescriptionAutocompleteAdapter(activity)); b.newTransactionDescription.setOnItemClickListener( - (parent, view, position, id) -> activity.descriptionSelected( + (parent, view, position, id) -> activity.onDescriptionSelected( parent.getItemAtPosition(position) .toString())); @@ -152,10 +154,14 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder ignoreFocusChanges = true; try { if (((focusInfo == null) || (focusInfo.element == null) || - focusInfo.position != getAdapterPosition())) + focusInfo.position != getBindingAdapterPosition())) return; - NewTransactionModel.Item head = getItem().toTransactionHead(); + final NewTransactionModel.Item item = getItem(); + if (item == null) + return; + + NewTransactionModel.Item head = item.toTransactionHead(); // bad idea - double pop-up, and not really necessary. // the user can tap the input to get the calendar //if (!tvDate.hasFocus()) tvDate.requestFocus(); @@ -248,7 +254,7 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder return false; } - if (getAdapterPosition() < 0) { + if (getBindingAdapterPosition() == RecyclerView.NO_POSITION) { // probably the row was swiped out Logger.debug("new-trans", "Ignoring request to suncData(): adapter position negative"); return false; @@ -259,7 +265,11 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder syncingData = true; try { - NewTransactionModel.TransactionHead head = getItem().toTransactionHead(); + final NewTransactionModel.Item item = getItem(); + if (item == null) + return false; + + NewTransactionModel.TransactionHead head = item.toTransactionHead(); head.setDate(String.valueOf(b.newTransactionDate.getText())); @@ -282,7 +292,7 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder } private void pickTransactionDate() { DatePickerFragment picker = new DatePickerFragment(); - picker.setFutureDates(mProfile.getFutureDates()); + picker.setFutureDates(FutureDates.valueOf(mProfile.getFutureDates())); picker.setOnDatePickedListener(this); picker.setCurrentDateFromText(b.newTransactionDate.getText()); picker.show(((NewTransactionActivity) b.getRoot() @@ -313,13 +323,17 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder (TransactionDescriptionAutocompleteAdapter) a); } - b.transactionComment.setText(head.getComment()); - //styleComment(b.transactionComment, head.getComment()); + final String comment = head.getComment(); + b.transactionComment.setText(comment); + styleComment(b.transactionComment, comment); // would hide or make it visible setEditable(true); - applyFocus(mAdapter.model.getFocusInfo() - .getValue()); + NewTransactionItemsAdapter adapter = + (NewTransactionItemsAdapter) getBindingAdapter(); + if (adapter != null) + applyFocus(adapter.model.getFocusInfo() + .getValue()); } finally { syncingData = false; @@ -338,7 +352,11 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder } @Override public void onDatePicked(int year, int month, int day) { - final NewTransactionModel.TransactionHead head = getItem().toTransactionHead(); + final NewTransactionModel.Item item = getItem(); + if (item == null) + return; + + final NewTransactionModel.TransactionHead head = item.toTransactionHead(); head.setDate(new SimpleDate(year, month + 1, day)); b.newTransactionDate.setText(head.getFormattedDate());