From 18fcc0522407d7bf54e7c9c33c24a13e4c196628 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Tue, 11 Apr 2017 16:55:43 -0400 Subject: [PATCH] Notification sound field updates - Show default and silent options - Don't also update the default notification sound - Display a better summary in case the sound isn't in media store Change-Id: I42d537657a7bbddb8a1ce41fd03b8e5847899a82 Fixes: 36734113 Fixes: 36849670 Test: manual (silent sound, default sound, normal sound, private sound) --- res/values/strings.xml | 6 +++ res/xml/channel_notification_settings.xml | 8 +-- .../ChannelNotificationSettings.java | 6 +-- .../NotificationSoundPreference.java | 54 +++++++++++++++++++ 4 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 src/com/android/settings/notification/NotificationSoundPreference.java 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() { + @Override + protected CharSequence doInBackground(Object... params) { + if (uri == null) { + return getContext().getString(com.android.internal.R.string.ringtone_silent); + } else if (RingtoneManager.isDefault(uri)) { + return getContext().getString(R.string.notification_sound_default); + } else if(ContentResolver.SCHEME_ANDROID_RESOURCE.equals(uri.getScheme())) { + return getContext().getString(R.string.notification_unknown_sound_title); + } else { + return Ringtone.getTitle(getContext(), uri, false /* followSettingsUri */, + true /* allowRemote */); + } + } + + @Override + protected void onPostExecute(CharSequence name) { + setSummary(name); + } + }; + ringtoneNameTask.execute(); + } +}