Only fetch titles of ringtones coming from the MediaStore.
As a fallback we attempt to get DISPLAY_NAME from the
provider. Any other URIs probably don't have titles.
Bug: 14093281
Change-Id: I39adbad52ef6dcc1686cbc738457b55c33948bd6
diff --git a/src/com/android/settings/notification/NotificationSettings.java b/src/com/android/settings/notification/NotificationSettings.java
index 3094032..6899440 100644
--- a/src/com/android/settings/notification/NotificationSettings.java
+++ b/src/com/android/settings/notification/NotificationSettings.java
@@ -37,6 +37,7 @@
import android.preference.SeekBarVolumizer;
import android.preference.TwoStatePreference;
import android.provider.MediaStore;
+import android.provider.OpenableColumns;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.util.Log;
@@ -238,11 +239,16 @@
if (ringtoneUri == null) {
summary = context.getString(com.android.internal.R.string.ringtone_silent);
} else {
- // Fetch the ringtone title from the media provider
Cursor cursor = null;
try {
- cursor = context.getContentResolver().query(ringtoneUri,
- new String[] { MediaStore.Audio.Media.TITLE }, null, null, null);
+ if (MediaStore.AUTHORITY.equals(ringtoneUri.getAuthority())) {
+ // Fetch the ringtone title from the media provider
+ cursor = context.getContentResolver().query(ringtoneUri,
+ new String[] { MediaStore.Audio.Media.TITLE }, null, null, null);
+ } else if (ContentResolver.SCHEME_CONTENT.equals(ringtoneUri.getScheme())) {
+ cursor = context.getContentResolver().query(ringtoneUri,
+ new String[] { OpenableColumns.DISPLAY_NAME }, null, null, null);
+ }
if (cursor != null) {
if (cursor.moveToFirst()) {
summary = cursor.getString(0);
@@ -250,6 +256,8 @@
}
} catch (SQLiteException sqle) {
// Unknown title for the ringtone
+ } catch (IllegalArgumentException iae) {
+ // Some other error retrieving the column from the provider
} finally {
if (cursor != null) {
cursor.close();