2018-SWENG/2018-SWENG-Radius

View on GitHub
app/src/main/java/ch/epfl/sweng/radius/utils/customLists/CustomListAdapter.java

Summary

Maintainability
A
0 mins
Test Coverage
package ch.epfl.sweng.radius.utils.customLists;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

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

import ch.epfl.sweng.radius.R;
import ch.epfl.sweng.radius.database.MLocation;
import de.hdodenhof.circleimageview.CircleImageView;


public abstract class CustomListAdapter extends RecyclerView.Adapter<CustomListAdapter.ViewHolder> {

    protected List<CustomListItem> items;
    protected Context context;

    public CustomListAdapter(List<CustomListItem> items, Context context) {
        this.items = new ArrayList<>(items);
        this.context = context;
    }

    @NonNull
    @Override
    public CustomListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // create a new view
        View itemLayoutView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.custom_list_item_layout, null);

        // create ViewHolder
        CustomListAdapter.ViewHolder viewHolder = new CustomListAdapter.ViewHolder(itemLayoutView);
        return viewHolder;
    }

    public abstract void onBindViewHolder(@NonNull CustomListAdapter.ViewHolder viewHolder, int i);

    // inner class to hold a reference to each item of RecyclerView
    public static class ViewHolder extends RecyclerView.ViewHolder {

        public TextView txtViewTitle;
        public ImageView imgViewIcon;
        public TextView txtViewStatus;
        public LinearLayout linearLayout_name;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            txtViewTitle = itemLayoutView.findViewById(R.id.username);
            txtViewStatus = itemLayoutView.findViewById(R.id.status);
            linearLayout_name = itemLayoutView.findViewById(R.id.container_name_status);
            imgViewIcon = (CircleImageView) itemLayoutView.findViewById(R.id.profile_picture);
        }
    }

    // Return the size of your itemsData (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return items.size();
    }

    public void setItems(List<CustomListItem> items) {
        this.items = new ArrayList<>(items);
    }

    //Set the icon
    protected void setIcon(ViewHolder viewHolder, int position, MLocation item) {
        if(viewHolder.imgViewIcon == null) return;
        String url = handleUserUrlPhoto(item);
        if(item == null){
            Log.e("CustomUserListAdapter", "Item ID not found in Users");
            viewHolder.imgViewIcon.setImageResource(items.get(position).getProfilePic());
        }
        else
            Picasso.get().load(url).into(viewHolder.imgViewIcon);
    }


    private String handleUserUrlPhoto(MLocation loc){
        if(loc == null)
            return null;
        else
            return loc.getUrlProfilePhoto().isEmpty() ? null
                    : loc.getUrlProfilePhoto();
    }
}