package com.pan.materialdrawer.model;
import android.content.Context;
import android.support.annotation.LayoutRes;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.pan.materialdrawer.R;
import com.pan.materialdrawer.model.utils.ViewHolderFactory;
import com.mikepenz.materialize.util.UIUtils;
/**
* Created by mikepenz on 03.02.15.
*/
public class ContainerDrawerItem extends AbstractDrawerItem<ContainerDrawerItem> {
private View mView;
public ContainerDrawerItem withView(View view) {
this.mView = view;
return this;
}
public View getView() {
return mView;
}
public enum Position {
TOP,
BOTTOM,
NONE;
}
private Position mViewPosition = Position.TOP;
public ContainerDrawerItem withViewPosition(Position position) {
this.mViewPosition = position;
return this;
}
private boolean mDivider = true;
public ContainerDrawerItem withDivider(boolean divider) {
this.mDivider = divider;
return this;
}
public Position getViewPosition() {
return mViewPosition;
}
@Override
public String getType() {
return "CONTAINER_ITEM";
}
@Override
@LayoutRes
public int getLayoutRes() {
return R.layout.material_drawer_item_container;
}
@Override
public void bindView(RecyclerView.ViewHolder holder) {
Context ctx = holder.itemView.getContext();
//get our viewHolder
ViewHolder viewHolder = (ViewHolder) holder;
//set the identifier from the drawerItem here. It can be used to run tests
holder.itemView.setId(getIdentifier());
//define how the divider should look like
viewHolder.view.setEnabled(false);
//make sure our view is not used in another parent
if (mView.getParent() != null) {
((ViewGroup) mView.getParent()).removeView(mView);
}
//make sure the header view is empty
((ViewGroup) viewHolder.view).removeAllViews();
int dividerHeight = 0;
if (mDivider) {
dividerHeight = 1;
}
View divider = new View(ctx);
divider.setMinimumHeight(dividerHeight);
divider.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(ctx, R.attr.material_drawer_divider, R.color.material_drawer_divider));
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) UIUtils.convertDpToPixel(dividerHeight, ctx));
//depending on the position we add the view
if (mViewPosition == Position.TOP) {
((ViewGroup) viewHolder.view).addView(mView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.bottomMargin = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_padding);
((ViewGroup) viewHolder.view).addView(divider, layoutParams);
} else if (mViewPosition == Position.BOTTOM) {
layoutParams.topMargin = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_padding);
((ViewGroup) viewHolder.view).addView(divider, layoutParams);
((ViewGroup) viewHolder.view).addView(mView);
} else {
((ViewGroup) viewHolder.view).addView(mView);
}
//call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)
onPostBindView(this, holder.itemView);
}
@Override
public ViewHolderFactory getFactory() {
return new ItemFactory();
}
public static class ItemFactory implements ViewHolderFactory<ViewHolder> {
public ViewHolder factory(View v) {
return new ViewHolder(v);
}
}
private static class ViewHolder extends RecyclerView.ViewHolder {
private View view;
private ViewHolder(View view) {
super(view);
this.view = view;
}
}
}