]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListAdapter.java
fix transaction colouring to ignore delimiter items
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / transaction_list / TransactionListAdapter.java
index febca0191ecb02525c8bd47b7205f26dcb8b76f5..6c245644d55db2742ca11d5ef7796c31a75d8461 100644 (file)
@@ -48,27 +48,23 @@ public class TransactionListAdapter extends RecyclerView.Adapter<TransactionRowH
     public void onBindViewHolder(@NonNull TransactionRowHolder holder, int position) {
         TransactionListItem item = TransactionListViewModel.getTransactionListItem(position);
 
+        // in a race when transaction value is reduced, but the model hasn't been notified yet
+        // the view will disappear when the notifications reaches the model, so by simply omitting
+        // the out-of-range get() call nothing bad happens - just a to-be-deleted view remains
+        // a bit longer
+        if (item == null) return;
+
         if (item.getType() == TransactionListItem.Type.TRANSACTION) {
             holder.vTransaction.setVisibility(View.VISIBLE);
             holder.vDelimiter.setVisibility(View.GONE);
             LedgerTransaction tr = item.getTransaction();
-            // in a race when transaction value is reduced, but the model hasn't been notified yet
-            // the view will disappear when the notifications reaches the model, so by simply omitting
-            // the out-of-range get() call nothing bad happens - just a to-be-deleted view remains
-            // a bit longer
-            if (tr == null) return;
-
-            LedgerTransaction previous = null;
-            TransactionListItem previousItem = null;
-            if (position > 0)
-                previousItem = TransactionListViewModel.getTransactionListItem(position - 1);
 
 //        Log.d("transactions", String.format("Filling position %d with %d accounts", position,
 //                tr.getAccounts().size()));
 
             TransactionLoader loader = new TransactionLoader();
-            loader.execute(
-                    new TransactionLoaderParams(tr, previous, holder, position, boldAccountName));
+            loader.execute(new TransactionLoaderParams(tr, holder, position, boldAccountName,
+                    item.isOdd()));
 
             // WORKAROUND what seems to be a bug in CardHolder somewhere
             // when a view that was previously holding a delimiter is re-purposed
@@ -82,8 +78,15 @@ public class TransactionListAdapter extends RecyclerView.Adapter<TransactionRowH
             holder.vTransaction.setVisibility(View.GONE);
             holder.vDelimiter.setVisibility(View.VISIBLE);
             holder.tvDelimiterDate.setText(DateFormat.getDateInstance().format(date));
-            holder.tvDelimiterMonth
-                    .setText(item.isMonthShown() ? Globals.monthNames[date.getMonth()] : "");
+            if (item.isMonthShown()) {
+                holder.tvDelimiterMonth.setText(Globals.monthNames[date.getMonth()]);
+                holder.tvDelimiterMonth.setVisibility(View.VISIBLE);
+                holder.vDelimiterLine.setBackgroundResource(R.drawable.dashed_border_8dp);
+            }
+            else {
+                holder.tvDelimiterMonth.setVisibility(View.GONE);
+                holder.vDelimiterLine.setBackgroundResource(R.drawable.dashed_border_1dp);
+            }
         }
     }
 
@@ -114,18 +117,12 @@ public class TransactionListAdapter extends RecyclerView.Adapter<TransactionRowH
         @Override
         protected Void doInBackground(TransactionLoaderParams... p) {
             LedgerTransaction tr = p[0].transaction;
-            LedgerTransaction previous = p[0].previousTransaction;
+            boolean odd = p[0].odd;
 
             SQLiteDatabase db = MLDB.getReadableDatabase();
             tr.loadData(db);
 
-            boolean showDate;
-            if (previous == null) showDate = true;
-            else {
-                previous.loadData(db);
-                showDate = !previous.getDate().equals(tr.getDate());
-            }
-            publishProgress(new TransactionLoaderStep(p[0].holder, p[0].position, tr, showDate));
+            publishProgress(new TransactionLoaderStep(p[0].holder, p[0].position, tr, odd));
 
             int rowIndex = 0;
             for (LedgerTransactionAccount acc : tr.getAccounts()) {
@@ -148,12 +145,8 @@ public class TransactionListAdapter extends RecyclerView.Adapter<TransactionRowH
                 case HEAD:
                     holder.tvDescription.setText(step.getTransaction().getDescription());
 
-                    if (step.getPosition() % 2 == 0) {
-                        holder.row.setBackgroundColor(Globals.tableRowEvenBG);
-                    }
-                    else {
-                        holder.row.setBackgroundColor(Globals.tableRowOddBG);
-                    }
+                    if (step.isOdd()) holder.row.setBackgroundColor(Globals.tableRowDarkBG);
+                    else holder.row.setBackgroundColor(Globals.tableRowLightBG);
 
                     break;
                 case ACCOUNTS:
@@ -226,21 +219,18 @@ public class TransactionListAdapter extends RecyclerView.Adapter<TransactionRowH
     }
 
     private class TransactionLoaderParams {
-        LedgerTransaction transaction, previousTransaction;
+        LedgerTransaction transaction;
         TransactionRowHolder holder;
         int position;
         String boldAccountName;
-        TransactionLoaderParams(LedgerTransaction transaction, TransactionRowHolder holder, int position, String boldAccountName) {
-            this(transaction, null, holder, position, boldAccountName);
-        }
-        TransactionLoaderParams(LedgerTransaction transaction,
-                                LedgerTransaction previousTransaction, TransactionRowHolder holder,
-                                int position, String boldAccountName) {
+        boolean odd;
+        TransactionLoaderParams(LedgerTransaction transaction, TransactionRowHolder holder,
+                                int position, String boldAccountName, boolean odd) {
             this.transaction = transaction;
-            this.previousTransaction = previousTransaction;
             this.holder = holder;
             this.position = position;
             this.boldAccountName = boldAccountName;
+            this.odd = odd;
         }
     }
 }
\ No newline at end of file