diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt
index 4ff3476d1..87b61812e 100644
--- a/app/src/main/java/org/linphone/core/CoreContext.kt
+++ b/app/src/main/java/org/linphone/core/CoreContext.kt
@@ -842,12 +842,22 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C
@WorkerThread
fun computeUserAgent() {
- if (corePreferences.deviceName.isEmpty()) {
+ val savedDeviceName = corePreferences.deviceName
+ val deviceName = if (savedDeviceName.isEmpty()) {
Log.i("$TAG Device name not fetched yet, doing it now")
- corePreferences.deviceName = AppUtils.getDeviceName(context)
- Log.i("$TAG Fetched device name is [${corePreferences.deviceName}]")
+ AppUtils.getDeviceName(context)
+ } else if (savedDeviceName.contains("'")) {
+ // Some VoIP providers such as voip.ms seem to not like apostrophe in user-agent
+ // https://github.com/BelledonneCommunications/linphone-android/issues/2287
+ Log.i("$TAG Found an apostrophe in device name, removing it")
+ savedDeviceName.replace("'", "")
+ } else {
+ savedDeviceName
}
- val deviceName = corePreferences.deviceName
+ if (savedDeviceName != deviceName) {
+ corePreferences.deviceName = deviceName
+ }
+ Log.i("$TAG Device name for user-agent is [$deviceName]")
val appName = context.getString(org.linphone.R.string.app_name)
val androidVersion = BuildConfig.VERSION_NAME
diff --git a/app/src/main/java/org/linphone/utils/AndroidUtils.kt b/app/src/main/java/org/linphone/utils/AndroidUtils.kt
index c6d0ebaf7..25b133921 100644
--- a/app/src/main/java/org/linphone/utils/AndroidUtils.kt
+++ b/app/src/main/java/org/linphone/utils/AndroidUtils.kt
@@ -161,14 +161,19 @@ class AppUtils {
Settings.Global.DEVICE_NAME
)
if (name == null) {
+ Log.w("$TAG Failed to obtain device name, trying to get bluetooth name")
name = Settings.Secure.getString(
context.contentResolver,
"bluetooth_name"
)
}
if (name == null) {
- name = Build.MANUFACTURER + " " + Build.MODEL
+ Log.w("$TAG Failed to obtain bluetooth name, using device's manufacturer & model")
+ name = "${Build.MANUFACTURER} ${Build.MODEL}"
}
+
+ // Some VoIP providers such as voip.ms seem to not like apostrophe in user-agent
+ name = name.replace("'", "")
return name
}
diff --git a/app/src/main/res/layout/settings_advanced_fragment.xml b/app/src/main/res/layout/settings_advanced_fragment.xml
index ea6229d69..aa8971099 100644
--- a/app/src/main/res/layout/settings_advanced_fragment.xml
+++ b/app/src/main/res/layout/settings_advanced_fragment.xml
@@ -215,7 +215,7 @@
android:maxLines="1"
android:background="@drawable/edit_text_background"
android:inputType="text|textUri"
- android:hint="@string/settings_advanced_device_id"
+ android:hint="@string/settings_advanced_device_id_hint"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintWidth_max="@dimen/text_input_max_width"
app:layout_constraintTop_toBottomOf="@id/device_id_label"
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 11403c8da..9f264d80d 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -255,6 +255,7 @@
Paramètres avancés
Garder l\'app en vie via un Service
Nom du périphérique
+ Caractères alpha-numériques uniquement
Chiffrement du média
Rendre le chiffrement du média obligatoire
URL de configuration distante
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7d95be00f..5edd069c2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -292,6 +292,7 @@
Advanced settings
Keep app alive using Service
Device ID
+ Alpha-numerical characters only
Media encryption
Media encryption mandatory
Remote provisioning URL