diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 66c3f00..7ba6820 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -47,9 +47,9 @@
     <string name="menu_new_group_action_bar" msgid="3127059073617415221">"লেবেল সৃষ্টি কৰক"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"একাধিক সম্পৰ্কসূচীৰ পৰা এই সম্পৰ্কটো আনলিংক কৰিবনে?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"আনলিংক কৰক"</string>
-    <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"আপুনি ইতিমধ্য়ে কৰা সলনিসমূহ ছেভ কৰিব আৰু একাধিক সম্পৰ্কসূচীৰ পৰা এই সম্পৰ্কটো আনলিংক কৰিব বিচাৰেনে?"</string>
+    <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"আপুনি ইতিমধ্যে কৰা সলনিসমূহ ছেভ কৰিব আৰু একাধিক সম্পৰ্কসূচীৰ পৰা এই সম্পৰ্কটো আনলিংক কৰিব বিচাৰেনে?"</string>
     <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"ছেভ কৰি আনলিংক কৰক"</string>
-    <string name="joinConfirmation" msgid="8262614843581924365">"আপুনি ইতিমধ্য়ে কৰা সলনিসমূহ ছেভ কৰিব আৰু বাছনি কৰা সম্পৰ্কসমূহলৈ লিংক কৰিব বিচাৰেনে?"</string>
+    <string name="joinConfirmation" msgid="8262614843581924365">"আপুনি ইতিমধ্যে কৰা সলনিসমূহ ছেভ কৰিব আৰু বাছনি কৰা সম্পৰ্কসমূহলৈ লিংক কৰিব বিচাৰেনে?"</string>
     <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"ছেভ আৰু লিংক কৰক"</string>
     <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"লিংক কৰি থকা হৈছে"</string>
     <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"আনলিংক কৰিথকা হৈছে"</string>
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 733894d..3b66739 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -32,7 +32,6 @@
 import android.os.Message;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Contacts;
-import androidx.core.content.ContextCompat;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
@@ -47,7 +46,7 @@
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.Toast;
-
+import androidx.core.content.ContextCompat;
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsUtils;
 import com.android.contacts.GroupMetaDataLoader;
@@ -69,7 +68,6 @@
 import com.android.contacts.util.ImplicitIntentsUtil;
 import com.android.contactsbind.FeedbackHelper;
 import com.google.common.primitives.Longs;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -316,7 +314,6 @@
                 ContactsContract.Data.CONTACT_ID,
                 ContactsContract.CommonDataKinds.Email._ID,
                 ContactsContract.Data.IS_SUPER_PRIMARY,
-                ContactsContract.Data.TIMES_USED,
                 ContactsContract.Data.DATA1
         };
 
@@ -324,15 +321,13 @@
                 ContactsContract.Data.CONTACT_ID,
                 ContactsContract.CommonDataKinds.Phone._ID,
                 ContactsContract.Data.IS_SUPER_PRIMARY,
-                ContactsContract.Data.TIMES_USED,
                 ContactsContract.Data.DATA1
         };
 
         public static final int CONTACT_ID = 0;
         public static final int ITEM_ID = 1;
         public static final int PRIMARY = 2;
-        public static final int TIMES_USED = 3;
-        public static final int DATA1 = 4;
+        public static final int DATA1 = 3;
     }
 
     /**
@@ -341,14 +336,12 @@
     private class ContactDataHelperClass {
 
         private List<String> items = new ArrayList<>();
-        private String mostUsedItemId = null;
-        private int mostUsedTimes;
+        private String firstItemId = null;
         private String primaryItemId = null;
 
-        public void addItem(String item, int timesUsed, boolean primaryFlag) {
-            if (mostUsedItemId == null || timesUsed > mostUsedTimes) {
-                mostUsedItemId = item;
-                mostUsedTimes = timesUsed;
+        public void addItem(String item, boolean primaryFlag) {
+            if (firstItemId == null) {
+                firstItemId = item;
             }
             if (primaryFlag) {
                 primaryItemId = item;
@@ -363,7 +356,7 @@
         public String getDefaultSelectionItemId() {
             return primaryItemId != null
                     ? primaryItemId
-                    : mostUsedItemId;
+                    : firstItemId;
         }
     }
 
@@ -397,7 +390,6 @@
                 final String contactId = cursor.getString(Query.CONTACT_ID);
                 final String itemId = cursor.getString(Query.ITEM_ID);
                 final boolean isPrimary = cursor.getInt(Query.PRIMARY) != 0;
-                final int timesUsed = cursor.getInt(Query.TIMES_USED);
                 final String data = cursor.getString(Query.DATA1);
 
                 if (!TextUtils.isEmpty(data)) {
@@ -408,7 +400,7 @@
                     } else {
                         contact = contactMap.get(contactId);
                     }
-                    contact.addItem(itemId, timesUsed, isPrimary);
+                    contact.addItem(itemId, isPrimary);
                     itemList.add(data);
                 }
             }
diff --git a/src/com/android/contacts/list/ContactListItemView.java b/src/com/android/contacts/list/ContactListItemView.java
index 135dbce..aafe5b1 100644
--- a/src/com/android/contacts/list/ContactListItemView.java
+++ b/src/com/android/contacts/list/ContactListItemView.java
@@ -30,11 +30,6 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.SearchSnippets;
-import androidx.core.content.ContextCompat;
-import androidx.core.content.res.ResourcesCompat;
-import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.appcompat.widget.AppCompatCheckBox;
-import androidx.appcompat.widget.AppCompatImageButton;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.TextUtils;
@@ -50,7 +45,11 @@
 import android.widget.ImageView.ScaleType;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
-
+import androidx.appcompat.widget.AppCompatCheckBox;
+import androidx.appcompat.widget.AppCompatImageButton;
+import androidx.core.content.ContextCompat;
+import androidx.core.content.res.ResourcesCompat;
+import androidx.core.graphics.drawable.DrawableCompat;
 import com.android.contacts.ContactPresenceIconUtil;
 import com.android.contacts.ContactStatusUtil;
 import com.android.contacts.R;
@@ -60,9 +59,7 @@
 import com.android.contacts.util.ContactDisplayUtils;
 import com.android.contacts.util.SearchUtil;
 import com.android.contacts.util.ViewUtil;
-
 import com.google.common.collect.Lists;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 6e456a9..19fb91b 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -31,12 +31,10 @@
 import android.provider.ContactsContract.SearchSnippets;
 import android.text.TextUtils;
 import android.view.View;
-
 import com.android.contacts.compat.ContactsCompat;
 import com.android.contacts.SimContactsConstants;
 import com.android.contacts.model.account.AccountWithDataSet;
 import com.android.contacts.preference.ContactsPreferences;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -48,33 +46,6 @@
     public static final char SNIPPET_START_MATCH = '[';
     public static final char SNIPPET_END_MATCH = ']';
 
-    // Contacts contacted within the last 3 days (in seconds)
-    private static final long LAST_TIME_USED_3_DAYS_SEC = 3L * 24 * 60 * 60;
-
-    // Contacts contacted within the last 7 days (in seconds)
-    private static final long LAST_TIME_USED_7_DAYS_SEC = 7L * 24 * 60 * 60;
-
-    // Contacts contacted within the last 14 days (in seconds)
-    private static final long LAST_TIME_USED_14_DAYS_SEC = 14L * 24 * 60 * 60;
-
-    // Contacts contacted within the last 30 days (in seconds)
-    private static final long LAST_TIME_USED_30_DAYS_SEC = 30L * 24 * 60 * 60;
-
-    private static final String TIME_SINCE_LAST_USED_SEC =
-            "(strftime('%s', 'now') - " + Contacts.LAST_TIME_CONTACTED + "/1000)";
-
-    private static final String STREQUENT_SORT =
-            "(CASE WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_3_DAYS_SEC +
-                    " THEN 0 " +
-                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_7_DAYS_SEC +
-                    " THEN 1 " +
-                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_14_DAYS_SEC +
-                    " THEN 2 " +
-                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_30_DAYS_SEC +
-                    " THEN 3 " +
-                    " ELSE 4 END), " +
-                    Contacts.TIMES_CONTACTED + " DESC, " +
-                    Contacts.STARRED + " DESC";
 
     public DefaultContactListAdapter(Context context) {
         super(context);
@@ -115,7 +86,7 @@
                 appendSearchParameters(builder, query, directoryId);
                 loader.setUri(builder.build());
                 loader.setProjection(getProjection(true));
-                sortOrder = STREQUENT_SORT;
+                sortOrder = Contacts.SORT_KEY_PRIMARY;
             }
         } else {
             final ContactListFilter filter = getFilter();
diff --git a/src/com/android/contacts/model/ContactLoader.java b/src/com/android/contacts/model/ContactLoader.java
index af69d85..ea439e7 100644
--- a/src/com/android/contacts/model/ContactLoader.java
+++ b/src/com/android/contacts/model/ContactLoader.java
@@ -37,13 +37,11 @@
 import android.provider.ContactsContract.RawContacts;
 import android.text.TextUtils;
 import android.util.Log;
-
 import com.android.contacts.GeoUtil;
 import com.android.contacts.GroupMetaDataLoader;
 import com.android.contacts.compat.CompatUtils;
 import com.android.contacts.group.GroupMetaData;
 import com.android.contacts.model.account.AccountType;
-import com.android.contacts.model.account.AccountTypeWithDataSet;
 import com.android.contacts.model.dataitem.DataItem;
 import com.android.contacts.model.dataitem.PhoneDataItem;
 import com.android.contacts.model.dataitem.PhotoDataItem;
@@ -51,17 +49,10 @@
 import com.android.contacts.util.ContactLoaderUtils;
 import com.android.contacts.util.DataStatus;
 import com.android.contacts.util.UriUtils;
-
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -70,9 +61,11 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
 
 /**
  * Loads a single Contact and all it constituent RawContacts.
@@ -187,9 +180,6 @@
                 Contacts.SEND_TO_VOICEMAIL,
                 Contacts.CUSTOM_RINGTONE,
                 Contacts.IS_USER_PROFILE,
-
-                Data.TIMES_USED,
-                Data.LAST_TIME_USED
         };
 
         static final String[] COLUMNS;
@@ -270,9 +260,7 @@
         public static final int CUSTOM_RINGTONE = 60;
         public static final int IS_USER_PROFILE = 61;
 
-        public static final int TIMES_USED = 62;
-        public static final int LAST_TIME_USED = 63;
-        public static final int CARRIER_PRESENCE = 64;
+        public static final int CARRIER_PRESENCE = 62;
     }
 
     /**
@@ -688,8 +676,6 @@
         cursorColumnToContentValues(cursor, cv, ContactQuery.MIMETYPE);
         cursorColumnToContentValues(cursor, cv, ContactQuery.GROUP_SOURCE_ID);
         cursorColumnToContentValues(cursor, cv, ContactQuery.CHAT_CAPABILITY);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.TIMES_USED);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.LAST_TIME_USED);
         if (CompatUtils.isMarshmallowCompatible()) {
             cursorColumnToContentValues(cursor, cv, ContactQuery.CARRIER_PRESENCE);
         }
diff --git a/src/com/android/contacts/model/dataitem/DataItem.java b/src/com/android/contacts/model/dataitem/DataItem.java
index 81450bc..267adcd 100644
--- a/src/com/android/contacts/model/dataitem/DataItem.java
+++ b/src/com/android/contacts/model/dataitem/DataItem.java
@@ -34,8 +34,6 @@
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.CommonDataKinds.Website;
 import android.provider.ContactsContract.Contacts.Data;
-import android.provider.ContactsContract.Contacts.Entity;
-
 import com.android.contacts.Collapser;
 import com.android.contacts.MoreContactUtils;
 import com.android.contacts.model.RawContactModifier;
@@ -189,14 +187,6 @@
         return mKind;
     }
 
-    public Integer getTimesUsed() {
-        return mContentValues.getAsInteger(Entity.TIMES_USED);
-    }
-
-    public Long getLastTimeUsed() {
-        return mContentValues.getAsLong(Entity.LAST_TIME_USED);
-    }
-
     @Override
     public void collapseWith(DataItem that) {
         DataKind thisKind = getDataKind();
@@ -226,15 +216,6 @@
         if (isPrimary() || that.isPrimary()) {
             mContentValues.put(Data.IS_PRIMARY, 1);
         }
-
-        // Add up the times used
-        mContentValues.put(Entity.TIMES_USED, (getTimesUsed() == null ? 0 : getTimesUsed()) +
-                (that.getTimesUsed() == null ? 0 : that.getTimesUsed()));
-
-        // Use the most recent time
-        mContentValues.put(Entity.LAST_TIME_USED,
-                Math.max(getLastTimeUsed() == null ? 0 : getLastTimeUsed(),
-                        that.getLastTimeUsed() == null ? 0 : that.getLastTimeUsed()));
     }
 
     @Override
diff --git a/src/com/android/contacts/quickcontact/Action.java b/src/com/android/contacts/quickcontact/Action.java
index 7d7e852..b4e7fb0 100644
--- a/src/com/android/contacts/quickcontact/Action.java
+++ b/src/com/android/contacts/quickcontact/Action.java
@@ -19,7 +19,6 @@
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-
 import com.android.contacts.Collapser;
 
 /**
@@ -64,14 +63,4 @@
 
     /** Returns the presence of this item or -1 if it was never set */
     public int getPresence();
-
-    /**
-     * Returns the number of times this action has been used.
-     */
-    public Integer getTimesUsed();
-
-    /**
-     * Returns the last time this action was used.
-     */
-    public Long getLastTimeUsed();
 }
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index a3f4869..ab3535b 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -28,7 +28,6 @@
 import android.telecom.PhoneAccount;
 import android.text.TextUtils;
 import android.util.Log;
-
 import com.android.contacts.CallUtil;
 import com.android.contacts.ContactsUtils;
 import com.android.contacts.MoreContactUtils;
@@ -56,8 +55,6 @@
     private final Context mContext;
     private final DataKind mKind;
     private final String mMimeType;
-    private final Integer mTimesUsed;
-    private final Long mLastTimeUsed;
 
     private CharSequence mBody;
     private CharSequence mSubtitle;
@@ -79,8 +76,6 @@
         mContext = context;
         mKind = kind;
         mMimeType = item.getMimeType();
-        mTimesUsed = item.getTimesUsed();
-        mLastTimeUsed = item.getLastTimeUsed();
 
         // Determine type for subtitle
         mSubtitle = "";
@@ -338,14 +333,4 @@
         }
         return true;
     }
-
-    @Override
-    public Integer getTimesUsed() {
-        return mTimesUsed;
-    }
-
-    @Override
-    public Long getLastTimeUsed() {
-        return mLastTimeUsed;
-    }
 }
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index de24d64..ebc5f39 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -70,7 +70,6 @@
 import android.provider.ContactsContract.CommonDataKinds.Website;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.DataUsageFeedback;
 import android.provider.ContactsContract.Directory;
 import android.provider.ContactsContract.DisplayNameSources;
 import android.provider.ContactsContract.Intents;
@@ -417,36 +416,6 @@
                 Toast.makeText(QuickContactActivity.this, R.string.missing_app,
                         Toast.LENGTH_SHORT).show();
             }
-
-            // Default to USAGE_TYPE_CALL. Usage is summed among all types for sorting each data id
-            // so the exact usage type is not necessary in all cases
-            String usageType = DataUsageFeedback.USAGE_TYPE_CALL;
-
-            final Uri intentUri = intent.getData();
-            if ((intentUri != null && intentUri.getScheme() != null &&
-                    intentUri.getScheme().equals(ContactsUtils.SCHEME_SMSTO)) ||
-                    (intent.getType() != null && intent.getType().equals(MIMETYPE_SMS))) {
-                usageType = DataUsageFeedback.USAGE_TYPE_SHORT_TEXT;
-            }
-
-            // Data IDs start at 1 so anything less is invalid
-            if (dataId > 0) {
-                final Uri dataUsageUri = DataUsageFeedback.FEEDBACK_URI.buildUpon()
-                        .appendPath(String.valueOf(dataId))
-                        .appendQueryParameter(DataUsageFeedback.USAGE_TYPE, usageType)
-                        .build();
-                try {
-                    final boolean successful = getContentResolver().update(
-                            dataUsageUri, new ContentValues(), null, null) > 0;
-                    if (!successful) {
-                        Log.w(TAG, "DataUsageFeedback increment failed");
-                    }
-                } catch (SecurityException ex) {
-                    Log.w(TAG, "DataUsageFeedback increment failed", ex);
-                }
-            } else {
-                Log.w(TAG, "Invalid Data ID");
-            }
         }
     };
 
@@ -584,7 +553,6 @@
      * Data items are compared to the same mimetype based off of three qualities:
      * 1. Super primary
      * 2. Primary
-     * 3. Times used
      */
     private final Comparator<DataItem> mWithinMimeTypeDataItemComparator =
             new Comparator<DataItem>() {
@@ -604,23 +572,15 @@
                 return -1;
             } else if (!lhs.isPrimary() && rhs.isPrimary()) {
                 return 1;
-            } else {
-                final int lhsTimesUsed =
-                        lhs.getTimesUsed() == null ? 0 : lhs.getTimesUsed();
-                final int rhsTimesUsed =
-                        rhs.getTimesUsed() == null ? 0 : rhs.getTimesUsed();
-
-                return rhsTimesUsed - lhsTimesUsed;
             }
+            return 0;
         }
     };
 
     /**
      * Sorts among different mimetypes based off:
      * 1. Whether one of the mimetypes is the prioritized mimetype
-     * 2. Number of times used
-     * 3. Last time used
-     * 4. Statically defined
+     * 2. Statically defined
      */
     private final Comparator<List<DataItem>> mAmongstMimeTypeDataItemComparator =
             new Comparator<List<DataItem>> () {
@@ -641,27 +601,7 @@
                 }
             }
 
-            // 2. Number of times used
-            final int lhsTimesUsed = lhs.getTimesUsed() == null ? 0 : lhs.getTimesUsed();
-            final int rhsTimesUsed = rhs.getTimesUsed() == null ? 0 : rhs.getTimesUsed();
-            final int timesUsedDifference = rhsTimesUsed - lhsTimesUsed;
-            if (timesUsedDifference != 0) {
-                return timesUsedDifference;
-            }
-
-            // 3. Last time used
-            final long lhsLastTimeUsed =
-                    lhs.getLastTimeUsed() == null ? 0 : lhs.getLastTimeUsed();
-            final long rhsLastTimeUsed =
-                    rhs.getLastTimeUsed() == null ? 0 : rhs.getLastTimeUsed();
-            final long lastTimeUsedDifference = rhsLastTimeUsed - lhsLastTimeUsed;
-            if (lastTimeUsedDifference > 0) {
-                return 1;
-            } else if (lastTimeUsedDifference < 0) {
-                return -1;
-            }
-
-            // 4. Resort to a statically defined mimetype order.
+            // 2. Resort to a statically defined mimetype order.
             if (!lhsMimeType.equals(rhsMimeType)) {
                 for (String mimeType : LEADING_MIMETYPES) {
                     if (lhsMimeType.equals(mimeType)) {
@@ -2565,13 +2505,6 @@
                     values.add(organization);
                 }
 
-                // Last time used and times used are aggregated values from the usage stat
-                // table. They need to be removed from data values so the SQL table can insert
-                // properly
-                for (ContentValues value : values) {
-                    value.remove(Data.LAST_TIME_USED);
-                    value.remove(Data.TIMES_USED);
-                }
                 intent.putExtra(Intents.Insert.DATA, values);
 
                 // If the contact can only export to the same account, add it to the intent.
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 9f3d5d5..dfc40a9 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -17,7 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.contacts.tests">
 
-    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="25" />
+    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
 
     <uses-permission android:name="android.permission.READ_CONTACTS" />
     <uses-permission android:name="android.permission.WRITE_CONTACTS" />
diff --git a/tests/src/com/android/contacts/model/ContactLoaderTest.java b/tests/src/com/android/contacts/model/ContactLoaderTest.java
index 91873e9..8aa078b 100644
--- a/tests/src/com/android/contacts/model/ContactLoaderTest.java
+++ b/tests/src/com/android/contacts/model/ContactLoaderTest.java
@@ -28,7 +28,6 @@
 import android.provider.ContactsContract.StatusUpdates;
 import android.test.LoaderTestCase;
 import android.test.suitebuilder.annotation.LargeTest;
-
 import com.android.contacts.compat.CompatUtils;
 import com.android.contacts.model.account.AccountType;
 import com.android.contacts.model.account.AccountWithDataSet;
@@ -38,14 +37,11 @@
 import com.android.contacts.test.mocks.MockContentProvider;
 import com.android.contacts.testing.InjectedServices;
 import com.android.contacts.util.Constants;
-
 import com.google.common.collect.Lists;
-
+import java.util.List;
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import java.util.List;
-
 /**
  * Runs ContactLoader tests for the the contact-detail and editor view.
  */
@@ -346,9 +342,6 @@
                     Contacts.SEND_TO_VOICEMAIL,
                     Contacts.CUSTOM_RINGTONE,
                     Contacts.IS_USER_PROFILE,
-
-                    Data.TIMES_USED,
-                    Data.LAST_TIME_USED
             };
 
             List<String> projectionList = Lists.newArrayList(COLUMNS_INTERNAL);
@@ -393,9 +386,6 @@
                     0,
                     null,
                     0,
-
-                    0,
-                    0
             };
 
             List<Object> rowsList = Lists.newArrayList(ROWS_INTERNAL);
diff --git a/tests/src/com/android/contacts/model/dataitem/DataItemTests.java b/tests/src/com/android/contacts/model/dataitem/DataItemTests.java
index 7b60beb..4b76d0c 100644
--- a/tests/src/com/android/contacts/model/dataitem/DataItemTests.java
+++ b/tests/src/com/android/contacts/model/dataitem/DataItemTests.java
@@ -29,15 +29,12 @@
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.CommonDataKinds.Website;
 import android.provider.ContactsContract.Contacts.Data;
-import android.provider.ContactsContract.Contacts.Entity;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
-
 import com.android.contacts.Collapser;
 import com.android.contacts.model.account.AccountType.EditType;
 import com.android.contacts.model.account.BaseAccountType;
 import com.android.contacts.model.account.GoogleAccountType;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -83,12 +80,6 @@
         mValues1.put(Data.IS_SUPER_PRIMARY, 1);
         mValues2.put(Data.IS_PRIMARY, 0);
 
-        mValues1.put(Entity.TIMES_USED, 5);
-        mValues2.put(Entity.TIMES_USED, 4);
-
-        mValues1.put(Entity.LAST_TIME_USED, 555);
-        mValues2.put(Entity.LAST_TIME_USED, 999);
-
         final DataKind kind = new DataKind("test.mimetype", 0, 0, false);
         kind.actionBody = new BaseAccountType.SimpleInflater(0);
         kind.typeList = new ArrayList<>();
@@ -104,8 +95,6 @@
         assertEquals(1, dataList.size());
         assertEquals(true, dataList.get(0).isSuperPrimary());
         assertEquals(true, dataList.get(0).isPrimary());
-        assertEquals(9, (int) dataList.get(0).getTimesUsed());
-        assertEquals(999L, (long) dataList.get(0).getLastTimeUsed());
         assertEquals(1, dataList.get(0).getKindTypeColumn(kind));
     }
 
