]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionHeaderItemHolder.java
rename an event handler using the onXXX style
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / new_transaction / NewTransactionHeaderItemHolder.java
index 90c4718fc01c13582edb18febd4f4036db806ec0..cac93b6b63326513e354e893abb65ce2ec75a099 100644 (file)
@@ -24,18 +24,20 @@ import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.view.View;
 import android.widget.EditText;
-import android.widget.SimpleCursorAdapter;
+import android.widget.ListAdapter;
 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.MLDB;
 import net.ktnx.mobileledger.utils.Misc;
 import net.ktnx.mobileledger.utils.SimpleDate;
 
@@ -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);
                     }
@@ -96,8 +98,12 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder
         NewTransactionActivity activity = (NewTransactionActivity) b.getRoot()
                                                                     .getContext();
 
-        MLDB.hookAutocompletionAdapter(activity, b.newTransactionDescription,
-                MLDB.DESCRIPTION_HISTORY_TABLE, "description", false, activity, mProfile);
+        b.newTransactionDescription.setAdapter(
+                new TransactionDescriptionAutocompleteAdapter(activity));
+        b.newTransactionDescription.setOnItemClickListener(
+                (parent, view, position, id) -> activity.onDescriptionSelected(
+                        parent.getItemAtPosition(position)
+                              .toString()));
 
         decimalSeparator = "";
         Data.locale.observe(activity, locale -> decimalSeparator = String.valueOf(
@@ -148,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();
@@ -244,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;
@@ -255,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()));
 
@@ -278,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()
@@ -299,23 +313,27 @@ class NewTransactionHeaderItemHolder extends NewTransactionItemViewHolder
                 b.newTransactionDate.setText(head.getFormattedDate());
 
                 // avoid triggering completion pop-up
-                SimpleCursorAdapter a =
-                        (SimpleCursorAdapter) b.newTransactionDescription.getAdapter();
+                ListAdapter a = b.newTransactionDescription.getAdapter();
                 try {
                     b.newTransactionDescription.setAdapter(null);
                     b.newTransactionDescription.setText(head.getDescription());
                 }
                 finally {
-                    b.newTransactionDescription.setAdapter(a);
+                    b.newTransactionDescription.setAdapter(
+                            (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;
@@ -334,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());