From c99b843bc371b2788a49edefc1d1581221461b14 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrienberaud@gmail.com>
Date: Thu, 25 Apr 2013 16:27:46 +1000
Subject: [PATCH] formating

---
 jni/openssl/apps/md4.c                        | 128 ++++++++-
 .../sflphone/client/CallActivity.java         | 266 +++++++++---------
 .../sflphone/client/CallElementView.java      | 100 +++----
 .../sflphone/client/SFLphoneApplication.java  | 181 ++++++------
 4 files changed, 412 insertions(+), 263 deletions(-)
 mode change 120000 => 100644 jni/openssl/apps/md4.c

diff --git a/jni/openssl/apps/md4.c b/jni/openssl/apps/md4.c
deleted file mode 120000
index 7f457b2ab..000000000
--- a/jni/openssl/apps/md4.c
+++ /dev/null
@@ -1 +0,0 @@
-../crypto/md4/md4.c
\ No newline at end of file
diff --git a/jni/openssl/apps/md4.c b/jni/openssl/apps/md4.c
new file mode 100644
index 000000000..141415ad4
--- /dev/null
+++ b/jni/openssl/apps/md4.c
@@ -0,0 +1,127 @@
+/* crypto/md4/md4.c */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ * 
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <openssl/md4.h>
+
+#define BUFSIZE	1024*16
+
+void do_fp(FILE *f);
+void pt(unsigned char *md);
+#if !defined(_OSD_POSIX) && !defined(__DJGPP__)
+int read(int, void *, unsigned int);
+#endif
+
+int main(int argc, char **argv)
+	{
+	int i,err=0;
+	FILE *IN;
+
+	if (argc == 1)
+		{
+		do_fp(stdin);
+		}
+	else
+		{
+		for (i=1; i<argc; i++)
+			{
+			IN=fopen(argv[i],"r");
+			if (IN == NULL)
+				{
+				perror(argv[i]);
+				err++;
+				continue;
+				}
+			printf("MD4(%s)= ",argv[i]);
+			do_fp(IN);
+			fclose(IN);
+			}
+		}
+	exit(err);
+	}
+
+void do_fp(FILE *f)
+	{
+	MD4_CTX c;
+	unsigned char md[MD4_DIGEST_LENGTH];
+	int fd;
+	int i;
+	static unsigned char buf[BUFSIZE];
+
+	fd=fileno(f);
+	MD4_Init(&c);
+	for (;;)
+		{
+		i=read(fd,buf,sizeof buf);
+		if (i <= 0) break;
+		MD4_Update(&c,buf,(unsigned long)i);
+		}
+	MD4_Final(&(md[0]),&c);
+	pt(md);
+	}
+
+void pt(unsigned char *md)
+	{
+	int i;
+
+	for (i=0; i<MD4_DIGEST_LENGTH; i++)
+		printf("%02x",md[i]);
+	printf("\n");
+	}
+
diff --git a/src/com/savoirfairelinux/sflphone/client/CallActivity.java b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
index 273ef5caa..f05bb9070 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
@@ -52,135 +52,141 @@ import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
 import com.savoirfairelinux.sflphone.service.ISipService;
 import com.savoirfairelinux.sflphone.service.SipService;
 
-public class CallActivity extends Activity implements OnClickListener 
+public class CallActivity extends Activity implements OnClickListener
 {
-    static final String TAG = "CallActivity";
-    private ISipService service;
-    private SipCall mCall;
-
-    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String signalName = intent.getStringExtra(CallManagerCallBack.SIGNAL_NAME);
-            Log.d(TAG, "Signal received: " + signalName);
-
-            if(signalName.equals(CallManagerCallBack.NEW_CALL_CREATED)) {
-            } else if(signalName.equals(CallManagerCallBack.CALL_STATE_CHANGED)) {
-                processCallStateChangedSignal(intent);
-            } else if(signalName.equals(CallManagerCallBack.INCOMING_CALL)) {
-            }
-        }
-    };
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState)
-    {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_call_layout);
-
-        Bundle b = getIntent().getExtras();
-        // Parcelable value = b.getParcelable("CallInfo");
-        SipCall.CallInfo info = b.getParcelable("CallInfo"); 
-        Log.i(TAG, "Starting activity for call " + info.mCallID);
-        mCall = new SipCall(info); 
-
-        Intent intent = new Intent(this, SipService.class);
-        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
-
-        findViewById(R.id.buttonanswer).setOnClickListener(this);
-        findViewById(R.id.buttonhangup).setOnClickListener(this);
-        findViewById(R.id.buttonhold).setOnClickListener(this);
-        findViewById(R.id.buttonunhold).setOnClickListener(this);
-
-        setCallStateDisplay(mCall.getCallStateString());
-        
-        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("new-call-created"));
-        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("call-state-changed"));
-        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("incoming-call"));
-    }
-
-    @Override
-    protected void onDestroy() {
-        Log.i(TAG, "Destroying Call Activity for call " + mCall.getCallId());
-        LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
-        unbindService(mConnection);
-        super.onDestroy();
-    }
-
-    /** Defines callbacks for service binding, passed to bindService() */
-    private ServiceConnection mConnection = new ServiceConnection() {
-        @Override
-        public void onServiceConnected(ComponentName className, IBinder binder) {
-            service = ISipService.Stub.asInterface(binder);
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName arg0) {
-        }
-    };
-
-    @Override
-    public void onClick(View view)
-    {
-        Log.i(TAG, "On click action");
-        switch(view.getId()) {
-            case R.id.buttonanswer:
-                mCall.notifyServiceAnswer(service);
-                break;
-            case R.id.buttonhangup:
-                if(mCall.notifyServiceHangup(service))
-                    finish();
-                break;
-            case R.id.buttonhold:
-                mCall.notifyServiceHold(service);
-                break;
-            case R.id.buttonunhold:
-                mCall.notifyServiceUnhold(service);
-                break;
-            default:
-                Log.e(TAG, "Invalid button clicked");
-        }
-    }
-
-    private void processCallStateChangedSignal(Intent intent) {
-        Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
-        String callID = bundle.getString("CallID");
-        String newState = bundle.getString("State");
-
-        if(newState.equals("INCOMING")) {
-            mCall.setCallState(SipCall.CALL_STATE_INCOMING);
-            setCallStateDisplay(newState);
-        } else if(newState.equals("RINGING")) {
-            mCall.setCallState(SipCall.CALL_STATE_RINGING);
-            setCallStateDisplay(newState);
-        } else if(newState.equals("CURRENT")) {
-            mCall.setCallState(SipCall.CALL_STATE_CURRENT);
-            setCallStateDisplay(newState);
-        } else if(newState.equals("HUNGUP")) {
-            mCall.setCallState(SipCall.CALL_STATE_HUNGUP);
-            setCallStateDisplay(newState);
-            finish();
-        } else if(newState.equals("BUSY")) {
-            mCall.setCallState(SipCall.CALL_STATE_BUSY);
-            setCallStateDisplay(newState);
-        } else if(newState.equals("FAILURE")) {
-            mCall.setCallState(SipCall.CALL_STATE_FAILURE);
-            setCallStateDisplay(newState);
-        } else if(newState.equals("HOLD")) {
-            mCall.setCallState(SipCall.CALL_STATE_HOLD);
-            setCallStateDisplay(newState);
-        } else if(newState.equals("UNHOLD")) {
-            mCall.setCallState(SipCall.CALL_STATE_CURRENT);
-            setCallStateDisplay("CURRENT");
-        } else {
-            mCall.setCallState(SipCall.CALL_STATE_NONE);
-            setCallStateDisplay(newState);
-        }
-
-    }
-
-    private void setCallStateDisplay(String newState) {
-        TextView textView = (TextView)findViewById(R.id.callstate);
-        textView.setText("Call State: " + newState);
-    }
+	static final String TAG = "CallActivity";
+	private ISipService service;
+	private SipCall mCall;
+
+	private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent)
+		{
+			String signalName = intent.getStringExtra(CallManagerCallBack.SIGNAL_NAME);
+			Log.d(TAG, "Signal received: " + signalName);
+
+			if (signalName.equals(CallManagerCallBack.NEW_CALL_CREATED)) {
+			} else if (signalName.equals(CallManagerCallBack.CALL_STATE_CHANGED)) {
+				processCallStateChangedSignal(intent);
+			} else if (signalName.equals(CallManagerCallBack.INCOMING_CALL)) {
+			}
+		}
+	};
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState)
+	{
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_call_layout);
+
+		Bundle b = getIntent().getExtras();
+		// Parcelable value = b.getParcelable("CallInfo");
+		SipCall.CallInfo info = b.getParcelable("CallInfo");
+		Log.i(TAG, "Starting activity for call " + info.mCallID);
+		mCall = new SipCall(info);
+
+		Intent intent = new Intent(this, SipService.class);
+		bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+
+		findViewById(R.id.buttonanswer).setOnClickListener(this);
+		findViewById(R.id.buttonhangup).setOnClickListener(this);
+		findViewById(R.id.buttonhold).setOnClickListener(this);
+		findViewById(R.id.buttonunhold).setOnClickListener(this);
+
+		setCallStateDisplay(mCall.getCallStateString());
+
+		LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter(CallManagerCallBack.NEW_CALL_CREATED));
+		LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter(CallManagerCallBack.CALL_STATE_CHANGED));
+		LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter(CallManagerCallBack.INCOMING_CALL));
+	}
+
+	@Override
+	protected void onDestroy()
+	{
+		Log.i(TAG, "Destroying Call Activity for call " + mCall.getCallId());
+		LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
+		unbindService(mConnection);
+		super.onDestroy();
+	}
+
+	/** Defines callbacks for service binding, passed to bindService() */
+	private ServiceConnection mConnection = new ServiceConnection() {
+		@Override
+		public void onServiceConnected(ComponentName className, IBinder binder)
+		{
+			service = ISipService.Stub.asInterface(binder);
+		}
+
+		@Override
+		public void onServiceDisconnected(ComponentName arg0)
+		{
+		}
+	};
+
+	@Override
+	public void onClick(View view)
+	{
+		Log.i(TAG, "On click action");
+		switch (view.getId()) {
+		case R.id.buttonanswer:
+			mCall.notifyServiceAnswer(service);
+			break;
+		case R.id.buttonhangup:
+			if (mCall.notifyServiceHangup(service))
+				finish();
+			break;
+		case R.id.buttonhold:
+			mCall.notifyServiceHold(service);
+			break;
+		case R.id.buttonunhold:
+			mCall.notifyServiceUnhold(service);
+			break;
+		default:
+			Log.e(TAG, "Invalid button clicked");
+		}
+	}
+
+	private void processCallStateChangedSignal(Intent intent)
+	{
+		Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
+		String callID = bundle.getString("CallID");
+		String newState = bundle.getString("State");
+
+		if (newState.equals("INCOMING")) {
+			mCall.setCallState(SipCall.CALL_STATE_INCOMING);
+			setCallStateDisplay(newState);
+		} else if (newState.equals("RINGING")) {
+			mCall.setCallState(SipCall.CALL_STATE_RINGING);
+			setCallStateDisplay(newState);
+		} else if (newState.equals("CURRENT")) {
+			mCall.setCallState(SipCall.CALL_STATE_CURRENT);
+			setCallStateDisplay(newState);
+		} else if (newState.equals("HUNGUP")) {
+			mCall.setCallState(SipCall.CALL_STATE_HUNGUP);
+			setCallStateDisplay(newState);
+			finish();
+		} else if (newState.equals("BUSY")) {
+			mCall.setCallState(SipCall.CALL_STATE_BUSY);
+			setCallStateDisplay(newState);
+		} else if (newState.equals("FAILURE")) {
+			mCall.setCallState(SipCall.CALL_STATE_FAILURE);
+			setCallStateDisplay(newState);
+		} else if (newState.equals("HOLD")) {
+			mCall.setCallState(SipCall.CALL_STATE_HOLD);
+			setCallStateDisplay(newState);
+		} else if (newState.equals("UNHOLD")) {
+			mCall.setCallState(SipCall.CALL_STATE_CURRENT);
+			setCallStateDisplay("CURRENT");
+		} else {
+			mCall.setCallState(SipCall.CALL_STATE_NONE);
+			setCallStateDisplay(newState);
+		}
+
+	}
+
+	private void setCallStateDisplay(String newState)
+	{
+		TextView textView = (TextView) findViewById(R.id.callstate);
+		textView.setText("Call State: " + newState);
+	}
 }
diff --git a/src/com/savoirfairelinux/sflphone/client/CallElementView.java b/src/com/savoirfairelinux/sflphone/client/CallElementView.java
index be580dee4..bb605c3c3 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallElementView.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallElementView.java
@@ -42,58 +42,64 @@ import android.view.animation.DecelerateInterpolator;
 import android.view.animation.Interpolator;
 import android.widget.FrameLayout;
 
-public class CallElementView extends FrameLayout {
-    private ViewGroup contactCard = null;
-    private ViewGroup callCard = null;
+public class CallElementView extends FrameLayout
+{
+	private ViewGroup contactCard = null;
+	private ViewGroup callCard = null;
 
-    public CallElementView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
+	public CallElementView(Context context, AttributeSet attrs)
+	{
+		super(context, attrs);
+	}
 
-    public CallElementView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-    }
+	public CallElementView(Context context, AttributeSet attrs, int defStyle)
+	{
+		super(context, attrs, defStyle);
+	}
 
-    @Override
-    protected void onAttachedToWindow() {
-        // Layouts may be inflated or we may use fragments.
-        // contactCard = (ViewGroup) findViewById(R.id.contactview);
-        // callCard = (ViewGroup) findViewById(R.id.callview);
-        // callCard.setVisibility(View.GONE);
-    }
+	@Override
+	protected void onAttachedToWindow()
+	{
+		// Layouts may be inflated or we may use fragments.
+		// contactCard = (ViewGroup) findViewById(R.id.contactview);
+		// callCard = (ViewGroup) findViewById(R.id.callview);
+		// callCard.setVisibility(View.GONE);
+	}
 
-    private Interpolator accelerator = new AccelerateInterpolator();
-    private Interpolator decelerator = new DecelerateInterpolator();
+	private Interpolator accelerator = new AccelerateInterpolator();
+	private Interpolator decelerator = new DecelerateInterpolator();
 
-    // from Android API Demo "ListFlipper"
-    private void flipit() {
-        if (contactCard == null || callCard == null)
-            return;
+	// from Android API Demo "ListFlipper"
+	private void flipit()
+	{
+		if (contactCard == null || callCard == null)
+			return;
 
-        final View visibleList;
-        final View invisibleList;
-        if (contactCard.getVisibility() == View.GONE) {
-            visibleList = callCard;
-            invisibleList = contactCard;
-        } else {
-            invisibleList = callCard;
-            visibleList = contactCard;
-        }
-        ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visibleList, "rotationY", 0f, 90f);
-        visToInvis.setDuration(500);
-        visToInvis.setInterpolator(accelerator);
-        final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisibleList, "rotationY", -90f, 0f);
-        invisToVis.setDuration(500);
-        invisToVis.setInterpolator(decelerator);
-        visToInvis.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator anim) {
-                visibleList.setVisibility(View.GONE);
-                invisToVis.start();
-                invisibleList.setVisibility(View.VISIBLE);
-            }
-        });
-        visToInvis.start();
-    }
+		final View visibleList;
+		final View invisibleList;
+		if (contactCard.getVisibility() == View.GONE) {
+			visibleList = callCard;
+			invisibleList = contactCard;
+		} else {
+			invisibleList = callCard;
+			visibleList = contactCard;
+		}
+		ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visibleList, "rotationY", 0f, 90f);
+		visToInvis.setDuration(500);
+		visToInvis.setInterpolator(accelerator);
+		final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisibleList, "rotationY", -90f, 0f);
+		invisToVis.setDuration(500);
+		invisToVis.setInterpolator(decelerator);
+		visToInvis.addListener(new AnimatorListenerAdapter() {
+			@Override
+			public void onAnimationEnd(Animator anim)
+			{
+				visibleList.setVisibility(View.GONE);
+				invisToVis.start();
+				invisibleList.setVisibility(View.VISIBLE);
+			}
+		});
+		visToInvis.start();
+	}
 
 }
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
index 4fc442719..ca598684c 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
@@ -12,89 +12,100 @@ import com.savoirfairelinux.sflphone.client.receiver.AccountListReceiver;
 import com.savoirfairelinux.sflphone.service.ISipService;
 import com.savoirfairelinux.sflphone.service.SipService;
 
-public class SFLphoneApplication extends Application {
-
-    static final String TAG = "SFLphoneApplication";
-    private boolean serviceRunning = false;
-    private ISipService sipService;
-    private AccountListReceiver accountList = new AccountListReceiver();
-
-    private void startSipService() {
-        Thread thread = new Thread("StartSFLphoneService") {
-            public void run() {
-                Log.i(TAG, "SipService launching thread");
-                Intent sipServiceIntent = new Intent(SFLphoneApplication.this, SipService.class);
-                //sipServiceIntent.putExtra(ServiceConstants.EXTRA_OUTGOING_ACTIVITY, new ComponentName(SFLPhoneHome.this, SFLPhoneHome.class));
-                startService(sipServiceIntent);
-                serviceRunning = true;
-            };
-        };
-        try {
-            thread.start();
-        } catch (IllegalThreadStateException e) {
-            AlertDialog.Builder builder = new AlertDialog.Builder(this);
-            builder.setMessage("Cannot start SFLPhone SipService!");
-            AlertDialog alert = builder.create();
-            alert.show();
-            //TODO exit application
-        }
-    }
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        Log.i(TAG, "onCreate");
-
-        if (!serviceRunning) {
-            Log.i(TAG, "starting SipService");
-            startSipService();
-        }
-    }
-
-    @Override
-    public void onTerminate() {
-        super.onTerminate();
-        Log.i(TAG, "onTerminate");
-
-        if (serviceRunning) {
-            Log.i(TAG, "onDestroy: stopping SipService...");
-            stopService(new Intent(this, SipService.class));
-            serviceRunning = false;
-        }
-    }
-
-    public boolean isServiceRunning() {
-        return serviceRunning;
-    }
-
-    public void setServiceRunning(boolean r) {
-        this.serviceRunning = r;
-    }
-
-    public ISipService getSipService() {
-        return sipService;
-    }
-
-    public void setSipService(ISipService service) {
-        sipService = service;
-    }
-
-    public AccountListReceiver getAccountList() {
-        return accountList;
-    }
-
-    public String getAppPath() {
-        PackageManager pkgMng = getPackageManager();
-        String pkgName = getPackageName();
-
-        try {
-            PackageInfo pkgInfo = pkgMng.getPackageInfo(pkgName, 0);
-            pkgName = pkgInfo.applicationInfo.dataDir;
-        } catch (NameNotFoundException e) {
-            Log.w(TAG, "Error Package name not found ", e);
-        }
-
-        Log.d(TAG, "Application path: " + pkgName);
-        return pkgName;
-    }
+public class SFLphoneApplication extends Application
+{
+
+	static final String TAG = "SFLphoneApplication";
+	private boolean serviceRunning = false;
+	private ISipService sipService;
+	private AccountListReceiver accountList = new AccountListReceiver();
+
+	private void startSipService()
+	{
+		Thread thread = new Thread("StartSFLphoneService") {
+			public void run()
+			{
+				Log.i(TAG, "SipService launching thread");
+				Intent sipServiceIntent = new Intent(SFLphoneApplication.this, SipService.class);
+				//sipServiceIntent.putExtra(ServiceConstants.EXTRA_OUTGOING_ACTIVITY, new ComponentName(SFLPhoneHome.this, SFLPhoneHome.class));
+				startService(sipServiceIntent);
+				serviceRunning = true;
+			};
+		};
+		try {
+			thread.start();
+		} catch (IllegalThreadStateException e) {
+			AlertDialog.Builder builder = new AlertDialog.Builder(this);
+			builder.setMessage("Cannot start SFLPhone SipService!");
+			AlertDialog alert = builder.create();
+			alert.show();
+			//TODO exit application
+		}
+	}
+
+	@Override
+	public void onCreate()
+	{
+		super.onCreate();
+		Log.i(TAG, "onCreate");
+
+		if (!serviceRunning) {
+			Log.i(TAG, "starting SipService");
+			startSipService();
+		}
+	}
+
+	@Override
+	public void onTerminate()
+	{
+		super.onTerminate();
+		Log.i(TAG, "onTerminate");
+
+		if (serviceRunning) {
+			Log.i(TAG, "onDestroy: stopping SipService...");
+			stopService(new Intent(this, SipService.class));
+			serviceRunning = false;
+		}
+	}
+
+	public boolean isServiceRunning()
+	{
+		return serviceRunning;
+	}
+
+	public void setServiceRunning(boolean r)
+	{
+		this.serviceRunning = r;
+	}
+
+	public ISipService getSipService()
+	{
+		return sipService;
+	}
+
+	public void setSipService(ISipService service)
+	{
+		sipService = service;
+	}
+
+	public AccountListReceiver getAccountList()
+	{
+		return accountList;
+	}
+
+	public String getAppPath()
+	{
+		PackageManager pkgMng = getPackageManager();
+		String pkgName = getPackageName();
+
+		try {
+			PackageInfo pkgInfo = pkgMng.getPackageInfo(pkgName, 0);
+			pkgName = pkgInfo.applicationInfo.dataDir;
+		} catch (NameNotFoundException e) {
+			Log.w(TAG, "Error Package name not found ", e);
+		}
+
+		Log.d(TAG, "Application path: " + pkgName);
+		return pkgName;
+	}
 }
-- 
GitLab