com.ibm.mil.readyapps.telco.usage.IncomingOutgoingBinder.java Source code

Java tutorial

Introduction

Here is the source code for com.ibm.mil.readyapps.telco.usage.IncomingOutgoingBinder.java

Source

/*
 * Licensed Materials - Property of IBM
 *  Copyright IBM Corporation 2015. All Rights Reserved.
 */

package com.ibm.mil.readyapps.telco.usage;

import android.content.Context;
import android.content.res.Resources;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.ibm.mil.readyapps.telco.R;
import com.ibm.mil.readyapps.telco.utils.PlanConstants;
import com.ibm.mil.readyapps.telco.views.TelcoUsageView;
import com.yqritc.recyclerviewmultipleviewtypesadapter.DataBindAdapter;
import com.yqritc.recyclerviewmultipleviewtypesadapter.DataBinder;

import butterknife.Bind;
import butterknife.ButterKnife;

/**
 * Binder to append the user text/talk usage information
 * to the corresponding recyclerView ViewHolder
 */
public class IncomingOutgoingBinder extends DataBinder<IncomingOutgoingBinder.UsageViewHolder> {
    Usage currentUsage;
    Context context;
    Resources resources;

    /**
     * Constructor to initialize the cycle binder
     *
     * @param adapter the adapter that uses this binder to populate the recyclerView
     * @param context context from the main activity
     *               used to access application resources
     */
    public IncomingOutgoingBinder(DataBindAdapter adapter, Context context) {
        super(adapter);
        this.context = context;
        resources = context.getResources();
    }

    /**
     * creates a new ViewHolder using the provided xml layout
     *
     * @param viewGroup the parent ViewGroup that this ViewHolder will inflate
     * specifies the xml layout that the binder should use to create the view
     * @return the inflated view
     */
    @Override
    public UsageViewHolder newViewHolder(ViewGroup viewGroup) {
        View usageView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.incoming_outgoing, viewGroup,
                false);
        return new UsageViewHolder(usageView);
    }

    /**
     * @param usageViewHolder the ViewHolder to use onBind
     *                   has all the associated views in this layout
     * @param position the position of this ViewHolder in the binder
     */
    @Override
    public void bindViewHolder(UsageViewHolder usageViewHolder, int position) {
        if (currentUsage.getType() == PlanConstants.TEXT) {
            usageViewHolder.incomingBar
                    .setImageSource(ResourcesCompat.getDrawable(resources, R.drawable.intext, null));
            usageViewHolder.outgoingBar
                    .setImageSource(ResourcesCompat.getDrawable(resources, R.drawable.outtext, null));
            usageViewHolder.incomingBar
                    .setBottomRightText(currentUsage.getIncoming() + " " + PlanConstants.TEXT_UNIT);
            usageViewHolder.outgoingBar
                    .setBottomRightText(currentUsage.getOutgoing() + " " + PlanConstants.TEXT_UNIT);
        } else {
            usageViewHolder.incomingBar
                    .setBottomRightText(currentUsage.getIncoming() + " " + PlanConstants.TALK_UNIT);
            usageViewHolder.outgoingBar
                    .setBottomRightText(currentUsage.getOutgoing() + " " + PlanConstants.TALK_UNIT);
        }
        usageViewHolder.incomingBar.setPercentUsed((currentUsage.getIncoming() * 100) / currentUsage.getTotal());
        usageViewHolder.outgoingBar.setPercentUsed((currentUsage.getOutgoing() * 100) / currentUsage.getTotal());
    }

    @Override
    public int getItemCount() {
        return 1;
    }

    /**
     * @param usage to add to the offers list
     */
    public void add(Usage usage) {
        currentUsage = usage;
        notifyBinderDataSetChanged();
    }

    /**
     * Define the UsageViewHolder
     * inject views that need to be updated in the ViewHolder onBind
     */
    public class UsageViewHolder extends RecyclerView.ViewHolder {
        @Bind(R.id.incomingBar)
        TelcoUsageView incomingBar;
        @Bind(R.id.outgoingBar)
        TelcoUsageView outgoingBar;

        public UsageViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }
}