* #30152: refactoring
diff --git a/src/com/savoirfairelinux/sflphone/account/CallDetailsHandler.java b/src/com/savoirfairelinux/sflphone/account/CallDetailsHandler.java
index 1731113..636a63c 100644
--- a/src/com/savoirfairelinux/sflphone/account/CallDetailsHandler.java
+++ b/src/com/savoirfairelinux/sflphone/account/CallDetailsHandler.java
@@ -1,16 +1,59 @@
+/*
+ *  Copyright (C) 2004-2013 Savoir-Faire Linux Inc.
+ *
+ *  Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Additional permission under GNU GPL version 3 section 7:
+ *
+ *  If you modify this program, or any covered work, by linking or
+ *  combining it with the OpenSSL project's OpenSSL library (or a
+ *  modified version of that library), containing parts covered by the
+ *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
+ *  grants you additional permission to convey the resulting work.
+ *  Corresponding Source for a non-source form of such a combination
+ *  shall include the source code for the parts of OpenSSL used as well
+ *  as that of the covered work.
+ */
+
 package com.savoirfairelinux.sflphone.account;
 
 import java.util.HashMap;
 
+import android.util.Log;
+
 import com.savoirfairelinux.sflphone.service.ServiceConstants;
 import com.savoirfairelinux.sflphone.service.StringMap;
 
 public class CallDetailsHandler {
+    
+       private static String TAG = CallDetailsHandler.class.getSimpleName();
 
     public static HashMap<String, String> convertSwigToNative(StringMap swigmap) {
 
         HashMap<String, String> entry = new HashMap<String, String>();
 
+        Log.i(TAG, "CALL_TYPE: " + swigmap.get(ServiceConstants.call.CALL_TYPE));
+        Log.i(TAG, "PEER_NUMBER: " + swigmap.get(ServiceConstants.call.PEER_NUMBER));
+        Log.i(TAG, "DISPLAY_NAME: " + swigmap.get(ServiceConstants.call.DISPLAY_NAME));
+        Log.i(TAG, "CALL_STATE: " + swigmap.get(ServiceConstants.call.CALL_STATE));
+        Log.i(TAG, "CONF_ID" + swigmap.get(ServiceConstants.call.CONF_ID));
+        Log.i(TAG, "TIMESTAMP_START: " + swigmap.get(ServiceConstants.call.TIMESTAMP_START));
+        Log.i(TAG, "ACCOUNTID: " + swigmap.get(ServiceConstants.call.ACCOUNTID));
+        
         entry.put(ServiceConstants.call.CALL_TYPE, swigmap.get(ServiceConstants.call.CALL_TYPE));
         entry.put(ServiceConstants.call.PEER_NUMBER, swigmap.get(ServiceConstants.call.PEER_NUMBER));
         entry.put(ServiceConstants.call.DISPLAY_NAME, swigmap.get(ServiceConstants.call.DISPLAY_NAME));
diff --git a/src/com/savoirfairelinux/sflphone/client/CallActivity.java b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
index 4799565..bb26765 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
@@ -33,6 +33,7 @@
 
 package com.savoirfairelinux.sflphone.client;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 
 import android.app.Activity;
@@ -262,10 +263,19 @@
         try {
             HashMap<String, SipCall> callMap = (HashMap<String, SipCall>) service.getCallList();
             HashMap<String, Conference> confMap = (HashMap<String, Conference>) service.getConferenceList();
+
             if (callMap.size() == 0 && confMap.size() == 0) {
                 finish();
             }
+
+            if (callMap.size() > 0) {
+                ArrayList<SipCall> calls = new ArrayList<SipCall>(callMap.values());
+                HashMap<String, String> details = (HashMap<String, String>) service.getCallDetails(calls.get(0).getCallId());
+                
+                
+            }
         } catch (RemoteException e) {
+
             Log.e(TAG, e.toString());
         }
 
diff --git a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
index 7dd4f0e..6f01aea 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
@@ -48,6 +48,7 @@
 import android.view.SurfaceHolder.Callback;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import com.savoirfairelinux.sflphone.R;
@@ -58,7 +59,6 @@
 import com.savoirfairelinux.sflphone.model.Conference;
 import com.savoirfairelinux.sflphone.model.SipCall;
 import com.savoirfairelinux.sflphone.service.ISipService;
-import com.savoirfairelinux.sflphone.views.CounterTextView;
 
 public class CallFragment extends Fragment implements Callback {
 
@@ -71,7 +71,7 @@
 
     private Conference conf;
 
-    private CounterTextView callStatusTxt;
+    private TextView callStatusTxt;
     private BubblesView view;
     private BubbleModel model;
 
@@ -249,7 +249,7 @@
         view.setModel(model);
         view.getHolder().addCallback(this);
 
-        callStatusTxt = (CounterTextView) rootView.findViewById(R.id.call_status_txt);
+        callStatusTxt = (TextView) rootView.findViewById(R.id.call_status_txt);
 
         hangup_icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_hangup);
         call_icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_call);
diff --git a/src/com/savoirfairelinux/sflphone/fragments/HomeFragment.java b/src/com/savoirfairelinux/sflphone/fragments/HomeFragment.java
index eba51ee..166d926 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/HomeFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/HomeFragment.java
@@ -32,6 +32,8 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Observable;
+import java.util.Observer;
 
 import android.app.Activity;
 import android.app.Fragment;
@@ -43,16 +45,15 @@
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.BaseAdapter;
-import android.widget.Button;
 import android.widget.ListView;
 import android.widget.TextView;
 
 import com.savoirfairelinux.sflphone.R;
+import com.savoirfairelinux.sflphone.model.CallTimer;
 import com.savoirfairelinux.sflphone.model.Conference;
 import com.savoirfairelinux.sflphone.model.SipCall;
 import com.savoirfairelinux.sflphone.service.ISipService;
@@ -64,6 +65,7 @@
 //    Button access_calls;
     TextView nb_calls, nb_confs;
     CallListAdapter confs_adapter;
+    CallTimer timer; 
 
     private CallListAdapter calls_adapter;
 
@@ -113,7 +115,17 @@
         if (mCallbacks.getService() != null) {
             try {
 
+                timer = new CallTimer();
+                
                 updateLists();
+                
+                if(!calls_adapter.isEmpty() || !confs_adapter.isEmpty()){
+
+                    timer.addObserver(calls_adapter);
+                    timer.addObserver(confs_adapter);
+                    new Thread(timer).start();
+                }
+                
 
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
@@ -122,6 +134,7 @@
 
     }
 
+
     public void updateLists() throws RemoteException {
         HashMap<String, SipCall> calls = (HashMap<String, SipCall>) mCallbacks.getService().getCallList();
         HashMap<String, Conference> confs = (HashMap<String, Conference>) mCallbacks.getService().getConferenceList();
@@ -151,19 +164,22 @@
 
     @Override
     public void onDetach() {
+
         super.onDetach();
         mCallbacks = sDummyCallbacks;
+
     }
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
+
         super.onCreate(savedInstanceState);
-        // mAdapter = new CallElementAdapter(getActivity(), new ArrayList<SipCall>());
 
     }
 
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
+        
         super.onActivityCreated(savedInstanceState);
 
         // Give some text to display if there is no data. In a real
@@ -177,6 +193,7 @@
 
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+
         inflater.inflate(R.menu.call_element_menu, menu);
 
     }
@@ -209,7 +226,7 @@
     };
    
 
-    public class CallListAdapter extends BaseAdapter {
+    public class CallListAdapter extends BaseAdapter implements Observer {
 
         private ArrayList<Conference> calls;
 
@@ -222,6 +239,10 @@
 
         }
 
+        public ArrayList<Conference> getDataset() {
+            return calls;
+        }
+
         public void remove(Conference transfer) {
 
         }
@@ -266,6 +287,11 @@
             return convertView;
         }
 
+        @Override
+        public void update(Observable observable, Object data) {
+            Log.i(TAG,"Updating views...");
+        }
+
     }
 
 }
diff --git a/src/com/savoirfairelinux/sflphone/model/SipCall.java b/src/com/savoirfairelinux/sflphone/model/SipCall.java
index 7bc3e15..ff32e32 100644
--- a/src/com/savoirfairelinux/sflphone/model/SipCall.java
+++ b/src/com/savoirfairelinux/sflphone/model/SipCall.java
@@ -47,6 +47,7 @@
     private String mAccountID = "";
     private CallContact contact = null;
     private boolean isRecording = false;
+    private long timestamp_start = 0;
 
     public static final String USER_ID = "user_id";
 
@@ -142,6 +143,16 @@
         return mCallID;
     }
 
+    public long getTimestamp_start() {
+        return timestamp_start;
+    }
+
+
+    public void setTimestamp_start(long timestamp_start) {
+        this.timestamp_start = timestamp_start;
+    }
+
+
     public void setAccountID(String accountID) {
         mAccountID = accountID;
     }
diff --git a/src/com/savoirfairelinux/sflphone/service/SipService.java b/src/com/savoirfairelinux/sflphone/service/SipService.java
index 5ca1d9a..3211a33 100644
--- a/src/com/savoirfairelinux/sflphone/service/SipService.java
+++ b/src/com/savoirfairelinux/sflphone/service/SipService.java
@@ -263,7 +263,7 @@
 
     }
 
-    public HashMap<String, SipCall> getCurrent_calls() {
+    public HashMap<String, SipCall> getCurrent_calls() {     
         return current_calls;
     }
 
@@ -358,7 +358,11 @@
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.placeCall() thread running...");
                     callManagerJNI.placeCall(call.getAccountID(), call.getCallId(), call.getContact().getPhones().get(0).getNumber());
+                    
+                    HashMap<String, String> details = CallDetailsHandler.convertSwigToNative(callManagerJNI.getCallDetails(call.getCallId()));
+                    call.setTimestamp_start(Long.parseLong(details.get(ServiceConstants.call.TIMESTAMP_START)));
                     getCurrent_calls().put(call.getCallId(), call);
+                    
                 }
             });
         }
@@ -429,7 +433,7 @@
 
                 @Override
                 protected StringMap doRun() throws SameThreadException {
-                    Log.i(TAG, "SipService.getAccountDetails() thread running...");
+                    Log.i(TAG, "SipService.getCallDetails() thread running...");
                     return callManagerJNI.getCallDetails(id);
                 }
             }
diff --git a/src/com/savoirfairelinux/sflphone/views/CounterTextView.java b/src/com/savoirfairelinux/sflphone/views/CounterTextView.java
deleted file mode 100644
index 251d9cb..0000000
--- a/src/com/savoirfairelinux/sflphone/views/CounterTextView.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.savoirfairelinux.sflphone.views;
-
-import java.util.Observable;
-import java.util.Observer;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.widget.TextView;
-
-public class CounterTextView extends TextView implements Observer {
-
-    public CounterTextView(Context context) {
-        super(context);
-        // TODO Auto-generated constructor stub
-    }
-
-    public CounterTextView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        // TODO Auto-generated constructor stub
-    }
-
-    public CounterTextView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-    }
-
-    @Override
-    public void update(Observable observable, Object data) {
-        Log.i("TextView", "updating");
-
-    }
-
-}