Don't add identical numbers in the cursor to the SpeedDialUiItem.

Bug: 78492722,79213974
Test: SpeedDialUiItemTest
PiperOrigin-RevId: 196754044
Change-Id: I7aec281ea7904087de0363245974cb08aec54c73
diff --git a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java
index 365b88f..2b056bb 100644
--- a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java
+++ b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java
@@ -23,6 +23,7 @@
 import android.provider.ContactsContract.Data;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
+import android.util.ArraySet;
 import com.android.dialer.common.Assert;
 import com.android.dialer.glidephotomanager.PhotoInfo;
 import com.android.dialer.speeddial.database.SpeedDialEntry;
@@ -33,6 +34,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * POJO representation of each speed dial list element.
@@ -121,10 +123,18 @@
     // While there are more rows and the lookup keys are the same, add a channel for each of the
     // contact's phone numbers.
     List<Channel> channels = new ArrayList<>();
+    Set<String> numbers = new ArraySet<>();
     do {
+      String number = cursor.getString(NUMBER);
+      // TODO(78492722): consider using lib phone number to compare numbers
+      if (!numbers.add(number)) {
+        // Number is identical to an existing number, skip this number
+        continue;
+      }
+
       Channel channel =
           Channel.builder()
-              .setNumber(cursor.getString(NUMBER))
+              .setNumber(number)
               .setPhoneType(cursor.getInt(TYPE))
               .setLabel(getLabel(resources, cursor))
               .setTechnology(Channel.VOICE)