import android.database.sqlite.SQLiteDatabase;
import android.graphics.Typeface;
import android.os.AsyncTask;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.AppCompatTextView;
-import android.support.v7.widget.RecyclerView;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.StyleSpan;
import android.widget.TextView;
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.TransactionListItem;
+import net.ktnx.mobileledger.utils.Colors;
import net.ktnx.mobileledger.utils.Globals;
import net.ktnx.mobileledger.utils.MLDB;
import java.text.DateFormat;
import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.widget.AppCompatTextView;
+import androidx.recyclerview.widget.RecyclerView;
import static net.ktnx.mobileledger.utils.DimensionUtils.dp2px;
public class TransactionListAdapter extends RecyclerView.Adapter<TransactionRowHolder> {
- private String boldAccountName;
public void onBindViewHolder(@NonNull TransactionRowHolder holder, int position) {
TransactionListItem item = TransactionListViewModel.getTransactionListItem(position);
// tr.getAccounts().size()));
TransactionLoader loader = new TransactionLoader();
- loader.execute(new TransactionLoaderParams(tr, holder, position, boldAccountName,
- item.isOdd()));
+ loader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
+ new TransactionLoaderParams(tr, holder, position, Data.accountFilter.get(),
+ item.isOdd()));
// WORKAROUND what seems to be a bug in CardHolder somewhere
// when a view that was previously holding a delimiter is re-purposed
holder.vDelimiter.setVisibility(View.VISIBLE);
holder.tvDelimiterDate.setText(DateFormat.getDateInstance().format(date));
if (item.isMonthShown()) {
- holder.tvDelimiterMonth.setText(Globals.monthNames[date.getMonth()]);
+ GregorianCalendar cal = new GregorianCalendar(TimeZone.getDefault());
+ cal.setTime(date);
+ holder.tvDelimiterMonth
+ .setText(Globals.monthNames[cal.get(GregorianCalendar.MONTH)]);
holder.tvDelimiterMonth.setVisibility(View.VISIBLE);
// holder.vDelimiterLine.setBackgroundResource(R.drawable.dashed_border_8dp);
holder.vDelimiterLine.setVisibility(View.GONE);
@Override
public int getItemCount() {
- return TransactionListViewModel.getTransactionCount() + 1;
- }
- public void setBoldAccountName(String boldAccountName) {
- this.boldAccountName = boldAccountName;
- }
- public void resetBoldAccountName() {
- this.boldAccountName = null;
+ return Data.transactions.size() + 1;
}
-
enum LoaderStep {HEAD, ACCOUNTS, DONE}
-
private static class TransactionLoader
extends AsyncTask<TransactionLoaderParams, TransactionLoaderStep, Void> {
@Override
LedgerTransaction tr = p[0].transaction;
boolean odd = p[0].odd;
- SQLiteDatabase db = MLDB.getReadableDatabase();
+ SQLiteDatabase db = MLDB.getDatabase();
tr.loadData(db);
publishProgress(new TransactionLoaderStep(p[0].holder, p[0].position, tr, odd));
case HEAD:
holder.tvDescription.setText(step.getTransaction().getDescription());
- if (step.isOdd()) holder.row.setBackgroundColor(Globals.tableRowDarkBG);
- else holder.row.setBackgroundColor(Globals.tableRowLightBG);
+ if (step.isOdd()) holder.row.setBackgroundColor(Colors.tableRowDarkBG);
+ else holder.row.setBackgroundColor(Colors.tableRowLightBG);
break;
case ACCOUNTS:
if ((boldAccountName != null) &&
acc.getAccountName().startsWith(boldAccountName))
{
- accName.setTextColor(Globals.primaryDark);
- accAmount.setTextColor(Globals.primaryDark);
+ accName.setTextColor(Colors.accent);
+ accAmount.setTextColor(Colors.accent);
SpannableString ss = new SpannableString(acc.getAccountName());
ss.setSpan(new StyleSpan(Typeface.BOLD), 0, boldAccountName.length(),
accName.setText(ss);
}
else {
- accName.setTextColor(Globals.defaultTextColor);
- accAmount.setTextColor(Globals.defaultTextColor);
+ accName.setTextColor(Colors.defaultTextColor);
+ accAmount.setTextColor(Colors.defaultTextColor);
accName.setText(acc.getAccountName());
}
accAmount.setText(acc.toString());