diff --git a/res/values/strings.xml b/res/values/strings.xml
index fba0ef502ac..daa28d79153 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6360,6 +6360,12 @@
Default notification sound
+
+ App provided sound
+
+
+ Default notification sound
+
Default alarm sound
diff --git a/res/xml/channel_notification_settings.xml b/res/xml/channel_notification_settings.xml
index 5b848e6d019..ccaa7247bce 100644
--- a/res/xml/channel_notification_settings.xml
+++ b/res/xml/channel_notification_settings.xml
@@ -32,10 +32,12 @@
android:title="@string/notification_importance_title" />
-
diff --git a/src/com/android/settings/notification/ChannelNotificationSettings.java b/src/com/android/settings/notification/ChannelNotificationSettings.java
index b24e92c17ef..bec484567ae 100644
--- a/src/com/android/settings/notification/ChannelNotificationSettings.java
+++ b/src/com/android/settings/notification/ChannelNotificationSettings.java
@@ -21,7 +21,6 @@ import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_MIN;
import static android.app.NotificationManager.IMPORTANCE_NONE;
-import android.app.Activity;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
@@ -29,7 +28,6 @@ import android.app.admin.DevicePolicyManager;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.net.Uri;
-import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.notification.NotificationListenerService.Ranking;
@@ -63,7 +61,7 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
protected RestrictedSwitchPreference mLights;
protected RestrictedSwitchPreference mVibrate;
- protected DefaultNotificationTonePreference mRingtone;
+ protected NotificationSoundPreference mRingtone;
protected RestrictedDropDownPreference mImportance;
protected RestrictedSwitchPreference mPriority;
protected RestrictedDropDownPreference mVisibilityOverride;
@@ -102,7 +100,7 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
(RestrictedDropDownPreference) findPreference(KEY_VISIBILITY_OVERRIDE);
mLights = (RestrictedSwitchPreference) findPreference(KEY_LIGHTS);
mVibrate = (RestrictedSwitchPreference) findPreference(KEY_VIBRATE);
- mRingtone = (DefaultNotificationTonePreference) findPreference(KEY_RINGTONE);
+ mRingtone = (NotificationSoundPreference) findPreference(KEY_RINGTONE);
if (mPkgInfo != null && mChannel != null) {
setupPriorityPref(mChannel.canBypassDnd());
diff --git a/src/com/android/settings/notification/NotificationSoundPreference.java b/src/com/android/settings/notification/NotificationSoundPreference.java
new file mode 100644
index 00000000000..51b235d8e17
--- /dev/null
+++ b/src/com/android/settings/notification/NotificationSoundPreference.java
@@ -0,0 +1,54 @@
+package com.android.settings.notification;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.util.AttributeSet;
+
+import com.android.settings.R;
+import com.android.settings.RingtonePreference;
+
+public class NotificationSoundPreference extends RingtonePreference {
+ private Uri mRingtone;
+
+ public NotificationSoundPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ protected Uri onRestoreRingtone() {
+ return mRingtone;
+ }
+
+ public void setRingtone(Uri ringtone) {
+ mRingtone = ringtone;
+ updateRingtoneName(mRingtone);
+ }
+
+ private void updateRingtoneName(final Uri uri) {
+ AsyncTask ringtoneNameTask = new AsyncTask