com.hitesh_sahu.retailapp.view.adapter.ShoppingListAdapter.java Source code

Java tutorial

Introduction

Here is the source code for com.hitesh_sahu.retailapp.view.adapter.ShoppingListAdapter.java

Source

/*
 * Copyright (C) 2015 Paul Burke
 *
 * 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
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.hitesh_sahu.retailapp.view.adapter;

import android.content.Context;
import android.graphics.Color;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.widget.RecyclerView;
import android.text.Spannable;
import android.text.Spanned;
import android.text.style.StrikethroughSpan;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TextView.BufferType;

import com.bumptech.glide.Glide;
import com.hitesh_sahu.retailapp.R;
import com.hitesh_sahu.retailapp.model.CenterRepository;
import com.hitesh_sahu.retailapp.model.entities.Money;
import com.hitesh_sahu.retailapp.model.entities.Product;
import com.hitesh_sahu.retailapp.util.ColorGenerator;
import com.hitesh_sahu.retailapp.util.Utils;
import com.hitesh_sahu.retailapp.view.activities.ECartHomeActivity;
import com.hitesh_sahu.retailapp.view.customview.ItemTouchHelperAdapter;
import com.hitesh_sahu.retailapp.view.customview.ItemTouchHelperViewHolder;
import com.hitesh_sahu.retailapp.view.customview.OnStartDragListener;
import com.hitesh_sahu.retailapp.view.customview.TextDrawable;
import com.hitesh_sahu.retailapp.view.customview.TextDrawable.IBuilder;
import com.hitesh_sahu.retailapp.view.fragment.MyCartFragment;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Simple RecyclerView.Adapter that implements {@link ItemTouchHelperAdapter} to
 * respond to move and dismiss events from a
 * {@link android.support.v7.widget.helper.ItemTouchHelper}.
 *
 * @author Hitesh Sahu (hiteshsahu.com)
 */
public class ShoppingListAdapter extends RecyclerView.Adapter<ShoppingListAdapter.ItemViewHolder>
        implements ItemTouchHelperAdapter {

    private final OnStartDragListener mDragStartListener;

    private ColorGenerator mColorGenerator = ColorGenerator.MATERIAL;

    private IBuilder mDrawableBuilder;

    private TextDrawable drawable;

    private String ImageUrl;

    private List<Product> productList = new ArrayList<Product>();
    private static OnItemClickListener clickListener;

    private Context context;

    public ShoppingListAdapter(Context context, OnStartDragListener dragStartListener) {
        mDragStartListener = dragStartListener;

        this.context = context;

        productList = CenterRepository.getCenterRepository().getListOfProductsInShoppingList();
    }

    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_product_list, parent, false);
        ItemViewHolder itemViewHolder = new ItemViewHolder(view);
        return itemViewHolder;
    }

    @Override
    public void onBindViewHolder(final ItemViewHolder holder, final int position) {
        holder.itemName.setText(productList.get(position).getItemName());

        holder.itemDesc.setText(productList.get(position).getItemShortDesc());

        String sellCostString = Money
                .rupees(BigDecimal.valueOf(Long.valueOf(productList.get(position).getSellMRP()))).toString() + "  ";

        String buyMRP = Money.rupees(BigDecimal.valueOf(Long.valueOf(productList.get(position).getMRP())))
                .toString();

        String costString = sellCostString + buyMRP;

        holder.itemCost.setText(costString, BufferType.SPANNABLE);

        Spannable spannable = (Spannable) holder.itemCost.getText();

        spannable.setSpan(new StrikethroughSpan(), sellCostString.length(), costString.length(),
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        mDrawableBuilder = TextDrawable.builder().beginConfig().withBorder(4).endConfig().roundRect(10);

        drawable = mDrawableBuilder.build(String.valueOf(productList.get(position).getItemName().charAt(0)),
                mColorGenerator.getColor(productList.get(position).getItemName()));

        ImageUrl = productList.get(position).getImageURL();

        holder.quanitity.setText(CenterRepository.getCenterRepository().getListOfProductsInShoppingList()
                .get(position).getQuantity());

        Glide.with(context).load(ImageUrl).placeholder(drawable).error(drawable).animate(R.anim.base_slide_right_in)
                .centerCrop().into(holder.imagView);

        // Start a drag whenever the handle view it touched
        holder.imagView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
                    mDragStartListener.onStartDrag(holder);
                }
                return false;
            }
        });

        holder.addItem.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                CenterRepository.getCenterRepository().getListOfProductsInShoppingList().get(position)
                        .setQuantity(String.valueOf(

                                Integer.valueOf(CenterRepository.getCenterRepository()
                                        .getListOfProductsInShoppingList().get(position).getQuantity()) + 1));

                holder.quanitity.setText(CenterRepository.getCenterRepository().getListOfProductsInShoppingList()
                        .get(position).getQuantity());

                Utils.vibrate(context);

                ((ECartHomeActivity) context).updateCheckOutAmount(BigDecimal.valueOf(Long.valueOf(CenterRepository
                        .getCenterRepository().getListOfProductsInShoppingList().get(position).getSellMRP())),
                        true);

            }
        });

        holder.removeItem.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                if (Integer.valueOf(CenterRepository.getCenterRepository().getListOfProductsInShoppingList()
                        .get(position).getQuantity()) > 2) {

                    CenterRepository.getCenterRepository().getListOfProductsInShoppingList().get(position)
                            .setQuantity(String.valueOf(

                                    Integer.valueOf(CenterRepository.getCenterRepository()
                                            .getListOfProductsInShoppingList().get(position).getQuantity()) - 1));

                    holder.quanitity.setText(CenterRepository.getCenterRepository()
                            .getListOfProductsInShoppingList().get(position).getQuantity());

                    ((ECartHomeActivity) context).updateCheckOutAmount(
                            BigDecimal.valueOf(Long.valueOf(CenterRepository.getCenterRepository()
                                    .getListOfProductsInShoppingList().get(position).getSellMRP())),
                            false);

                    Utils.vibrate(context);
                }

                else if (Integer.valueOf(CenterRepository.getCenterRepository().getListOfProductsInShoppingList()
                        .get(position).getQuantity()) == 1) {
                    ((ECartHomeActivity) context).updateItemCount(false);

                    ((ECartHomeActivity) context).updateCheckOutAmount(
                            BigDecimal.valueOf(Long.valueOf(CenterRepository.getCenterRepository()
                                    .getListOfProductsInShoppingList().get(position).getSellMRP())),
                            false);

                    CenterRepository.getCenterRepository().getListOfProductsInShoppingList().remove(position);

                    if (Integer.valueOf(((ECartHomeActivity) context).getItemCount()) == 0) {

                        MyCartFragment.updateMyCartFragment(false);

                    }

                    Utils.vibrate(context);

                }

            }
        });
    }

    @Override
    public void onItemDismiss(int position) {

        ((ECartHomeActivity) context).updateItemCount(false);

        ((ECartHomeActivity) context).updateCheckOutAmount(BigDecimal.valueOf(Long.valueOf(CenterRepository
                .getCenterRepository().getListOfProductsInShoppingList().get(position).getSellMRP())), false);

        CenterRepository.getCenterRepository().getListOfProductsInShoppingList().remove(position);

        if (Integer.valueOf(((ECartHomeActivity) context).getItemCount()) == 0) {

            MyCartFragment.updateMyCartFragment(false);

        }

        Utils.vibrate(context);

        // productList.remove(position);
        notifyItemRemoved(position);
    }

    @Override
    public boolean onItemMove(int fromPosition, int toPosition) {

        Collections.swap(productList, fromPosition, toPosition);
        notifyItemMoved(fromPosition, toPosition);
        return true;
    }

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

    }

    /**
     * Simple example of a view holder that implements
     * {@link ItemTouchHelperViewHolder} and has a "handle" view that initiates
     * a drag event when touched.
     */
    public static class ItemViewHolder extends RecyclerView.ViewHolder
            implements ItemTouchHelperViewHolder, View.OnClickListener {

        // public final ImageView handleView;

        TextView itemName, itemDesc, itemCost, availability, quanitity, addItem, removeItem;
        ImageView imagView;

        public ItemViewHolder(View itemView) {
            super(itemView);
            // handleView = (ImageView) itemView.findViewById(R.id.handle);

            itemName = (TextView) itemView.findViewById(R.id.item_name);

            itemDesc = (TextView) itemView.findViewById(R.id.item_short_desc);

            itemCost = (TextView) itemView.findViewById(R.id.item_price);

            availability = (TextView) itemView.findViewById(R.id.iteam_avilable);

            quanitity = (TextView) itemView.findViewById(R.id.iteam_amount);

            itemName.setSelected(true);

            imagView = ((ImageView) itemView.findViewById(R.id.product_thumb));

            addItem = ((TextView) itemView.findViewById(R.id.add_item));

            removeItem = ((TextView) itemView.findViewById(R.id.remove_item));

            itemView.setOnClickListener(this);
        }

        @Override
        public void onItemSelected() {
            itemView.setBackgroundColor(Color.LTGRAY);
        }

        @Override
        public void onItemClear() {
            itemView.setBackgroundColor(0);
        }

        @Override
        public void onClick(View v) {

            clickListener.onItemClick(v, getPosition());
        }
    }

    public interface OnItemClickListener {
        public void onItemClick(View view, int position);
    }

    public void SetOnItemClickListener(final OnItemClickListener itemClickListener) {
        this.clickListener = itemClickListener;
    }
}