From 8ad2fa6865eff5c0a850b2c412963a6c1eb9ba41 Mon Sep 17 00:00:00 2001 From: Alison Cichowlas Date: Tue, 30 May 2017 08:48:59 -0400 Subject: [PATCH] Add group name into channel summary, if applicable. Bug: 36642898 Test: ran integration & robo tests (no new failures); verified manually with apps with channels & without. Change-Id: I16a255b0e5d929f4485d3725bd18179e6f411c03 --- res/values/strings.xml | 4 ++ .../ChannelNotificationSettings.java | 48 +++++++++++++++++-- .../notification/NotificationBackend.java | 13 +++++ 3 files changed, 62 insertions(+), 3 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 051bd68b001..54f4f040eba 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8830,4 +8830,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);