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