Skip to content

Commit f029c4d

Browse files
authored
Use Settings.System.DEFAULT_RINGTONE_URI for ringing notifications (#4310)
* Use `Settings.System.DEFAULT_RINGTONE_URI` for ringing notifications This replaces `RingtoneManager.getActualDefaultRingtoneUri`, it should get the same audio file and avoid some reported issues about not having permission to load the audio file.
1 parent 408b367 commit f029c4d

File tree

4 files changed

+12
-27
lines changed

4 files changed

+12
-27
lines changed

features/call/impl/src/main/kotlin/io/element/android/features/call/impl/notifications/RingingCallNotificationCreator.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import android.app.PendingIntent
1111
import android.content.Context
1212
import android.content.Intent
1313
import android.media.AudioManager
14-
import android.media.RingtoneManager
14+
import android.provider.Settings
1515
import androidx.core.app.NotificationCompat
1616
import androidx.core.app.PendingIntentCompat
1717
import androidx.core.app.Person
@@ -109,8 +109,6 @@ class RingingCallNotificationCreator @Inject constructor(
109109
false
110110
)
111111

112-
// TODO use a fallback ringtone if the default ringtone is not available
113-
val ringtoneUri = runCatching { RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE) }.getOrNull()
114112
return NotificationCompat.Builder(context, notificationChannelId)
115113
.setSmallIcon(CommonDrawables.ic_notification_small)
116114
.setPriority(NotificationCompat.PRIORITY_MAX)
@@ -126,10 +124,8 @@ class RingingCallNotificationCreator @Inject constructor(
126124
setContentText(textContent)
127125
// Else the content text is set by the style (will be "Incoming call")
128126
}
129-
if (ringtoneUri != null) {
130-
setSound(ringtoneUri, AudioManager.STREAM_RING)
131-
}
132127
}
128+
.setSound(Settings.System.DEFAULT_RINGTONE_URI, AudioManager.STREAM_RING)
133129
.setTimeoutAfter(ElementCallConfig.RINGING_CALL_DURATION_SECONDS.seconds.inWholeMilliseconds)
134130
.setContentIntent(answerIntent)
135131
.setDeleteIntent(declineIntent)

libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannels.kt

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,16 @@
77

88
package io.element.android.libraries.push.impl.notifications.channels
99

10-
import android.content.Context
1110
import android.media.AudioAttributes
1211
import android.media.AudioManager
13-
import android.media.RingtoneManager
1412
import android.os.Build
13+
import android.provider.Settings
1514
import androidx.annotation.ChecksSdkIntAtLeast
1615
import androidx.core.app.NotificationChannelCompat
1716
import androidx.core.app.NotificationManagerCompat
1817
import com.squareup.anvil.annotations.ContributesBinding
1918
import io.element.android.appconfig.NotificationConfig
2019
import io.element.android.libraries.di.AppScope
21-
import io.element.android.libraries.di.ApplicationContext
2220
import io.element.android.libraries.di.SingleIn
2321
import io.element.android.libraries.push.impl.R
2422
import io.element.android.services.toolbox.api.strings.StringProvider
@@ -60,7 +58,6 @@ private fun supportNotificationChannels() = Build.VERSION.SDK_INT >= Build.VERSI
6058
@SingleIn(AppScope::class)
6159
@ContributesBinding(AppScope::class)
6260
class DefaultNotificationChannels @Inject constructor(
63-
@ApplicationContext private val context: Context,
6461
private val notificationManager: NotificationManagerCompat,
6562
private val stringProvider: StringProvider,
6663
) : NotificationChannels {
@@ -153,27 +150,21 @@ class DefaultNotificationChannels @Inject constructor(
153150
)
154151

155152
// Register a channel for incoming call notifications which will ring the device when received
156-
// TODO use a fallback ringtone if the default ringtone is not available
157-
val ringtoneUri = runCatching { RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE) }.getOrNull()
158153
notificationManager.createNotificationChannel(
159154
NotificationChannelCompat.Builder(
160155
RINGING_CALL_NOTIFICATION_CHANNEL_ID,
161156
NotificationManagerCompat.IMPORTANCE_MAX,
162157
)
163158
.setName(stringProvider.getString(R.string.notification_channel_ringing_calls).ifEmpty { "Ringing calls" })
164159
.setVibrationEnabled(true)
165-
.apply {
166-
if (ringtoneUri != null) {
167-
setSound(
168-
ringtoneUri,
169-
AudioAttributes.Builder()
170-
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
171-
.setLegacyStreamType(AudioManager.STREAM_RING)
172-
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
173-
.build()
174-
)
175-
}
176-
}
160+
.setSound(
161+
Settings.System.DEFAULT_RINGTONE_URI,
162+
AudioAttributes.Builder()
163+
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
164+
.setLegacyStreamType(AudioManager.STREAM_RING)
165+
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
166+
.build()
167+
)
177168
.setDescription(stringProvider.getString(R.string.notification_channel_ringing_calls))
178169
.setLightsEnabled(true)
179170
.setLightColor(accentColor)

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannelsTest.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ package io.element.android.libraries.push.impl.notifications.channels
1010
import android.os.Build
1111
import androidx.core.app.NotificationChannelCompat
1212
import androidx.core.app.NotificationManagerCompat
13-
import androidx.test.platform.app.InstrumentationRegistry
1413
import com.google.common.truth.Truth.assertThat
1514
import io.element.android.services.toolbox.test.strings.FakeStringProvider
1615
import io.mockk.every
@@ -65,7 +64,6 @@ class NotificationChannelsTest {
6564
private fun createNotificationChannels(
6665
notificationManager: NotificationManagerCompat = mockk(relaxed = true),
6766
) = DefaultNotificationChannels(
68-
context = InstrumentationRegistry.getInstrumentation().targetContext,
6967
notificationManager = notificationManager,
7068
stringProvider = FakeStringProvider(),
7169
)

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/factories/DefaultNotificationCreatorTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,5 +331,5 @@ fun createNotificationCreator(
331331

332332
fun createNotificationChannels(): NotificationChannels {
333333
val context = RuntimeEnvironment.getApplication()
334-
return DefaultNotificationChannels(context, NotificationManagerCompat.from(context), FakeStringProvider(""))
334+
return DefaultNotificationChannels(NotificationManagerCompat.from(context), FakeStringProvider(""))
335335
}

0 commit comments

Comments
 (0)