Merge "Use a plain String instead of CharArrayBuffer." into ics-mr1
diff --git a/src/com/android/contacts/calllog/CallLogGroupBuilder.java b/src/com/android/contacts/calllog/CallLogGroupBuilder.java
index b636842..9829d4a 100644
--- a/src/com/android/contacts/calllog/CallLogGroupBuilder.java
+++ b/src/com/android/contacts/calllog/CallLogGroupBuilder.java
@@ -19,7 +19,6 @@
 import com.android.common.widget.GroupingListAdapter;
 import com.google.common.annotations.VisibleForTesting;
 
-import android.database.CharArrayBuffer;
 import android.database.Cursor;
 import android.provider.CallLog.Calls;
 import android.telephony.PhoneNumberUtils;
@@ -34,11 +33,6 @@
         public void addGroup(int cursorPosition, int size, boolean expanded);
     }
 
-    /** Reusable char array buffer. */
-    private CharArrayBuffer mBuffer1 = new CharArrayBuffer(128);
-    /** Reusable char array buffer. */
-    private CharArrayBuffer mBuffer2 = new CharArrayBuffer(128);
-
     /** The object on which the groups are created. */
     private final GroupCreator mGroupCreator;
 
@@ -48,8 +42,8 @@
 
     /**
      * Finds all groups of adjacent entries in the call log which should be grouped together and
-     * calls {@link CallLogFragment.GroupCreator#addGroup(int, int, boolean)} on
-     * {@link #mGroupCreator} for each of them.
+     * calls {@link GroupCreator#addGroup(int, int, boolean)} on {@link #mGroupCreator} for each of
+     * them.
      * <p>
      * For entries that are not grouped with others, we do not need to create a group of size one.
      * <p>
@@ -64,16 +58,14 @@
         }
 
         int currentGroupSize = 1;
-        // The number of the first entry in the group.
-        CharArrayBuffer firstNumber = mBuffer1;
-        // The number of the current row in the cursor.
-        CharArrayBuffer currentNumber = mBuffer2;
         cursor.moveToFirst();
-        cursor.copyStringToBuffer(CallLogQuery.NUMBER, firstNumber);
+        // The number of the first entry in the group.
+        String firstNumber = cursor.getString(CallLogQuery.NUMBER);
         // This is the type of the first call in the group.
         int firstCallType = cursor.getInt(CallLogQuery.CALL_TYPE);
         while (cursor.moveToNext()) {
-            cursor.copyStringToBuffer(CallLogQuery.NUMBER, currentNumber);
+            // The number of the current row in the cursor.
+            final String currentNumber = cursor.getString(CallLogQuery.NUMBER);
             final int callType = cursor.getInt(CallLogQuery.CALL_TYPE);
             final boolean sameNumber = equalNumbers(firstNumber, currentNumber);
             final boolean shouldGroup;
@@ -105,12 +97,9 @@
                 }
                 // Start a new group; it will include at least the current call.
                 currentGroupSize = 1;
-                // The current entry is now the first in the group. For the CharArrayBuffers, we
-                // need to swap them.
-                firstCallType = callType;
-                CharArrayBuffer temp = firstNumber;  // Used to swap.
+                // The current entry is now the first in the group.
                 firstNumber = currentNumber;
-                currentNumber = temp;
+                firstCallType = callType;
             }
         }
         // If the last set of calls at the end of the call log was itself a group, create it now.
@@ -131,11 +120,7 @@
     }
 
     @VisibleForTesting
-    boolean equalNumbers(CharArrayBuffer buffer1, CharArrayBuffer buffer2) {
-        // TODO add PhoneNumberUtils.compare(CharSequence, CharSequence) to avoid
-        // string allocation
-        String number1 = buffer1 == null ? null : new String(buffer1.data, 0, buffer1.sizeCopied);
-        String number2 = buffer2 == null ? null : new String(buffer2.data, 0, buffer2.sizeCopied);
+    boolean equalNumbers(String number1, String number2) {
         if (PhoneNumberUtils.isUriNumber(number1) || PhoneNumberUtils.isUriNumber(number2)) {
             return compareSipAddresses(number1, number2);
         } else {
diff --git a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java b/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
index 2e029cc..24aa428 100644
--- a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
@@ -18,9 +18,6 @@
 
 import static com.google.android.collect.Lists.newArrayList;
 
-import com.android.contacts.format.FormatUtils;
-
-import android.database.CharArrayBuffer;
 import android.database.MatrixCursor;
 import android.provider.CallLog.Calls;
 import android.test.AndroidTestCase;
@@ -172,40 +169,40 @@
 
     public void testEqualPhoneNumbers() {
         // Identical.
-        assertTrue(checkEqualNumbers("6505555555", "6505555555"));
-        assertTrue(checkEqualNumbers("650 555 5555", "650 555 5555"));
+        assertTrue(mBuilder.equalNumbers("6505555555", "6505555555"));
+        assertTrue(mBuilder.equalNumbers("650 555 5555", "650 555 5555"));
         // Formatting.
-        assertTrue(checkEqualNumbers("6505555555", "650 555 5555"));
-        assertTrue(checkEqualNumbers("6505555555", "(650) 555-5555"));
-        assertTrue(checkEqualNumbers("650 555 5555", "(650) 555-5555"));
+        assertTrue(mBuilder.equalNumbers("6505555555", "650 555 5555"));
+        assertTrue(mBuilder.equalNumbers("6505555555", "(650) 555-5555"));
+        assertTrue(mBuilder.equalNumbers("650 555 5555", "(650) 555-5555"));
         // Short codes.
-        assertTrue(checkEqualNumbers("55555", "55555"));
-        assertTrue(checkEqualNumbers("55555", "555 55"));
+        assertTrue(mBuilder.equalNumbers("55555", "55555"));
+        assertTrue(mBuilder.equalNumbers("55555", "555 55"));
         // Different numbers.
-        assertFalse(checkEqualNumbers("6505555555", "650555555"));
-        assertFalse(checkEqualNumbers("6505555555", "6505555551"));
-        assertFalse(checkEqualNumbers("650 555 5555", "650 555 555"));
-        assertFalse(checkEqualNumbers("650 555 5555", "650 555 5551"));
-        assertFalse(checkEqualNumbers("55555", "5555"));
-        assertFalse(checkEqualNumbers("55555", "55551"));
+        assertFalse(mBuilder.equalNumbers("6505555555", "650555555"));
+        assertFalse(mBuilder.equalNumbers("6505555555", "6505555551"));
+        assertFalse(mBuilder.equalNumbers("650 555 5555", "650 555 555"));
+        assertFalse(mBuilder.equalNumbers("650 555 5555", "650 555 5551"));
+        assertFalse(mBuilder.equalNumbers("55555", "5555"));
+        assertFalse(mBuilder.equalNumbers("55555", "55551"));
         // SIP addresses.
-        assertTrue(checkEqualNumbers("6505555555@host.com", "6505555555@host.com"));
-        assertTrue(checkEqualNumbers("6505555555@host.com", "6505555555@HOST.COM"));
-        assertTrue(checkEqualNumbers("user@host.com", "user@host.com"));
-        assertTrue(checkEqualNumbers("user@host.com", "user@HOST.COM"));
-        assertFalse(checkEqualNumbers("USER@host.com", "user@host.com"));
-        assertFalse(checkEqualNumbers("user@host.com", "user@host1.com"));
+        assertTrue(mBuilder.equalNumbers("6505555555@host.com", "6505555555@host.com"));
+        assertTrue(mBuilder.equalNumbers("6505555555@host.com", "6505555555@HOST.COM"));
+        assertTrue(mBuilder.equalNumbers("user@host.com", "user@host.com"));
+        assertTrue(mBuilder.equalNumbers("user@host.com", "user@HOST.COM"));
+        assertFalse(mBuilder.equalNumbers("USER@host.com", "user@host.com"));
+        assertFalse(mBuilder.equalNumbers("user@host.com", "user@host1.com"));
         // SIP address vs phone number.
-        assertFalse(checkEqualNumbers("6505555555@host.com", "6505555555"));
-        assertFalse(checkEqualNumbers("6505555555", "6505555555@host.com"));
-        assertFalse(checkEqualNumbers("user@host.com", "6505555555"));
-        assertFalse(checkEqualNumbers("6505555555", "user@host.com"));
+        assertFalse(mBuilder.equalNumbers("6505555555@host.com", "6505555555"));
+        assertFalse(mBuilder.equalNumbers("6505555555", "6505555555@host.com"));
+        assertFalse(mBuilder.equalNumbers("user@host.com", "6505555555"));
+        assertFalse(mBuilder.equalNumbers("6505555555", "user@host.com"));
         // Nulls.
-        assertTrue(checkEqualNumbers(null, null));
-        assertFalse(checkEqualNumbers(null, "6505555555"));
-        assertFalse(checkEqualNumbers("6505555555", null));
-        assertFalse(checkEqualNumbers(null, "6505555555@host.com"));
-        assertFalse(checkEqualNumbers("6505555555@host.com", null));
+        assertTrue(mBuilder.equalNumbers(null, null));
+        assertFalse(mBuilder.equalNumbers(null, "6505555555"));
+        assertFalse(mBuilder.equalNumbers("6505555555", null));
+        assertFalse(mBuilder.equalNumbers(null, "6505555555@host.com"));
+        assertFalse(mBuilder.equalNumbers("6505555555@host.com", null));
     }
 
     public void testCompareSipAddresses() {
@@ -227,24 +224,6 @@
         assertFalse(mBuilder.compareSipAddresses("6505555555@host.com", null));
     }
 
-    /** Calls {@link CallLogGroupBuilder#equalNumbers(CharArrayBuffer, CharArrayBuffer)}. */
-    private boolean checkEqualNumbers(String number1, String number2) {
-        final CharArrayBuffer buffer1 = stringToCharArrayBuffer(number1);
-        final CharArrayBuffer buffer2 = stringToCharArrayBuffer(number2);
-        return mBuilder.equalNumbers(buffer1, buffer2);
-    }
-
-    /** Converts a string into a {@link CharArrayBuffer}, preserving null values. */
-    private CharArrayBuffer stringToCharArrayBuffer(String value) {
-        if (value == null) {
-            return null;
-        }
-
-        final CharArrayBuffer buffer = new CharArrayBuffer(value.length());
-        FormatUtils.copyToCharArrayBuffer(value, buffer);
-        return buffer;
-    }
-
     /** Creates (or recreates) the cursor used to store the call log content for the tests. */
     private void createCursor() {
         mCursor = new MatrixCursor(CallLogQuery.EXTENDED_PROJECTION);