From 2280afc54e86bc4f76d6d167e74d77046a54c156 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 | 51 ++++++++++++++++--- .../notification/NotificationBackend.java | 13 +++++ 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 89be8c738ba..5d526fca3f8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8687,4 +8687,8 @@ Space used + + " • " + + diff --git a/src/com/android/settings/notification/ChannelNotificationSettings.java b/src/com/android/settings/notification/ChannelNotificationSettings.java index 8c43a3fd748..95c0bf63906 100644 --- a/src/com/android/settings/notification/ChannelNotificationSettings.java +++ b/src/com/android/settings/notification/ChannelNotificationSettings.java @@ -22,15 +22,17 @@ import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; import android.app.Activity; import android.app.NotificationChannel; +import android.app.NotificationChannelGroup; import android.app.NotificationManager; import android.content.Intent; -import android.content.pm.UserInfo; import android.net.Uri; import android.os.Bundle; -import android.os.UserHandle; +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; @@ -38,7 +40,6 @@ import android.view.View; import android.widget.Switch; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.internal.widget.LockPatternUtils; import com.android.settings.AppHeader; import com.android.settings.R; import com.android.settings.RingtonePreference; @@ -64,6 +65,8 @@ public class ChannelNotificationSettings extends NotificationSettingsBase { private RestrictedSwitchPreference mVibrate; private NotificationSoundPreference mRingtone; private FooterPreference mFooter; + private NotificationChannelGroup mChannelGroup; + private AppHeaderController mHeaderPref; @Override public int getMetricsCategory() { @@ -93,6 +96,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); @@ -114,9 +138,10 @@ public class ChannelNotificationSettings extends NotificationSettingsBase { rows.put(mAppRow.pkg, mAppRow); collectConfigActivities(rows); final Activity activity = getActivity(); - final Preference pref = FeatureFactory.getFactory(activity) + mHeaderPref = FeatureFactory.getFactory(activity) .getApplicationFeatureProvider(activity) - .newAppHeaderController(this /* fragment */, null /* appHeader */) + .newAppHeaderController(this /* fragment */, null /* appHeader */); + final Preference pref = mHeaderPref .setIcon(mAppRow.icon) .setLabel(mChannel.getName()) .setSummary(mAppRow.label) @@ -128,6 +153,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()); @@ -345,7 +384,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);