]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/TransactionListAdapter.java
add transaction filter
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / TransactionListAdapter.java
index e69aab7bf44ffaf728e226cefd265740a7986a8d..41c3cdd551eaa6b08a12c82e02def820314377eb 100644 (file)
@@ -19,8 +19,10 @@ package net.ktnx.mobileledger;
 
 import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Typeface;
 import android.support.annotation.NonNull;
 import android.support.constraint.ConstraintLayout;
+import android.support.v7.widget.AppCompatTextView;
 import android.support.v7.widget.RecyclerView;
 import android.util.Log;
 import android.view.Gravity;
@@ -32,23 +34,27 @@ import android.widget.TextView;
 
 import net.ktnx.mobileledger.model.LedgerTransaction;
 import net.ktnx.mobileledger.model.LedgerTransactionAccount;
+import net.ktnx.mobileledger.ui.transaction_list.TransactionListViewModel;
 import net.ktnx.mobileledger.utils.Globals;
 import net.ktnx.mobileledger.utils.MLDB;
 
-import java.util.List;
-
 import static net.ktnx.mobileledger.utils.DimensionUtils.dp2px;
 
 class TransactionListAdapter
         extends RecyclerView.Adapter<TransactionListAdapter.TransactionRowHolder> {
-    private List<LedgerTransaction> transactions;
-
-    TransactionListAdapter(List<LedgerTransaction> transactions) {
-        this.transactions = transactions;
+    TransactionListViewModel model;
+    private String boldAccountName;
+    public TransactionListAdapter(TransactionListViewModel model) {
+        this.model = model;
     }
-
     public void onBindViewHolder(@NonNull TransactionRowHolder holder, int position) {
-        LedgerTransaction tr = transactions.get(position);
+        LedgerTransaction tr = model.getTransaction(position);
+        // in a race when transaction list 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;
+
         Context ctx = holder.row.getContext();
 
         try (SQLiteDatabase db = MLDB.getReadableDatabase(ctx)) {
@@ -67,14 +73,14 @@ class TransactionListAdapter
                                     LinearLayout.LayoutParams.WRAP_CONTENT));
                     row.setGravity(Gravity.CENTER_VERTICAL);
                     row.setOrientation(LinearLayout.HORIZONTAL);
-                    row.setPaddingRelative(dp2px(ctx, 8), 0, 0, 8);
-                    accName = new TextView(ctx);
+                    row.setPaddingRelative(dp2px(ctx, 8), 0, 0, 0);
+                    accName = new AppCompatTextView(ctx);
                     accName.setLayoutParams(
-                            new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
-                                    LinearLayout.LayoutParams.WRAP_CONTENT, 5f));
+                            new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT,
+                                    5f));
                     accName.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
                     row.addView(accName);
-                    accAmount = new TextView(ctx);
+                    accAmount = new AppCompatTextView(ctx);
                     LinearLayout.LayoutParams llp =
                             new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                                     LinearLayout.LayoutParams.WRAP_CONTENT);
@@ -89,8 +95,22 @@ class TransactionListAdapter
                     accName = (TextView) row.getChildAt(0);
                     accAmount = (TextView) row.getChildAt(1);
                 }
-                accName.setText(acc.getShortAccountName());
+                accName.setText(acc.getAccountName());
                 accAmount.setText(acc.toString());
+
+                if ((boldAccountName != null) && boldAccountName.equals(acc.getAccountName())) {
+                    accName.setTypeface(null, Typeface.BOLD);
+                    accAmount.setTypeface(null, Typeface.BOLD);
+                    accName.setTextColor(Globals.primaryDark);
+                    accAmount.setTextColor(Globals.primaryDark);
+                }
+                else {
+                    accName.setTypeface(null, Typeface.NORMAL);
+                    accAmount.setTypeface(null, Typeface.NORMAL);
+                    accName.setTextColor(Globals.defaultTextColor);
+                    accAmount.setTextColor(Globals.defaultTextColor);
+                }
+
             }
             if (holder.tableAccounts.getChildCount() > rowIndex) {
                 holder.tableAccounts
@@ -103,6 +123,8 @@ class TransactionListAdapter
             else {
                 holder.row.setBackgroundColor(Globals.table_row_odd_bg);
             }
+
+            Log.d("transactions", String.format("Filled position %d", position));
         }
     }
 
@@ -117,7 +139,13 @@ class TransactionListAdapter
 
     @Override
     public int getItemCount() {
-        return transactions.size();
+        return model.getTransactionCount();
+    }
+    public void setBoldAccountName(String boldAccountName) {
+        this.boldAccountName = boldAccountName;
+    }
+    public void resetBoldAccountName() {
+        this.boldAccountName = null;
     }
     class TransactionRowHolder extends RecyclerView.ViewHolder {
         TextView tvDescription, tvDate;