package com.code44.finance.views;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.code44.finance.App;
import com.code44.finance.R;
import com.code44.finance.data.model.Account;
import com.code44.finance.data.model.Currency;
import com.code44.finance.qualifiers.Main;
import com.code44.finance.utils.MoneyFormatter;
import java.util.List;
import javax.inject.Inject;
public class AccountsView extends LinearLayout {
private static final int TOP_STATIC_VIEWS_COUNT = 1;
private static final int BOTTOM_STATIC_VIEWS_COUNT = 1;
@Inject @Main Currency mainCurrency;
private View balanceContainerView;
private TextView totalBalanceView;
public AccountsView(Context context) {
this(context, null);
}
public AccountsView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AccountsView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
if (!isInEditMode()) {
App.with(context).inject(this);
}
}
@Override protected void onFinishInflate() {
super.onFinishInflate();
// Get views
balanceContainerView = findViewById(R.id.balanceContainer);
totalBalanceView = (TextView) findViewById(R.id.totalBalance);
}
public void setAccounts(List<Account> accounts) {
addOrRemoveAccountViews(accounts);
updateAccountViews(accounts);
}
private void addOrRemoveAccountViews(List<Account> accounts) {
final int currentSize = getChildCount();
final int newSize = TOP_STATIC_VIEWS_COUNT + BOTTOM_STATIC_VIEWS_COUNT + accounts.size();
if (newSize > currentSize) {
for (int i = 0, count = newSize - currentSize; i < count; i++) {
final View view = LayoutInflater.from(getContext()).inflate(R.layout.include_account, this, false);
addView(view, TOP_STATIC_VIEWS_COUNT);
}
} else if (newSize < currentSize) {
removeViews(TOP_STATIC_VIEWS_COUNT, currentSize - newSize);
}
}
private void updateAccountViews(List<Account> accounts) {
long totalBalance = 0;
for (int i = TOP_STATIC_VIEWS_COUNT, size = getChildCount() - BOTTOM_STATIC_VIEWS_COUNT; i < size; i++) {
final Account account = accounts.get(i - TOP_STATIC_VIEWS_COUNT);
final View view = getChildAt(i);
((TextView) view.findViewById(R.id.titleTextView)).setText(account.getTitle());
((TextView) view.findViewById(R.id.balanceTextView)).setText(MoneyFormatter.format(account.getCurrency(), account.getBalance()));
totalBalance += account.getBalance() * account.getCurrency().getExchangeRate();
}
if (accounts.size() > 1) {
balanceContainerView.setVisibility(VISIBLE);
totalBalanceView.setText(MoneyFormatter.format(mainCurrency, totalBalance));
} else {
balanceContainerView.setVisibility(GONE);
}
}
}