首页 > 编程语言 >linphone-LinphonePreferences.java文件分析

linphone-LinphonePreferences.java文件分析

时间:2023-05-29 14:34:57浏览次数:35  
标签:LinphonePreferences return String getLc void boolean java linphone public


说明

这个文件比较长,主要是对于linphone的配置文件等设置。对于前面文章中文件的调用。其中大多数是对底层的调用设置。

功能

  1. 设置用户信息
  2. 设置端口号
  3. 设置显示名称
  4. 设置密码
  5. 设置代理
  6. 设置编码
  7. 设置编码速率
  8. 设置DMTF等
  9. 设置加密解密
  10. 设置是否使用ipv6
  11. 设置tunnel
  12. 设置相机等

UML类图

linphone-LinphonePreferences.java文件分析_GNU

linphone-LinphonePreferences.java文件分析_linphone_02

linphone-LinphonePreferences.java文件分析_GNU_03

linphone-LinphonePreferences.java文件分析_GNU_04

linphone-LinphonePreferences.java文件分析_linphone_05

LinphonePreferences.java

package org.linphone;

/*
LinphonePreferences.java
Copyright (C) 2013  Belledonne Communications, Grenoble, France

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneAddress.TransportType;
import org.linphone.core.LinphoneAuthInfo;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCore.AdaptiveRateAlgorithm;
import org.linphone.core.LinphoneCore.FirewallPolicy;
import org.linphone.core.LinphoneCore.MediaEncryption;
import org.linphone.core.LinphoneCore.Transports;
import org.linphone.core.LinphoneCoreException;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.core.LinphoneProxyConfig;
import org.linphone.core.LpConfig;
import org.linphone.core.TunnelConfig;
import org.linphone.mediastream.Log;

import android.content.Context;

/**
 * @author Sylvain Berfini
 */
public class LinphonePreferences {
    private static final int LINPHONE_CORE_RANDOM_PORT = -1;
    private static LinphonePreferences instance;
    private Context mContext;

    public static final synchronized LinphonePreferences instance() {
        if (instance == null) {
            instance = new LinphonePreferences();
        }
        return instance;
    }

    private LinphonePreferences() {

    }

    public void setContext(Context c) {
        mContext = c;
    }

    private String getString(int key) {
        if (mContext == null && LinphoneManager.isInstanciated()) {
            mContext = LinphoneManager.getInstance().getContext();
        }

        return mContext.getString(key);
    }

    private LinphoneCore getLc() {
        if (!LinphoneManager.isInstanciated())
            return null;

        return LinphoneManager.getLcIfManagerNotDestroyedOrNull();
    }

    public LpConfig getConfig() {
        LinphoneCore lc = getLc();
        if (lc != null) {
            return lc.getConfig();
        }

        if (!LinphoneManager.isInstanciated()) {
            Log.w("LinphoneManager not instanciated yet...");
            return LinphoneCoreFactory.instance().createLpConfig(mContext.getFilesDir().getAbsolutePath() + "/.linphonerc");
        }

        return LinphoneCoreFactory.instance().createLpConfig(LinphoneManager.getInstance().mLinphoneConfigFile);
    }

    public void removePreviousVersionAuthInfoRemoval() {
        getConfig().setBool("sip", "store_auth_info", true);
    }

    // App settings
    public boolean isFirstLaunch() {
        return getConfig().getBool("app", "first_launch", true);
    }

    public void firstLaunchSuccessful() {
        getConfig().setBool("app", "first_launch", false);
    }

    public String getRingtone(String defaultRingtone) {
        String ringtone = getConfig().getString("app", "ringtone", defaultRingtone);
        if (ringtone == null || ringtone.length() == 0)
            ringtone = defaultRingtone;
        return ringtone;
    }

    public void setRingtone(String ringtonePath) {
        getConfig().setString("app", "ringtone", ringtonePath);

    }

    public boolean shouldAutomaticallyAcceptFriendsRequests() {
        return false; //TODO
    }
    // End of app settings

    // Accounts settings
    private LinphoneProxyConfig getProxyConfig(int n) {
        LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList();
        if (n < 0 || n >= prxCfgs.length)
            return null;
        return prxCfgs[n];
    }

    private LinphoneAuthInfo getAuthInfo(int n) {
        LinphoneProxyConfig prxCfg = getProxyConfig(n);
        try {
            LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(prxCfg.getIdentity());
            LinphoneAuthInfo authInfo = getLc().findAuthInfo(addr.getUserName(), null, addr.getDomain());
            return authInfo;
        } catch (LinphoneCoreException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * Removes a authInfo from the core and returns a copy of it.
     * Useful to edit a authInfo (you should call saveAuthInfo after the modifications to save them).
     */
    private LinphoneAuthInfo getClonedAuthInfo(int n) {
        LinphoneAuthInfo authInfo = getAuthInfo(n);
        if (authInfo == null)
            return null;

        LinphoneAuthInfo cloneAuthInfo = authInfo.clone();
        getLc().removeAuthInfo(authInfo);
        return cloneAuthInfo;
    }

    /**
     * Saves a authInfo into the core.
     * Useful to save the changes made to a cloned authInfo.
     */
    private void saveAuthInfo(LinphoneAuthInfo authInfo) {
        getLc().addAuthInfo(authInfo);
    }

    public static class AccountBuilder {
        private LinphoneCore lc;
        private String tempUsername;
        private String tempDisplayName;
        private String tempUserId;
        private String tempPassword;
        private String tempDomain;
        private String tempProxy;
        private String tempRealm;
        private boolean tempOutboundProxy;
        private String tempContactsParams;
        private String tempExpire;
        private TransportType tempTransport;
        private boolean tempAvpfEnabled = false;
        private int tempAvpfRRInterval = 0;
        private String tempQualityReportingCollector;
        private boolean tempQualityReportingEnabled = false;
        private int tempQualityReportingInterval = 0;
        private boolean tempEnabled = true;
        private boolean tempNoDefault = false;


        public AccountBuilder(LinphoneCore lc) {
            this.lc = lc;
        }

        public AccountBuilder setTransport(TransportType transport) {
            tempTransport = transport;
            return this;
        }

        public AccountBuilder setUsername(String username) {
            tempUsername = username;
            return this;
        }

        public AccountBuilder setDisplayName(String displayName) {
            tempDisplayName = displayName;
            return this;
        }

        public AccountBuilder setPassword(String password) {
            tempPassword = password;
            return this;
        }

        public AccountBuilder setDomain(String domain) {
            tempDomain = domain;
            return this;
        }

        public AccountBuilder setProxy(String proxy) {
            tempProxy = proxy;
            return this;
        }

        public AccountBuilder setOutboundProxyEnabled(boolean enabled) {
            tempOutboundProxy = enabled;
            return this;
        }

        public AccountBuilder setContactParameters(String contactParams) {
            tempContactsParams = contactParams;
            return this;
        }

        public AccountBuilder setExpires(String expire) {
             tempExpire = expire;
            return this;
        }

        public AccountBuilder setUserId(String userId) {
            tempUserId = userId;
            return this;
        }

        public AccountBuilder setAvpfEnabled(boolean enable) {
            tempAvpfEnabled = enable;
            return this;
        }

        public AccountBuilder setAvpfRRInterval(int interval) {
            tempAvpfRRInterval = interval;
            return this;
        }

        public AccountBuilder setRealm(String realm) {
            tempRealm = realm;
            return this;
        }

        public AccountBuilder setQualityReportingCollector(String collector) {
            tempQualityReportingCollector = collector;
            return this;
        }

        public AccountBuilder setQualityReportingEnabled(boolean enable) {
            tempQualityReportingEnabled = enable;
            return this;
        }

        public AccountBuilder setQualityReportingInterval(int interval) {
            tempQualityReportingInterval = interval;
            return this;
        }

        public AccountBuilder setEnabled(boolean enable) {
            tempEnabled = enable;
            return this;
        }

        public AccountBuilder setNoDefault(boolean yesno) {
            tempNoDefault = yesno;
            return this;
        }

        /**
         * Creates a new account
         * @throws LinphoneCoreException
         */
        public void saveNewAccount() throws LinphoneCoreException {

            if (tempUsername == null || tempUsername.length() < 1 || tempDomain == null || tempDomain.length() < 1) {
                Log.w("Skipping account save: username or domain not provided");
                return;
            }

            String identity = "sip:" + tempUsername + "@" + tempDomain;
            String proxy = "sip:";
            if (tempProxy == null) {
                proxy += tempDomain;
            } else {
                if (!tempProxy.startsWith("sip:") && !tempProxy.startsWith("<sip:")
                    && !tempProxy.startsWith("sips:") && !tempProxy.startsWith("<sips:")) {
                    proxy += tempProxy;
                } else {
                    proxy = tempProxy;
                }
            }
            LinphoneAddress proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxy);
            LinphoneAddress identityAddr = LinphoneCoreFactory.instance().createLinphoneAddress(identity);

            if (tempDisplayName != null) {
                identityAddr.setDisplayName(tempDisplayName);
            }

            if (tempTransport != null) {
                proxyAddr.setTransport(tempTransport);
            }

            String route = tempOutboundProxy ? proxyAddr.asStringUriOnly() : null;

            LinphoneProxyConfig prxCfg = lc.createProxyConfig(identityAddr.asString(), proxyAddr.asStringUriOnly(), route, tempEnabled);

            if (tempContactsParams != null)
                prxCfg.setContactUriParameters(tempContactsParams);
            if (tempExpire != null) {
                try {
                    prxCfg.setExpires(Integer.parseInt(tempExpire));
                } catch (NumberFormatException nfe) { }
            }

            prxCfg.enableAvpf(tempAvpfEnabled);
            prxCfg.setAvpfRRInterval(tempAvpfRRInterval);
            prxCfg.enableQualityReporting(tempQualityReportingEnabled);
            prxCfg.setQualityReportingCollector(tempQualityReportingCollector);
            prxCfg.setQualityReportingInterval(tempQualityReportingInterval);

            if(tempRealm != null)
                prxCfg.setRealm(tempRealm);

            LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(tempUsername, tempUserId, tempPassword, null, null, tempDomain);

            lc.addProxyConfig(prxCfg);
            lc.addAuthInfo(authInfo);

            if (!tempNoDefault)
                lc.setDefaultProxyConfig(prxCfg);
        }
    }

    public void setAccountTransport(int n, String transport) {
        LinphoneProxyConfig proxyConfig = getProxyConfig(n);

        if (proxyConfig != null && transport != null) {
            LinphoneAddress proxyAddr;
            try {
                proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxyConfig.getProxy());
                int port = 0;
                if (transport.equals(getString(R.string.pref_transport_udp_key))) {
                    proxyAddr.setTransport(TransportType.LinphoneTransportUdp);
                } else if (transport.equals(getString(R.string.pref_transport_tcp_key))) {
                    proxyAddr.setTransport(TransportType.LinphoneTransportTcp);
                } else if (transport.equals(getString(R.string.pref_transport_tls_key))) {
                    proxyAddr.setTransport(TransportType.LinphoneTransportTls);
                    port = 5223;
                }

                /* 3G mobile firewall might block random TLS port, so we force use of 5223.
                 * However we must NOT use this port when changing to TCP/UDP because otherwise
                  * REGISTER (and everything actually) will fail...
                  * */
                if ("sip.linphone.org".equals(proxyConfig.getDomain())) {
                    proxyAddr.setPort(port);
                }

                LinphoneProxyConfig prxCfg = getProxyConfig(n);
                prxCfg.edit();
                prxCfg.setProxy(proxyAddr.asStringUriOnly());
                prxCfg.done();

                if (isAccountOutboundProxySet(n)) {
                    setAccountOutboundProxyEnabled(n, true);
                }
            } catch (LinphoneCoreException e) {
                e.printStackTrace();
            }
        }
    }

    public TransportType getAccountTransport(int n) {
        TransportType transport = null;
        LinphoneProxyConfig proxyConfig = getProxyConfig(n);

        if (proxyConfig != null) {
            LinphoneAddress proxyAddr;
            try {
                proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxyConfig.getProxy());
                transport = proxyAddr.getTransport();
            } catch (LinphoneCoreException e) {
                e.printStackTrace();
            }
        }

        return transport;
    }

    public String getAccountTransportKey(int n) {
        TransportType transport = getAccountTransport(n);
        String key = getString(R.string.pref_transport_udp_key);

        if (transport != null && transport == TransportType.LinphoneTransportTcp)
            key = getString(R.string.pref_transport_tcp_key);
        else if (transport != null && transport == TransportType.LinphoneTransportTls)
            key = getString(R.string.pref_transport_tls_key);

        return key;
    }

    public String getAccountTransportString(int n) {
        TransportType transport = getAccountTransport(n);

        if (transport != null && transport == TransportType.LinphoneTransportTcp)
            return getString(R.string.pref_transport_tcp);
        else if (transport != null && transport == TransportType.LinphoneTransportTls)
            return getString(R.string.pref_transport_tls);

        return getString(R.string.pref_transport_udp);
    }

    public void setAccountUsername(int n, String username) {
        String identity = "sip:" + username + "@" + getAccountDomain(n);
        LinphoneAuthInfo info = getClonedAuthInfo(n); // Get the auth info before editing the proxy config to ensure to get the correct auth info
        try {
            LinphoneProxyConfig prxCfg = getProxyConfig(n);
            prxCfg.edit();
            prxCfg.setIdentity(identity);
            prxCfg.done();

            if(info != null) {
                info.setUsername(username);
                saveAuthInfo(info);
            }
        } catch (LinphoneCoreException e) {
            e.printStackTrace();
        }
    }

    public String getAccountUsername(int n) {
        LinphoneAuthInfo authInfo = getAuthInfo(n);
        return authInfo == null ? null : authInfo.getUsername();
    }

    public void setAccountDisplayName(int n, String displayName) {
        try {
            LinphoneProxyConfig prxCfg = getProxyConfig(n);
            LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(prxCfg.getIdentity());
            addr.setDisplayName(displayName);
            prxCfg.edit();
            prxCfg.setIdentity(addr.asString());
            prxCfg.done();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String getAccountDisplayName(int n) {
        LinphoneAddress addr = getProxyConfig(n).getAddress();
        if(addr != null) {
            return addr.getDisplayName();
        }
        return null;
    }

    public void setAccountUserId(int n, String userId) {
        LinphoneAuthInfo info = getClonedAuthInfo(n);
        if(info != null) {
            info.setUserId(userId);
            saveAuthInfo(info);
        }
    }

    public String getAccountUserId(int n) {
        LinphoneAuthInfo authInfo = getAuthInfo(n);
        return authInfo == null ? null : authInfo.getUserId();
    }

    public void setAccountPassword(int n, String password) {
        if(getAccountDomain(n) != null && getAccountUsername(n) != null) {
            LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(getAccountUsername(n), null, password, null, null, getAccountDomain(n));
            LinphoneManager.getLc().addAuthInfo(authInfo);
        }
    }

    public String getAccountPassword(int n) {
        LinphoneAuthInfo authInfo = getAuthInfo(n);
        return authInfo == null ? null : authInfo.getPassword();
    }
    public void setAccountDomain(int n, String domain) {
        String identity = "sip:" + getAccountUsername(n) + "@" + domain;

        try {
            LinphoneAuthInfo authInfo = getClonedAuthInfo(n);
            if(authInfo != null) {
                authInfo.setDomain(domain);
                saveAuthInfo(authInfo);
            }

            LinphoneProxyConfig prxCfg = getProxyConfig(n);
            prxCfg.edit();
            prxCfg.setIdentity(identity);
            prxCfg.done();
        } catch (LinphoneCoreException e) {
            e.printStackTrace();
        }
    }

    public String getAccountDomain(int n) {
        return getProxyConfig(n).getDomain();
    }

    public void setAccountProxy(int n, String proxy) {
        if (proxy == null || proxy.length() <= 0) {
            proxy = getAccountDomain(n);
        }

        if (!proxy.contains("sip:")) {
            proxy = "sip:" + proxy;
        }

        try {
            LinphoneAddress proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxy);
            if (!proxy.contains("transport=")) {
                proxyAddr.setTransport(getAccountTransport(n));
            }

            LinphoneProxyConfig prxCfg = getProxyConfig(n);
            prxCfg.edit();
            prxCfg.setProxy(proxyAddr.asStringUriOnly());
            prxCfg.done();

            if (isAccountOutboundProxySet(n)) {
                setAccountOutboundProxyEnabled(n, true);
            }
        } catch (LinphoneCoreException e) {
            e.printStackTrace();
        }
    }

    public String getAccountProxy(int n) {
        String proxy = getProxyConfig(n).getProxy();
        return proxy;
    }


    public void setAccountOutboundProxyEnabled(int n, boolean enabled) {
        try {
            LinphoneProxyConfig prxCfg = getProxyConfig(n);
            prxCfg.edit();
            if (enabled) {
                String route = prxCfg.getProxy();
                prxCfg.setRoute(route);
            } else {
                prxCfg.setRoute(null);
            }
            prxCfg.done();
        } catch (LinphoneCoreException e) {
            e.printStackTrace();
        }
    }

    public boolean isAccountOutboundProxySet(int n) {
        return getProxyConfig(n).getRoute() != null;
    }

    public void setAccountContactParameters(int n, String contactParams) {
        LinphoneProxyConfig prxCfg = getProxyConfig(n);
        prxCfg.edit();
        prxCfg.setContactUriParameters(contactParams);
        prxCfg.done();
    }

    public String getExpires(int n) {
        return String.valueOf(getProxyConfig(n).getExpires());
    }

    public void setExpires(int n, String expire) {
        try {
            LinphoneProxyConfig prxCfg = getProxyConfig(n);
            prxCfg.edit();
            prxCfg.setExpires(Integer.parseInt(expire));
            prxCfg.done();
        } catch (NumberFormatException nfe) { }
    }

    public String getPrefix(int n) {
        return getProxyConfig(n).getDialPrefix();
    }

    public void setPrefix(int n, String prefix) {
        LinphoneProxyConfig prxCfg = getProxyConfig(n);
        prxCfg.edit();
        prxCfg.setDialPrefix(prefix);
        prxCfg.done();
    }

    public boolean avpfEnabled(int n) {
        return getProxyConfig(n).avpfEnabled();
    }

    public void enableAvpf(int n, boolean enable) {
        LinphoneProxyConfig prxCfg = getProxyConfig(n);
        prxCfg.edit();
        prxCfg.enableAvpf(enable);
        prxCfg.done();
    }

    public String getAvpfRRInterval(int n) {
        return String.valueOf(getProxyConfig(n).getAvpfRRInterval());
    }

    public void setAvpfRRInterval(int n, String interval) {
        try {
            LinphoneProxyConfig prxCfg = getProxyConfig(n);
            prxCfg.edit();
            prxCfg.setAvpfRRInterval(Integer.parseInt(interval));
            prxCfg.done();
        } catch (NumberFormatException nfe) { }
    }

    public boolean getReplacePlusByZeroZero(int n) {
        return getProxyConfig(n).getDialEscapePlus();
    }

    public void setReplacePlusByZeroZero(int n, boolean replace) {
        LinphoneProxyConfig prxCfg = getProxyConfig(n);
        prxCfg.edit();
        prxCfg.setDialEscapePlus(replace);
        prxCfg.done();
    }

    public void setDefaultAccount(int accountIndex) {
        LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList();
        if (accountIndex >= 0 && accountIndex < prxCfgs.length)
            getLc().setDefaultProxyConfig(prxCfgs[accountIndex]);
    }

    public int getDefaultAccountIndex() {
        LinphoneProxyConfig defaultPrxCfg = getLc().getDefaultProxyConfig();
        if (defaultPrxCfg == null)
            return -1;

        LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList();
        for (int i = 0; i < prxCfgs.length; i++) {
            if (defaultPrxCfg.getIdentity().equals(prxCfgs[i].getIdentity())) {
                return i;
            }
        }
        return -1;
    }

    public int getAccountCount() {
        if (getLc() == null || getLc().getProxyConfigList() == null)
            return 0;

        return getLc().getProxyConfigList().length;
    }

    public void setAccountEnabled(int n, boolean enabled) {
        LinphoneProxyConfig prxCfg = getProxyConfig(n);
        prxCfg.edit();
        prxCfg.enableRegister(enabled);
        prxCfg.done();

        // If default proxy config is disabled, try to set another one as default proxy
        if (!enabled && getLc().getDefaultProxyConfig().getIdentity().equals(prxCfg.getIdentity())) {
            int count = getLc().getProxyConfigList().length;
            if (count > 1) {
                for (int i = 0; i < count; i++) {
                    if (isAccountEnabled(i)) {
                        getLc().setDefaultProxyConfig(getProxyConfig(i));
                        break;
                    }
                }
            }
        }
    }

    public boolean isAccountEnabled(int n) {
        return getProxyConfig(n).registerEnabled();
    }

    public void resetDefaultProxyConfig(){
        int count = getLc().getProxyConfigList().length;
        for (int i = 0; i < count; i++) {
            if (isAccountEnabled(i)) {
                getLc().setDefaultProxyConfig(getProxyConfig(i));
                break;
            }
        }

        if(getLc().getDefaultProxyConfig() == null){
            getLc().setDefaultProxyConfig(getProxyConfig(0));
        }
    }

    public void deleteAccount(int n) {
        final LinphoneProxyConfig proxyCfg = getProxyConfig(n);
        if (proxyCfg != null)
            getLc().removeProxyConfig(proxyCfg);
        if (getLc().getProxyConfigList().length != 0) {
            resetDefaultProxyConfig();
        } else {
            getLc().setDefaultProxyConfig(null);
        }
        getLc().refreshRegisters();
    }
    // End of accounts settings

    // Audio settings
    public void setEchoCancellation(boolean enable) {
        getLc().enableEchoCancellation(enable);
    }

    public boolean isEchoCancellationEnabled() {
        return getLc().isEchoCancellationEnabled();
    }

    public int getEchoCalibration() {
        return getConfig().getInt("sound", "ec_delay", -1);
    }

    public boolean isEchoConfigurationUpdated() {
        return getConfig().getBool("app", "ec_updated", false);
    }

    public void echoConfigurationUpdated() {
        getConfig().setBool("app", "ec_updated", true);
    }
    // End of audio settings

    // Video settings
    public boolean useFrontCam() {
        return getConfig().getBool("app", "front_camera_default", true);
    }

    public void setFrontCamAsDefault(boolean frontcam) {
        getConfig().setBool("app", "front_camera_default", frontcam);
    }

    public boolean isVideoEnabled() {
        return getLc().isVideoSupported() && getLc().isVideoEnabled();
    }

    public void enableVideo(boolean enable) {
        getLc().enableVideo(enable, enable);
    }

    public boolean shouldInitiateVideoCall() {
        return getLc().getVideoAutoInitiatePolicy();
    }

    public void setInitiateVideoCall(boolean initiate) {
        getLc().setVideoPolicy(initiate, shouldAutomaticallyAcceptVideoRequests());
    }

    public boolean shouldAutomaticallyAcceptVideoRequests() {
        return getLc().getVideoAutoAcceptPolicy();
    }

    public void setAutomaticallyAcceptVideoRequests(boolean accept) {
        getLc().setVideoPolicy(shouldInitiateVideoCall(), accept);
    }

    public String getVideoPreset() {
        String preset = getLc().getVideoPreset();
        if (preset == null) preset = "default";
        return preset;
    }

    public void setVideoPreset(String preset) {
        if (preset.equals("default")) preset = null;
        getLc().setVideoPreset(preset);
        preset = getVideoPreset();
        if (!preset.equals("custom")) {
            getLc().setPreferredFramerate(0);
        }
        setPreferredVideoSize(getPreferredVideoSize()); // Apply the bandwidth limit
    }

    public String getPreferredVideoSize() {
        //LinphoneCore can only return video size (width and height), not the name
        return getConfig().getString("video", "size", "qvga");
    }

    public void setPreferredVideoSize(String preferredVideoSize) {
        getLc().setPreferredVideoSizeByName(preferredVideoSize);
        String preset = getVideoPreset();
        if (!preset.equals("custom")) {
            int bandwidth = 512;
            if (preferredVideoSize.equals("720p")) {
                bandwidth = 1024 + 128;
            } else if (preferredVideoSize.equals("vga")) {
                bandwidth = 660;
            } else if (preferredVideoSize.equals("qvga")) {
                bandwidth = 380;
            } else if (preferredVideoSize.equals("qcif")) {
                bandwidth = 256;
            }
            setBandwidthLimit(bandwidth);
        }
    }

    public int getPreferredVideoFps() {
        return (int)getLc().getPreferredFramerate();
    }

    public void setPreferredVideoFps(int fps) {
        getLc().setPreferredFramerate(fps);
    }

    public int getBandwidthLimit() {
        return getLc().getDownloadBandwidth();
    }

    public void setBandwidthLimit(int bandwidth) {
        getLc().setUploadBandwidth(bandwidth);
        getLc().setDownloadBandwidth(bandwidth);
    }
    // End of video settings

    // Call settings
    public boolean useRfc2833Dtmfs() {
        return getLc().getUseRfc2833ForDtmfs();
    }

    public void sendDtmfsAsRfc2833(boolean use) {
        getLc().setUseRfc2833ForDtmfs(use);
    }

    public boolean useSipInfoDtmfs() {
        return getLc().getUseSipInfoForDtmfs();
    }

    public void sendDTMFsAsSipInfo(boolean use) {
        getLc().setUseSipInfoForDtmfs(use);
    }

    public String getVoiceMailUri() {
        return getConfig().getString("app", "voice_mail", null);
    }

    public void setVoiceMailUri(String uri) {
        getConfig().setString("app", "voice_mail", uri);
    }
    // End of call settings

    // Network settings
    public void setWifiOnlyEnabled(Boolean enable) {
        getConfig().setBool("app", "wifi_only", enable);
    }

    public boolean isWifiOnlyEnabled() {
        return getConfig().getBool("app", "wifi_only", false);
    }

    public String getStunServer() {
        return getLc().getStunServer();
    }

    public void setStunServer(String stun) {
        getLc().setStunServer(stun);
    }

    public void setIceEnabled(boolean enabled) {
        if (enabled) {
            getLc().setFirewallPolicy(FirewallPolicy.UseIce);
        } else {
            String stun = getStunServer();
            if (stun != null && stun.length() > 0) {
                getLc().setFirewallPolicy(FirewallPolicy.UseStun);
            } else {
                getLc().setFirewallPolicy(FirewallPolicy.NoFirewall);
            }
         }
    }

    public void setUpnpEnabled(boolean enabled) {
        if (enabled) {
            if (isIceEnabled()) {
                Log.e("Cannot have both ice and upnp enabled, disabling upnp");
            } else {
                getLc().setFirewallPolicy(FirewallPolicy.UseUpnp);
            }
        }
        else {
            String stun = getStunServer();
            if (stun != null && stun.length() > 0) {
                getLc().setFirewallPolicy(FirewallPolicy.UseStun);
            } else {
                getLc().setFirewallPolicy(FirewallPolicy.NoFirewall);
            }
        }
    }

    public void useRandomPort(boolean enabled) {
        useRandomPort(enabled, true);
    }

    public void useRandomPort(boolean enabled, boolean apply) {
        getConfig().setBool("app", "random_port", enabled);
        if (apply) {
            if (enabled) {
                setSipPort(LINPHONE_CORE_RANDOM_PORT);
            } else {
                setSipPort(5060);
            }
        }
    }

    public boolean isUsingRandomPort() {
        return getConfig().getBool("app", "random_port", true);
    }

    public String getSipPort() {
        Transports transports = getLc().getSignalingTransportPorts();
        int port;
        if (transports.udp > 0)
            port = transports.udp;
        else
            port = transports.tcp;
        return String.valueOf(port);
    }

    public void setSipPort(int port) {
        Transports transports = getLc().getSignalingTransportPorts();
        transports.udp = port;
        transports.tcp = port;
        transports.tls = LINPHONE_CORE_RANDOM_PORT;
        getLc().setSignalingTransportPorts(transports);
    }

    public boolean isUpnpEnabled() {
        return getLc().upnpAvailable() && getLc().getFirewallPolicy() == FirewallPolicy.UseUpnp;
    }

    public boolean isIceEnabled() {
        return getLc().getFirewallPolicy() == FirewallPolicy.UseIce;
    }

    public MediaEncryption getMediaEncryption() {
        return getLc().getMediaEncryption();
    }

    public void setMediaEncryption(MediaEncryption menc) {
        if (menc == null)
            return;

        getLc().setMediaEncryption(menc);
    }

    public void setPushNotificationEnabled(boolean enable) {
         getConfig().setBool("app", "push_notification", enable);

         if (enable) {
             // Add push infos to exisiting proxy configs
             String regId = getPushNotificationRegistrationID();
             String appId = getString(R.string.push_sender_id);
             if (regId != null && getLc().getProxyConfigList().length > 0) {
                 for (LinphoneProxyConfig lpc : getLc().getProxyConfigList()) {
                     String contactInfos = "app-id=" + appId + ";pn-type=google;pn-tok=" + regId;
                     lpc.edit();
                     lpc.setContactUriParameters(contactInfos);
                     lpc.done();
                     Log.d("Push notif infos added to proxy config");
                 }
                 getLc().refreshRegisters();
             }
         } else {
             if (getLc().getProxyConfigList().length > 0) {
                 for (LinphoneProxyConfig lpc : getLc().getProxyConfigList()) {
                     lpc.edit();
                     lpc.setContactUriParameters(null);
                     lpc.done();
                     Log.d("Push notif infos removed from proxy config");
                 }
                 getLc().refreshRegisters();
             }
         }
    }

    public boolean isPushNotificationEnabled() {
        return getConfig().getBool("app", "push_notification", false);
    }

    public void setPushNotificationRegistrationID(String regId) {
         getConfig().setString("app", "push_notification_regid", regId);
    }

    public String getPushNotificationRegistrationID() {
        return getConfig().getString("app", "push_notification_regid", null);
    }

    public void useIpv6(Boolean enable) {
         getLc().enableIpv6(enable);
    }

    public boolean isUsingIpv6() {
        return getLc().isIpv6Enabled();
    }
    // End of network settings

    // Advanced settings
    public void setDebugEnabled(boolean enabled) {
        getConfig().setBool("app", "debug", enabled);
        LinphoneCoreFactory.instance().enableLogCollection(enabled);
        LinphoneCoreFactory.instance().setDebugMode(enabled, getString(R.string.app_name));
    }

    public boolean isDebugEnabled() {
        return getConfig().getBool("app", "debug", false);
    }

    public void setBackgroundModeEnabled(boolean enabled) {
        getConfig().setBool("app", "background_mode", enabled);
    }

    public boolean isBackgroundModeEnabled() {
        return getConfig().getBool("app", "background_mode", true);
    }

    public void setAnimationsEnabled(boolean enabled) {
        getConfig().setBool("app", "animations", enabled);
    }

    public boolean areAnimationsEnabled() {
        return getConfig().getBool("app", "animations", false);
    }

    public boolean isAutoStartEnabled() {
        return getConfig().getBool("app", "auto_start", false);
    }

    public void setAutoStart(boolean autoStartEnabled) {
        getConfig().setBool("app", "auto_start", autoStartEnabled);
    }

    public String getSharingPictureServerUrl() {
        return getConfig().getString("app", "sharing_server", null);
    }

    public void setSharingPictureServerUrl(String url) {
        getConfig().setString("app", "sharing_server", url);
    }

    public void setRemoteProvisioningUrl(String url) {
        if (url != null && url.length() == 0) {
            url = null;
        }
        getLc().setProvisioningUri(url);
    }

    public String getRemoteProvisioningUrl() {
        return getLc().getProvisioningUri();
    }

    public void setDefaultDisplayName(String displayName) {
        getLc().setPrimaryContact(displayName, getDefaultUsername());
    }

    public String getDefaultDisplayName() {
        return getLc().getPrimaryContactDisplayName();
    }

    public void setDefaultUsername(String username) {
        getLc().setPrimaryContact(getDefaultDisplayName(), username);
    }

    public String getDefaultUsername() {
        return getLc().getPrimaryContactUsername();
    }
    // End of advanced settings

    // Tunnel settings
    private TunnelConfig tunnelConfig = null;

    public TunnelConfig getTunnelConfig() {
        if(getLc().isTunnelAvailable()) {
            if(tunnelConfig == null) {
                TunnelConfig servers[] = getLc().tunnelGetServers();
                if(servers.length > 0) {
                    tunnelConfig = servers[0];
                } else {
                    tunnelConfig = LinphoneCoreFactory.instance().createTunnelConfig();
                }
            }
            return tunnelConfig;
        } else {
            return null;
        }
    }

    public String getTunnelHost() {
        TunnelConfig config = getTunnelConfig();
        if(config != null) {
            return config.getHost();
        } else {
            return null;
        }
    }

    public void setTunnelHost(String host) {
        TunnelConfig config = getTunnelConfig();
        if(config != null) {
            config.setHost(host);
            LinphoneManager.getInstance().initTunnelFromConf();
        }
    }

    public int getTunnelPort() {
        TunnelConfig config = getTunnelConfig();
        if(config != null) {
            return config.getPort();
        } else {
            return -1;
        }
    }

    public void setTunnelPort(int port) {
        TunnelConfig config = getTunnelConfig();
        if(config != null) {
            config.setPort(port);
            LinphoneManager.getInstance().initTunnelFromConf();
        }
    }

    public String getTunnelMode() {
        return getConfig().getString("app", "tunnel", null);
    }

    public void setTunnelMode(String mode) {
        getConfig().setString("app", "tunnel", mode);
        LinphoneManager.getInstance().initTunnelFromConf();
    }
    // End of tunnel settings

    public boolean isProvisioningLoginViewEnabled() {
        return getConfig().getBool("app", "show_login_view", false);
    }

    public void disableProvisioningLoginView() {
        if (isProvisioningLoginViewEnabled()) { // Only do it if it was previously enabled
            getConfig().setBool("app", "show_login_view", false);
        } else {
            Log.w("Remote provisioning login view wasn't enabled, ignoring");
        }
    }

    public void firstRemoteProvisioningSuccessful() {
        getConfig().setBool("app", "first_remote_provisioning", false);
    }

    public boolean isFirstRemoteProvisioning() {
        return getConfig().getBool("app", "first_remote_provisioning", true);
    }

    public boolean isAdaptiveRateControlEnabled() {
        return getLc().isAdaptiveRateControlEnabled();
    }

    public void enableAdaptiveRateControl(boolean enabled) {
        getLc().enableAdaptiveRateControl(enabled);
    }

    public AdaptiveRateAlgorithm getAdaptiveRateAlgorithm() {
        return getLc().getAdaptiveRateAlgorithm();
    }

    public void setAdaptiveRateAlgorithm(AdaptiveRateAlgorithm alg) {
        getLc().setAdaptiveRateAlgorithm(alg);
    }

    public int getCodecBitrateLimit() {
        return getConfig().getInt("audio", "codec_bitrate_limit", 36);
    }

    public void setCodecBitrateLimit(int bitrate) {
        getConfig().setInt("audio", "codec_bitrate_limit", bitrate);
    }

    public void contactsMigrationDone(){
        getConfig().setBool("app", "contacts_migration_done", true);
    }

    public boolean isContactsMigrationDone(){
        return getConfig().getBool("app", "contacts_migration_done",false);
    }

    public String getXmlRpcServerUrl() {
        return getConfig().getString("app", "server_url", null);
    }

    public String getDebugPopupAddress(){
        return getConfig().getString("app", "debug_popup_magic", null);
    }

    public void enableDebugLogs(Boolean debugMode){
        getConfig().setBool("app", "debug_logs_enabled", debugMode);
    }

    public Boolean isDebugLogsEnabled(){
        return getConfig().getBool("app", "debug_logs_enabled", false);
    }

    public Boolean audioPermAsked(){
        return getConfig().getBool("app", "audio_perm", false);
    }

    public void neverAskAudioPerm(){
         getConfig().setBool("app", "audio_perm", true);
    }

    public Boolean cameraPermAsked(){
        return getConfig().getBool("app", "camera_perm", false);
    }

    public void neverAskCameraPerm(){
        getConfig().setBool("app", "camera_perm", true);
    }
}


标签:LinphonePreferences,return,String,getLc,void,boolean,java,linphone,public
From: https://blog.51cto.com/u_11797608/6370718

相关文章

  • linphone-NetworkManger.java文件分析
    功能InterceptnetworkstatechangesandupdatelinphonecorethroughLinphoneManger翻译拦截网络状态的变化,并通过LinphoneManger更新linphone核心内容。NetworkManager.java/**......
  • 使用 Java 代码调用 openAI 的 ChatGPT API
    前提:在https://beta.openai.com/account/api-keys注册一个自己的APIkey.要在JavaSpringFramework中使用OpenAIAPI,您需要使用一个能够处理HTTP请求的库。其中一个流行的库是SpringRestTemplate库。RestTemplate是一个强大而灵活的库,可以轻松地发送HTTP请求并处理响应。首......
  • linphone-KeepAliveReceiver.java文件分析
    说明Purposeofthisreceiveristodisablekeepaliveswhenscreenisoff解释这个接收器的目的是屏幕关闭的时候进行保活。<—翻译的准确性,等更加深刻的分析源码时更正,或者读者自己在下面评论也可以。介绍此类为接收器,接收外部传来的广播。KeepAliveReceiver.java/**Purpos......
  • linphone-BootReceiver.java文件分析
    说明这是个在android发送开机广播的时候调用的类功能主要就是为了在开机的时候启动LinphoneService开启后台服务。其中有一个.linphonerc的文件,这个文件应该是LpConfig的对应的配置文件。如果有错请更正。BootReceiver.javapublicclassBootReceiverextendsBroadcastReceiver{......
  • linphone-PresenceNote.java文件分析
    说明这个没什么好说的,一个普通的的类。UML类图PresenceNoteImpl.javapackageorg.linphone.core;publicclassPresenceNoteImplimplementsPresenceNote{privatelongmNativePtr;protectedPresenceNoteImpl(longnativePtr){mNativePtr=nativePtr;......
  • linphone-Tunnelconfig.java文件分析
    说明此类的主要作用主要是配置Host,port等。功能设置获取Host设置获取Port设置获取RemoteUdpMirrorPort获取设置maximumamountoftimeUML类图TunnelConfig.javapackageorg.linphone.core;publicclassTunnelConfigImplimplementsTunnelConfig{longmNativePtr;pr......
  • linphone-PresencePerson.java文件分析
    说明同上一张PresenceService和PresenceActivity的分析,但是不明白的是,为啥PresencePerson函数跟PresenceModel的函数很类似。唯一我现在能想到的原因是,每个Person主要存储。《—-放弃了,往后看吧。UML类图PresencePersonImpl.javapackageorg.linphone.core;publicclassPresenc......
  • linphone-PresenceActivity.java文件分析
    说明此类的对象供PresenceModel使用UML类图PresenceActivityImpl.javapackageorg.linphone.core;publicclassPresenceActivityImplimplementsPresenceActivity{privatelongmNativePtr;protectedPresenceActivityImpl(longnativePtr){mNativePtr=......
  • 什么是 JavaScript 里的循环引用(circular references)
    JavaScript的循环引用(circularreferences)是指在对象之间存在相互引用的情况,形成一个闭环,导致对象无法被完全释放和垃圾回收。循环引用发生在当一个对象的属性或成员引用另一个对象,并且这个被引用的对象又直接或间接地引用回原始对象,从而形成一个循环。当存在循环引用时,JavaScrip......
  • 详谈Java中Properties配置类怎么用
    本文将为大家详细讲解Java中Properties配置类怎么用,这是我们进行开发时经常用到的知识点,也是大家在学习Java中很重要的一个知识点,更是我们在面试时有可能会问到的问题!文章较长,干货满满,建议大家收藏慢慢学习。文末有本文重点总结,主页有全系列文章分享。技术类问题,欢迎大家和我们一......