Advertisement
vergepuppeter

NoteMessageAdapter

Nov 22nd, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.38 KB | None | 0 0
  1. package com.seesharp.app.iuvo.carehub4u.MyNote.Adapter;
  2.  
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.support.v7.widget.RecyclerView;
  6. import android.text.TextUtils;
  7. import android.util.Log;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11.  
  12. import com.seesharp.app.iuvo.carehub4u.Login.Model.Login;
  13. import com.seesharp.app.iuvo.carehub4u.MyNote.Adapter.ViewHolder.ChatTextImageViewHolder;
  14. import com.seesharp.app.iuvo.carehub4u.MyNote.Adapter.ViewHolder.ChatTextViewHolder;
  15. import com.seesharp.app.iuvo.carehub4u.MyNote.Adapter.ViewHolder.DateViewHolder;
  16. import com.seesharp.app.iuvo.carehub4u.MyNote.Model.DateItem;
  17. import com.seesharp.app.iuvo.carehub4u.MyNote.Model.GeneralItem;
  18. import com.seesharp.app.iuvo.carehub4u.MyNote.Model.ListItem;
  19. import com.seesharp.app.iuvo.carehub4u.MyNote.Model.Message;
  20. import com.seesharp.app.iuvo.carehub4u.R;
  21. import com.seesharp.app.iuvo.carehub4u.Utils.Constant;
  22. import com.seesharp.app.iuvo.carehub4u.ZoomableImageViewActivity;
  23.  
  24. import java.util.ArrayList;
  25. import java.util.Collections;
  26. import java.util.Comparator;
  27. import java.util.HashMap;
  28. import java.util.LinkedHashMap;
  29. import java.util.LinkedList;
  30. import java.util.List;
  31. import java.util.Map;
  32.  
  33. /**
  34.  * Created by Developer on 24/08/2017.
  35.  */
  36.  
  37. public class NoteMessageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  38.  
  39.     private Context context;
  40.     private ArrayList<ListItem> messages = new ArrayList<>();
  41.     private Login login;
  42.     private OnRequestDownloadUrlListener onRequestDownloadUrlListener;
  43.  
  44.     public  NoteMessageAdapter(Context context, Login login, OnRequestDownloadUrlListener onRequestDownloadUrlListener) {
  45.         this.context = context;
  46.         this.login = login;
  47.         this.onRequestDownloadUrlListener = onRequestDownloadUrlListener;
  48.     }
  49.  
  50.     @Override
  51.     public int getItemViewType(int position) {
  52.         if(messages.get(position).getType() == ListItem.TYPE_GENERAL){
  53.             GeneralItem generalItem = (GeneralItem) messages.get(position);
  54.             Message m = generalItem.getMessage();
  55.             if(login.getUserId().equals(m.getUserId())) {
  56.                 if(!TextUtils.isEmpty(m.getContentType()))
  57.                     return ListItem.TYPE_RIGHT_IMAGE;
  58.                 else
  59.                     return ListItem.TYPE_RIGHT_NORMAL;
  60.             }
  61.             else{
  62.                 if(!TextUtils.isEmpty(m.getContentType()))
  63.                     return ListItem.TYPE_LEFT_IMAGE;
  64.                 else
  65.                     return ListItem.TYPE_LEFT_NORMAL;
  66.             }
  67.         }
  68.         else
  69.             return ListItem.TYPE_DATE;
  70. //        Message m = messages.get(position);
  71. //        if(login.getUserId().equals(m.getUserId())) {
  72. //            if(!TextUtils.isEmpty(m.getContentType()))
  73. //                return 2;
  74. //            else
  75. //                return 1;
  76. //        }
  77. //        else
  78. //            return 0;
  79.     }
  80.  
  81.     @Override
  82.     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  83.         final RecyclerView.ViewHolder chatTextViewHolder;
  84.         switch (viewType){
  85.             case ListItem.TYPE_DATE:{
  86.                 View v = LayoutInflater.from(context).inflate(R.layout.chat_date_item_layout, parent, false);
  87.                 return new DateViewHolder(v);
  88.             }
  89.             case ListItem.TYPE_RIGHT_NORMAL:{
  90.                 View v = LayoutInflater.from(context).inflate(R.layout.chat_item_layout_right, parent, false);
  91.                 return new ChatTextViewHolder(v);
  92.             }
  93.             case ListItem.TYPE_RIGHT_IMAGE: {
  94.                 View v = LayoutInflater.from(context).inflate(R.layout.chat_item_layout_right_full_image, parent, false);
  95.                 chatTextViewHolder = new ChatTextImageViewHolder(v);
  96.                 ((ChatTextImageViewHolder) chatTextViewHolder).chatView.setOnClickListener(new View.OnClickListener() {
  97.                     @Override
  98.                     public void onClick(View v) {
  99.                         GeneralItem generalItem = (GeneralItem) messages.get(chatTextViewHolder.getAdapterPosition());
  100.                         Message m = generalItem.getMessage();
  101.                         if (!TextUtils.isEmpty(m.getContentType())) {
  102.                             if (!TextUtils.isEmpty(m.getFilePath())) {
  103.                                 Intent intent = new Intent(context, ZoomableImageViewActivity.class);
  104.                                 intent.putExtra(ZoomableImageViewActivity.IMAGE_URL, m.getFilePath());
  105.                                 context.startActivity(intent);
  106.                             } else {
  107.                                 if (null != onRequestDownloadUrlListener)
  108.                                     onRequestDownloadUrlListener.onDownloadRequest(chatTextViewHolder.getAdapterPosition(), m.getGuid());
  109.                             }
  110.                         }
  111.                     }
  112.                 });
  113.                 return chatTextViewHolder;
  114.             }
  115.             case ListItem.TYPE_LEFT_NORMAL:{
  116.                 View v = LayoutInflater.from(context).inflate(R.layout.chat_item_layout_left, parent, false);
  117.                 chatTextViewHolder = new ChatTextViewHolder(v);
  118.                 return chatTextViewHolder;
  119.             }
  120.             case ListItem.TYPE_LEFT_IMAGE:{
  121.                 View v = LayoutInflater.from(context).inflate(R.layout.chat_item_layout_left_full_image, parent, false);
  122.                 chatTextViewHolder = new ChatTextImageViewHolder(v);
  123.                 ((ChatTextImageViewHolder) chatTextViewHolder).chatView.setOnClickListener(new View.OnClickListener() {
  124.                     @Override
  125.                     public void onClick(View v) {
  126.                         GeneralItem generalItem = (GeneralItem) messages.get(chatTextViewHolder.getAdapterPosition());
  127.                         Message m = generalItem.getMessage();
  128.                         if (!TextUtils.isEmpty(m.getContentType())) {
  129.                             if (!TextUtils.isEmpty(m.getFilePath())) {
  130.                                 Intent intent = new Intent(context, ZoomableImageViewActivity.class);
  131.                                 intent.putExtra(ZoomableImageViewActivity.IMAGE_URL, m.getFilePath());
  132.                                 context.startActivity(intent);
  133.                             } else {
  134.                                 if (null != onRequestDownloadUrlListener)
  135.                                     onRequestDownloadUrlListener.onDownloadRequest(chatTextViewHolder.getAdapterPosition(), m.getGuid());
  136.                             }
  137.                         }
  138.                     }
  139.                 });
  140.                 return chatTextViewHolder;
  141.             }
  142.             default:{
  143.                 View v = LayoutInflater.from(context).inflate(R.layout.chat_item_layout_left, parent, false);
  144.                 return new ChatTextViewHolder(v);
  145.             }
  146.         }
  147.     }
  148.  
  149.     @Override
  150.     public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  151.         switch (holder.getItemViewType()) {
  152.             case ListItem.TYPE_DATE:
  153.                 DateItem dateItem = (DateItem) messages.get(position);
  154.                 ((DateViewHolder)holder).bind(dateItem);
  155.                 break;
  156.             case ListItem.TYPE_RIGHT_NORMAL:{
  157.                 GeneralItem generalItem = (GeneralItem) messages.get(position);
  158.                 Message m = generalItem.getMessage();
  159.                 ((ChatTextViewHolder)holder).bind(m);
  160.             }
  161.                 break;
  162.             case ListItem.TYPE_RIGHT_IMAGE: {
  163.                 GeneralItem generalItem = (GeneralItem) messages.get(position);
  164.                 Message m = generalItem.getMessage();
  165.                 ((ChatTextImageViewHolder)holder).bind(m);
  166.             }
  167.                 break;
  168.             case ListItem.TYPE_LEFT_IMAGE:{
  169.                 GeneralItem generalItem = (GeneralItem) messages.get(position);
  170.                 Message m = generalItem.getMessage();
  171.                 ((ChatTextViewHolder)holder).bind(m);
  172.             }
  173.                 break;
  174.             case ListItem.TYPE_LEFT_NORMAL:{
  175.                 GeneralItem generalItem = (GeneralItem) messages.get(position);
  176.                 Message m = generalItem.getMessage();
  177.                 ((ChatTextViewHolder)holder).bind(m);
  178.             }
  179.                 break;
  180.         }
  181.     }
  182.  
  183.     @Override
  184.     public int getItemCount() {
  185.         return messages != null ? messages.size() : 0;
  186.     }
  187.  
  188.     public void updateMessage(ArrayList<Message> messages){
  189.  
  190.         HashMap<String, ArrayList<Message>> groupedHashMap = groupDataIntoHashMap(messages);
  191.         for (String date : groupedHashMap.keySet()) {
  192.             for (Message message : groupedHashMap.get(date)) {
  193.                 GeneralItem generalItem = new GeneralItem();
  194.                 generalItem.setMessage(message);
  195.                 this.messages.add(generalItem);
  196.             }
  197.  
  198.             DateItem dateItem = new DateItem();
  199.             dateItem.setDate(date);
  200.             this.messages.add(dateItem);
  201.         }
  202.  
  203.         for(ListItem listItem: this.messages){
  204.             if(listItem instanceof GeneralItem){
  205.  
  206.             }
  207.             else{
  208.  
  209.             }
  210.         }
  211.  
  212.         notifyDataSetChanged();
  213.  
  214. //        if(null != messages){
  215. //            this.messages.addAll(messages);
  216. //            Collections.sort(this.messages, Collections.reverseOrder());
  217. //            //check date here
  218. //            for(int i = 0; i < this.messages.size(); i++){
  219. //
  220. //                File[] files = Utils.isFileExist(this.messages.get(i).getGuid());
  221. //                if(null != files)
  222. //                    this.messages.get(i).setFilePath(files[0].getAbsolutePath());
  223. //
  224. //                if(i == 0){
  225. //                    this.messages.get(i).setShowDate(true);
  226. //                }
  227. //                else {
  228. //                    Message m1 = this.messages.get(i);
  229. //                    Message m2 = this.messages.get(i - 1);
  230. //                    DateTime dt1 = new DateTime((Long.parseLong(m1.getCreatedDateTime()) - Constant.TICKS_AT_EPOCH) / Constant.TICKS_PER_MILLISECOND, DateTimeZone.forTimeZone(TimeZone.getDefault()));
  231. //                    DateTime dt2 = new DateTime((Long.parseLong(m2.getCreatedDateTime()) - Constant.TICKS_AT_EPOCH) / Constant.TICKS_PER_MILLISECOND, DateTimeZone.forTimeZone(TimeZone.getDefault()));
  232. //                    if(dt1.toLocalDate().isBefore(dt2.toLocalDate())){
  233. //                        this.messages.get(i).setShowDate(true);
  234. //                    }
  235. //                    else if(dt1.toLocalDate().isEqual(dt2.toLocalDate())){
  236. //                        this.messages.get(i).setShowDate(false);
  237. //                    }
  238. //                    else if(dt1.toLocalDate().isAfter(dt2.toLocalDate())){
  239. //                        this.messages.get(i).setShowDate(true);
  240. //                    }
  241. //                }
  242. //            }
  243. //
  244. //            notifyDataSetChanged();
  245. //        }
  246.     }
  247.  
  248.     public void validateFile(int position, String filePath){
  249.         //this.messages.get(position).setFilePath(filePath);
  250.         GeneralItem generalItem = (GeneralItem) messages.get(position);
  251.         generalItem.getMessage().setFilePath(filePath);
  252.         notifyItemChanged(position);
  253.     }
  254.  
  255.     public interface OnRequestDownloadUrlListener{
  256.         void onDownloadRequest(int position, String guid);
  257.     }
  258.  
  259.     private HashMap<String, ArrayList<Message>> groupDataIntoHashMap(ArrayList<Message> messages) {
  260.  
  261.         HashMap<String, ArrayList<Message>> groupedHashMap = new HashMap<>();
  262.         for(Message message : messages) {
  263.             String hashMapKey = Constant.convertLongDateToString(Long.parseLong(message.getCreatedDateTime()));
  264.             Log.i("HashMap", hashMapKey+","+message.getContentType()+","+message.getMessage()+","+message.getUserName());
  265.             if(groupedHashMap.containsKey(hashMapKey)) {
  266.                 // The key is already in the HashMap; add the pojo object
  267.                 // against the existing key.
  268.                 groupedHashMap.get(hashMapKey).add(message);
  269.             } else {
  270.                 // The key is not there in the HashMap; create a new key-value pair
  271.                 groupedHashMap.put(hashMapKey, new ArrayList<Message>());
  272.             }
  273.         }
  274.  
  275.         return sortByComparator(groupedHashMap, false);
  276.     }
  277.  
  278.     private static HashMap<String, ArrayList<Message>> sortByComparator(HashMap<String, ArrayList<Message>> unsortMap, final boolean order) {
  279.  
  280.         List<Map.Entry<String, ArrayList<Message>>> list = new LinkedList<Map.Entry<String, ArrayList<Message>>>(unsortMap.entrySet());
  281.  
  282.         // Sorting the list based on values
  283.         Collections.sort(list, new Comparator<Map.Entry<String, ArrayList<Message>>>() {
  284.             public int compare(Map.Entry<String, ArrayList<Message>> o1,
  285.                                Map.Entry<String, ArrayList<Message>> o2) {
  286.                 if (order)
  287.                     return o1.getKey().compareTo(o2.getKey());
  288.                 else
  289.                     return o2.getKey().compareTo(o1.getKey());
  290.             }
  291.         });
  292.  
  293.         // Maintaining insertion order with the help of LinkedList
  294.         HashMap<String, ArrayList<Message>> sortedMap = new LinkedHashMap<String, ArrayList<Message>>();
  295.         for (Map.Entry<String, ArrayList<Message>> entry : list) {
  296.             sortedMap.put(entry.getKey(), entry.getValue());
  297.         }
  298.         return sortedMap;
  299.     }
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement