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();