Trying to prevent ringtone picker not opening + show error toast if really not available

This commit is contained in:
Sylvain Berfini 2026-02-16 16:07:34 +01:00
parent 820eec9cf5
commit 9ecd63ec5f
4 changed files with 13 additions and 6 deletions

View file

@ -36,6 +36,7 @@ import org.linphone.R
import org.linphone.compatibility.Compatibility
import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsFragmentBinding
import org.linphone.ui.GenericActivity
import org.linphone.ui.main.fragment.GenericMainFragment
import org.linphone.utils.ConfirmationDialogModel
import org.linphone.ui.main.settings.viewmodel.SettingsViewModel
@ -176,7 +177,7 @@ class SettingsFragment : GenericMainFragment() {
}
}
viewModel.goToIncomingCallNotificationChannelSettingsEvent.observe(viewLifecycleOwner) {
viewModel.showRingtonePickerEvent.observe(viewLifecycleOwner) {
it.consume { currentRingtone ->
try {
val intent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER).apply {
@ -184,13 +185,16 @@ class SettingsFragment : GenericMainFragment() {
RingtoneManager.EXTRA_RINGTONE_TYPE,
RingtoneManager.TYPE_RINGTONE
)
putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentRingtone)
if (currentRingtone != null) {
putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentRingtone)
}
putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, AppUtils.getString(R.string.settings_calls_change_ringtone_pick_title))
}
startActivityForResult(intent, RINGTONE_PICKER_INTENT_ID)
} catch (e: Exception) {
Log.e("$TAG Failed start ringtone picker: $e")
// TODO: show error to user
val toastMessage = getString(R.string.settings_calls_change_ringtone_picker_unavailable_toast)
(requireActivity() as GenericActivity).showRedToast(toastMessage, R.drawable.warning_circle)
}
}
}

View file

@ -92,7 +92,7 @@ class SettingsViewModel
val autoRecordCalls = MutableLiveData<Boolean>()
val goToIncomingCallNotificationChannelSettingsEvent = MutableLiveData<Event<Uri?>>()
val showRingtonePickerEvent = MutableLiveData<Event<Uri?>>()
// Conversations settings
val showConversationsSettings = MutableLiveData<Boolean>()
@ -531,9 +531,10 @@ class SettingsViewModel
val coreRingtone = core.ring?.toUri()
Log.i("$TAG Currently set ringtone in Core is [$coreRingtone], device default ringtone is [$defaultDeviceRingtone]")
val currentRingtone = coreRingtone ?: defaultDeviceRingtone
goToIncomingCallNotificationChannelSettingsEvent.postValue(Event(currentRingtone))
showRingtonePickerEvent.postValue(Event(currentRingtone))
} catch (e: Exception) {
Log.e("$TAG Failed to get current ringtone: $e")
Log.e("$TAG Failed to get current ringtone, opening picker anyway: $e")
showRingtonePickerEvent.postValue(Event(null))
}
}
}

View file

@ -220,6 +220,7 @@
<string name="settings_calls_auto_record_title">Enregistrement automatique des appels</string>
<string name="settings_calls_change_ringtone_title">Changer de sonnerie</string>
<string name="settings_calls_change_ringtone_pick_title">Choisissez la sonnerie</string>
<string name="settings_calls_change_ringtone_picker_unavailable_toast">Le sélectionneur de sonnerie n\'est pas disponible !</string>
<string name="settings_conversations_title">Conversations</string>
<string name="settings_conversations_auto_download_title">Télécharger automatiquement les fichiers</string>
<string name="settings_conversations_auto_export_media_to_native_gallery_title">Rendre visible dans la galerie les médias téléchargés</string>

View file

@ -262,6 +262,7 @@
<string name="settings_calls_auto_record_title">Automatically start recording calls</string>
<string name="settings_calls_change_ringtone_title">Change ringtone</string>
<string name="settings_calls_change_ringtone_pick_title">Pick ringtone</string>
<string name="settings_calls_change_ringtone_picker_unavailable_toast">Ringtone picker isn\'t available!</string>
<string name="settings_conversations_title">Conversations</string>
<string name="settings_conversations_auto_download_title">Auto-download files</string>
<string name="settings_conversations_auto_export_media_to_native_gallery_title">Make downloaded media public</string>