Remove BubbleEntity via IDs

The contents of the BubbleEntity could differ
so should compare via IDs

Fixes: 159041180
Test: atest BubbleVolatileRepositoryTest
Change-Id: I6470a484657710cff3b2cdc0787cd0afcfdbb6ad
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/storage/BubbleVolatileRepository.kt b/packages/SystemUI/src/com/android/systemui/bubbles/storage/BubbleVolatileRepository.kt
index bdeb714..894970f 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/storage/BubbleVolatileRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/storage/BubbleVolatileRepository.kt
@@ -60,7 +60,8 @@
         // Verify the size of given bubbles is within capacity, otherwise trim down to capacity
         val bubblesInRange = bubbles.takeLast(capacity)
         // To ensure natural ordering of the bubbles, removes bubbles which already exist
-        val uniqueBubbles = bubblesInRange.filterNot { entities.remove(it) }
+        val uniqueBubbles = bubblesInRange.filterNot { b: BubbleEntity ->
+            entities.removeIf { e: BubbleEntity -> b.key == e.key } }
         val overflowCount = entities.size + bubblesInRange.size - capacity
         if (overflowCount > 0) {
             // Uncache ShortcutInfo of bubbles that will be removed due to capacity
@@ -72,7 +73,9 @@
     }
 
     @Synchronized
-    fun removeBubbles(bubbles: List<BubbleEntity>) = uncache(bubbles.filter { entities.remove(it) })
+    fun removeBubbles(bubbles: List<BubbleEntity>) =
+            uncache(bubbles.filter { b: BubbleEntity ->
+                entities.removeIf { e: BubbleEntity -> b.key == e.key } })
 
     private fun cache(bubbles: List<BubbleEntity>) {
         bubbles.groupBy { ShortcutKey(it.userId, it.packageName) }.forEach { (key, bubbles) ->
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/storage/BubbleVolatileRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bubbles/storage/BubbleVolatileRepositoryTest.kt
index 76c5833..7ea611c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/storage/BubbleVolatileRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/storage/BubbleVolatileRepositoryTest.kt
@@ -102,6 +102,19 @@
                 eq(listOf("alice and bob")), eq(user10),
                 eq(LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS))
     }
+
+    @Test
+    fun testAddBubbleMatchesByKey() {
+        val bubble = BubbleEntity(0, "com.example.pkg", "shortcut-id", "key", 120, 0, "title")
+        repository.addBubbles(listOf(bubble))
+        assertEquals(bubble, repository.bubbles.get(0))
+
+        // Same key as first bubble but different entry
+        val bubbleModified = BubbleEntity(0, "com.example.pkg", "shortcut-id", "key", 120, 0,
+                "different title")
+        repository.addBubbles(listOf(bubbleModified))
+        assertEquals(bubbleModified, repository.bubbles.get(0))
+    }
 }
 
 private const val PKG_MESSENGER = "com.example.messenger"