com.uprayzner.mediator.adapters.PlanStandsListAdapter.java Source code

Java tutorial

Introduction

Here is the source code for com.uprayzner.mediator.adapters.PlanStandsListAdapter.java

Source

package com.uprayzner.mediator.adapters;

import android.annotation.SuppressLint;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.support.v4.widget.ContentLoadingProgressBar;
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.ProgressBar;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.enterprayz.controller.beans.interfaces.IPlanStandCard;
import com.uprayzner.mediator.R;

import java.util.ArrayList;
import java.util.List;

/**
 * Copyright 2016 U.Prayzner
 * <p/>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p/>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p/>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
public class PlanStandsListAdapter extends RecyclerView.Adapter<PlanStandsListAdapter.StandViewHolder> {
    private List<IPlanStandCard> cards;
    private final PlanStandAdapterClickListener listener;

    public PlanStandsListAdapter(List<IPlanStandCard> cards, PlanStandAdapterClickListener listener) {
        this.cards = new ArrayList<>(cards);
        this.listener = listener;
    }

    public void update(List<IPlanStandCard> cards) {
        this.cards = new ArrayList<>(cards);
        notifyDataSetChanged();
    }

    private IPlanStandCard getItem(int pos) {
        return cards.get(pos);
    }

    @SuppressLint("InflateParams")
    @Override
    public PlanStandsListAdapter.StandViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new StandViewHolder(
                LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_stand_item, null, false));
    }

    @Override
    public void onBindViewHolder(final StandViewHolder holder, final int position) {
        final IPlanStandCard card = getItem(position);

        GradientDrawable drawable = (GradientDrawable) holder.header.getBackground();
        drawable.setColor(card.getColor());

        holder.title.setText(card.getTitle());
        setProgressColor(card.getColor(), holder.progressBar);
        holder.logo.setBackgroundColor(Color.argb(25, Color.red(card.getColor()), Color.green(card.getColor()),
                Color.blue(card.getColor())));

        Glide.with(holder.logo.getContext()).load(card.getImageUrl()).crossFade().fitCenter().override(200, 300)
                .listener(new RequestListener<String, GlideDrawable>() {
                    @Override
                    public boolean onException(Exception e, String model, Target<GlideDrawable> target,
                            boolean isFirstResource) {
                        holder.progressBar.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                holder.progressBar.setVisibility(View.VISIBLE);
                            }
                        }, 50);
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(GlideDrawable resource, String model,
                            Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                        holder.progressBar.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                holder.progressBar.setVisibility(View.GONE);
                            }
                        }, 50);
                        return false;
                    }
                }).into(holder.logo);

        holder.container.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onListItemClick(position, card);
            }
        });
    }

    private void setProgressColor(int color, ProgressBar bar) {
        bar.getIndeterminateDrawable().setColorFilter(color, android.graphics.PorterDuff.Mode.MULTIPLY);

    }

    @Override
    public int getItemCount() {
        return cards.size();
    }

    public interface PlanStandAdapterClickListener {
        void onListItemClick(int pos, IPlanStandCard card);
    }

    class StandViewHolder extends RecyclerView.ViewHolder {
        public final ContentLoadingProgressBar progressBar;
        public final View container;
        public final ImageView header;
        public final ImageView logo;
        public final TextView title;

        public StandViewHolder(View itemView) {
            super(itemView);
            progressBar = (ContentLoadingProgressBar) itemView.findViewById(R.id.progress_bar);
            container = itemView.findViewById(R.id.ll_container);
            header = (ImageView) itemView.findViewById(R.id.iv_header);
            logo = (ImageView) itemView.findViewById(R.id.iv_logo);
            title = (TextView) itemView.findViewById(R.id.tv_title);
        }
    }
}