Merge "Dedup consecutive call log entries."
diff --git a/src/com/android/contacts/calllog/CallLogGroupBuilder.java b/src/com/android/contacts/calllog/CallLogGroupBuilder.java
index 3d7dd2c..5c7d3ee 100644
--- a/src/com/android/contacts/calllog/CallLogGroupBuilder.java
+++ b/src/com/android/contacts/calllog/CallLogGroupBuilder.java
@@ -76,13 +76,13 @@
             } else if (!sameNumber) {
                 // Should only group with calls from the same number.
                 shouldGroup = false;
-            } else if (firstCallType == Calls.VOICEMAIL_TYPE
-                    || firstCallType == Calls.MISSED_TYPE) {
-                // Voicemail and missed calls should only be grouped with subsequent missed calls.
-                shouldGroup = callType == Calls.MISSED_TYPE;
+            } else if (firstCallType == Calls.VOICEMAIL_TYPE) {
+                // never group voicemail.
+                shouldGroup = false;
             } else {
-                // Incoming and outgoing calls group together.
-                shouldGroup = callType == Calls.INCOMING_TYPE || callType == Calls.OUTGOING_TYPE;
+                // Incoming, outgoing, and missed calls group together.
+                shouldGroup = (callType == Calls.INCOMING_TYPE || callType == Calls.OUTGOING_TYPE ||
+                        callType == Calls.MISSED_TYPE);
             }
 
             if (shouldGroup) {
diff --git a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java b/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
index de2b292..1fced0b 100644
--- a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
@@ -21,12 +21,14 @@
 import android.database.MatrixCursor;
 import android.provider.CallLog.Calls;
 import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
 
 import java.util.List;
 
 /**
  * Unit tests for {@link CallLogGroupBuilder}
  */
+@SmallTest
 public class CallLogGroupBuilderTest extends AndroidTestCase {
     /** A phone number for testing. */
     private static final String TEST_NUMBER1 = "14125551234";
@@ -106,10 +108,9 @@
     }
 
     public void testAddGroups_Voicemail() {
-        // Groups with one or more missed calls.
-        assertCallsAreGrouped(Calls.VOICEMAIL_TYPE, Calls.MISSED_TYPE);
-        assertCallsAreGrouped(Calls.VOICEMAIL_TYPE, Calls.MISSED_TYPE, Calls.MISSED_TYPE);
         // Does not group with other types of calls, include voicemail themselves.
+        assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.MISSED_TYPE);
+        //assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.MISSED_TYPE, Calls.MISSED_TYPE);
         assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.VOICEMAIL_TYPE);
         assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.INCOMING_TYPE);
         assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.OUTGOING_TYPE);
@@ -121,8 +122,8 @@
         assertCallsAreGrouped(Calls.MISSED_TYPE, Calls.MISSED_TYPE, Calls.MISSED_TYPE);
         // Does not group with other types of calls.
         assertCallsAreNotGrouped(Calls.MISSED_TYPE, Calls.VOICEMAIL_TYPE);
-        assertCallsAreNotGrouped(Calls.MISSED_TYPE, Calls.INCOMING_TYPE);
-        assertCallsAreNotGrouped(Calls.MISSED_TYPE, Calls.OUTGOING_TYPE);
+        assertCallsAreGrouped(Calls.MISSED_TYPE, Calls.INCOMING_TYPE);
+        assertCallsAreGrouped(Calls.MISSED_TYPE, Calls.OUTGOING_TYPE);
     }
 
     public void testAddGroups_Incoming() {
@@ -131,9 +132,9 @@
         assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
         assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
         assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE, Calls.INCOMING_TYPE);
+        assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.MISSED_TYPE);
         // Does not group with voicemail and missed calls.
         assertCallsAreNotGrouped(Calls.INCOMING_TYPE, Calls.VOICEMAIL_TYPE);
-        assertCallsAreNotGrouped(Calls.INCOMING_TYPE, Calls.MISSED_TYPE);
     }
 
     public void testAddGroups_Outgoing() {
@@ -142,29 +143,28 @@
         assertCallsAreGrouped(Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE);
         assertCallsAreGrouped(Calls.OUTGOING_TYPE, Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
         assertCallsAreGrouped(Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE, Calls.INCOMING_TYPE);
+        assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.MISSED_TYPE);
         // Does not group with voicemail and missed calls.
         assertCallsAreNotGrouped(Calls.INCOMING_TYPE, Calls.VOICEMAIL_TYPE);
-        assertCallsAreNotGrouped(Calls.INCOMING_TYPE, Calls.MISSED_TYPE);
     }
 
     public void testAddGroups_Mixed() {
         addMultipleOldCallLogEntries(TEST_NUMBER1,
                 Calls.VOICEMAIL_TYPE,  // Stand-alone
-                Calls.INCOMING_TYPE,  // Group 1: 1-2
+                Calls.INCOMING_TYPE,  // Group 1: 1-4
                 Calls.OUTGOING_TYPE,
-                Calls.MISSED_TYPE,  // Group 2: 3-4
+                Calls.MISSED_TYPE,
                 Calls.MISSED_TYPE,
                 Calls.VOICEMAIL_TYPE,  // Stand-alone
                 Calls.INCOMING_TYPE,  // Stand-alone
-                Calls.VOICEMAIL_TYPE,  // Group 3: 7-9
+                Calls.VOICEMAIL_TYPE,  // Stand-alone
+                Calls.MISSED_TYPE, // Group 2: 8-10
                 Calls.MISSED_TYPE,
-                Calls.MISSED_TYPE,
-                Calls.OUTGOING_TYPE);  // Stand-alone
+                Calls.OUTGOING_TYPE);
         mBuilder.addGroups(mCursor);
-        assertEquals(3, mFakeGroupCreator.groups.size());
-        assertGroupIs(1, 2, false, mFakeGroupCreator.groups.get(0));
-        assertGroupIs(3, 2, false, mFakeGroupCreator.groups.get(1));
-        assertGroupIs(7, 3, false, mFakeGroupCreator.groups.get(2));
+        assertEquals(2, mFakeGroupCreator.groups.size());
+        assertGroupIs(1, 4, false, mFakeGroupCreator.groups.get(0));
+        assertGroupIs(8, 3, false, mFakeGroupCreator.groups.get(1));
     }
 
     public void testEqualPhoneNumbers() {