package com.fastaccess.ui.widgets.recyclerview;
import android.content.Context;
import android.content.res.Resources;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
import com.fastaccess.R;
import com.fastaccess.helper.ViewHelper;
import com.fastaccess.ui.widgets.StateLayout;
/**
* Created by Kosh on 9/24/2015. copyrights are reserved
* <p>
* recyclerview which will showParentOrSelf/showParentOrSelf itself base on adapter
*/
public class DynamicRecyclerView extends RecyclerView {
private StateLayout emptyView;
@Nullable private View parentView;
private BottomPaddingDecoration bottomPaddingDecoration;
@NonNull private AdapterDataObserver observer = new AdapterDataObserver() {
@Override public void onChanged() {
showEmptyView();
}
@Override public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
showEmptyView();
}
@Override public void onItemRangeRemoved(int positionStart, int itemCount) {
super.onItemRangeRemoved(positionStart, itemCount);
showEmptyView();
}
};
public DynamicRecyclerView(@NonNull Context context) {
this(context, null);
}
public DynamicRecyclerView(@NonNull Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DynamicRecyclerView(@NonNull Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
if (isInEditMode()) return;
}
@Override public void setAdapter(@Nullable Adapter adapter) {
super.setAdapter(adapter);
if (isInEditMode()) return;
if (adapter != null) {
adapter.registerAdapterDataObserver(observer);
observer.onChanged();
}
}
public void removeBottomDecoration() {
if (bottomPaddingDecoration != null) {
removeItemDecoration(bottomPaddingDecoration);
bottomPaddingDecoration = null;
}
}
public void addDecoration() {
bottomPaddingDecoration = BottomPaddingDecoration.with(getContext());
addItemDecoration(bottomPaddingDecoration);
}
public void showEmptyView() {
Adapter<?> adapter = getAdapter();
if (adapter != null) {
if (emptyView != null) {
if (adapter.getItemCount() == 0) {
showParentOrSelf(false);
} else {
showParentOrSelf(true);
}
}
} else {
if (emptyView != null) {
showParentOrSelf(false);
}
}
}
private void showParentOrSelf(boolean showRecyclerView) {
if(parentView!=null)
parentView.setVisibility(VISIBLE);
setVisibility(VISIBLE);
emptyView.setVisibility(!showRecyclerView ? VISIBLE : GONE);
}
public void setEmptyView(@NonNull StateLayout emptyView, @Nullable View parentView) {
this.emptyView = emptyView;
this.parentView = parentView;
showEmptyView();
}
public void setEmptyView(@NonNull StateLayout emptyView) {
setEmptyView(emptyView, null);
}
public void hideProgress(@NonNull StateLayout view) {
view.hideProgress();
}
public void showProgress(@NonNull StateLayout view) {
view.showProgress();
}
public void addKeyLineDivider() {
if (!ViewHelper.isTablet(getContext())) {
Resources resources = getResources();
addItemDecoration(new InsetDividerDecoration(resources.getDimensionPixelSize(R.dimen.divider_height),
resources.getDimensionPixelSize(R.dimen.keyline_2), ViewHelper.getListDivider(getContext())));
}
}
public void addDivider() {
if (!ViewHelper.isTablet(getContext())) {
Resources resources = getResources();
addItemDecoration(new InsetDividerDecoration(resources.getDimensionPixelSize(R.dimen.divider_height), 0,
ViewHelper.getListDivider(getContext())));
}
}
public void addNormalSpacingDivider() {
addDivider();
}
public void addDivider(@NonNull Class toDivide) {
if (!ViewHelper.isTablet(getContext())) {
Resources resources = getResources();
addItemDecoration(new InsetDividerDecoration(resources.getDimensionPixelSize(R.dimen.divider_height), 0,
ViewHelper.getListDivider(getContext()), toDivide));
}
}
}