Merge "Prevent conversations with bots from being in the people section." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6a895fce61
@@ -29,6 +29,7 @@ import android.app.ActivityManager;
|
|||||||
import android.app.IActivityManager;
|
import android.app.IActivityManager;
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
import android.app.NotificationChannel;
|
import android.app.NotificationChannel;
|
||||||
|
import android.app.Person;
|
||||||
import android.content.ContentProvider;
|
import android.content.ContentProvider;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -556,7 +557,7 @@ public final class NotificationRecord {
|
|||||||
pw.println(prefix + "bigContentView=" + formatRemoteViews(notification.bigContentView));
|
pw.println(prefix + "bigContentView=" + formatRemoteViews(notification.bigContentView));
|
||||||
pw.println(prefix + "headsUpContentView="
|
pw.println(prefix + "headsUpContentView="
|
||||||
+ formatRemoteViews(notification.headsUpContentView));
|
+ formatRemoteViews(notification.headsUpContentView));
|
||||||
pw.print(prefix + String.format("color=0x%08x", notification.color));
|
pw.println(prefix + String.format("color=0x%08x", notification.color));
|
||||||
pw.println(prefix + "timeout="
|
pw.println(prefix + "timeout="
|
||||||
+ TimeUtils.formatForLogging(notification.getTimeoutAfter()));
|
+ TimeUtils.formatForLogging(notification.getTimeoutAfter()));
|
||||||
if (notification.actions != null && notification.actions.length > 0) {
|
if (notification.actions != null && notification.actions.length > 0) {
|
||||||
@@ -1438,8 +1439,8 @@ public final class NotificationRecord {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mTargetSdkVersion >= Build.VERSION_CODES.R
|
if (mTargetSdkVersion >= Build.VERSION_CODES.R
|
||||||
&& Notification.MessagingStyle.class.equals(notification.getNotificationStyle())
|
&& Notification.MessagingStyle.class.equals(notification.getNotificationStyle())
|
||||||
&& mShortcutInfo == null) {
|
&& (mShortcutInfo == null || isOnlyBots(mShortcutInfo.getPersons()))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (mHasSentValidMsg && mShortcutInfo == null) {
|
if (mHasSentValidMsg && mShortcutInfo == null) {
|
||||||
@@ -1448,6 +1449,28 @@ public final class NotificationRecord {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if the {@link ShortcutInfo#getPersons()} array includes only bots, for the purpose
|
||||||
|
* of excluding that shortcut from the "conversations" section of the notification shade. If
|
||||||
|
* the shortcut has no people, this returns false to allow the conversation into the shade, and
|
||||||
|
* if there is any non-bot person we allow it as well. Otherwise, this is only bots and will
|
||||||
|
* not count as a conversation.
|
||||||
|
*/
|
||||||
|
private boolean isOnlyBots(Person[] persons) {
|
||||||
|
// Return false if there are no persons at all
|
||||||
|
if (persons == null || persons.length == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Return false if there are any non-bot persons
|
||||||
|
for (Person person : persons) {
|
||||||
|
if (!person.isBot()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Return true otherwise
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
StatusBarNotification getSbn() {
|
StatusBarNotification getSbn() {
|
||||||
return sbn;
|
return sbn;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1133,6 +1133,48 @@ public class NotificationRecordTest extends UiServiceTestCase {
|
|||||||
assertEquals(FLAG_FILTER_TYPE_CONVERSATIONS, record.getNotificationType());
|
assertEquals(FLAG_FILTER_TYPE_CONVERSATIONS, record.getNotificationType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIsConversation_shortcutHasOneBot_targetsR() {
|
||||||
|
StatusBarNotification sbn = getMessagingStyleNotification(PKG_R);
|
||||||
|
NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel);
|
||||||
|
ShortcutInfo shortcutMock = mock(ShortcutInfo.class);
|
||||||
|
when(shortcutMock.getPersons()).thenReturn(new Person[]{
|
||||||
|
new Person.Builder().setName("Bot").setBot(true).build()
|
||||||
|
});
|
||||||
|
record.setShortcutInfo(shortcutMock);
|
||||||
|
|
||||||
|
assertFalse(record.isConversation());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIsConversation_shortcutHasOnePerson_targetsR() {
|
||||||
|
StatusBarNotification sbn = getMessagingStyleNotification(PKG_R);
|
||||||
|
NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel);
|
||||||
|
ShortcutInfo shortcutMock = mock(ShortcutInfo.class);
|
||||||
|
when(shortcutMock.getPersons()).thenReturn(new Person[]{
|
||||||
|
new Person.Builder().setName("Person").setBot(false).build()
|
||||||
|
});
|
||||||
|
record.setShortcutInfo(shortcutMock);
|
||||||
|
|
||||||
|
assertTrue(record.isConversation());
|
||||||
|
assertEquals(FLAG_FILTER_TYPE_CONVERSATIONS, record.getNotificationType());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIsConversation_shortcutHasOneBotOnePerson_targetsR() {
|
||||||
|
StatusBarNotification sbn = getMessagingStyleNotification(PKG_R);
|
||||||
|
NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel);
|
||||||
|
ShortcutInfo shortcutMock = mock(ShortcutInfo.class);
|
||||||
|
when(shortcutMock.getPersons()).thenReturn(new Person[]{
|
||||||
|
new Person.Builder().setName("Bot").setBot(true).build(),
|
||||||
|
new Person.Builder().setName("Person").setBot(false).build()
|
||||||
|
});
|
||||||
|
record.setShortcutInfo(shortcutMock);
|
||||||
|
|
||||||
|
assertTrue(record.isConversation());
|
||||||
|
assertEquals(FLAG_FILTER_TYPE_CONVERSATIONS, record.getNotificationType());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsConversation_noShortcut() {
|
public void testIsConversation_noShortcut() {
|
||||||
StatusBarNotification sbn = getMessagingStyleNotification();
|
StatusBarNotification sbn = getMessagingStyleNotification();
|
||||||
|
|||||||
Reference in New Issue
Block a user