diff options
3 files changed, 44 insertions, 35 deletions
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 8dc694cc6e47..d6d01d8abac4 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1382,11 +1382,15 @@ of notifications. Replaces the channel name and only appears when there is more than one channel. --> <string name="notification_num_channels"> <xliff:g id="number">%d</xliff:g> notification categories</string> + <!-- Notification: Control panel: Label that shows when an app has not upgraded to use channels. + Hints that the user's only option is to block all of the app's notifications. --> + <string name="notification_default_channel_desc">This app doesn\'t have notification categories</string> + <!-- Notification: Control panel: Label that shows how many channels this application has - defined, describing the current notification channel as "1 out of n categories from this app". --> + defined, describing the current notification channel as "1 out of n notification categories from this app". --> <plurals name="notification_num_channels_desc"> - <item quantity="one">1 out of <xliff:g id="number">%d</xliff:g> category from this app</item> - <item quantity="other">1 out of <xliff:g id="number">%d</xliff:g> categories from this app</item> + <item quantity="one">1 out of <xliff:g id="number">%d</xliff:g> notification category from this app</item> + <item quantity="other">1 out of <xliff:g id="number">%d</xliff:g> notification categories from this app</item> </plurals> <!-- Notification: Control panel: For bundles of notifications, this label that lists the diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java index a9043e4c83bb..54921a7108c6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java @@ -99,11 +99,14 @@ public class NotificationInfo extends LinearLayout implements GutsContent { mINotificationManager = iNotificationManager; mPkg = pkg; mNotificationChannels = notificationChannels; + boolean isSingleDefaultChannel = false; if (mNotificationChannels.isEmpty()) { throw new IllegalArgumentException("bindNotification requires at least one channel"); } else if (mNotificationChannels.size() == 1) { mSingleNotificationChannel = mNotificationChannels.get(0); mStartingUserImportance = mSingleNotificationChannel.getImportance(); + isSingleDefaultChannel = mSingleNotificationChannel.getId() + .equals(NotificationChannel.DEFAULT_CHANNEL_ID); } else { mSingleNotificationChannel = null; } @@ -135,24 +138,30 @@ public class NotificationInfo extends LinearLayout implements GutsContent { String channelsDescText; mNumChannelsView = (TextView) (findViewById(R.id.num_channels_desc)); - switch (mNotificationChannels.size()) { - case 1: - channelsDescText = String.format(mContext.getResources().getQuantityString( - R.plurals.notification_num_channels_desc, numChannels), numChannels); - break; - case 2: - channelsDescText = mContext.getString(R.string.notification_channels_list_desc_2, - mNotificationChannels.get(0).getName(), - mNotificationChannels.get(1).getName()); - break; - default: - final int numOthers = mNotificationChannels.size() - 2; - channelsDescText = String.format( - mContext.getResources().getQuantityString( - R.plurals.notification_channels_list_desc_2_and_others, numOthers), - mNotificationChannels.get(0).getName(), - mNotificationChannels.get(1).getName(), - numOthers); + if (isSingleDefaultChannel) { + channelsDescText = mContext.getString(R.string.notification_default_channel_desc); + } else { + switch (mNotificationChannels.size()) { + case 1: + channelsDescText = String.format(mContext.getResources().getQuantityString( + R.plurals.notification_num_channels_desc, numChannels), numChannels); + break; + case 2: + channelsDescText = mContext.getString( + R.string.notification_channels_list_desc_2, + mNotificationChannels.get(0).getName(), + mNotificationChannels.get(1).getName()); + break; + default: + final int numOthers = mNotificationChannels.size() - 2; + channelsDescText = String.format( + mContext.getResources().getQuantityString( + R.plurals.notification_channels_list_desc_2_and_others, + numOthers), + mNotificationChannels.get(0).getName(), + mNotificationChannels.get(1).getName(), + numOthers); + } } mNumChannelsView.setText(channelsDescText); @@ -160,9 +169,8 @@ public class NotificationInfo extends LinearLayout implements GutsContent { // Multiple channels don't use a channel name for the title. channelNameText = mContext.getString(R.string.notification_num_channels, mNotificationChannels.size()); - } else if (mSingleNotificationChannel.getId() - .equals(NotificationChannel.DEFAULT_CHANNEL_ID)) { - // If this is the placeholder channel, don't use our channel-specific text. + } else if (isSingleDefaultChannel) { + // If this is the default channel, don't use our channel-specific text. channelNameText = mContext.getString(R.string.notification_header_default_channel); } else { channelNameText = mSingleNotificationChannel.getName(); @@ -282,15 +290,9 @@ public class NotificationInfo extends LinearLayout implements GutsContent { } private void updateSecondaryText() { - final boolean defaultChannel = mSingleNotificationChannel != null && - mSingleNotificationChannel.getId().equals(NotificationChannel.DEFAULT_CHANNEL_ID); final boolean disabled = mSingleNotificationChannel != null && getSelectedImportance() == NotificationManager.IMPORTANCE_NONE; - if (defaultChannel) { - // Don't show any secondary text if this is from the default channel. - mChannelDisabledView.setVisibility(View.GONE); - mNumChannelsView.setVisibility(View.GONE); - } else if (disabled) { + if (disabled) { mChannelDisabledView.setVisibility(View.VISIBLE); mNumChannelsView.setVisibility(View.GONE); } else { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java index 8aca546b2730..5632b719df23 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java @@ -260,12 +260,14 @@ public class NotificationInfoTest extends SysuiTestCase { } @Test - public void testBindNotification_NumChannelsTextHiddenWhenDefaultChannel() throws Exception { + public void testBindNotification_NumChannelsTextUniqueWhenDefaultChannel() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, Arrays.asList(mDefaultNotificationChannel), null, null, null); final TextView numChannelsView = (TextView) mNotificationInfo.findViewById(R.id.num_channels_desc); - assertTrue(numChannelsView.getVisibility() != View.VISIBLE); + assertEquals(View.VISIBLE, numChannelsView.getVisibility()); + assertEquals(mContext.getString(R.string.notification_default_channel_desc), + numChannelsView.getText()); } @Test @@ -390,13 +392,14 @@ public class NotificationInfoTest extends SysuiTestCase { @Test @UiThreadTest - public void testBindNotification_ChannelDisabledTextHiddenWhenDefaultChannel() + public void testBindNotification_ChannelDisabledTextShowsForDefaultChannel() throws Exception { + mDefaultNotificationChannel.setImportance(NotificationManager.IMPORTANCE_NONE); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, Arrays.asList(mDefaultNotificationChannel), null, null, null); final TextView channelDisabledView = (TextView) mNotificationInfo.findViewById(R.id.channel_disabled); - assertTrue(channelDisabledView.getVisibility() != View.VISIBLE); + assertEquals(View.VISIBLE, channelDisabledView.getVisibility()); } @Test |