Merge "Notification Inline strings for non-upgraded apps"

This commit is contained in:
TreeHugger Robot
2017-03-23 22:19:36 +00:00
committed by Android (Google) Code Review
3 changed files with 44 additions and 35 deletions

View File

@@ -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

View File

@@ -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 {

View File

@@ -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