Revert using notification channel to play incoming calls ringtone

This commit is contained in:
Sylvain Berfini 2025-03-17 15:49:51 +01:00
parent be5428aa08
commit 2a5b5d368c
6 changed files with 86 additions and 12 deletions

View file

@ -26,7 +26,7 @@ update_presence_model_timestamp_before_publish_expires_refresh=1
[sound]
#remove this property for any application that is not Linphone public version itself
ec_calibrator_cool_tones=1
disable_ringing=1
disable_ringing=0
[audio]
android_disable_audio_focus_requests=1

View file

@ -544,10 +544,21 @@ class NotificationsManager
Log.e("$TAG Failed to delete notification channel ID [${channel.id}]: $e")
}
}
} else {
try {
val oldId = context.getString(R.string.notification_channel_without_ringtone_incoming_call_id)
val oldChannel = notificationManager.getNotificationChannel(oldId)
if (oldChannel != null) {
Log.i("$TAG Deleting notification channel ID [$oldId]")
notificationManager.deleteNotificationChannel(oldId)
}
} catch (e: Exception) {
Log.e("$TAG Failed to check if deprecated incoming call notification channel exists: $e")
}
}
createThirdPartyAccountKeepAliveServiceChannel()
createIncomingCallNotificationChannel()
createIncomingCallNotificationChannelWithoutRingtone()
createMissedCallNotificationChannel()
createActiveCallNotificationChannel()
createMessageChannel()
@ -1170,7 +1181,7 @@ class NotificationsManager
}
val channelId = if (isIncoming) {
context.getString(R.string.notification_channel_incoming_call_id)
context.getString(R.string.notification_channel_without_ringtone_incoming_call_id)
} else {
context.getString(R.string.notification_channel_call_id)
}
@ -1607,6 +1618,18 @@ class NotificationsManager
notificationManager.createNotificationChannel(channel)
}
@MainThread
private fun createIncomingCallNotificationChannelWithoutRingtone() {
val id = context.getString(R.string.notification_channel_without_ringtone_incoming_call_id)
val name = context.getString(R.string.notification_channel_incoming_call_name)
val channel = NotificationChannel(id, name, NotificationManager.IMPORTANCE_HIGH).apply {
description = name
lockscreenVisibility = Notification.VISIBILITY_PUBLIC
}
notificationManager.createNotificationChannel(channel)
}
@MainThread
private fun createMissedCallNotificationChannel() {
val id = context.getString(R.string.notification_channel_missed_call_id)

View file

@ -19,10 +19,11 @@
*/
package org.linphone.ui.main.settings.fragment
import android.content.ActivityNotFoundException
import android.app.Activity
import android.content.Intent
import android.media.RingtoneManager
import android.net.Uri
import android.os.Bundle
import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -38,13 +39,17 @@ import org.linphone.databinding.SettingsFragmentBinding
import org.linphone.ui.main.fragment.GenericMainFragment
import org.linphone.utils.ConfirmationDialogModel
import org.linphone.ui.main.settings.viewmodel.SettingsViewModel
import org.linphone.utils.AppUtils
import org.linphone.utils.DialogUtils
import org.linphone.utils.Event
import java.lang.Exception
@UiThread
class SettingsFragment : GenericMainFragment() {
companion object {
private const val TAG = "[Settings Fragment]"
private const val RINGTONE_PICKER_INTENT_ID = 89
}
private lateinit var binding: SettingsFragmentBinding
@ -158,19 +163,31 @@ class SettingsFragment : GenericMainFragment() {
}
viewModel.goToIncomingCallNotificationChannelSettingsEvent.observe(viewLifecycleOwner) {
it.consume {
Log.w("$TAG Going to incoming call channel settings")
it.consume { currentRingtone ->
try {
/*
Log.w("$TAG Going to incoming call channel settings")
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName)
putExtra(
Settings.EXTRA_CHANNEL_ID,
getString(R.string.notification_channel_incoming_call_id)
getString(R.string.notification_channel_without_ringtone_incoming_call_id)
)
}
startActivity(intent)
} catch (anfe: ActivityNotFoundException) {
Log.e("$TAG Failed to go to notification channel settings: $anfe")
*/
val intent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER).apply {
putExtra(
RingtoneManager.EXTRA_RINGTONE_TYPE,
RingtoneManager.TYPE_RINGTONE
)
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
}
}
}
@ -308,6 +325,20 @@ class SettingsFragment : GenericMainFragment() {
startPostponedEnterTransition()
}
@Deprecated("Deprecated in Java")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && requestCode == RINGTONE_PICKER_INTENT_ID) {
val uri: Uri? = data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
if (uri != null) {
Log.i("$TAG Ringtone picker result is OK, URI found in intent is [$uri]")
viewModel.setRingtoneUri(uri)
} else {
Log.e("$TAG Ringtone picker result is OK but URI is null!")
// TODO: show error to user
}
}
}
override fun onResume() {
super.onResume()

View file

@ -19,9 +19,12 @@
*/
package org.linphone.ui.main.settings.viewmodel
import android.media.RingtoneManager
import android.net.Uri
import android.os.Vibrator
import androidx.annotation.UiThread
import androidx.annotation.WorkerThread
import androidx.core.net.toUri
import androidx.lifecycle.MutableLiveData
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
@ -87,7 +90,7 @@ class SettingsViewModel
val autoRecordCalls = MutableLiveData<Boolean>()
val goToIncomingCallNotificationChannelSettingsEvent = MutableLiveData<Event<Boolean>>()
val goToIncomingCallNotificationChannelSettingsEvent = MutableLiveData<Event<Uri>>()
// Conversations settings
val showConversationsSettings = MutableLiveData<Boolean>()
@ -445,7 +448,21 @@ class SettingsViewModel
@UiThread
fun changeRingtone() {
goToIncomingCallNotificationChannelSettingsEvent.value = Event(true)
coreContext.postOnCoreThread { core ->
val defaultDeviceRingtone = RingtoneManager.getActualDefaultRingtoneUri(coreContext.context, RingtoneManager.TYPE_RINGTONE)
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))
}
}
@UiThread
fun setRingtoneUri(ringtone: Uri) {
coreContext.postOnCoreThread { core ->
core.ring = ringtone.toString()
Log.i("$TAG Newly set ringtone is [${core.ring}]")
}
}
@UiThread

View file

@ -200,6 +200,7 @@
<string name="settings_calls_vibrate_while_ringing_title">Vibration lors de l\'appel</string>
<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_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

@ -18,6 +18,7 @@
<string name="notification_channel_missed_call_id" translatable="false">linphone_6.0_notification_missed_call_id</string>
<string name="notification_channel_service_id" translatable="false">linphone_6.0_notification_service_id</string>
<string name="notification_channel_chat_id" translatable="false">linphone_6.0_notification_chat_id</string>
<string name="notification_channel_without_ringtone_incoming_call_id" translatable="false">linphone_6.0.1_notification_incoming_call_id</string>
<string name="emoji_love" translatable="false">❤️</string>
<string name="emoji_thumbs_up" translatable="false">👍</string>
@ -239,6 +240,7 @@
<string name="settings_calls_vibrate_while_ringing_title">Vibrate while incoming call is ringing</string>
<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_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>