From b9829e15a7034f66d2ee46a46c508db9eb74619b Mon Sep 17 00:00:00 2001 From: Danmei Chen Date: Wed, 25 Apr 2018 15:32:00 +0200 Subject: [PATCH] correct no video error in android and set speakerphone always for special devices --- java/common/org/linphone/core/LinphoneCore.java | 7 +++++++ .../org/linphone/core/LinphoneCoreFactoryImpl.java | 14 ++++++++++---- java/impl/org/linphone/core/LinphoneCoreImpl.java | 5 +++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/java/common/org/linphone/core/LinphoneCore.java b/java/common/org/linphone/core/LinphoneCore.java index e1815f0e9..c388aec1c 100644 --- a/java/common/org/linphone/core/LinphoneCore.java +++ b/java/common/org/linphone/core/LinphoneCore.java @@ -1066,6 +1066,13 @@ public interface LinphoneCore { * @return true if speaker enabled, false otherwise */ boolean isSpeakerEnabled(); + + /** + * Always Activates the speaker or not. + * @param value + */ + void setSpeakerphoneAlwaysOn(boolean value); + /** * add a friend to the current buddy list, if subscription attribute is set, a SIP SUBSCRIBE message is sent. * @param lf LinphoenFriend to add diff --git a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java index 402049f5a..3023b3305 100644 --- a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java @@ -96,6 +96,12 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { return true; } + private void setSpeaker(LinphoneCore lc) { + boolean value = MediastreamerAndroidContext.getSpeakerphoneAlwaysOn(lc.getMSFactory()); + lc.setSpeakerphoneAlwaysOn(value); + lc.enableSpeaker(value); + } + @Override public LinphoneCore createLinphoneCore(LinphoneCoreListener listener, String userConfig, String factoryConfig, Object userdata, Object context) @@ -104,11 +110,11 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { fcontext = (Context)context; boolean openh264DownloadEnabled = false; if (context != null) openh264DownloadEnabled = loadingDownloadedOpenH264(fcontext); - + MediastreamerAndroidContext.setContext(context); File user = userConfig == null ? null : new File(userConfig); File factory = factoryConfig == null ? null : new File(factoryConfig); LinphoneCore lc = new LinphoneCoreImpl(listener, user, factory, userdata, context); - MediastreamerAndroidContext.setContext(context,lc.getMSFactory()); + setSpeaker(lc); lc.enableDownloadOpenH264(openh264DownloadEnabled); return lc; } catch (IOException e) { @@ -122,9 +128,9 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { fcontext = (Context)context; boolean openh264DownloadEnabled = false; if (context != null) openh264DownloadEnabled = loadingDownloadedOpenH264(fcontext); - + MediastreamerAndroidContext.setContext(context); LinphoneCore lc = new LinphoneCoreImpl(listener, context); - MediastreamerAndroidContext.setContext(context,lc.getMSFactory()); + setSpeaker(lc); lc.enableDownloadOpenH264(openh264DownloadEnabled); return lc; } catch (IOException e) { diff --git a/java/impl/org/linphone/core/LinphoneCoreImpl.java b/java/impl/org/linphone/core/LinphoneCoreImpl.java index a72ef2aec..162663ed1 100644 --- a/java/impl/org/linphone/core/LinphoneCoreImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreImpl.java @@ -47,6 +47,7 @@ class LinphoneCoreImpl implements LinphoneCore { private AudioManager mAudioManager = null; private boolean openh264DownloadEnabled = false; private boolean mSpeakerEnabled = false; + private boolean mSpeakerphoneAlwaysOn = false; //Speakerphone always on for some speacial devices private native long newLinphoneCore(LinphoneCoreListener listener,String userConfig,String factoryConfig,Object userdata, Object context); private native void iterate(long nativePtr); private native LinphoneProxyConfig getDefaultProxyConfig(long nativePtr); @@ -447,6 +448,7 @@ class LinphoneCoreImpl implements LinphoneCore { } private native void forceSpeakerState(long nativePtr, boolean speakerOn); public void enableSpeaker(boolean value) { + value = value || mSpeakerphoneAlwaysOn; final LinphoneCall call = getCurrentCall(); mSpeakerEnabled = value; applyAudioHacks(); @@ -460,6 +462,9 @@ class LinphoneCoreImpl implements LinphoneCore { public boolean isSpeakerEnabled() { return mSpeakerEnabled; } + public void setSpeakerphoneAlwaysOn(boolean value) { + mSpeakerphoneAlwaysOn = value; + } public synchronized void playDtmf(char number, int duration) { playDtmf(nativePtr,number, duration);