sipcall: Modify calls handling process

Integration of new security features implies modifications in call handling.
By default, when handling a call,  a SipCall object is created, but if ZRTP hooks
are activated, the call is dynamically subclassed, and becomes a SecureSipCall.

Refs #40939
diff --git a/src/org/sflphone/client/HomeActivity.java b/src/org/sflphone/client/HomeActivity.java
index 092ced0..09b77eb 100644
--- a/src/org/sflphone/client/HomeActivity.java
+++ b/src/org/sflphone/client/HomeActivity.java
@@ -37,6 +37,7 @@
 import java.io.InputStream;
 import java.io.InvalidObjectException;
 import java.io.OutputStream;
+import java.util.Random;
 import java.util.Timer;
 import java.util.TimerTask;
 
@@ -475,30 +476,32 @@
 
             @Override
             public void run() {
-                SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
-                try {
-                    callBuilder.startCallCreation().setAccount(fMenu.getSelectedAccount()).setCallType(SipCall.direction.CALL_TYPE_OUTGOING);
-                    Cursor cPhones = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_PHONES_PROJECTION, Phone.CONTACT_ID + " =" + c.getId(),
-                            null, null);
 
-                    while (cPhones.moveToNext()) {
-                        c.addPhoneNumber(cPhones.getString(cPhones.getColumnIndex(Phone.NUMBER)), cPhones.getInt(cPhones.getColumnIndex(Phone.TYPE)));
-                    }
-                    cPhones.close();
+                Bundle args = new Bundle();
+                args.putString(SipCall.ID, Integer.toString(Math.abs(new Random().nextInt())));
+                args.putParcelable(SipCall.ACCOUNT, fMenu.getSelectedAccount());
+                args.putInt(SipCall.STATE, SipCall.state.CALL_STATE_RINGING);
+                args.putInt(SipCall.TYPE, SipCall.direction.CALL_TYPE_OUTGOING);
 
-                    Cursor cSip = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_SIP_PROJECTION, Phone.CONTACT_ID + "=" + c.getId(), null,
-                            null);
+                Cursor cPhones = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_PHONES_PROJECTION, Phone.CONTACT_ID + " =" + c.getId(),
+                        null, null);
 
-                    while (cSip.moveToNext()) {
-                        c.addSipNumber(cSip.getString(cSip.getColumnIndex(SipAddress.SIP_ADDRESS)), cSip.getInt(cSip.getColumnIndex(SipAddress.TYPE)));
-                    }
-                    cSip.close();
-                    callBuilder.setContact(c);
-                    launchCallActivity(callBuilder.build());
-                } catch (InvalidObjectException e) {
-                    e.printStackTrace();
+                while (cPhones.moveToNext()) {
+                    c.addPhoneNumber(cPhones.getString(cPhones.getColumnIndex(Phone.NUMBER)), cPhones.getInt(cPhones.getColumnIndex(Phone.TYPE)));
                 }
+                cPhones.close();
 
+                Cursor cSip = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_SIP_PROJECTION, Phone.CONTACT_ID + "=" + c.getId(), null,
+                        null);
+
+                while (cSip.moveToNext()) {
+                    c.addSipNumber(cSip.getString(cSip.getColumnIndex(SipAddress.SIP_ADDRESS)), cSip.getInt(cSip.getColumnIndex(SipAddress.TYPE)));
+                }
+                cSip.close();
+
+                args.putParcelable(SipCall.CONTACT, c);
+
+                launchCallActivity(new SipCall(args));
             }
         });
         launcher.start();
@@ -517,11 +520,15 @@
         }
 
         if (usedAccount.isRegistered()) {
-            SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
-            callBuilder.startCallCreation().setAccount(usedAccount).setCallType(SipCall.direction.CALL_TYPE_OUTGOING);
-            callBuilder.setContact(to.getContact());
+            Bundle args = new Bundle();
+            args.putString(SipCall.ID, Integer.toString(Math.abs(new Random().nextInt())));
+            args.putParcelable(SipCall.ACCOUNT, usedAccount);
+            args.putInt(SipCall.STATE, SipCall.state.CALL_STATE_RINGING);
+            args.putInt(SipCall.TYPE, SipCall.direction.CALL_TYPE_OUTGOING);
+            args.putParcelable(SipCall.CONTACT, to.getContact());
+
             try {
-                launchCallActivity(callBuilder.build());
+                launchCallActivity(new SipCall(args));
             } catch (Exception e) {
                 Log.e(TAG, e.toString());
             }
@@ -532,8 +539,6 @@
 
     @Override
     public void onCallDialed(String to) {
-
-
         Account usedAccount = fMenu.getSelectedAccount();
 
         if (usedAccount == null) {
@@ -542,12 +547,15 @@
         }
 
         if (fMenu.getSelectedAccount().isRegistered()) {
-            SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
-            callBuilder.startCallCreation().setAccount(usedAccount).setCallType(SipCall.direction.CALL_TYPE_OUTGOING);
-            callBuilder.setContact(CallContact.ContactBuilder.buildUnknownContact(to));
+            Bundle args = new Bundle();
+            args.putString(SipCall.ID, Integer.toString(Math.abs(new Random().nextInt())));
+            args.putParcelable(SipCall.ACCOUNT, usedAccount);
+            args.putInt(SipCall.STATE, SipCall.state.CALL_STATE_RINGING);
+            args.putInt(SipCall.TYPE, SipCall.direction.CALL_TYPE_OUTGOING);
+            args.putParcelable(SipCall.CONTACT, CallContact.ContactBuilder.buildUnknownContact(to));
 
             try {
-                launchCallActivity(callBuilder.build());
+                launchCallActivity(new SipCall(args));
             } catch (Exception e) {
                 Log.e(TAG, e.toString());
             }