diff --git a/res/values/strings.xml b/res/values/strings.xml
index 45305ece4f6..82cb7d96d23 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -8592,6 +8592,14 @@
Additional settings in the app
+
+ Show unused channels
+
+
+ Hide unused channels
+
{count, plural,
=1 {# category deleted}
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index dfb4a45bb38..8e6019c3b48 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -272,6 +272,16 @@ public class NotificationBackend {
}
}
+ public ParceledListSlice getGroupsWithRecentBlockedFilter(String pkg,
+ int uid) {
+ try {
+ return sINM.getRecentBlockedNotificationChannelGroupsForPackage(pkg, uid);
+ } catch (Exception e) {
+ Log.w(TAG, "Error calling NoMan", e);
+ return ParceledListSlice.emptyList();
+ }
+ }
+
public ParceledListSlice getConversations(String pkg, int uid) {
try {
return sINM.getConversationsForPackage(pkg, uid);
diff --git a/src/com/android/settings/notification/app/AppNotificationSettings.java b/src/com/android/settings/notification/app/AppNotificationSettings.java
index ee9ec4565d2..89756b7b839 100644
--- a/src/com/android/settings/notification/app/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/app/AppNotificationSettings.java
@@ -16,10 +16,16 @@
package com.android.settings.notification.app;
+import static com.android.server.notification.Flags.notificationHideUnusedChannels;
+
+
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
@@ -33,6 +39,8 @@ public class AppNotificationSettings extends NotificationSettings {
private static final String TAG = "AppNotificationSettings";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+ boolean mShowAll = false;
+
@Override
public int getMetricsCategory() {
return SettingsEnums.NOTIFICATION_APP_NOTIFICATION;
@@ -101,4 +109,36 @@ public class AppNotificationSettings extends NotificationSettings {
mControllers.add(new DeletedChannelsPreferenceController(context, mBackend));
return new ArrayList<>(mControllers);
}
+
+ private final int SHOW_ALL_CHANNELS = 1;
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ if (notificationHideUnusedChannels()) {
+ menu.add(Menu.NONE, SHOW_ALL_CHANNELS, Menu.NONE,
+ mShowAll ? R.string.hide_unused_channels : R.string.show_unused_channels);
+ }
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (!notificationHideUnusedChannels()) {
+ return super.onOptionsItemSelected(item);
+ }
+ switch (item.getItemId()) {
+ case SHOW_ALL_CHANNELS:
+ mShowAll = !mShowAll;
+ item.setTitle(mShowAll
+ ? R.string.hide_unused_channels
+ : R.string.show_unused_channels);
+ ChannelListPreferenceController list =
+ use(ChannelListPreferenceController.class);
+ list.setShowAll(mShowAll);
+ list.updateState(findPreference(list.getPreferenceKey()));
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
}
diff --git a/src/com/android/settings/notification/app/ChannelListPreferenceController.java b/src/com/android/settings/notification/app/ChannelListPreferenceController.java
index c9196336a68..70775926e9b 100644
--- a/src/com/android/settings/notification/app/ChannelListPreferenceController.java
+++ b/src/com/android/settings/notification/app/ChannelListPreferenceController.java
@@ -18,6 +18,7 @@ package com.android.settings.notification.app;
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_NONE;
+import static com.android.server.notification.Flags.notificationHideUnusedChannels;
import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
@@ -58,6 +59,8 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
private List mChannelGroupList;
private PreferenceCategory mPreference;
+ private boolean mShowAll;
+
public ChannelListPreferenceController(Context context, NotificationBackend backend) {
super(context, backend);
}
@@ -96,7 +99,16 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
new AsyncTask() {
@Override
protected Void doInBackground(Void... unused) {
- mChannelGroupList = mBackend.getGroups(mAppRow.pkg, mAppRow.uid).getList();
+ if (notificationHideUnusedChannels()) {
+ if (mShowAll) {
+ mChannelGroupList = mBackend.getGroups(mAppRow.pkg, mAppRow.uid).getList();
+ } else {
+ mChannelGroupList = mBackend.getGroupsWithRecentBlockedFilter(mAppRow.pkg,
+ mAppRow.uid).getList();
+ }
+ } else {
+ mChannelGroupList = mBackend.getGroups(mAppRow.pkg, mAppRow.uid).getList();
+ }
Collections.sort(mChannelGroupList, CHANNEL_GROUP_COMPARATOR);
return null;
}
@@ -111,6 +123,10 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
}.execute();
}
+ protected void setShowAll(boolean showAll) {
+ mShowAll = showAll;
+ }
+
/**
* Update the preferences group to match the
* @param groupPrefsList