]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionItemHolder.java
NT: keep cursor position while setting account name text
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / new_transaction / NewTransactionItemHolder.java
index 5478da8acc9e286ffcf8e3906d6b25bfde7f89d2..c6232d167f7e303af4d93be2222354918727cc36 100644 (file)
@@ -492,8 +492,8 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                 head.setDate(String.valueOf(b.newTransactionDate.getText()));
 
                 // transaction description is required
-                if (!significantChange && TextUtils.isEmpty(head.getDescription()) !=
-                                          TextUtils.isEmpty(b.newTransactionDescription.getText()))
+                if (TextUtils.isEmpty(head.getDescription()) !=
+                    TextUtils.isEmpty(b.newTransactionDescription.getText()))
                     significantChange = true;
 
                 head.setDescription(String.valueOf(b.newTransactionDescription.getText()));
@@ -503,11 +503,15 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                 NewTransactionModel.TransactionAccount acc = item.toTransactionAccount();
 
                 // having account name is important
-                if (!significantChange && TextUtils.isEmpty(acc.getAccountName()) !=
-                                          TextUtils.isEmpty(b.accountRowAccName.getText()))
+                final Editable incomingAccountName = b.accountRowAccName.getText();
+                if (TextUtils.isEmpty(acc.getAccountName()) !=
+                    TextUtils.isEmpty(incomingAccountName))
                     significantChange = true;
 
-                acc.setAccountName(String.valueOf(b.accountRowAccName.getText()));
+                acc.setAccountName(String.valueOf(incomingAccountName));
+                final int accNameSelEnd = b.accountRowAccName.getSelectionEnd();
+                final int accNameSelStart = b.accountRowAccName.getSelectionStart();
+                acc.setAccountNameCursorPosition(accNameSelEnd);
 
                 acc.setComment(String.valueOf(b.comment.getText()));
 
@@ -604,21 +608,31 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
 
                     b.ntrData.setVisibility(View.VISIBLE);
                     b.ntrAccount.setVisibility(View.GONE);
-                    b.ntrPadding.setVisibility(View.GONE);
                     setEditable(true);
                 }
                 else if (item instanceof NewTransactionModel.TransactionAccount) {
                     NewTransactionModel.TransactionAccount acc = item.toTransactionAccount();
 
-                    // 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 incomingAccountName = acc.getAccountName();
+                    final String presentAccountName = String.valueOf(b.accountRowAccName.getText());
+                    if (!TextUtils.equals(incomingAccountName, presentAccountName)) {
+                        Logger.debug("bind",
+                                String.format("Setting account name from '%s' to '%s' (| @ %d)",
+                                        presentAccountName, incomingAccountName,
+                                        acc.getAccountNameCursorPosition()));
+                        // avoid triggering completion pop-up
+                        AccountAutocompleteAdapter a =
+                                (AccountAutocompleteAdapter) b.accountRowAccName.getAdapter();
+                        try {
+                            b.accountRowAccName.setAdapter(null);
+                            b.accountRowAccName.setText(incomingAccountName);
+                            if (b.accountRowAccName.hasFocus())
+                                b.accountRowAccName.setSelection(
+                                        acc.getAccountNameCursorPosition());
+                        }
+                        finally {
+                            b.accountRowAccName.setAdapter(a);
+                        }
                     }
 
                     final String amountHint = acc.getAmountHint();
@@ -641,7 +655,6 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
 
                     b.ntrData.setVisibility(View.GONE);
                     b.ntrAccount.setVisibility(View.VISIBLE);
-                    b.ntrPadding.setVisibility(View.GONE);
 
                     setEditable(true);
                 }