From d4ef1c095752561a5e36ba31935ebc2827b51631 Mon Sep 17 00:00:00 2001 From: jehan monnier Date: Sun, 14 Feb 2010 09:52:18 +0100 Subject: [PATCH] more jni functions implemented --- src/org/linphone/DialerActivity.java | 69 ++++++++++++++++--- src/org/linphone/Linphone.java | 23 +++---- src/org/linphone/core/LinphoneAddress.java | 5 ++ .../linphone/core/LinphoneAddressImpl.java | 11 ++- .../linphone/core/LinphoneCoreFactory.java | 3 + .../linphone/core/LinphoneProxyConfig.java | 11 +++ .../core/LinphoneProxyConfigImpl.java | 10 +++ 7 files changed, 104 insertions(+), 28 deletions(-) diff --git a/src/org/linphone/DialerActivity.java b/src/org/linphone/DialerActivity.java index 4413b9c91..240b2a1bc 100644 --- a/src/org/linphone/DialerActivity.java +++ b/src/org/linphone/DialerActivity.java @@ -1,7 +1,11 @@ package org.linphone; +import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneCore; +import org.linphone.core.LinphoneCoreFactory; +import org.linphone.core.LinphoneCoreListener; import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.LinphoneCore.GeneralState; import android.app.Activity; import android.os.Bundle; @@ -11,8 +15,9 @@ import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageButton; import android.widget.TextView; +import android.widget.Toast; -public class DialerActivity extends Activity { +public class DialerActivity extends Activity implements LinphoneCoreListener { private LinphoneCore mLinphoneCore; private TextView mAddress; private TextView mStatus; @@ -48,9 +53,6 @@ public class DialerActivity extends Activity { mAddress.setText(aContact); mDisplayName = aDisplayName; } - public void displayStatus(String status) { - mStatus.setText(status); - } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialer); @@ -62,12 +64,24 @@ public class DialerActivity extends Activity { mCall = (ImageButton) findViewById(R.id.Call); mCall.setOnClickListener(new OnClickListener() { public void onClick(View v) { + String lRawAddress = mAddress.getText().toString(); + String lCallingUri=null; + if (lRawAddress.startsWith("sip:")) { + lCallingUri=lRawAddress; + } else { LinphoneProxyConfig lProxy = mLinphoneCore.getDefaultProxyConfig(); - String lNormalizedNumber = mAddress.getText().toString(); - if (lProxy!=null) { - lNormalizedNumber = lProxy.normalizePhoneNumber(lNormalizedNumber); + String lDomain=null; + String lNormalizedNumber=null; + if (lProxy!=null) { + lNormalizedNumber = lProxy.normalizePhoneNumber(lNormalizedNumber); + lDomain = lProxy.getDomain(); + } + LinphoneAddress lAddress = LinphoneCoreFactory.instance().createLinphoneAddress(lNormalizedNumber + , lDomain + , mDisplayName); + lCallingUri = lAddress.toUri(); } - mLinphoneCore.invite(lNormalizedNumber); + mLinphoneCore.invite(lCallingUri); } }); @@ -124,5 +138,44 @@ public class DialerActivity extends Activity { } } + public void authInfoRequested(LinphoneCore lc, String realm, String username) { + // TODO Auto-generated method stub + + } + public void byeReceived(LinphoneCore lc, String from) { + // TODO Auto-generated method stub + + } + public void displayMessage(LinphoneCore lc, String message) { + // TODO Auto-generated method stub + + } + public void displayStatus(LinphoneCore lc, String message) { + mStatus.setText(message); + } + public void displayWarning(LinphoneCore lc, String message) { + // TODO Auto-generated method stub + + } + public void generalState(LinphoneCore lc, GeneralState state) { + switch(state) { + case GSTATE_CALL_ERROR: { + + Toast toast = Toast.makeText(this + ,String.format(getString(R.string.call_error),lc.getRemoteAddress()) + , Toast.LENGTH_LONG); + toast.show(); + } + case GSTATE_REG_OK: + } + } + public void inviteReceived(LinphoneCore lc, String from) { + // TODO Auto-generated method stub + + } + public void show(LinphoneCore lc) { + // TODO Auto-generated method stub + + } } diff --git a/src/org/linphone/Linphone.java b/src/org/linphone/Linphone.java index 038d116a5..7409d815d 100644 --- a/src/org/linphone/Linphone.java +++ b/src/org/linphone/Linphone.java @@ -65,6 +65,7 @@ public class Linphone extends TabActivity implements LinphoneCoreListener { public static String DIALER_TAB = "dialer"; private Handler mIteratehandler; + static Linphone getLinphone() { if (theLinphone == null) { throw new RuntimeException("LinphoneActivity not instanciated yet"); @@ -174,7 +175,6 @@ public class Linphone extends TabActivity implements LinphoneCoreListener { } public void authInfoRequested(LinphoneCore lc, String realm, String username) { - // TODO Auto-generated method stub } public void byeReceived(LinphoneCore lc, String from) { @@ -187,7 +187,7 @@ public class Linphone extends TabActivity implements LinphoneCoreListener { } public void displayStatus(LinphoneCore lc, String message) { Log.i(TAG, message); - if (DialerActivity.getDialer()!=null) DialerActivity.getDialer().displayStatus(message); + if (DialerActivity.getDialer()!=null) DialerActivity.getDialer().displayStatus(lc,message); } public void displayWarning(LinphoneCore lc, String message) { // TODO Auto-generated method stub @@ -195,18 +195,7 @@ public class Linphone extends TabActivity implements LinphoneCoreListener { } public void generalState(LinphoneCore lc, LinphoneCore.GeneralState state) { Log.i(TAG, "new state ["+state+"]"); - - switch(state) { - case GSTATE_CALL_ERROR: { - - Toast toast = Toast.makeText(this - ,String.format(getString(R.string.call_error),mLinphoneCore.getRemoteAddress()) - , Toast.LENGTH_LONG); - toast.show(); - } - case GSTATE_REG_OK: - } - + if (DialerActivity.getDialer()!=null) DialerActivity.getDialer().generalState(lc,state); } public void inviteReceived(LinphoneCore lc, String from) { // TODO Auto-generated method stub @@ -287,7 +276,13 @@ public class Linphone extends TabActivity implements LinphoneCoreListener { lDefaultProxyConfig.enableRegister(true); lDefaultProxyConfig.done(); } + lDefaultProxyConfig = mLinphoneCore.getDefaultProxyConfig(); + //prefix + String lPrefix = mPref.getString(getString(R.string.pref_prefix_key), null); + if (lPrefix != null && lDefaultProxyConfig !=null) { + lDefaultProxyConfig.setDialPrefix(lPrefix); + } } diff --git a/src/org/linphone/core/LinphoneAddress.java b/src/org/linphone/core/LinphoneAddress.java index d7ad7c4b0..619bd4fb8 100644 --- a/src/org/linphone/core/LinphoneAddress.java +++ b/src/org/linphone/core/LinphoneAddress.java @@ -34,4 +34,9 @@ public interface LinphoneAddress { * @return null if not set */ public String getDomain(); + + /** + * @return an URI version of the address that can be used to place a call using {@link LinphoneCore#invite(String)} + */ + public String toUri(); } diff --git a/src/org/linphone/core/LinphoneAddressImpl.java b/src/org/linphone/core/LinphoneAddressImpl.java index 83176180e..fd80db86e 100644 --- a/src/org/linphone/core/LinphoneAddressImpl.java +++ b/src/org/linphone/core/LinphoneAddressImpl.java @@ -28,7 +28,7 @@ public class LinphoneAddressImpl implements LinphoneAddress { private native String getDisplayName(long ptr); private native String getUserName(long ptr); private native String getDomain(long ptr); - + private native String toUri(long ptr); protected LinphoneAddressImpl(String username,String domain,String displayName) { nativePtr = newLinphoneAddressImpl("sip:"+username+"@"+domain, displayName); @@ -51,11 +51,10 @@ public class LinphoneAddressImpl implements LinphoneAddress { } public String toString() { - String tmp=""; - if (getDisplayName()!=null) { - tmp="<"+getDisplayName()+">"; - } - return tmp+"sip:"+getUserName()+"@"+getDomain(); + return toUri(); + } + public String toUri() { + return toUri(nativePtr); } } diff --git a/src/org/linphone/core/LinphoneCoreFactory.java b/src/org/linphone/core/LinphoneCoreFactory.java index 265ba65dd..4cbded4f9 100644 --- a/src/org/linphone/core/LinphoneCoreFactory.java +++ b/src/org/linphone/core/LinphoneCoreFactory.java @@ -39,6 +39,9 @@ public class LinphoneCoreFactory { return new LinphoneCoreImpl(listener,userConfig,factoryConfig,userdata); } + public LinphoneAddress createLinphoneAddress(String username,String domain,String displayName) { + return new LinphoneAddressImpl(username,domain,displayName); + } } diff --git a/src/org/linphone/core/LinphoneProxyConfig.java b/src/org/linphone/core/LinphoneProxyConfig.java index 8e338e613..97c7d21a6 100644 --- a/src/org/linphone/core/LinphoneProxyConfig.java +++ b/src/org/linphone/core/LinphoneProxyConfig.java @@ -51,4 +51,15 @@ public interface LinphoneProxyConfig { * @return */ public String normalizePhoneNumber(String number); + /** + * usefull function to automatically add internationnal prefix to e164 phone numbers + * @param prefix + */ + public void setDialPrefix(String prefix); + + /** + * rget domain host name or ip + * @return may be null + */ + public String getDomain(); } diff --git a/src/org/linphone/core/LinphoneProxyConfigImpl.java b/src/org/linphone/core/LinphoneProxyConfigImpl.java index 7c65c7b28..a82418cdb 100644 --- a/src/org/linphone/core/LinphoneProxyConfigImpl.java +++ b/src/org/linphone/core/LinphoneProxyConfigImpl.java @@ -55,8 +55,12 @@ class LinphoneProxyConfigImpl implements LinphoneProxyConfig { private native void enableRegister(long ptr,boolean value); + private native void setDialPrefix(long ptr, String prefix); + private native String normalizePhoneNumber(long ptr,String number); + private native String getDomain(long ptr); + public void enableRegister(boolean value) { enableRegister(nativePtr,value); } @@ -81,4 +85,10 @@ class LinphoneProxyConfigImpl implements LinphoneProxyConfig { public String normalizePhoneNumber(String number) { return normalizePhoneNumber(nativePtr,number); } + public void setDialPrefix(String prefix) { + setDialPrefix(nativePtr, prefix); + } + public String getDomain() { + return getDomain(nativePtr); + } }