* #26410 Button added in history, replay/stop working
diff --git a/src/com/savoirfairelinux/sflphone/fragments/HistoryFragment.java b/src/com/savoirfairelinux/sflphone/fragments/HistoryFragment.java
index e141b5b..8a2e0a2 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/HistoryFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/HistoryFragment.java
@@ -32,6 +32,8 @@
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
import android.app.Activity;
import android.app.ListFragment;
@@ -42,18 +44,22 @@
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
-import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.adapters.HistoryAdapter;
+import com.savoirfairelinux.sflphone.adapters.ContactPictureLoader;
import com.savoirfairelinux.sflphone.loaders.HistoryLoader;
import com.savoirfairelinux.sflphone.loaders.LoaderConstants;
-import com.savoirfairelinux.sflphone.model.CallContact;
import com.savoirfairelinux.sflphone.model.HistoryEntry;
-import com.savoirfairelinux.sflphone.model.SipCall;
import com.savoirfairelinux.sflphone.service.ISipService;
public class HistoryFragment extends ListFragment implements LoaderCallbacks<ArrayList<HistoryEntry>> {
@@ -140,7 +146,7 @@
HistoryLoader loader = new HistoryLoader(getActivity(), mCallbacks.getService());
loader.forceLoad();
return loader;
-
+
}
@Override
@@ -157,4 +163,137 @@
}
+ public class HistoryAdapter extends BaseAdapter {
+
+ HistoryFragment mContext;
+ ArrayList<HistoryEntry> dataset;
+ private ExecutorService infos_fetcher = Executors.newCachedThreadPool();
+
+ public HistoryAdapter(HistoryFragment activity, ArrayList<HistoryEntry> history) {
+ mContext = activity;
+ dataset = history;
+ }
+
+ @Override
+ public View getView(final int pos, View convertView, ViewGroup arg2) {
+ View rowView = convertView;
+ HistoryView entryView = null;
+
+ if (rowView == null) {
+ // Get a new instance of the row layout view
+ LayoutInflater inflater = LayoutInflater.from(mContext.getActivity());
+ rowView = inflater.inflate(R.layout.item_history, null);
+
+ // Hold the view objects in an object
+ // so they don't need to be re-fetched
+ entryView = new HistoryView();
+ entryView.photo = (ImageView) rowView.findViewById(R.id.photo);
+ entryView.displayName = (TextView) rowView.findViewById(R.id.display_name);
+ entryView.duration = (TextView) rowView.findViewById(R.id.duration);
+ entryView.date = (TextView) rowView.findViewById(R.id.date_start);
+ entryView.missed = (TextView) rowView.findViewById(R.id.missed);
+ entryView.incoming = (TextView) rowView.findViewById(R.id.incomings);
+ entryView.outgoing = (TextView) rowView.findViewById(R.id.outgoings);
+ entryView.replay = (Button) rowView.findViewById(R.id.replay);
+ entryView.call_button = (ImageButton) rowView.findViewById(R.id.action_call);
+ entryView.call_button.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ mContext.makeNewCall(pos);
+
+ }
+ });
+ rowView.setTag(entryView);
+ } else {
+ entryView = (HistoryView) rowView.getTag();
+ }
+
+ // Transfer the stock data from the data object
+ // to the view objects
+
+ // SipCall call = (SipCall) mCallList.values().toArray()[position];
+ entryView.displayName.setText(dataset.get(pos).getContact().getmDisplayName());
+
+ infos_fetcher.execute(new ContactPictureLoader(mContext.getActivity(), entryView.photo, dataset.get(pos).getContact().getId()));
+
+ entryView.missed.setText("Missed:" + dataset.get(pos).getMissed_sum());
+ entryView.incoming.setText("In:" + dataset.get(pos).getIncoming_sum());
+ entryView.outgoing.setText("Out:" + dataset.get(pos).getOutgoing_sum());
+
+ if (dataset.get(pos).getCalls().lastEntry().getValue().getRecordPath().length() > 0) {
+ entryView.replay.setVisibility(View.VISIBLE);
+ entryView.replay.setTag(R.id.replay, true);
+ entryView.replay.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ try {
+ if ((Boolean) v.getTag(R.id.replay)) {
+ mCallbacks.getService().startRecordedFilePlayback(dataset.get(pos).getCalls().lastEntry().getValue().getRecordPath());
+ v.setTag(R.id.replay, false);
+ ((Button)v).setText("Stop");
+ } else {
+ mCallbacks.getService().stopRecordedFilePlayback(dataset.get(pos).getCalls().lastEntry().getValue().getRecordPath());
+ v.setTag(R.id.replay, true);
+ ((Button)v).setText("Replay");
+ }
+ } catch (RemoteException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+
+ entryView.date.setText(dataset.get(pos).getCalls().lastEntry().getValue().getDate("yyyy-MM-dd"));
+ entryView.duration.setText(dataset.get(pos).getTotalDuration());
+
+ return rowView;
+
+ }
+
+ /*********************
+ * ViewHolder Pattern
+ *********************/
+ public class HistoryView {
+ public ImageView photo;
+ protected TextView displayName;
+ protected TextView date;
+ public TextView duration;
+ private ImageButton call_button;
+ private Button replay;
+ private TextView missed;
+ private TextView outgoing;
+ private TextView incoming;
+ }
+
+ @Override
+ public int getCount() {
+
+ return dataset.size();
+ }
+
+ @Override
+ public HistoryEntry getItem(int pos) {
+ return dataset.get(pos);
+ }
+
+ @Override
+ public long getItemId(int arg0) {
+ return 0;
+ }
+
+ public void clear() {
+ dataset.clear();
+
+ }
+
+ public void addAll(ArrayList<HashMap<String, String>> history) {
+ // dataset.addAll(history);
+
+ }
+
+ }
+
}