From d9d1e8e6d604c2de09d3e26df546d62fa0760481 Mon Sep 17 00:00:00 2001 From: Flavio Fiszman Date: Fri, 4 Jun 2021 14:35:06 +0100 Subject: Hide demoted conversations from People service Change-Id: I8b2c3810aeca388a6fa7235f853458ef1fd474b6 Test: DataManagerTest Bug: 181929846 --- .../android/server/people/data/DataManager.java | 2 +- .../server/people/data/DataManagerTest.java | 53 +++++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/services/people/java/com/android/server/people/data/DataManager.java b/services/people/java/com/android/server/people/data/DataManager.java index 7189fb42f263..d55d0600b7c9 100644 --- a/services/people/java/com/android/server/people/data/DataManager.java +++ b/services/people/java/com/android/server/people/data/DataManager.java @@ -264,7 +264,7 @@ public class DataManager { @Nullable private ConversationChannel getConversationChannel(ShortcutInfo shortcutInfo, ConversationInfo conversationInfo) { - if (conversationInfo == null) { + if (conversationInfo == null || conversationInfo.isDemoted()) { return null; } if (shortcutInfo == null) { diff --git a/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java b/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java index b112f3fc0014..c50648573d52 100644 --- a/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java @@ -681,6 +681,29 @@ public final class DataManagerTest { assertThat(result.getStatuses()).containsExactly(cs); } + @Test + public void testGetConversation_demoted() { + mDataManager.onUserUnlocked(USER_ID_PRIMARY); + assertThat(mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY, + TEST_SHORTCUT_ID)).isNull(); + + ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID, + buildPerson()); + shortcut.setCached(ShortcutInfo.FLAG_PINNED); + mDataManager.addOrUpdateConversationInfo(shortcut); + assertThat(mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY, + TEST_SHORTCUT_ID)).isNotNull(); + + mNotificationChannel.setDemoted(true); + NotificationListenerService listenerService = + mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY); + listenerService.onNotificationChannelModified(TEST_PKG_NAME, UserHandle.of(USER_ID_PRIMARY), + mNotificationChannel, NOTIFICATION_CHANNEL_OR_GROUP_UPDATED); + + assertThat(mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY, + TEST_SHORTCUT_ID)).isNull(); + } + @Test public void testGetConversationGetsPersonsData() { mDataManager.onUserUnlocked(USER_ID_PRIMARY); @@ -719,6 +742,27 @@ public final class DataManagerTest { TEST_SHORTCUT_ID + "1")).isFalse(); } + @Test + public void testIsConversation_demoted() { + mDataManager.onUserUnlocked(USER_ID_PRIMARY); + assertThat(mDataManager.isConversation(TEST_PKG_NAME, USER_ID_PRIMARY, + TEST_SHORTCUT_ID)).isFalse(); + + ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID, + buildPerson()); + shortcut.setCached(ShortcutInfo.FLAG_PINNED); + mDataManager.addOrUpdateConversationInfo(shortcut); + + mNotificationChannel.setDemoted(true); + NotificationListenerService listenerService = + mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY); + listenerService.onNotificationChannelModified(TEST_PKG_NAME, UserHandle.of(USER_ID_PRIMARY), + mNotificationChannel, NOTIFICATION_CHANNEL_OR_GROUP_UPDATED); + + assertThat(mDataManager.isConversation(TEST_PKG_NAME, USER_ID_PRIMARY, + TEST_SHORTCUT_ID)).isFalse(); + } + @Test public void testNotificationChannelCreated() { mDataManager.onUserUnlocked(USER_ID_PRIMARY); @@ -1371,13 +1415,20 @@ public final class DataManagerTest { NotificationListenerService listenerService = mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY); listenerService.onNotificationPosted(mStatusBarNotification); + // posting updates the last interaction time, so delay before deletion + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + long approxDeletionTime = System.currentTimeMillis(); listenerService.onNotificationRemoved(mStatusBarNotification, null, NotificationListenerService.REASON_CANCEL); ConversationInfo conversationInfo = mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY) .getConversationStore() .getConversation(TEST_SHORTCUT_ID); - assertEquals(conversationInfo.getLastEventTimestamp(), System.currentTimeMillis()); + assertTrue(conversationInfo.getLastEventTimestamp() - approxDeletionTime < 100); } @Test -- cgit v1.2.3-59-g8ed1b