* #33708: added fragment and model to display IM
diff --git a/src/org/sflphone/client/CallActivity.java b/src/org/sflphone/client/CallActivity.java
index c910ae1..955b584 100644
--- a/src/org/sflphone/client/CallActivity.java
+++ b/src/org/sflphone/client/CallActivity.java
@@ -37,11 +37,13 @@
 
 import org.sflphone.R;
 import org.sflphone.fragments.CallFragment;
+import org.sflphone.fragments.IMFragment;
 import org.sflphone.interfaces.CallInterface;
 import org.sflphone.model.Account;
 import org.sflphone.model.CallContact;
 import org.sflphone.model.Conference;
 import org.sflphone.model.SipCall;
+import org.sflphone.model.SipMessage;
 import org.sflphone.receivers.CallReceiver;
 import org.sflphone.service.CallManagerCallBack;
 import org.sflphone.service.ISipService;
@@ -70,7 +72,7 @@
 import android.view.Window;
 import android.widget.Toast;
 
-public class CallActivity extends Activity implements CallInterface, CallFragment.Callbacks, ProximityDirector{
+public class CallActivity extends Activity implements CallInterface, IMFragment.Callbacks, CallFragment.Callbacks, ProximityDirector {
     static final String TAG = "CallActivity";
     private ISipService service;
 
@@ -78,13 +80,13 @@
 
     CallPaneLayout slidingPaneLayout;
 
-    // CallListFragment mCallsFragment;
+    IMFragment mIMFragment;
     CallFragment mCurrentCallFragment;
     // private boolean fragIsChanging;
 
     /* result code sent in case of call failure */
     public static int RESULT_FAILURE = -10;
-    
+
     private CallProximityManager proximityManager;
 
     @Override
@@ -107,19 +109,11 @@
             @Override
             public void onPanelOpened(View view) {
 
-                switch (view.getId()) {
-                case R.id.calllist_pane:
-                    // getFragmentManager().findFragmentById(R.id.calllist_pane).setHasOptionsMenu(true);
-                    // getFragmentManager().findFragmentById(R.id.ongoingcall_pane).setHasOptionsMenu(false);
-                    break;
-                default:
-                    break;
-                }
             }
 
             @Override
             public void onPanelClosed(View view) {
-
+                mCurrentCallFragment.getBubbleView().restartDrawing();
             }
         });
 
@@ -203,12 +197,12 @@
                 CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
                 try {
                     service.destroyNotification();
-                    
-                    String accountID = (String)service.getAccountList().get(1);
-                    Account acc= new Account(accountID, (HashMap<String, String>) service.getAccountDetails(accountID));
-                                        
-                    SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c)
-                            .setAccount(acc).setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
+
+                    String accountID = (String) service.getAccountList().get(1);
+                    Account acc = new Account(accountID, (HashMap<String, String>) service.getAccountDetails(accountID));
+
+                    SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c).setAccount(acc)
+                            .setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
                     Conference tmp = new Conference("-1");
                     tmp.getParticipants().add(call);
                     Bundle b = new Bundle();
@@ -231,11 +225,12 @@
                 }
 
             }
-
-            // slidingPaneLayout.setCurFragment(mCurrentCallFragment);
+            mIMFragment = new IMFragment();
+            slidingPaneLayout.setCurFragment(mCurrentCallFragment);
             getIntent().getExtras();
             // mCallsFragment.update();
             getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
+            getFragmentManager().beginTransaction().replace(R.id.message_list_frame, mIMFragment).commit();
 
         }
 
@@ -248,11 +243,12 @@
     public void incomingCall(Intent call) {
         Bundle b = new Bundle();
         Conference tmp = new Conference("-1");
-        tmp.getParticipants().add((SipCall)call.getParcelableExtra("newcall"));
+        tmp.getParticipants().add((SipCall) call.getParcelableExtra("newcall"));
         b.putParcelable("conference", tmp);
         mCurrentCallFragment = new CallFragment();
         mCurrentCallFragment.setArguments(b);
         getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
+        slidingPaneLayout.setCurFragment(mCurrentCallFragment);
         // mCallsFragment.update();
 
     }
@@ -281,22 +277,22 @@
         }
 
         proximityManager.updateProximitySensorMode();
-        
+
         try {
             HashMap<String, SipCall> callMap = (HashMap<String, SipCall>) service.getCallList();
             HashMap<String, Conference> confMap = (HashMap<String, Conference>) service.getConferenceList();
 
-//            Log.i(TAG, "call size"+callMap.size());
-//            Log.i(TAG, "call size"+confMap.size());
-//            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());
-//
-//            }
+            // Log.i(TAG, "call size"+callMap.size());
+            // Log.i(TAG, "call size"+confMap.size());
+            // 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());
@@ -307,10 +303,13 @@
     }
 
     @Override
-    public void incomingText(Intent msg) {
-        Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
-
-        Toast.makeText(this, b.getString("From") + " : " + b.getString("Msg"), Toast.LENGTH_LONG).show();
+    public void incomingText(Intent in) {
+        Bundle b = in.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
+        
+        if(mIMFragment != null){
+            SipMessage msg = new SipMessage(true, b.getString("Msg"));
+            mIMFragment.putMessage(msg);
+        }
 
     }
 
@@ -319,34 +318,29 @@
         return service;
     }
 
-//    @Override
-//    public void  {
-//
-//        if (mCurrentCallFragment == null || mCurrentCallFragment.getBubbleView() == null) {
-//            return;
-//        }
-//        mHandler.removeCallbacks(mUpdateTimeTask);
-//        mCurrentCallFragment.getBubbleView().stopThread();
-//        mCurrentCallFragment = new CallFragment();
-//        Bundle b = new Bundle();
-//
-//        b.putParcelable("conference", conf);
-//        mCurrentCallFragment.setArguments(b);
-//
-//        // if (calls.size() == 1) {
-//        // onCallResumed(calls.get(0));
-//        // }
-//
-//        // slidingPaneLayout.setCurFragment(mCurrentCallFragment);
-//        slidingPaneLayout.closePane();
-//        // fragIsChanging = true;
-//
-//    }
-
-
-
-
-
+    // @Override
+    // public void {
+    //
+    // if (mCurrentCallFragment == null || mCurrentCallFragment.getBubbleView() == null) {
+    // return;
+    // }
+    // mHandler.removeCallbacks(mUpdateTimeTask);
+    // mCurrentCallFragment.getBubbleView().stopThread();
+    // mCurrentCallFragment = new CallFragment();
+    // Bundle b = new Bundle();
+    //
+    // b.putParcelable("conference", conf);
+    // mCurrentCallFragment.setArguments(b);
+    //
+    // // if (calls.size() == 1) {
+    // // onCallResumed(calls.get(0));
+    // // }
+    //
+    // // slidingPaneLayout.setCurFragment(mCurrentCallFragment);
+    // slidingPaneLayout.closePane();
+    // // fragIsChanging = true;
+    //
+    // }
 
     @Override
     public void onBackPressed() {
@@ -357,7 +351,6 @@
         startActivity(launchHome);
     }
 
-
     @Override
     public void confCreated(Intent intent) {
         // mCallsFragment.update();
@@ -383,8 +376,8 @@
     public void terminateCall() {
         mHandler.removeCallbacks(mUpdateTimeTask);
         mCurrentCallFragment.getBubbleView().stopThread();
-        //getFragmentManager().beginTransaction().remove(mCurrentCallFragment).commit();
-        //mCurrentCallFragment = null;
+        // getFragmentManager().beginTransaction().remove(mCurrentCallFragment).commit();
+        // mCurrentCallFragment = null;
         finish();
 
     }
@@ -408,7 +401,13 @@
 
     @Override
     public void slideChatScreen() {
-        slidingPaneLayout.openPane();
+
+        if (slidingPaneLayout.isOpen()) {
+            slidingPaneLayout.closePane();
+        } else {
+            mCurrentCallFragment.getBubbleView().stopThread();
+            slidingPaneLayout.openPane();
+        }
     }
 
     @Override
@@ -419,6 +418,6 @@
     @Override
     public void onProximityTrackingChanged(boolean acquired) {
         // TODO Stub de la méthode généré automatiquement
-        
+
     }
 }