]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/TransactionListAdapter.java
fu: single transaction list
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / TransactionListAdapter.java
index 2e52093d57669744a7ae9fc9e52f8266ca2d3a94..7fa85d3a6c98b277350126403798588e985833bd 100644 (file)
@@ -21,6 +21,7 @@ import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
 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 +33,26 @@ 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;
+    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 +71,13 @@ 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);
-                    accName.setLayoutParams(
-                            new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
+                    row.setPaddingRelative(dp2px(ctx, 8), 0, 0, 0);
+                    accName = new AppCompatTextView(ctx);
+                    accName.setLayoutParams(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,7 +92,7 @@ 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 (holder.tableAccounts.getChildCount() > rowIndex) {
@@ -103,6 +106,8 @@ class TransactionListAdapter
             else {
                 holder.row.setBackgroundColor(Globals.table_row_odd_bg);
             }
+
+            Log.d("transactions", String.format("Filled position %d", position));
         }
     }
 
@@ -116,8 +121,9 @@ class TransactionListAdapter
     }
 
     @Override
-    public int getItemCount() {
-        return transactions.size();
+    public int getItemCount()
+    {
+        return model.getTransactionCount();
     }
     class TransactionRowHolder extends RecyclerView.ViewHolder {
         TextView tvDescription, tvDate;
@@ -125,7 +131,7 @@ class TransactionListAdapter
         ConstraintLayout row;
         public TransactionRowHolder(@NonNull View itemView) {
             super(itemView);
-            this.row = (ConstraintLayout) itemView;
+            this.row = itemView.findViewById(R.id.transaction_row);
             this.tvDescription = itemView.findViewById(R.id.transaction_row_description);
             this.tvDate = itemView.findViewById(R.id.transaction_row_date);
             this.tableAccounts = itemView.findViewById(R.id.transaction_row_acc_amounts);