]> git.ktnx.net Git - mobile-ledger.git/commitdiff
new transaction: replace bottom filler with scroll FAB behaviour
authorDamyan Ivanov <dam+mobileledger@ktnx.net>
Sat, 27 Feb 2021 20:27:30 +0000 (22:27 +0200)
committerDamyan Ivanov <dam+mobileledger@ktnx.net>
Mon, 1 Mar 2021 06:00:42 +0000 (06:00 +0000)
code becomes more consistent when the last item in the list is not a
special case

and FAB UI behaviour also becomes consistent with the rest of the app

app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionItemHolder.java
app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionItemsAdapter.java
app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionModel.java
app/src/main/res/layout/activity_new_transaction.xml

index a69a65af40a50cdd95e5a8f0f7da3b5f605c1d59..470467d403387c836d9cbd532ac5bb1f69a73488 100644 (file)
@@ -598,12 +598,6 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder
                     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);
                 }
index f8686dcfa72c4690320ebd962d4c19ca951e489a..005abbb3e45d6b01ad07bb7891f03f799be1286f 100644 (file)
@@ -52,7 +52,8 @@ class NewTransactionItemsAdapter extends RecyclerView.Adapter<NewTransactionItem
                                                   @NonNull NewTransactionModel.Item newItem) {
 
 //                    Logger.debug("new-trans",
-//                            String.format("comparing contents of {%s} and {%s}", oldItem.toString(),
+//                            String.format("comparing contents of {%s} and {%s}", oldItem
+//                            .toString(),
 //                                    newItem.toString()));
                     return oldItem.equalContents(newItem);
                 }
@@ -79,11 +80,9 @@ class NewTransactionItemsAdapter extends RecyclerView.Adapter<NewTransactionItem
                                        @NonNull RecyclerView.ViewHolder target) {
                 final int adapterPosition = target.getAdapterPosition();
 
-                // first and last items are immovable
+                // first item is immovable
                 if (adapterPosition == 0)
                     return false;
-                if (adapterPosition == adapter.getItemCount() - 1)
-                    return false;
 
                 return super.canDropOver(recyclerView, current, target);
             }
@@ -93,7 +92,7 @@ class NewTransactionItemsAdapter extends RecyclerView.Adapter<NewTransactionItem
                 int flags = makeFlag(ItemTouchHelper.ACTION_STATE_IDLE, ItemTouchHelper.END);
                 // the top (date and description) and the bottom (padding) items are always there
                 final int adapterPosition = viewHolder.getAdapterPosition();
-                if ((adapterPosition > 0) && (adapterPosition < adapter.getItemCount() - 1)) {
+                if (adapterPosition > 0) {
                     flags |= makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
                             ItemTouchHelper.UP | ItemTouchHelper.DOWN) |
                              makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE,
index c84c26d20bf21b532ce6a4e982e688f8841b5a18..060046c43ce4f87fb3b7fb87885356b0e9b501ef 100644 (file)
@@ -57,12 +57,13 @@ import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.MatchResult;
 
-enum ItemType {generalData, transactionRow, bottomFiller}
+enum ItemType {generalData, transactionRow}
 
 enum FocusedElement {Account, Comment, Amount, Description, TransactionComment}
 
 
 public class NewTransactionModel extends ViewModel {
+    private static final int MIN_ITEMS = 3;
     private final MutableLiveData<Boolean> showCurrency = new MutableLiveData<>(false);
     private final MutableLiveData<Boolean> isSubmittable = new InertMutableLiveData<>(false);
     private final MutableLiveData<Boolean> showComments = new MutableLiveData<>(true);
@@ -155,7 +156,6 @@ public class NewTransactionModel extends ViewModel {
         list.add(new TransactionHead(""));
         list.add(new TransactionAccount(""));
         list.add(new TransactionAccount(""));
-        list.add(new BottomFiller());
         items.setValue(list);
     }
     boolean accountsInInitialState() {
@@ -225,7 +225,7 @@ public class NewTransactionModel extends ViewModel {
 
         newItems.add(head);
 
-        for (int i = 1; i < present.size() - 1; i++) {
+        for (int i = 1; i < present.size(); i++) {
             final TransactionAccount row = present.get(i)
                                                   .toTransactionAccount();
             if (!row.isEmpty())
@@ -260,8 +260,6 @@ public class NewTransactionModel extends ViewModel {
                   newItems.add(accRow);
               }
 
-              newItems.add(new BottomFiller());
-
               items.postValue(newItems);
           });
     }
@@ -373,7 +371,7 @@ public class NewTransactionModel extends ViewModel {
         tr.setComment(head.getComment());
         LedgerTransactionAccount emptyAmountAccount = null;
         float emptyAmountAccountBalance = 0;
-        for (int i = 1; i < list.size() - 1; i++) {
+        for (int i = 1; i < list.size(); i++) {
             TransactionAccount item = list.get(i)
                                           .toTransactionAccount();
             LedgerTransactionAccount acc = new LedgerTransactionAccount(item.getAccountName()
@@ -465,8 +463,6 @@ public class NewTransactionModel extends ViewModel {
 
         noteFocusChanged(1, FocusedElement.Description);
 
-        newList.add(new BottomFiller());
-
         setItems(newList);
     }
     /**
@@ -522,7 +518,7 @@ public class NewTransactionModel extends ViewModel {
                 submittable = false;
             }
 
-            for (int i = 1; i < list.size() - 1; i++) {
+            for (int i = 1; i < list.size(); i++) {
                 TransactionAccount item = list.get(i)
                                               .toTransactionAccount();
 
@@ -589,7 +585,7 @@ public class NewTransactionModel extends ViewModel {
                 float currencyBalance = balance.get(balCurrency);
                 if (Misc.isZero(currencyBalance)) {
                     // remove hints from all amount inputs in that currency
-                    for (int i = 1; i < list.size() - 1; i++) {
+                    for (int i = 1; i < list.size(); i++) {
                         TransactionAccount acc = list.get(i)
                                                      .toTransactionAccount();
                         if (Misc.equalStrings(acc.getCurrency(), balCurrency)) {
@@ -729,7 +725,7 @@ public class NewTransactionModel extends ViewModel {
                     Logger.debug("submittable",
                             String.format("Adding new item with %s for currency %s",
                                     newAcc.getAmountHint(), balCurrency));
-                    list.add(list.size() - 1, newAcc);
+                    list.add(newAcc);
                     listChanged = true;
                 }
             }
@@ -737,7 +733,7 @@ public class NewTransactionModel extends ViewModel {
             // drop extra empty rows, not needed
             for (String currName : emptyRowsForCurrency.currencies()) {
                 List<Item> emptyItems = emptyRowsForCurrency.getList(currName);
-                while ((list.size() > 4) && (emptyItems.size() > 1)) {
+                while ((list.size() > MIN_ITEMS) && (emptyItems.size() > 1)) {
                     if (workingWithLiveList && !liveListCopied) {
                         list = copyList(list);
                         liveListCopied = true;
@@ -748,7 +744,7 @@ public class NewTransactionModel extends ViewModel {
                 }
 
                 // unused currency, remove last item (which is also an empty one)
-                if ((list.size() > 4) && (emptyItems.size() == 1)) {
+                if ((list.size() > MIN_ITEMS) && (emptyItems.size() == 1)) {
                     List<Item> currItems = itemsForCurrency.getList(currName);
 
                     if (currItems.size() == 1) {
@@ -765,12 +761,12 @@ public class NewTransactionModel extends ViewModel {
 
             // 6) at least two rows need to be present in the ledger
             //    (the list also contains header and trailer)
-            while (list.size() < 4) {
+            while (list.size() < MIN_ITEMS) {
                 if (workingWithLiveList && !liveListCopied) {
                     list = copyList(list);
                     liveListCopied = true;
                 }
-                list.add(list.size() - 1, new TransactionAccount(""));
+                list.add(new TransactionAccount(""));
                 listChanged = true;
             }
 
@@ -798,7 +794,7 @@ public class NewTransactionModel extends ViewModel {
     @SuppressLint("DefaultLocale")
     private void dumpItemList(@NotNull String msg, @NotNull List<Item> list) {
         Logger.debug("submittable", "== Dump of all items " + msg);
-        for (int i = 1; i < list.size() - 1; i++) {
+        for (int i = 1; i < list.size(); i++) {
             TransactionAccount item = list.get(i)
                                           .toTransactionAccount();
             Logger.debug("submittable", String.format("%d:%s", i, item.toString()));
@@ -859,8 +855,6 @@ public class NewTransactionModel extends ViewModel {
                 return new TransactionHead((TransactionHead) origin);
             if (origin instanceof TransactionAccount)
                 return new TransactionAccount((TransactionAccount) origin);
-            if (origin instanceof BottomFiller)
-                return new BottomFiller((BottomFiller) origin);
             throw new RuntimeException("Don't know how to handle " + origin);
         }
         public int getId() {
@@ -894,8 +888,6 @@ public class NewTransactionModel extends ViewModel {
                 return ((TransactionHead) item).equalContents((TransactionHead) this);
             if (this instanceof TransactionAccount)
                 return ((TransactionAccount) item).equalContents((TransactionAccount) this);
-            if (this instanceof BottomFiller)
-                return true;
 
             throw new RuntimeException("Don't know how to handle " + this);
         }
@@ -1001,26 +993,6 @@ public class NewTransactionModel extends ViewModel {
         }
     }
 
-    public static class BottomFiller extends Item {
-        public BottomFiller(BottomFiller origin) {
-            id = origin.id;
-            // nothing to do
-        }
-        public BottomFiller() {
-            super();
-        }
-        @Override
-        public ItemType getType() {
-            return ItemType.bottomFiller;
-        }
-        @SuppressLint("DefaultLocale")
-        @NonNull
-        @Override
-        public String toString() {
-            return String.format("id:%d «bottom filler»", id);
-        }
-    }
-
     public static class TransactionAccount extends Item {
         private String accountName;
         private String amountHint;
index 995f9386c401cf713c71412feb5d4da7222d19b7..cfd8959ee10955bd50a621e0d14c7964e6281172 100644 (file)
@@ -97,6 +97,7 @@
         android:tint="?android:attr/colorBackground"
         android:visibility="visible"
         app:backgroundTint="?colorSecondary"
+        app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:srcCompat="@drawable/ic_save_white_24dp"