import net.ktnx.mobileledger.App;
import net.ktnx.mobileledger.R;
-import net.ktnx.mobileledger.model.Data;
import net.ktnx.mobileledger.model.LedgerTransaction;
import net.ktnx.mobileledger.model.LedgerTransactionAccount;
-import net.ktnx.mobileledger.model.MobileLedgerProfile;
import net.ktnx.mobileledger.model.TransactionListItem;
+import net.ktnx.mobileledger.ui.MainModel;
import net.ktnx.mobileledger.utils.Colors;
import net.ktnx.mobileledger.utils.Globals;
+import net.ktnx.mobileledger.utils.Logger;
import net.ktnx.mobileledger.utils.Misc;
import net.ktnx.mobileledger.utils.SimpleDate;
import java.text.DateFormat;
import java.util.GregorianCalendar;
+import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
public class TransactionListAdapter extends RecyclerView.Adapter<TransactionRowHolder> {
- private MobileLedgerProfile profile;
- private AsyncListDiffer<TransactionListItem> listDiffer;
- public TransactionListAdapter() {
+ private final MainModel model;
+ private final AsyncListDiffer<TransactionListItem> listDiffer;
+ public TransactionListAdapter(MainModel model) {
super();
+ this.model = model;
+
listDiffer = new AsyncListDiffer<>(this, new DiffUtil.ItemCallback<TransactionListItem>() {
@Override
public boolean areItemsTheSame(@NonNull TransactionListItem oldItem,
});
}
public void onBindViewHolder(@NonNull TransactionRowHolder holder, int position) {
- TransactionListItem item = TransactionListViewModel.getTransactionListItem(position);
+ TransactionListItem item = listDiffer.getCurrentList()
+ .get(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
TransactionLoader loader = new TransactionLoader();
loader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
- new TransactionLoaderParams(tr, holder, position,
- Data.accountFilter.getValue(), item.isOdd()));
+ new TransactionLoaderParams(tr, holder, position, model.getAccountFilter()
+ .getValue()));
// WORKAROUND what seems to be a bug in CardHolder somewhere
// when a view that was previously holding a delimiter is re-purposed
@Override
public int getItemCount() {
- return Data.transactions.size();
+ return listDiffer.getCurrentList()
+ .size();
+ }
+ public void setTransactions(List<TransactionListItem> newList) {
+ Logger.debug("transactions",
+ String.format(Locale.US, "Got new transaction list (%d items)", newList.size()));
+ listDiffer.submitList(newList);
}
enum LoaderStep {HEAD, ACCOUNTS, DONE}
@Override
protected Void doInBackground(TransactionLoaderParams... p) {
LedgerTransaction tr = p[0].transaction;
- boolean odd = p[0].odd;
SQLiteDatabase db = App.getDatabase();
tr.loadData(db);
- publishProgress(new TransactionLoaderStep(p[0].holder, p[0].position, tr, odd));
+ publishProgress(new TransactionLoaderStep(p[0].holder, p[0].position, tr));
int rowIndex = 0;
// FIXME ConcurrentModificationException in ArrayList$ltr.next (ArrayList.java:831)
Context ctx = holder.row.getContext();
LinearLayout row = (LinearLayout) holder.tableAccounts.getChildAt(rowIndex);
if (row == null) {
+ row = new LinearLayout(ctx);
LayoutInflater inflater = ((Activity) ctx).getLayoutInflater();
- row = (LinearLayout) inflater.inflate(
- R.layout.transaction_list_row_accounts_table_row, null);
- // if the rootView above is given (and the line below is spared)
- // the accounts remain with their default text (set in the layout resource)
+ inflater.inflate(R.layout.transaction_list_row_accounts_table_row, row);
holder.tableAccounts.addView(row);
}
TextView dummyText = row.findViewById(R.id.dummy_text);
}
private static class TransactionLoaderParams {
- LedgerTransaction transaction;
- TransactionRowHolder holder;
- int position;
- String boldAccountName;
- boolean odd;
+ final LedgerTransaction transaction;
+ final TransactionRowHolder holder;
+ final int position;
+ final String boldAccountName;
TransactionLoaderParams(LedgerTransaction transaction, TransactionRowHolder holder,
- int position, String boldAccountName, boolean odd) {
+ int position, String boldAccountName) {
this.transaction = transaction;
this.holder = holder;
this.position = position;
this.boldAccountName = boldAccountName;
- this.odd = odd;
}
}
}
\ No newline at end of file