From 43e6e146547f19655525f74da7a3d7b01677f9cf Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 20 Dec 2021 16:53:32 +0100 Subject: [PATCH] Added ringtone picker (hidden by default for now) --- .../viewmodels/CallSettingsViewModel.kt | 45 ++++++++++++++++++- .../java/org/linphone/core/CorePreferences.kt | 12 ++++- .../res/layout/settings_call_fragment.xml | 9 ++++ app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 65 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt index 0488a51f3..f95ab222e 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt @@ -20,22 +20,40 @@ package org.linphone.activities.main.settings.viewmodels import androidx.lifecycle.MutableLiveData +import java.io.File +import java.util.* +import kotlin.collections.ArrayList import org.linphone.R import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.core.MediaEncryption import org.linphone.core.tools.Log import org.linphone.mediastream.Version import org.linphone.telecom.TelecomHelper +import org.linphone.utils.AppUtils import org.linphone.utils.Event class CallSettingsViewModel : GenericSettingsViewModel() { val deviceRingtoneListener = object : SettingListenerStub() { override fun onBoolValueChanged(newValue: Boolean) { - core.ring = if (newValue) null else prefs.ringtonePath + core.ring = if (newValue) null else prefs.defaultRingtonePath } } val deviceRingtone = MutableLiveData() + val ringtoneListener = object : SettingListenerStub() { + override fun onListValueChanged(position: Int) { + if (position == 0) { + core.ring = null + } else { + core.ring = ringtoneValues[position] + } + } + } + val ringtoneIndex = MutableLiveData() + val ringtoneLabels = MutableLiveData>() + private val ringtoneValues = arrayListOf() + val showRingtonesList = MutableLiveData() + val vibrateOnIncomingCallListener = object : SettingListenerStub() { override fun onBoolValueChanged(newValue: Boolean) { core.isVibrationOnIncomingCallEnabled = newValue @@ -212,7 +230,10 @@ class CallSettingsViewModel : GenericSettingsViewModel() { val goToAndroidNotificationSettingsEvent = MutableLiveData>() init { + initRingtonesList() deviceRingtone.value = core.ring == null + showRingtonesList.value = prefs.showAllRingtones + vibrateOnIncomingCall.value = core.isVibrationOnIncomingCallEnabled initEncryptionList() @@ -238,6 +259,28 @@ class CallSettingsViewModel : GenericSettingsViewModel() { pauseCallsWhenAudioFocusIsLost.value = prefs.pauseCallsWhenAudioFocusIsLost } + private fun initRingtonesList() { + val labels = arrayListOf() + labels.add(AppUtils.getString(R.string.call_settings_device_ringtone_title)) + ringtoneValues.add("") + + val directory = File(prefs.ringtonesPath) + val files = directory.listFiles() + for (ringtone in files.orEmpty()) { + if (ringtone.absolutePath.endsWith(".mkv")) { + val name = ringtone.name + .substringBefore(".") + .replace("_", " ") + .capitalize(Locale.getDefault()) + labels.add(name) + ringtoneValues.add(ringtone.absolutePath) + } + } + + ringtoneLabels.value = labels + ringtoneIndex.value = if (core.ring == null) 0 else ringtoneValues.indexOf(core.ring) + } + private fun initEncryptionList() { val labels = arrayListOf() diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 572ccf296..bc83c4e10 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -460,6 +460,11 @@ class CorePreferences constructor(private val context: Context) { val useEphemeralPerDeviceMode: Boolean get() = config.getBool("app", "ephemeral_chat_messages_settings_per_device", true) + // If enabled user will see all ringtones bundled in our SDK + // and will be able to choose which one to use if not using it's device's default + val showAllRingtones: Boolean + get() = config.getBool("app", "show_all_available_ringtones", false) + /* Default values related */ val echoCancellerCalibration: Int @@ -578,8 +583,11 @@ class CorePreferences constructor(private val context: Context) { val defaultValuesPath: String get() = context.filesDir.absolutePath + "/assistant_default_values" - val ringtonePath: String - get() = context.filesDir.absolutePath + "/share/sounds/linphone/rings/notes_of_the_optimistic.mkv" + val ringtonesPath: String + get() = context.filesDir.absolutePath + "/share/sounds/linphone/rings/" + + val defaultRingtonePath: String + get() = ringtonesPath + "notes_of_the_optimistic.mkv" val userCertificatesPath: String get() = context.filesDir.absolutePath + "/user-certs" diff --git a/app/src/main/res/layout/settings_call_fragment.xml b/app/src/main/res/layout/settings_call_fragment.xml index b8b8645c1..97c901951 100644 --- a/app/src/main/res/layout/settings_call_fragment.xml +++ b/app/src/main/res/layout/settings_call_fragment.xml @@ -72,9 +72,18 @@ + + Aller au dernier message reçu ou au premier message non lu Acheminer l\'audio vers l\'appareil bluetooth, s\'il existe Il aura la priorité sur le périphérique de sortie par défaut + Sonnerie \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6ed825ea7..74c64b572 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -402,6 +402,7 @@ Use device ringtone + Ringtone Vibrate while incoming call is ringing Media encryption None