From fb3973a917d9e6a1a81928296fa4cce034b76b75 Mon Sep 17 00:00:00 2001 From: Scott Warner Date: Fri, 31 Jan 2020 10:44:32 -0500 Subject: [PATCH] RingtoneManager: Don't crash if the ringtone doesn't have a numerical ID When changing the notification sound for some apps with app-provided sounds, the notification URI doesn't have a numerical ID. For example, Outlook's email notification URI has the id 'new_email' Test: m, outlook doesn't crash anymore, test google calendar Change-Id: Ibf0c6f2f13e1c76ce02784165b97b92e8f7e432c --- media/java/android/media/RingtoneManager.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java index 6fd47c42bcba8..66a59e09c42ff 100644 --- a/media/java/android/media/RingtoneManager.java +++ b/media/java/android/media/RingtoneManager.java @@ -509,15 +509,19 @@ public class RingtoneManager { * @return The position of the {@link Uri}, or -1 if it cannot be found. */ public int getRingtonePosition(Uri ringtoneUri) { - if (ringtoneUri == null) return -1; - final long ringtoneId = ContentUris.parseId(ringtoneUri); - - final Cursor cursor = getCursor(); - cursor.moveToPosition(-1); - while (cursor.moveToNext()) { - if (ringtoneId == cursor.getLong(ID_COLUMN_INDEX)) { - return cursor.getPosition(); + try { + if (ringtoneUri == null) return -1; + final long ringtoneId = ContentUris.parseId(ringtoneUri); + + final Cursor cursor = getCursor(); + cursor.moveToPosition(-1); + while (cursor.moveToNext()) { + if (ringtoneId == cursor.getLong(ID_COLUMN_INDEX)) { + return cursor.getPosition(); + } } + } catch (NumberFormatException e) { + Log.e(TAG, "NumberFormatException while getting ringtone position, returning -1", e); } return -1; }