package com.fastaccess.ui.widgets.recyclerview;
import android.content.Context;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import com.fastaccess.R;
import com.fastaccess.helper.Logger;
import com.fastaccess.helper.ViewHelper;
class BottomPaddingDecoration extends RecyclerView.ItemDecoration {
private final int bottomPadding;
private BottomPaddingDecoration(int bottomOffset) {
bottomPadding = bottomOffset;
}
private BottomPaddingDecoration(@NonNull Context context) {
this(ViewHelper.toPx(context, context.getResources().getDimensionPixelSize(R.dimen.fab_spacing)));
}
public static BottomPaddingDecoration with(int bottomPadding) {
return new BottomPaddingDecoration(bottomPadding);
}
public static BottomPaddingDecoration with(@NonNull Context context) {
return new BottomPaddingDecoration(context);
}
@Override public void getItemOffsets(@NonNull Rect outRect, View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
int dataSize = state.getItemCount();
int position = parent.getChildAdapterPosition(view);
if (parent.getLayoutManager() instanceof LinearLayoutManager) {
if (dataSize > 0 && position == dataSize - 1) {
outRect.set(0, 0, 0, bottomPadding);
} else {
outRect.set(0, 0, 0, 0);
}
} else if (parent.getLayoutManager() instanceof StaggeredGridLayoutManager) {
StaggeredGridLayoutManager grid = (StaggeredGridLayoutManager) parent.getLayoutManager();
if ((dataSize - position) <= grid.getSpanCount()) {
outRect.set(0, 0, 0, bottomPadding);
} else {
Logger.e("Here");
outRect.set(0, 0, 0, 0);
}
} else if (parent.getLayoutManager() instanceof GridLayoutManager) {
GridLayoutManager grid = (GridLayoutManager) parent.getLayoutManager();
if ((dataSize - position) <= grid.getSpanCount()) {
outRect.set(0, 0, 0, bottomPadding);
} else {
outRect.set(0, 0, 0, 0);
}
}
}
}