Skip to content

Commit 8f8abc6

Browse files
committed
Merge commit 'cc9d3d277fddf162d1f357adaa6543517a3f4581' into dev
2 parents a471f8e + cc9d3d2 commit 8f8abc6

File tree

3 files changed

+42
-43
lines changed

3 files changed

+42
-43
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- uses: actions/checkout@v2
2222
- uses: actions/setup-java@v2
2323
with:
24-
java-version: '12.x'
24+
java-version: '17.x'
2525
distribution: 'zulu'
2626
- uses: subosito/flutter-action@v2
2727
with:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ Our top sponsors are shown below!
502502
| **`isCustomNotification`** | Using custom notifications. | `false` |
503503
| **`isCustomSmallExNotification`** | Using custom notification small on some devices clipped out in android. | `false` |
504504
| **`isShowLogo`** | Show logo app inside full screen. `/android/src/main/res/drawable-xxxhdpi/ic_logo.png` | `false` |
505-
| **`ringtonePath`** | File name ringtone. put file into `/android/app/src/main/res/raw/ringtone_default.pm3` | `system_ringtone_default` <br>using ringtone default of the phone |
505+
| **`ringtonePath`** | File name of a ringtone ex: `ringtone_default`. Put file into `/android/app/src/main/res/raw/ringtone_default.mp3` | `system_ringtone_default` <br>using ringtone default of the phone |
506506
| **`backgroundColor`** | Incoming call screen background color. | `#0955fa` |
507507
| **`backgroundUrl`** | Using image background for Incoming call screen. example: http://... https://... or "assets/abc.png" | _None_ |
508508
| **`actionColor`** | Color used in button/text on notification. | `#4CAF50` |

android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitSoundPlayerService.kt

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class CallkitSoundPlayerService : Service() {
5858
when (audioManager?.ringerMode) {
5959
AudioManager.RINGER_MODE_SILENT -> {
6060
}
61+
6162
else -> {
6263
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
6364
vibrator?.vibrate(
@@ -81,20 +82,13 @@ class CallkitSoundPlayerService : Service() {
8182
)
8283
var uri = sound?.let { getRingtoneUri(it) }
8384
if (uri == null) {
84-
uri = RingtoneManager.getActualDefaultRingtoneUri(
85-
this@CallkitSoundPlayerService,
86-
RingtoneManager.TYPE_RINGTONE
87-
)
85+
// Failed to get ringtone url, can't play sound
86+
return
8887
}
8988
try {
9089
mediaPlayer(uri!!)
9190
} catch (e: Exception) {
92-
try {
93-
uri = getRingtoneUri("ringtone_default")
94-
mediaPlayer(uri!!)
95-
} catch (e2: Exception) {
96-
e2.printStackTrace()
97-
}
91+
e.printStackTrace()
9892
}
9993
}
10094

@@ -128,44 +122,49 @@ class CallkitSoundPlayerService : Service() {
128122
mediaPlayer?.setDataSource(applicationContext, uri)
129123
}
130124

131-
private fun getRingtoneUri(fileName: String) = try {
125+
private fun getRingtoneUri(fileName: String): Uri? {
132126
if (TextUtils.isEmpty(fileName)) {
133-
RingtoneManager.getActualDefaultRingtoneUri(
134-
this@CallkitSoundPlayerService,
135-
RingtoneManager.TYPE_RINGTONE
136-
)
127+
return getDefaultRingtoneUri()
137128
}
138-
val resId = resources.getIdentifier(fileName, "raw", packageName)
139-
if (resId != 0) {
140-
Uri.parse("android.resource://${packageName}/$resId")
141-
} else {
142-
if (fileName.equals("system_ringtone_default", true)) {
143-
RingtoneManager.getActualDefaultRingtoneUri(
144-
this@CallkitSoundPlayerService,
145-
RingtoneManager.TYPE_RINGTONE
146-
)
147-
} else {
148-
RingtoneManager.getActualDefaultRingtoneUri(
149-
this@CallkitSoundPlayerService,
150-
RingtoneManager.TYPE_RINGTONE
151-
)
129+
130+
// If system_ringtone_default is explicitly requested, bypass resource check
131+
if (fileName.equals("system_ringtone_default", true)) {
132+
return getDefaultRingtoneUri(useSystemDefault = true)
133+
}
134+
135+
try {
136+
val resId = resources.getIdentifier(fileName, "raw", packageName)
137+
if (resId != 0) {
138+
return Uri.parse("android.resource://${packageName}/$resId")
152139
}
140+
141+
// For any other unresolved filename, return the default ringtone
142+
return getDefaultRingtoneUri()
143+
} catch (e: Exception) {
144+
// If anything fails, try to return the system default ringtone
145+
return getDefaultRingtoneUri()
153146
}
154-
} catch (e: Exception) {
147+
}
148+
149+
private fun getDefaultRingtoneUri(useSystemDefault: Boolean = false): Uri? {
155150
try {
156-
if (fileName.equals("system_ringtone_default", true)) {
157-
RingtoneManager.getActualDefaultRingtoneUri(
158-
this@CallkitSoundPlayerService,
159-
RingtoneManager.TYPE_RINGTONE
160-
)
161-
} else {
162-
RingtoneManager.getActualDefaultRingtoneUri(
163-
this@CallkitSoundPlayerService,
164-
RingtoneManager.TYPE_RINGTONE
165-
)
151+
if (!useSystemDefault) {
152+
// First try to use ringtone_default resource if it exists
153+
val resId = resources.getIdentifier("ringtone_default", "raw", packageName)
154+
if (resId != 0) {
155+
return Uri.parse("android.resource://${packageName}/$resId")
156+
}
166157
}
158+
159+
// Fall back to system default ringtone
160+
return RingtoneManager.getActualDefaultRingtoneUri(
161+
this@CallkitSoundPlayerService,
162+
RingtoneManager.TYPE_RINGTONE
163+
)
167164
} catch (e: Exception) {
168-
null
165+
// getActualDefaultRingtoneUri can throw an exception on some devices
166+
// for custom ringtones
167+
return null
169168
}
170169
}
171170
}

0 commit comments

Comments
 (0)