Prefer primary data to others.

Bug: 4723377
Change-Id: Iaeb74924a8567d049adcd91dfa03814a63abf088
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index 87ebda8..d56ba23 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -436,7 +436,8 @@
         + DataUsageStatColumns.TIMES_USED + " DESC, "
         + Contacts.DISPLAY_NAME + ", "
         + Data.CONTACT_ID + ", "
-        + Data.IS_SUPER_PRIMARY + " DESC";
+        + Data.IS_SUPER_PRIMARY + " DESC, "
+        + Data.IS_PRIMARY + " DESC";
 
     /** Currently same as {@link #EMAIL_FILTER_SORT_ORDER} */
     private static final String PHONE_FILTER_SORT_ORDER = EMAIL_FILTER_SORT_ORDER;
diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
index ea76866..aabfca3 100644
--- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
@@ -1110,6 +1110,41 @@
     }
 
     /**
+     * Tests if ContactsProvider2 returns addresses according to registration order.
+     */
+    public void testEmailFilterDefaultSortOrder() {
+        long rawContactId1 = createRawContact();
+        insertEmail(rawContactId1, "address1@email.com");
+        insertEmail(rawContactId1, "address2@email.com");
+        insertEmail(rawContactId1, "address3@email.com");
+        ContentValues v1 = new ContentValues();
+        v1.put(Email.ADDRESS, "address1@email.com");
+        ContentValues v2 = new ContentValues();
+        v2.put(Email.ADDRESS, "address2@email.com");
+        ContentValues v3 = new ContentValues();
+        v3.put(Email.ADDRESS, "address3@email.com");
+
+        Uri filterUri = Uri.withAppendedPath(Email.CONTENT_FILTER_URI, "address");
+        assertStoredValuesOrderly(filterUri, new ContentValues[] { v1, v2, v3 });
+    }
+
+    /**
+     * Tests if ContactsProvider2 returns primary addresses before the other addresses.
+     */
+    public void testEmailFilterPrimaryAddress() {
+        long rawContactId1 = createRawContact();
+        insertEmail(rawContactId1, "address1@email.com");
+        insertEmail(rawContactId1, "address2@email.com", true);
+        ContentValues v1 = new ContentValues();
+        v1.put(Email.ADDRESS, "address1@email.com");
+        ContentValues v2 = new ContentValues();
+        v2.put(Email.ADDRESS, "address2@email.com");
+
+        Uri filterUri = Uri.withAppendedPath(Email.CONTENT_FILTER_URI, "address");
+        assertStoredValuesOrderly(filterUri, new ContentValues[] { v2, v1 });
+    }
+
+    /**
      * Tests if ContactsProvider2 has email address associated with a primary account before the
      * other address.
      */