diff --git a/res/values/strings.xml b/res/values/strings.xml index 1158a93c5a2..7a16ddcf317 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8880,4 +8880,8 @@ Check out the top 5 features + + + " • " + diff --git a/src/com/android/settings/notification/ChannelNotificationSettings.java b/src/com/android/settings/notification/ChannelNotificationSettings.java index 6b4129cdd27..d505d4894b3 100644 --- a/src/com/android/settings/notification/ChannelNotificationSettings.java +++ b/src/com/android/settings/notification/ChannelNotificationSettings.java @@ -18,13 +18,17 @@ package com.android.settings.notification; import android.app.Activity; import android.app.NotificationChannel; +import android.app.NotificationChannelGroup; import android.app.NotificationManager; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.os.AsyncTask; import android.provider.Settings; import android.support.v7.preference.Preference; import android.text.TextUtils; +import android.text.BidiFormatter; +import android.text.SpannableStringBuilder; import android.util.ArrayMap; import android.util.Log; import android.view.LayoutInflater; @@ -60,6 +64,8 @@ public class ChannelNotificationSettings extends NotificationSettingsBase { private RestrictedSwitchPreference mVibrate; private NotificationSoundPreference mRingtone; private FooterPreference mFooter; + private NotificationChannelGroup mChannelGroup; + private EntityHeaderController mHeaderPref; @Override public int getMetricsCategory() { @@ -89,6 +95,27 @@ public class ChannelNotificationSettings extends NotificationSettingsBase { mShowLegacyChannelConfig = true; } else { populateUpgradedChannelPrefs(); + + if (mChannel.getGroup() != null) { + // Go look up group name + new AsyncTask() { + @Override + protected Void doInBackground(Void... unused) { + if (mChannel.getGroup() != null) { + mChannelGroup = mBackend.getGroup(mChannel.getGroup(), mPkg, mUid); + } + return null; + } + + @Override + protected void onPostExecute(Void unused) { + if (getHost() == null || mChannelGroup == null) { + return; + } + setChannelGroupLabel(mChannelGroup.getName()); + } + }.execute(); + } } updateDependents(mChannel.getImportance() == IMPORTANCE_NONE); @@ -110,9 +137,10 @@ public class ChannelNotificationSettings extends NotificationSettingsBase { rows.put(mAppRow.pkg, mAppRow); collectConfigActivities(rows); final Activity activity = getActivity(); - final Preference pref = EntityHeaderController + mHeaderPref = EntityHeaderController .newInstance(activity, this /* fragment */, null /* header */) - .setRecyclerView(getListView(), getLifecycle()) + .setRecyclerView(getListView(), getLifecycle()); + final Preference pref = mHeaderPref .setIcon(mAppRow.icon) .setLabel(mChannel.getName()) .setSummary(mAppRow.label) @@ -124,6 +152,20 @@ public class ChannelNotificationSettings extends NotificationSettingsBase { getPreferenceScreen().addPreference(pref); } + private void setChannelGroupLabel(CharSequence groupName) { + final SpannableStringBuilder summary = new SpannableStringBuilder(); + BidiFormatter bidi = BidiFormatter.getInstance(); + summary.append(bidi.unicodeWrap(mAppRow.label.toString())); + if (groupName != null) { + summary.append(bidi.unicodeWrap(mContext.getText( + R.string.notification_header_divider_symbol_with_spaces))); + summary.append(bidi.unicodeWrap(groupName.toString())); + } + final Activity activity = getActivity(); + mHeaderPref.setSummary(summary.toString()); + mHeaderPref.done(activity, getPrefContext()); + } + private void addFooterPref() { if (!TextUtils.isEmpty(mChannel.getDescription())) { FooterPreference descPref = new FooterPreference(getPrefContext()); @@ -341,7 +383,7 @@ public class ChannelNotificationSettings extends NotificationSettingsBase { if (mAppLink != null) { setVisible(mAppLink, checkCanBeVisible(NotificationManager.IMPORTANCE_MIN)); } - if (mFooter !=null) { + if (mFooter != null) { setVisible(mFooter, checkCanBeVisible(NotificationManager.IMPORTANCE_MIN)); } } diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java index 84d7e314e50..96737db27f6 100644 --- a/src/com/android/settings/notification/NotificationBackend.java +++ b/src/com/android/settings/notification/NotificationBackend.java @@ -122,6 +122,19 @@ public class NotificationBackend { } } + + public NotificationChannelGroup getGroup(String groupId, String pkg, int uid) { + if (groupId == null) { + return null; + } + try { + return sINM.getNotificationChannelGroupForPackage(groupId, pkg, uid); + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return null; + } + } + public ParceledListSlice getChannelGroups(String pkg, int uid) { try { return sINM.getNotificationChannelGroupsForPackage(pkg, uid, false);