From 5aeebfeb723333e1def8979b3628b1126dfb6dd6 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 17 May 2019 09:41:50 +0200 Subject: [PATCH] Fixed issue with default linphonerc when app is installed for the first time --- .../java/org/linphone/LinphoneManager.java | 63 ++---------------- .../linphone/assistant/AssistantActivity.java | 6 +- .../settings/AccountSettingsFragment.java | 2 +- .../settings/LinphonePreferences.java | 64 ++++++++++++++++++- 4 files changed, 71 insertions(+), 64 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 5feed3044..54e0bea2c 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -41,9 +41,6 @@ import android.view.View; import android.widget.Button; import android.widget.CheckBox; import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.sql.Timestamp; import java.util.Date; import java.util.Timer; @@ -81,11 +78,7 @@ import org.linphone.utils.PushNotificationUtils; /** Handles Linphone's Core lifecycle */ public class LinphoneManager implements SensorEventListener { - private final String mConfigFile; - private final String mLPConfigXsd; private final String mBasePath; - private final String mLinphoneFactoryConfigFile; - private final String mLinphoneDynamicConfigFile, mDefaultDynamicConfigFile; private final String mRingSoundFile; private final String mCallLogDatabaseFile; private final String mFriendsDatabaseFile; @@ -120,11 +113,6 @@ public class LinphoneManager implements SensorEventListener { mExited = false; mContext = c; mBasePath = c.getFilesDir().getAbsolutePath(); - mLPConfigXsd = mBasePath + "/lpconfig.xsd"; - mLinphoneFactoryConfigFile = mBasePath + "/linphonerc"; - mConfigFile = mBasePath + "/.linphonerc"; - mLinphoneDynamicConfigFile = mBasePath + "/linphone_assistant_create.rc"; - mDefaultDynamicConfigFile = mBasePath + "/default_assistant_create.rc"; mCallLogDatabaseFile = mBasePath + "/linphone-log-history.db"; mFriendsDatabaseFile = mBasePath + "/linphone-friends.db"; mRingSoundFile = mBasePath + "/share/sounds/linphone/rings/notes_of_the_optimistic.mkv"; @@ -448,11 +436,12 @@ public class LinphoneManager implements SensorEventListener { public synchronized void startLibLinphone(boolean isPush) { try { - copyAssetsFromPackage(); - // traces alway start with traces enable to not missed first initialization mCore = Factory.instance() - .createCore(mConfigFile, mLinphoneFactoryConfigFile, mContext); + .createCore( + mPrefs.getLinphoneDefaultConfig(), + mPrefs.getLinphoneFactoryConfig(), + mContext); mCore.addListener(mCoreListener); if (isPush) { Log.w( @@ -664,38 +653,6 @@ public class LinphoneManager implements SensorEventListener { dialog.show(); } - /* Assets stuff */ - - private void copyAssetsFromPackage() throws IOException { - copyIfNotExist(R.raw.linphonerc_default, mConfigFile); - copyFromPackage(R.raw.linphonerc_factory, new File(mLinphoneFactoryConfigFile).getName()); - copyIfNotExist(R.raw.lpconfig, mLPConfigXsd); - copyFromPackage( - R.raw.default_assistant_create, new File(mDefaultDynamicConfigFile).getName()); - copyFromPackage( - R.raw.linphone_assistant_create, new File(mLinphoneDynamicConfigFile).getName()); - } - - private void copyIfNotExist(int ressourceId, String target) throws IOException { - File lFileToCopy = new File(target); - if (!lFileToCopy.exists()) { - copyFromPackage(ressourceId, lFileToCopy.getName()); - } - } - - private void copyFromPackage(int ressourceId, String target) throws IOException { - FileOutputStream lOutputStream = mContext.openFileOutput(target, 0); - InputStream lInputStream = mContext.getResources().openRawResource(ressourceId); - int readByte; - byte[] buff = new byte[8048]; - while ((readByte = lInputStream.read(buff)) != -1) { - lOutputStream.write(buff, 0, readByte); - } - lOutputStream.flush(); - lOutputStream.close(); - lInputStream.close(); - } - /* Presence stuff */ private boolean isPresenceModelActivitySet() { @@ -871,18 +828,6 @@ public class LinphoneManager implements SensorEventListener { } } - public String getDefaultDynamicConfigFile() { - return mDefaultDynamicConfigFile; - } - - public String getLinphoneDynamicConfigFile() { - return mLinphoneDynamicConfigFile; - } - - public String getConfigFile() { - return mConfigFile; - } - public boolean getCallGsmON() { return mCallGsmON; } diff --git a/app/src/main/java/org/linphone/assistant/AssistantActivity.java b/app/src/main/java/org/linphone/assistant/AssistantActivity.java index 15455b6d1..6b26112a9 100644 --- a/app/src/main/java/org/linphone/assistant/AssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/AssistantActivity.java @@ -59,7 +59,7 @@ public abstract class AssistantActivity extends LinphoneGenericActivity if (mAccountCreator == null) { String url = LinphonePreferences.instance().getXmlrpcUrl(); Core core = LinphoneManager.getCore(); - core.loadConfigFromXml(LinphoneManager.getInstance().getDefaultDynamicConfigFile()); + core.loadConfigFromXml(LinphonePreferences.instance().getDefaultDynamicConfigFile()); mAccountCreator = core.createAccountCreator(url); } } @@ -103,14 +103,14 @@ public abstract class AssistantActivity extends LinphoneGenericActivity boolean useLinphoneDefaultValues = getString(R.string.default_domain).equals(mAccountCreator.getDomain()); if (useLinphoneDefaultValues) { - core.loadConfigFromXml(LinphoneManager.getInstance().getLinphoneDynamicConfigFile()); + core.loadConfigFromXml(LinphonePreferences.instance().getLinphoneDynamicConfigFile()); } ProxyConfig proxyConfig = mAccountCreator.configure(); if (useLinphoneDefaultValues) { // Restore default values - core.loadConfigFromXml(LinphoneManager.getInstance().getDefaultDynamicConfigFile()); + core.loadConfigFromXml(LinphonePreferences.instance().getDefaultDynamicConfigFile()); } else { // If this isn't a sip.linphone.org account, disable push notifications and enable // service notification, otherwise incoming calls won't work (most probably) diff --git a/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java b/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java index 2783c3824..a87318a6d 100644 --- a/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java +++ b/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java @@ -593,7 +593,7 @@ public class AccountSettingsFragment extends SettingsFragment { // Create a proxy config if there is none if (mProxyConfig == null) { // Ensure the default configuration is loaded first - String defaultConfig = LinphoneManager.getInstance().getDefaultDynamicConfigFile(); + String defaultConfig = LinphonePreferences.instance().getDefaultDynamicConfigFile(); core.loadConfigFromXml(defaultConfig); mProxyConfig = core.createProxyConfig(); mAuthInfo = Factory.instance().createAuthInfo(null, null, null, null, null, null); diff --git a/app/src/main/java/org/linphone/settings/LinphonePreferences.java b/app/src/main/java/org/linphone/settings/LinphonePreferences.java index f52952a92..84b0c2260 100644 --- a/app/src/main/java/org/linphone/settings/LinphonePreferences.java +++ b/app/src/main/java/org/linphone/settings/LinphonePreferences.java @@ -25,6 +25,7 @@ import android.content.pm.PackageManager; import androidx.appcompat.app.AppCompatDelegate; import java.io.BufferedReader; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -53,6 +54,12 @@ import org.linphone.utils.LinphoneUtils; public class LinphonePreferences { private static final int LINPHONE_CORE_RANDOM_PORT = -1; + private static final String LINPHONE_DEFAULT_RC = "/.linphonerc"; + private static final String LINPHONE_FACTORY_RC = "/linphonerc"; + private static final String LINPHONE_LPCONFIG_XSD = "/lpconfig.xsd"; + private static final String DEFAULT_ASSISTANT_RC = "/default_assistant_create.rc"; + private static final String LINPHONE_ASSISTANT_RC = "/linphone_assistant_create.rc"; + private static LinphonePreferences sInstance; private Context mContext; @@ -77,6 +84,61 @@ public class LinphonePreferences { public void setContext(Context c) { mContext = c; mBasePath = mContext.getFilesDir().getAbsolutePath(); + try { + copyAssetsFromPackage(); + } catch (IOException ioe) { + + } + } + + /* Assets stuff */ + + private void copyAssetsFromPackage() throws IOException { + copyIfNotExist(R.raw.linphonerc_default, getLinphoneDefaultConfig()); + copyFromPackage(R.raw.linphonerc_factory, new File(getLinphoneFactoryConfig()).getName()); + copyIfNotExist(R.raw.lpconfig, mBasePath + LINPHONE_LPCONFIG_XSD); + copyFromPackage( + R.raw.default_assistant_create, + new File(mBasePath + DEFAULT_ASSISTANT_RC).getName()); + copyFromPackage( + R.raw.linphone_assistant_create, + new File(mBasePath + LINPHONE_ASSISTANT_RC).getName()); + } + + private void copyIfNotExist(int ressourceId, String target) throws IOException { + File lFileToCopy = new File(target); + if (!lFileToCopy.exists()) { + copyFromPackage(ressourceId, lFileToCopy.getName()); + } + } + + private void copyFromPackage(int ressourceId, String target) throws IOException { + FileOutputStream lOutputStream = mContext.openFileOutput(target, 0); + InputStream lInputStream = mContext.getResources().openRawResource(ressourceId); + int readByte; + byte[] buff = new byte[8048]; + while ((readByte = lInputStream.read(buff)) != -1) { + lOutputStream.write(buff, 0, readByte); + } + lOutputStream.flush(); + lOutputStream.close(); + lInputStream.close(); + } + + public String getLinphoneDefaultConfig() { + return mBasePath + LINPHONE_DEFAULT_RC; + } + + public String getLinphoneFactoryConfig() { + return mBasePath + LINPHONE_FACTORY_RC; + } + + public String getDefaultDynamicConfigFile() { + return mBasePath + DEFAULT_ASSISTANT_RC; + } + + public String getLinphoneDynamicConfigFile() { + return mBasePath + LINPHONE_ASSISTANT_RC; } private String getString(int key) { @@ -121,7 +183,7 @@ public class LinphonePreferences { return Factory.instance().createConfigFromString(text.toString()); } } else { - return Factory.instance().createConfig(LinphoneManager.getInstance().getConfigFile()); + return Factory.instance().createConfig(getLinphoneDefaultConfig()); } return null; }