package com.github.takahirom.materialelement.main; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.github.takahirom.materialelement.R; import com.github.takahirom.materialelement.animation.transition.AnimatorUtils; import com.github.takahirom.materialelement.motion.choreography.ChoreographyActivity; import com.github.takahirom.materialelement.motion.creative.CreativeCustomizationActivity; import com.github.takahirom.materialelement.motion.durationeasing.DurationAndEasingActivity; import com.github.takahirom.materialelement.motion.movement.MovementActivity; import com.github.takahirom.materialelement.motion.transforming.TransformingActivity; import com.github.takahirom.materialelement.pattern.loadingimages.LoadingImagesActivity; import com.github.takahirom.materialelement.pattern.transition.NavigationalTransitionActivity; import java.util.ArrayList; class ImplementationAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { static final int VIEW_TYPE_HEADER = 0; static final int VIEW_TYPE_IMPLEMENTATION = 1; private final ArrayList<ListItem> listItems; private OnItemClickListener onItemClickListener; private int lastAnimatedPosition = -1; private boolean lockAnimation = false; ImplementationAdapter(Context context, OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; listItems = new ArrayList<>(); listItems.add(new HeaderItem(VIEW_TYPE_HEADER, 0, context.getString(R.string.main_header_motion))); listItems.add( new ImplementationItem( 1, "Duration & easing", R.drawable.ic_duration_easing, DurationAndEasingActivity.class ) ); listItems.add( new ImplementationItem( 2, "Movement", R.drawable.ic_movement, MovementActivity.class ) ); listItems.add( new ImplementationItem( 3, "Transforming material", R.drawable.ic_transforming_material, TransformingActivity.class ) ); listItems.add( new ImplementationItem( 4, "Choreography", R.drawable.ic_choreography, ChoreographyActivity.class ) ); listItems.add( new ImplementationItem( 5, "Creative customization", R.drawable.ic_creative_customize, CreativeCustomizationActivity.class ) ); listItems.add(new HeaderItem(VIEW_TYPE_HEADER, 6, context.getString(R.string.main_header_pattern))); listItems.add( new ImplementationItem( 7, "Loading images", R.drawable.ic_loading_image, LoadingImagesActivity.class ) ); listItems.add( new ImplementationItem( 8, "Navigational transition", R.drawable.ic_navigational_transition, NavigationalTransitionActivity.class ) ); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case VIEW_TYPE_HEADER: return new HeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_header, parent, false)); case VIEW_TYPE_IMPLEMENTATION: return new ItemViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_implementation, parent, false)); } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { case VIEW_TYPE_HEADER: ((HeaderViewHolder) holder).bind((HeaderItem) listItems.get(position)); break; case VIEW_TYPE_IMPLEMENTATION: ItemViewHolder viewHolder = (ItemViewHolder) holder; viewHolder.bind((ImplementationItem) listItems.get(position), onItemClickListener); if (position < lastAnimatedPosition) { lockAnimation = true; } if (!lockAnimation) { lastAnimatedPosition = position; AnimatorUtils.startLoadingAnimation(viewHolder.imageView); } break; } } @Override public int getItemViewType(int position) { return listItems.get(position).viewType; } @Override public int getItemCount() { return listItems.size(); } private static class HeaderViewHolder extends RecyclerView.ViewHolder { private final TextView titleView; HeaderViewHolder(View view) { super(view); titleView = (TextView) view.findViewById(R.id.title); } void bind(final HeaderItem item) { titleView.setText(item.title); } } private static class ItemViewHolder extends RecyclerView.ViewHolder { private final ImageView imageView; private final TextView titleView; ItemViewHolder(View view) { super(view); imageView = (ImageView) view.findViewById(R.id.implementation_imge); titleView = (TextView) view.findViewById(R.id.implementation_title); } void bind(final ImplementationItem item, final OnItemClickListener itemClickListener) { imageView.setImageResource(item.imageRes); titleView.setText(item.title); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { itemClickListener.onItemClick(itemView, item); } }); } } interface OnItemClickListener { void onItemClick(View fromView, ImplementationItem item); } @Override public long getItemId(int position) { return listItems.get(position).itemId; } int getItemPosition(final long itemId) { for (int position = 0; position < listItems.size(); position++) { ListItem listItem = listItems.get(position); if (listItem.itemId == itemId) return position; } return RecyclerView.NO_POSITION; } }