]> sjero.net Git - linphone/blobdiff - java/impl/org/linphone/core/LinphoneCoreImpl.java
wrap DSCP API for java
[linphone] / java / impl / org / linphone / core / LinphoneCoreImpl.java
index c00c9a37ccf6a0ddc555faaca26e937cb48384b6..f9a7abf39bc7f5a68be5aff9a85b881408083a54 100644 (file)
@@ -18,14 +18,27 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
 package org.linphone.core;
 
+import static android.media.AudioManager.MODE_IN_CALL;
+import static android.media.AudioManager.MODE_RINGTONE;
+
 import java.io.File;
 import java.io.IOException;
 
+import org.linphone.core.LinphoneCall.State;
+import org.linphone.mediastream.Log;
+import org.linphone.mediastream.video.capture.hwconf.Hacks;
+
+import android.content.Context;
+import android.media.AudioManager;
+
 
 class LinphoneCoreImpl implements LinphoneCore {
 
        private final  LinphoneCoreListener mListener; //to make sure to keep a reference on this object
        private long nativePtr = 0;
+       private Context mContext = null;
+       private AudioManager mAudioManager = null;
+       private boolean mSpeakerEnabled = false;
        private native long newLinphoneCore(LinphoneCoreListener listener,String userConfig,String factoryConfig,Object  userdata);
        private native void iterate(long nativePtr);
        private native long getDefaultProxyConfig(long nativePtr);
@@ -130,14 +143,24 @@ class LinphoneCoreImpl implements LinphoneCore {
        protected void finalize() throws Throwable {
                
        }
-       
+
+       private boolean contextInitialized() {
+               if (mContext == null) {
+                       Log.e("Context of LinphoneCore has not been initialized, call setContext() after creating LinphoneCore.");
+                       return false;
+               }
+               return true;
+       }
+       public void setContext(Object context) {
+               mContext = (Context)context;
+               mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+       }
+
        public synchronized void addAuthInfo(LinphoneAuthInfo info) {
                isValid();
                addAuthInfo(nativePtr,((LinphoneAuthInfoImpl)info).nativePtr);
        }
 
-
-
        public synchronized LinphoneProxyConfig getDefaultProxyConfig() {
                isValid();
                long lNativePtr = getDefaultProxyConfig(nativePtr);
@@ -201,7 +224,6 @@ class LinphoneCoreImpl implements LinphoneCore {
        public synchronized void acceptCall(LinphoneCall aCall) {
                isValid();
                acceptCall(nativePtr,((LinphoneCallImpl)aCall).nativePtr);
-               
        }
        public synchronized LinphoneCallLog[] getCallLogs() {
                isValid();
@@ -235,6 +257,7 @@ class LinphoneCoreImpl implements LinphoneCore {
        public synchronized void muteMic(boolean isMuted) {
                muteMic(nativePtr,isMuted);
        }
+
        public synchronized LinphoneAddress interpretUrl(String destination) throws LinphoneCoreException {
                long lAddress = interpretUrl(nativePtr,destination);
                if (lAddress != 0) {
@@ -301,13 +324,37 @@ class LinphoneCoreImpl implements LinphoneCore {
                // TODO Auto-generated method stub
                
        }
+
+       private void applyAudioHacks() {
+               if (Hacks.needGalaxySAudioHack()) {
+                       /* The microphone gain is way too high on the Galaxy S so correct it here. */
+                       setMicrophoneGain(-9.0f);
+               }
+       }
+       private void setAudioModeIncallForGalaxyS() {
+               if (!contextInitialized()) return;
+               mAudioManager.setMode(MODE_IN_CALL);
+       }
+       public void routeAudioToSpeakerHelper(boolean speakerOn) {
+               if (!contextInitialized()) return;
+               if (Hacks.needGalaxySAudioHack())
+                       setAudioModeIncallForGalaxyS();
+               mAudioManager.setSpeakerphoneOn(speakerOn);
+       }
+       private native void forceSpeakerState(long nativePtr, boolean speakerOn);
        public void enableSpeaker(boolean value) {
-               // TODO Auto-generated method stub
-               
+               final LinphoneCall call = getCurrentCall();
+               mSpeakerEnabled = value;
+               applyAudioHacks();
+               if (call != null && call.getState() == State.StreamsRunning && Hacks.needGalaxySAudioHack()) {
+                       Log.d("Hack to have speaker=", value, " while on call");
+                       forceSpeakerState(nativePtr, value);
+               } else {
+                       routeAudioToSpeakerHelper(value);
+               }
        }
        public boolean isSpeakerEnabled() {
-               // TODO Auto-generated method stub
-               return false;
+               return mSpeakerEnabled;
        }
        public synchronized void playDtmf(char number, int duration) {
                playDtmf(nativePtr,number, duration);
@@ -697,32 +744,37 @@ class LinphoneCoreImpl implements LinphoneCore {
                        throws LinphoneCoreException {
                deferCallUpdate(nativePtr, getCallPtr(aCall));
        }
+
        
        private native void setVideoPolicy(long nativePtr, boolean autoInitiate, boolean autoAccept);
        public synchronized void setVideoPolicy(boolean autoInitiate, boolean autoAccept) {
                setVideoPolicy(nativePtr, autoInitiate, autoAccept);
        }
+       private native void setStaticPicture(long nativePtr, String path);
+       public synchronized void setStaticPicture(String path) {
+               setStaticPicture(nativePtr, path);
+       }
        private native void setUserAgent(long nativePtr, String name, String version);
        @Override
-       public void setUserAgent(String name, String version) {
+       public synchronized void setUserAgent(String name, String version) {
                setUserAgent(nativePtr,name,version);
        }
 
        private native void setCpuCountNative(int count);
-       public void setCpuCount(int count)
+       public synchronized void setCpuCount(int count)
        {
                setCpuCountNative(count);
        }
        
-       public int getMissedCallsCount() {
+       public synchronized int getMissedCallsCount() {
                return getMissedCallsCount(nativePtr);
        }
        
-       public void removeCallLog(LinphoneCallLog log) {
+       public synchronized void removeCallLog(LinphoneCallLog log) {
                removeCallLog(nativePtr, ((LinphoneCallLogImpl) log).getNativePtr());
        }
 
-       public void resetMissedCallsCount() {
+       public synchronized void resetMissedCallsCount() {
                resetMissedCallsCount(nativePtr);
        }
        
@@ -735,7 +787,7 @@ class LinphoneCoreImpl implements LinphoneCore {
        }
        
        private native void refreshRegisters(long nativePtr);
-       public void refreshRegisters() {
+       public synchronized void refreshRegisters() {
                refreshRegisters(nativePtr);
        }
        
@@ -743,21 +795,28 @@ class LinphoneCoreImpl implements LinphoneCore {
        public String getVersion() {
                return getVersion(nativePtr);
        }
-       
+       /**
+        * Wildcard value used by #linphone_core_find_payload_type to ignore rate in search algorithm
+        */
+       static int FIND_PAYLOAD_IGNORE_RATE = -1;
+       /**
+        * Wildcard value used by #linphone_core_find_payload_type to ignore channel in search algorithm
+        */
+       static int FIND_PAYLOAD_IGNORE_CHANNELS = -1;
        @Override
-       public PayloadType findPayloadType(String mime, int clockRate) {
-               return findPayloadType(mime, clockRate, 1);
+       public synchronized PayloadType findPayloadType(String mime, int clockRate) {
+               return findPayloadType(mime, clockRate, FIND_PAYLOAD_IGNORE_CHANNELS);
        }
        
        private native void removeFriend(long ptr, long lf);
        @Override
-       public void removeFriend(LinphoneFriend lf) {
+       public synchronized void removeFriend(LinphoneFriend lf) {
                removeFriend(nativePtr, lf.getNativePtr());
        }
        
        private native long getFriendByAddress(long ptr, String sipUri);
        @Override
-       public LinphoneFriend findFriendByAddress(String sipUri) {
+       public synchronized LinphoneFriend findFriendByAddress(String sipUri) {
                long ptr = getFriendByAddress(nativePtr, sipUri);
                if (ptr == 0) {
                        return null;
@@ -765,47 +824,128 @@ class LinphoneCoreImpl implements LinphoneCore {
                return new LinphoneFriendImpl(ptr);
        }
        
-       public void setAudioPort(int port) {
+       public synchronized void setAudioPort(int port) {
                setAudioPort(nativePtr, port);
        }
        
-       public void setVideoPort(int port) {
+       public synchronized void setVideoPort(int port) {
                setVideoPort(nativePtr, port);
        }
        
-       public void setAudioPortRange(int minPort, int maxPort) {
+       public synchronized void setAudioPortRange(int minPort, int maxPort) {
                setAudioPortRange(nativePtr, minPort, maxPort);
        }
        
-       public void setVideoPortRange(int minPort, int maxPort) {
+       public synchronized void setVideoPortRange(int minPort, int maxPort) {
                setVideoPortRange(nativePtr, minPort, maxPort);
        }
        
-       public void setIncomingTimeout(int timeout) {
+       public synchronized void setIncomingTimeout(int timeout) {
                setIncomingTimeout(nativePtr, timeout);
        }
        
-       public void setInCallTimeout(int timeout)
+       public synchronized void setInCallTimeout(int timeout)
        {
                setInCallTimeout(nativePtr, timeout);
        }
        
        private native void setMicrophoneGain(long ptr, float gain);
-       public void setMicrophoneGain(float gain) {
+       public synchronized void setMicrophoneGain(float gain) {
                setMicrophoneGain(nativePtr, gain);
        }
        
-       public void setPrimaryContact(String displayName, String username) {
+       public synchronized void setPrimaryContact(String displayName, String username) {
                setPrimaryContact(nativePtr, displayName, username);
        }
        
        private native void setUseSipInfoForDtmfs(long ptr, boolean use);
-       public void setUseSipInfoForDtmfs(boolean use) {
+       public synchronized void setUseSipInfoForDtmfs(boolean use) {
                setUseSipInfoForDtmfs(nativePtr, use);
        }
        
        private native void setUseRfc2833ForDtmfs(long ptr, boolean use);
-       public void setUseRfc2833ForDtmfs(boolean use) {
+       public synchronized void setUseRfc2833ForDtmfs(boolean use) {
                setUseRfc2833ForDtmfs(nativePtr, use);
        }
+
+       private native long getConfig(long ptr);
+       public synchronized LpConfig getConfig() {
+               long configPtr=getConfig(nativePtr);
+               return new LpConfigImpl(configPtr);
+       }
+       private native boolean needsEchoCalibration(long ptr);
+       @Override
+       public synchronized boolean needsEchoCalibration() {
+               return needsEchoCalibration(nativePtr);
+       }
+       private native void declineCall(long coreptr, long callptr, int reason);
+       @Override
+       public synchronized void declineCall(LinphoneCall aCall, Reason reason) {
+               declineCall(nativePtr,((LinphoneCallImpl)aCall).nativePtr,reason.mValue);
+       }
+       
+       private native boolean upnpAvailable(long ptr);
+       public boolean upnpAvailable() {
+               return upnpAvailable(nativePtr);
+       } 
+
+       private native int getUpnpState(long ptr);
+       public UpnpState getUpnpState() {
+               return UpnpState.fromInt(getUpnpState(nativePtr));      
+       }
+       
+       private native String getUpnpExternalIpaddress(long ptr);
+       public String getUpnpExternalIpaddress() {
+               return getUpnpExternalIpaddress(nativePtr);
+       }
+       private native int startConferenceRecording(long nativePtr, String path);
+       @Override
+       public void startConferenceRecording(String path) {
+               startConferenceRecording(nativePtr,path);
+       }
+       
+       private native int stopConferenceRecording(long nativePtr);
+       @Override
+       public void stopConferenceRecording() {
+               stopConferenceRecording(nativePtr);
+       }
+       @Override
+       public PayloadType findPayloadType(String mime) {
+               return findPayloadType(mime, FIND_PAYLOAD_IGNORE_RATE);
+       }
+       
+       private native void setSipDscp(long nativePtr, int dscp);
+       @Override
+       public void setSipDscp(int dscp) {
+               setSipDscp(nativePtr,dscp);
+       }
+       
+       private native int getSipDscp(long nativePtr);
+       @Override
+       public int getSipDscp() {
+               return getSipDscp(nativePtr);
+       }
+       private native void setAudioDscp(long nativePtr, int dscp);
+       @Override
+       public void setAudioDscp(int dscp) {
+               setAudioDscp(nativePtr, dscp);
+       }
+       
+       private native int getAudioDscp(long nativePtr);
+       @Override
+       public int getAudioDscp() {
+               return getAudioDscp(nativePtr);
+       }
+       
+       private native void setVideoDscp(long nativePtr, int dscp);
+       @Override
+       public void setVideoDscp(int dscp) {
+               setVideoDscp(nativePtr,dscp);
+       }
+       
+       private native int getVideoDscp(long nativePtr);
+       @Override
+       public int getVideoDscp() {
+               return getVideoDscp(nativePtr);
+       }
 }