Added ringtone picker (hidden by default for now)
This commit is contained in:
parent
e9266dc019
commit
43e6e14654
5 changed files with 65 additions and 3 deletions
|
@ -20,22 +20,40 @@
|
||||||
package org.linphone.activities.main.settings.viewmodels
|
package org.linphone.activities.main.settings.viewmodels
|
||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
|
import java.io.File
|
||||||
|
import java.util.*
|
||||||
|
import kotlin.collections.ArrayList
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.main.settings.SettingListenerStub
|
import org.linphone.activities.main.settings.SettingListenerStub
|
||||||
import org.linphone.core.MediaEncryption
|
import org.linphone.core.MediaEncryption
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
import org.linphone.mediastream.Version
|
import org.linphone.mediastream.Version
|
||||||
import org.linphone.telecom.TelecomHelper
|
import org.linphone.telecom.TelecomHelper
|
||||||
|
import org.linphone.utils.AppUtils
|
||||||
import org.linphone.utils.Event
|
import org.linphone.utils.Event
|
||||||
|
|
||||||
class CallSettingsViewModel : GenericSettingsViewModel() {
|
class CallSettingsViewModel : GenericSettingsViewModel() {
|
||||||
val deviceRingtoneListener = object : SettingListenerStub() {
|
val deviceRingtoneListener = object : SettingListenerStub() {
|
||||||
override fun onBoolValueChanged(newValue: Boolean) {
|
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 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() {
|
val vibrateOnIncomingCallListener = object : SettingListenerStub() {
|
||||||
override fun onBoolValueChanged(newValue: Boolean) {
|
override fun onBoolValueChanged(newValue: Boolean) {
|
||||||
core.isVibrationOnIncomingCallEnabled = newValue
|
core.isVibrationOnIncomingCallEnabled = newValue
|
||||||
|
@ -212,7 +230,10 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
|
||||||
val goToAndroidNotificationSettingsEvent = MutableLiveData<Event<Boolean>>()
|
val goToAndroidNotificationSettingsEvent = MutableLiveData<Event<Boolean>>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
initRingtonesList()
|
||||||
deviceRingtone.value = core.ring == null
|
deviceRingtone.value = core.ring == null
|
||||||
|
showRingtonesList.value = prefs.showAllRingtones
|
||||||
|
|
||||||
vibrateOnIncomingCall.value = core.isVibrationOnIncomingCallEnabled
|
vibrateOnIncomingCall.value = core.isVibrationOnIncomingCallEnabled
|
||||||
|
|
||||||
initEncryptionList()
|
initEncryptionList()
|
||||||
|
@ -238,6 +259,28 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
|
||||||
pauseCallsWhenAudioFocusIsLost.value = prefs.pauseCallsWhenAudioFocusIsLost
|
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() {
|
private fun initEncryptionList() {
|
||||||
val labels = arrayListOf<String>()
|
val labels = arrayListOf<String>()
|
||||||
|
|
||||||
|
|
|
@ -460,6 +460,11 @@ class CorePreferences constructor(private val context: Context) {
|
||||||
val useEphemeralPerDeviceMode: Boolean
|
val useEphemeralPerDeviceMode: Boolean
|
||||||
get() = config.getBool("app", "ephemeral_chat_messages_settings_per_device", true)
|
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 */
|
/* Default values related */
|
||||||
|
|
||||||
val echoCancellerCalibration: Int
|
val echoCancellerCalibration: Int
|
||||||
|
@ -578,8 +583,11 @@ class CorePreferences constructor(private val context: Context) {
|
||||||
val defaultValuesPath: String
|
val defaultValuesPath: String
|
||||||
get() = context.filesDir.absolutePath + "/assistant_default_values"
|
get() = context.filesDir.absolutePath + "/assistant_default_values"
|
||||||
|
|
||||||
val ringtonePath: String
|
val ringtonesPath: String
|
||||||
get() = context.filesDir.absolutePath + "/share/sounds/linphone/rings/notes_of_the_optimistic.mkv"
|
get() = context.filesDir.absolutePath + "/share/sounds/linphone/rings/"
|
||||||
|
|
||||||
|
val defaultRingtonePath: String
|
||||||
|
get() = ringtonesPath + "notes_of_the_optimistic.mkv"
|
||||||
|
|
||||||
val userCertificatesPath: String
|
val userCertificatesPath: String
|
||||||
get() = context.filesDir.absolutePath + "/user-certs"
|
get() = context.filesDir.absolutePath + "/user-certs"
|
||||||
|
|
|
@ -72,9 +72,18 @@
|
||||||
<include
|
<include
|
||||||
layout="@layout/settings_widget_switch"
|
layout="@layout/settings_widget_switch"
|
||||||
linphone:title="@{@string/call_settings_device_ringtone_title}"
|
linphone:title="@{@string/call_settings_device_ringtone_title}"
|
||||||
|
android:visibility="@{viewModel.showRingtonesList ? View.GONE : View.VISIBLE}"
|
||||||
linphone:listener="@{viewModel.deviceRingtoneListener}"
|
linphone:listener="@{viewModel.deviceRingtoneListener}"
|
||||||
linphone:checked="@={viewModel.deviceRingtone}"/>
|
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
|
<include
|
||||||
layout="@layout/settings_widget_switch"
|
layout="@layout/settings_widget_switch"
|
||||||
linphone:title="@{@string/call_settings_vibrate_title}"
|
linphone:title="@{@string/call_settings_vibrate_title}"
|
||||||
|
|
|
@ -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="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_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="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>
|
</resources>
|
|
@ -402,6 +402,7 @@
|
||||||
|
|
||||||
<!-- Call settings -->
|
<!-- Call settings -->
|
||||||
<string name="call_settings_device_ringtone_title">Use device ringtone</string>
|
<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_vibrate_title">Vibrate while incoming call is ringing</string>
|
||||||
<string name="call_settings_encryption_title">Media encryption</string>
|
<string name="call_settings_encryption_title">Media encryption</string>
|
||||||
<string name="call_settings_media_encryption_none">None</string>
|
<string name="call_settings_media_encryption_none">None</string>
|
||||||
|
|
Loading…
Reference in a new issue