import android.content.Context;
import android.content.res.Resources;
import android.graphics.Typeface;
-import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
-import android.widget.LinearLayout;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
import android.widget.TextView;
import net.ktnx.mobileledger.R;
import java.util.List;
-class AccountSummaryAdapter extends RecyclerView.Adapter<AccountSummaryAdapter.LedgerRowHolder> {
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.RecyclerView;
+
+public class AccountSummaryAdapter
+ extends RecyclerView.Adapter<AccountSummaryAdapter.LedgerRowHolder> {
private boolean selectionActive;
AccountSummaryAdapter() {
Context ctx = holder.row.getContext();
Resources rm = ctx.getResources();
+ holder.row.setTag(acc);
holder.row.setVisibility(View.VISIBLE);
holder.vTrailer.setVisibility(View.GONE);
holder.tvAccountName.setText(acc.getShortName());
- holder.tvAccountName.setPadding(
- acc.getLevel() * rm.getDimensionPixelSize(R.dimen.activity_horizontal_margin) /
- 2, 0, 0, 0);
+ ConstraintLayout.LayoutParams lp =
+ (ConstraintLayout.LayoutParams) holder.tvAccountName.getLayoutParams();
+ lp.setMarginStart(
+ acc.getLevel() * rm.getDimensionPixelSize(R.dimen.thumb_row_height) / 2);
+ holder.expanderContainer
+ .setVisibility(acc.hasSubAccounts() ? View.VISIBLE : View.INVISIBLE);
+ holder.expanderContainer.setRotation(acc.isExpanded() ? 0 : 180);
holder.tvAccountAmounts.setText(acc.getAmountsString());
- if (acc.isHidden()) {
+ if (acc.isHiddenByStar()) {
holder.tvAccountName.setTypeface(null, Typeface.ITALIC);
holder.tvAccountAmounts.setTypeface(null, Typeface.ITALIC);
}
holder.tvAccountAmounts.setTypeface(null, Typeface.NORMAL);
}
- if (position % 2 == 0) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) holder.row
- .setBackgroundColor(rm.getColor(R.color.table_row_dark_bg, ctx.getTheme()));
- else holder.row.setBackgroundColor(rm.getColor(R.color.table_row_dark_bg));
- }
- else {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) holder.row
- .setBackgroundColor(rm.getColor(R.color.drawer_background, ctx.getTheme()));
- else holder.row.setBackgroundColor(rm.getColor(R.color.drawer_background));
- }
-
holder.selectionCb.setVisibility(selectionActive ? View.VISIBLE : View.GONE);
- holder.selectionCb.setChecked(!acc.isHiddenToBe());
+ holder.selectionCb.setChecked(!acc.isHiddenByStarToBe());
holder.row.setTag(R.id.POS, position);
}
return Data.accounts.get().size() + 1;
}
public void startSelection() {
- for (LedgerAccount acc : Data.accounts.get()) acc.setHiddenToBe(acc.isHidden());
+ for (LedgerAccount acc : Data.accounts.get()) acc.setHiddenByStarToBe(acc.isHiddenByStar());
this.selectionActive = true;
notifyDataSetChanged();
}
public void selectItem(int position) {
LedgerAccount acc = Data.accounts.get().get(position);
acc.toggleHiddenToBe();
- toggleChildrenOf(acc, acc.isHiddenToBe(), position);
+ toggleChildrenOf(acc, acc.isHiddenByStarToBe(), position);
notifyItemChanged(position);
}
void toggleChildrenOf(LedgerAccount parent, boolean hiddenToBe, int parentPosition) {
int i = parentPosition + 1;
for (LedgerAccount acc : Data.accounts.get()) {
if (acc.getName().startsWith(parent.getName() + ":")) {
- acc.setHiddenToBe(hiddenToBe);
+ acc.setHiddenByStarToBe(hiddenToBe);
notifyItemChanged(i);
toggleChildrenOf(acc, hiddenToBe, i);
i++;
class LedgerRowHolder extends RecyclerView.ViewHolder {
CheckBox selectionCb;
TextView tvAccountName, tvAccountAmounts;
- LinearLayout row;
+ ConstraintLayout row;
View vTrailer;
+ FrameLayout expanderContainer;
+ ImageView expander;
public LedgerRowHolder(@NonNull View itemView) {
super(itemView);
this.row = itemView.findViewById(R.id.account_summary_row);
this.tvAccountAmounts = itemView.findViewById(R.id.account_row_acc_amounts);
this.selectionCb = itemView.findViewById(R.id.account_row_check);
this.vTrailer = itemView.findViewById(R.id.account_summary_trailer);
+ this.expanderContainer = itemView.findViewById(R.id.account_expander_container);
+ this.expander = itemView.findViewById(R.id.account_expander);
+
+ expanderContainer.addOnLayoutChangeListener(
+ (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
+ int w = right - left;
+ int h = bottom - top;
+ if (h > w) {
+ int p = (h - w) / 2;
+ v.setPadding(0, p, 0, p);
+ }
+ else v.setPadding(0, 0, 0, 0);
+ });
}
}
}