alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 1 | package com.savoirfairelinux.sflphone.adapters; |
| 2 | |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 3 | import java.text.SimpleDateFormat; |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 4 | import java.util.ArrayList; |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 5 | import java.util.Calendar; |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 6 | import java.util.HashMap; |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 7 | import java.util.Locale; |
| 8 | import java.util.TimeZone; |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 9 | import java.util.concurrent.ExecutorService; |
| 10 | import java.util.concurrent.Executors; |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 11 | |
| 12 | import android.app.Activity; |
| 13 | import android.content.Context; |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 14 | import android.util.Log; |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 15 | import android.view.LayoutInflater; |
| 16 | import android.view.View; |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 17 | import android.view.View.OnClickListener; |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 18 | import android.view.ViewGroup; |
| 19 | import android.widget.BaseAdapter; |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 20 | import android.widget.ImageButton; |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 21 | import android.widget.ImageView; |
| 22 | import android.widget.TextView; |
| 23 | |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 24 | import com.savoirfairelinux.sflphone.R; |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 25 | import com.savoirfairelinux.sflphone.fragments.HistoryFragment; |
| 26 | import com.savoirfairelinux.sflphone.model.HistoryEntry; |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 27 | import com.savoirfairelinux.sflphone.service.ServiceConstants; |
| 28 | |
| 29 | public class HistoryAdapter extends BaseAdapter { |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 30 | |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 31 | HistoryFragment mContext; |
| 32 | ArrayList<HistoryEntry> dataset; |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 33 | private static final String TAG = HistoryAdapter.class.getSimpleName(); |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 34 | private ExecutorService infos_fetcher = Executors.newCachedThreadPool(); |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 35 | |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 36 | |
| 37 | |
| 38 | public HistoryAdapter(HistoryFragment activity, ArrayList<HistoryEntry> history) { |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 39 | mContext = activity; |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 40 | dataset = history; |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 41 | } |
| 42 | |
| 43 | @Override |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 44 | public View getView(final int pos, View convertView, ViewGroup arg2) { |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 45 | View rowView = convertView; |
| 46 | HistoryView entryView = null; |
| 47 | |
| 48 | if (rowView == null) { |
| 49 | // Get a new instance of the row layout view |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 50 | LayoutInflater inflater = LayoutInflater.from(mContext.getActivity()); |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 51 | rowView = inflater.inflate(R.layout.item_history, null); |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 52 | |
| 53 | // Hold the view objects in an object |
| 54 | // so they don't need to be re-fetched |
| 55 | entryView = new HistoryView(); |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 56 | entryView.photo = (ImageView) rowView.findViewById(R.id.photo); |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 57 | entryView.displayName = (TextView) rowView.findViewById(R.id.display_name); |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 58 | entryView.duration = (TextView) rowView.findViewById(R.id.duration); |
| 59 | entryView.date = (TextView) rowView.findViewById(R.id.date_start); |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 60 | entryView.call_button = (ImageButton) rowView.findViewById(R.id.action_call); |
| 61 | entryView.call_button.setOnClickListener(new OnClickListener() { |
| 62 | |
| 63 | @Override |
| 64 | public void onClick(View v) { |
| 65 | mContext.makeNewCall(pos); |
| 66 | |
| 67 | } |
| 68 | } ); |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 69 | rowView.setTag(entryView); |
| 70 | } else { |
| 71 | entryView = (HistoryView) rowView.getTag(); |
| 72 | } |
| 73 | |
| 74 | // Transfer the stock data from the data object |
| 75 | // to the view objects |
| 76 | |
| 77 | // SipCall call = (SipCall) mCallList.values().toArray()[position]; |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 78 | entryView.displayName.setText(dataset.get(pos).getContact().getmDisplayName()); |
| 79 | |
| 80 | infos_fetcher.execute(new ContactPictureLoader(mContext.getActivity(), entryView.photo, dataset.get(pos).getContact().getId())); |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 81 | |
| 82 | |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 83 | |
| 84 | entryView.date.setText(dataset.get(pos).getCalls().lastEntry().getValue().getDate("yyyy-MM-dd")); |
| 85 | entryView.duration.setText(dataset.get(pos).getTotalDuration()); |
| 86 | |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 87 | |
| 88 | return rowView; |
| 89 | |
| 90 | } |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 91 | |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 92 | |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 93 | |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 94 | /********************* |
| 95 | * ViewHolder Pattern |
| 96 | *********************/ |
| 97 | public class HistoryView { |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 98 | public ImageView photo; |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 99 | protected TextView displayName; |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 100 | protected TextView date; |
| 101 | public TextView duration; |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 102 | private ImageButton call_button; |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 103 | } |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 104 | |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 105 | @Override |
| 106 | public int getCount() { |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 107 | |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 108 | return dataset.size(); |
| 109 | } |
| 110 | |
| 111 | @Override |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 112 | public HistoryEntry getItem(int pos) { |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 113 | return dataset.get(pos); |
| 114 | } |
| 115 | |
| 116 | @Override |
| 117 | public long getItemId(int arg0) { |
| 118 | return 0; |
| 119 | } |
| 120 | |
| 121 | public void clear() { |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 122 | dataset.clear(); |
| 123 | |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 124 | } |
| 125 | |
| 126 | public void addAll(ArrayList<HashMap<String, String>> history) { |
alision | 2ec64f9 | 2013-06-17 17:28:58 -0400 | [diff] [blame^] | 127 | // dataset.addAll(history); |
alision | 73424b6 | 2013-04-26 11:49:18 -0400 | [diff] [blame] | 128 | |
alision | e2a38e1 | 2013-04-25 14:20:20 -0400 | [diff] [blame] | 129 | } |
| 130 | |
| 131 | } |