Added ringtone picker (hidden by default for now)

This commit is contained in:
Sylvain Berfini 2021-12-20 16:53:32 +01:00
parent e9266dc019
commit 43e6e14654
5 changed files with 65 additions and 3 deletions

View file

@ -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<Boolean>()
val ringtoneListener = object : SettingListenerStub() {
override fun onListValueChanged(position: Int) {
if (position == 0) {
core.ring = null
} else {
core.ring = ringtoneValues[position]
}
}
}
val ringtoneIndex = MutableLiveData<Int>()
val ringtoneLabels = MutableLiveData<ArrayList<String>>()
private val ringtoneValues = arrayListOf<String>()
val showRingtonesList = MutableLiveData<Boolean>()
val vibrateOnIncomingCallListener = object : SettingListenerStub() {
override fun onBoolValueChanged(newValue: Boolean) {
core.isVibrationOnIncomingCallEnabled = newValue
@ -212,7 +230,10 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
val goToAndroidNotificationSettingsEvent = MutableLiveData<Event<Boolean>>()
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<String>()
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<String>()

View file

@ -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"

View file

@ -72,9 +72,18 @@
<include
layout="@layout/settings_widget_switch"
linphone:title="@{@string/call_settings_device_ringtone_title}"
android:visibility="@{viewModel.showRingtonesList ? View.GONE : View.VISIBLE}"
linphone:listener="@{viewModel.deviceRingtoneListener}"
linphone:checked="@={viewModel.deviceRingtone}"/>
<include
layout="@layout/settings_widget_list"
android:visibility="@{viewModel.showRingtonesList ? View.VISIBLE : View.GONE, default=gone}"
linphone:title="@{@string/call_settings_ringtones_title}"
linphone:listener="@{viewModel.ringtoneListener}"
linphone:selectedIndex="@{viewModel.ringtoneIndex}"
linphone:labels="@{viewModel.ringtoneLabels}"/>
<include
layout="@layout/settings_widget_switch"
linphone:title="@{@string/call_settings_vibrate_title}"

View file

@ -629,4 +629,5 @@
<string name="content_descripton_scroll_to_bottom">Aller au dernier message reçu ou au premier message non lu</string>
<string name="audio_settings_prefer_bluetooth_devices_title">Acheminer l\'audio vers l\'appareil bluetooth, s\'il existe</string>
<string name="audio_settings_prefer_bluetooth_devices_summary">Il aura la priorité sur le périphérique de sortie par défaut</string>
<string name="call_settings_ringtones_title">Sonnerie</string>
</resources>

View file

@ -402,6 +402,7 @@
<!-- Call settings -->
<string name="call_settings_device_ringtone_title">Use device ringtone</string>
<string name="call_settings_ringtones_title">Ringtone</string>
<string name="call_settings_vibrate_title">Vibrate while incoming call is ringing</string>
<string name="call_settings_encryption_title">Media encryption</string>
<string name="call_settings_media_encryption_none">None</string>