]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionItemHolder.java
fix IME hints for amount inputs
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / new_transaction / NewTransactionItemHolder.java
index a69a65af40a50cdd95e5a8f0f7da3b5f605c1d59..e4afc812aa0e35ae7dfd83d86f83ec64e76443b6 100644 (file)
@@ -26,6 +26,7 @@ import android.view.Gravity;
 import android.view.View;
 import android.view.inputmethod.EditorInfo;
 import android.widget.EditText;
+import android.widget.SimpleCursorAdapter;
 import android.widget.TextView;
 
 import androidx.annotation.ColorInt;
@@ -209,7 +210,7 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                          }
                          ignoreFocusChanges = true;
                          try {
-                             if (((focusInfo == null) ||
+                             if (((focusInfo == null) || (focusInfo.element == null) ||
                                   focusInfo.position != getAdapterPosition()) ||
                                  itemView.hasFocus())
                                  return;
@@ -263,16 +264,6 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                              ignoreFocusChanges = false;
                          }
                      });
-        adapter.model.getAccountCount()
-                     .observe(activity, count -> {
-                         final int adapterPosition = getAdapterPosition();
-                         final int layoutPosition = getLayoutPosition();
-
-                         if (adapterPosition == count)
-                             b.accountRowAccAmounts.setImeOptions(EditorInfo.IME_ACTION_DONE);
-                         else
-                             b.accountRowAccAmounts.setImeOptions(EditorInfo.IME_ACTION_NEXT);
-                     });
 
         Data.currencyGap.observe(activity,
                 hasGap -> updateCurrencyPositionAndPadding(Data.currencySymbolPosition.getValue(),
@@ -563,7 +554,17 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                 if (item instanceof NewTransactionModel.TransactionHead) {
                     NewTransactionModel.TransactionHead head = item.toTransactionHead();
                     b.newTransactionDate.setText(head.getFormattedDate());
-                    b.newTransactionDescription.setText(head.getDescription());
+
+                    // avoid triggering completion pop-up
+                    SimpleCursorAdapter a =
+                            (SimpleCursorAdapter) b.newTransactionDescription.getAdapter();
+                    try {
+                        b.newTransactionDescription.setAdapter(null);
+                        b.newTransactionDescription.setText(head.getDescription());
+                    }
+                    finally {
+                        b.newTransactionDescription.setAdapter(a);
+                    }
 
                     b.transactionComment.setText(head.getComment());
                     //styleComment(b.transactionComment, head.getComment());
@@ -576,7 +577,16 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                 else if (item instanceof NewTransactionModel.TransactionAccount) {
                     NewTransactionModel.TransactionAccount acc = item.toTransactionAccount();
 
-                    b.accountRowAccName.setText(acc.getAccountName());
+                    // avoid triggering completion pop-up
+                    AccountAutocompleteAdapter a =
+                            (AccountAutocompleteAdapter) b.accountRowAccName.getAdapter();
+                    try {
+                        b.accountRowAccName.setAdapter(null);
+                        b.accountRowAccName.setText(acc.getAccountName());
+                    }
+                    finally {
+                        b.accountRowAccName.setAdapter(a);
+                    }
 
                     final String amountHint = acc.getAmountHint();
                     if (amountHint == null) {
@@ -586,6 +596,9 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                         b.accountRowAccAmounts.setHint(amountHint);
                     }
 
+                    b.accountRowAccAmounts.setImeOptions(
+                            acc.isLast() ? EditorInfo.IME_ACTION_DONE : EditorInfo.IME_ACTION_NEXT);
+
                     setCurrencyString(acc.getCurrency());
                     b.accountRowAccAmounts.setText(
                             acc.isAmountSet() ? String.format("%4.2f", acc.getAmount()) : null);
@@ -596,14 +609,9 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                     b.ntrData.setVisibility(View.GONE);
                     b.ntrAccount.setVisibility(View.VISIBLE);
                     b.ntrPadding.setVisibility(View.GONE);
+
                     setEditable(true);
                 }
-                else if (item instanceof NewTransactionModel.BottomFiller) {
-                    b.ntrData.setVisibility(View.GONE);
-                    b.ntrAccount.setVisibility(View.GONE);
-                    b.ntrPadding.setVisibility(View.VISIBLE);
-                    setEditable(false);
-                }
                 else {
                     throw new RuntimeException("Don't know how to handle " + item);
                 }