diff --git a/proguard.flags b/proguard.flags
index 9b950f8..f1e609b 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -10,19 +10,81 @@
 }
 
 # Feature highlight library.  See b/29877098
--keep class com.google.android.libraries.material.featurehighlight.** { *;}
+-keep class com.google.android.libraries.material.featurehighlight.** { *; }
 
 # Needed for tests
--keep class com.android.contacts.common.** { *;}
--keep class com.android.contacts.interactions.** { *;}
--keep class com.google.common.base.Objects { *;}
--keep class com.google.common.base.Preconditions { *;}
--keep class com.google.common.collect.ImmutableMap { *;}
--keep class com.google.common.collect.ImmutableSet { *;}
--keep class com.google.common.collect.Lists { *;}
--keep class com.google.common.collect.Maps { *;}
--keep class com.google.common.collect.Multimap { *;}
--keep class com.google.common.collect.Sets { *;}
+-keep class com.android.contacts.common.compat.CompatUtils { *; }
+-keep class com.android.contacts.common.Collapser { *; }
+-keep class com.android.contacts.common.ContactsUtils { *; }
+-keep class com.android.contacts.common.database.NoNullCursorAsyncQueryHandler { *; }
+-keep class com.android.contacts.common.format.FormatUtils { *; }
+-keep class com.android.contacts.common.format.TextHighlighter { *; }
+-keep class com.android.contacts.common.list.ContactListItemView { *; }
+-keep class com.android.contacts.common.list.ContactsSectionIndexer { *; }
+-keep class com.android.contacts.common.location.CountryDetector { *; }
+-keep class com.android.contacts.common.model.account.AccountType { *; }
+-keep class com.android.contacts.common.model.account.AccountType$* { *; }
+-keep class com.android.contacts.common.model.account.AccountTypeWithDataSet { *; }
+-keep class com.android.contacts.common.model.account.AccountWithDataSet { *; }
+-keep class com.android.contacts.common.model.account.BaseAccountType { *; }
+-keep class com.android.contacts.common.model.account.BaseAccountType$* { *; }
+-keep class com.android.contacts.common.model.account.ExchangeAccountType { *; }
+-keep class com.android.contacts.common.model.account.ExternalAccountType { *; }
+-keep class com.android.contacts.common.model.account.FallbackAccountType { *; }
+-keep class com.android.contacts.common.model.account.GoogleAccountType { *; }
+-keep class com.android.contacts.common.model.AccountTypeManager { *; }
+-keep class com.android.contacts.common.model.AccountTypeManagerImpl { *; }
+-keep class com.android.contacts.common.model.BuilderWrapper { *; }
+-keep class com.android.contacts.common.model.Contact { *; }
+-keep class com.android.contacts.common.model.ContactLoader { *; }
+-keep class com.android.contacts.common.model.CPOWrapper { *; }
+-keep class com.android.contacts.common.model.dataitem.DataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.DataKind { *; }
+-keep class com.android.contacts.common.model.dataitem.EmailDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.EventDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.ImDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.NicknameDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.NoteDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.OrganizationDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.PhoneDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.RelationDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.SipAddressDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.StructuredNameDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.StructuredPostalDataItem { *; }
+-keep class com.android.contacts.common.model.dataitem.WebsiteDataItem { *; }
+-keep class com.android.contacts.common.model.RawContact { *; }
+-keep class com.android.contacts.common.model.RawContactDelta { *; }
+-keep class com.android.contacts.common.model.RawContactDeltaList { *; }
+-keep class com.android.contacts.common.model.RawContactModifier { *; }
+-keep class com.android.contacts.common.model.ValuesDelta { *; }
+-keep class com.android.contacts.common.MoreContactUtils { *; }
+-keep class com.android.contacts.common.preference.ContactsPreferences { *; }
+-keep class com.android.contacts.common.testing.InjectedServices { *; }
+-keep class com.android.contacts.common.util.BitmapUtil { *; }
+-keep class com.android.contacts.common.util.ContactDisplayUtils { *; }
+-keep class com.android.contacts.common.util.DateUtils { *; }
+-keep class com.android.contacts.common.util.NameConverter { *; }
+-keep class com.android.contacts.common.util.SearchUtil { *; }
+-keep class com.android.contacts.common.util.SearchUtil$* { *; }
+-keep class com.android.contacts.ContactsApplication { *; }
+-keep class com.android.contacts.ContactSaveService { *; }
+-keep class com.android.contacts.ContactSaveService$* { *; }
+-keep class com.android.contacts.editor.ContactEditorUtils { *; }
+-keep class com.android.contacts.editor.EditorUiUtils { *; }
+-keep class com.android.contacts.group.GroupUtil { *; }
+-keep class com.android.contacts.interactions.CallLogInteraction { *; }
+-keep class com.android.contacts.interactions.CallLogInteractionsLoader { *; }
+-keep class com.android.contacts.interactions.ContactDeletionInteraction { *; }
+-keep class com.android.contacts.interactions.ContactInteractionUtil { *; }
+-keep class com.android.contacts.widget.CompositeListAdapter { *; }
+-keep class com.google.common.base.Objects { *; }
+-keep class com.google.common.base.Preconditions { *; }
+-keep class com.google.common.collect.ImmutableMap { *; }
+-keep class com.google.common.collect.ImmutableSet { *; }
+-keep class com.google.common.collect.Lists { *; }
+-keep class com.google.common.collect.Maps { *; }
+-keep class com.google.common.collect.Multimap { *; }
+-keep class com.google.common.collect.Sets { *; }
 
 # Any class or method annotated with NeededForTesting or NeededForReflection.
 -keep @com.android.contacts.common.testing.NeededForTesting class *
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 7a2dc3f..b34f384 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -60,7 +60,6 @@
 import com.android.contacts.common.model.RawContactDeltaList;
 import com.android.contacts.common.model.RawContactModifier;
 import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.common.util.PermissionsUtil;
 import com.android.contacts.compat.PinnedPositionsCompat;
 import com.android.contacts.util.ContactPhotoUtils;
@@ -1644,7 +1643,6 @@
         }
     }
 
-    @NeededForTesting
     public interface GroupsDao {
         Uri create(String title, AccountWithDataSet account);
         int delete(Uri groupUri);
@@ -1652,11 +1650,8 @@
         Uri undoDeletion(Bundle undoData);
     }
 
-    @NeededForTesting
     public static class GroupsDaoImpl implements GroupsDao {
-        @NeededForTesting
         public static final String KEY_GROUP_DATA = "groupData";
-        @NeededForTesting
         public static final String KEY_GROUP_MEMBERS = "groupMemberIds";
 
         private static final String TAG = "GroupsDao";
@@ -1672,7 +1667,6 @@
             this.contentResolver = contentResolver;
         }
 
-        @NeededForTesting
         public Bundle captureDeletionUndoData(Uri groupUri) {
             final long groupId = ContentUris.parseId(groupUri);
             final Bundle result = new Bundle();
@@ -1710,7 +1704,6 @@
             return result;
         }
 
-        @NeededForTesting
         public Uri undoDeletion(Bundle deletedGroupData) {
             final ContentValues groupData = deletedGroupData.getParcelable(KEY_GROUP_DATA);
             if (groupData == null) {
@@ -1738,7 +1731,6 @@
             return groupUri;
         }
 
-        @NeededForTesting
         public Uri create(String title, AccountWithDataSet account) {
             final ContentValues values = new ContentValues();
             values.put(Groups.TITLE, title);
@@ -1748,7 +1740,6 @@
             return contentResolver.insert(Groups.CONTENT_URI, values);
         }
 
-        @NeededForTesting
         public int delete(Uri groupUri) {
             return contentResolver.delete(groupUri, null, null);
         }
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index f8a1f20..6fa9df1 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -33,10 +33,8 @@
 import com.android.contacts.common.util.Constants;
 import com.android.contactsbind.analytics.AnalyticsUtil;
 
-import com.android.contacts.common.testing.NeededForTesting;
 import com.google.common.annotations.VisibleForTesting;
 
-@NeededForTesting
 public class ContactsApplication extends Application {
     private static final boolean ENABLE_LOADER_LOG = false; // Don't submit with true
     private static final boolean ENABLE_FRAGMENT_LOG = false; // Don't submit with true
diff --git a/src/com/android/contacts/common/ContactsUtils.java b/src/com/android/contacts/common/ContactsUtils.java
index 38fdbf2..0f8031c 100644
--- a/src/com/android/contacts/common/ContactsUtils.java
+++ b/src/com/android/contacts/common/ContactsUtils.java
@@ -29,7 +29,6 @@
 
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.model.dataitem.ImDataItem;
-import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.common.compat.ContactsCompat;
 import com.android.contacts.common.compat.DirectoryCompat;
 import com.android.contacts.common.model.AccountTypeManager;
@@ -122,7 +121,6 @@
     /**
      * Returns true if two objects are considered equal.  Two null references are equal here.
      */
-    @NeededForTesting
     public static boolean areObjectsEqual(Object a, Object b) {
         return a == b || (a != null && a.equals(b));
     }
diff --git a/src/com/android/contacts/common/location/CountryDetector.java b/src/com/android/contacts/common/location/CountryDetector.java
index 2d29a69..bceadc4 100644
--- a/src/com/android/contacts/common/location/CountryDetector.java
+++ b/src/com/android/contacts/common/location/CountryDetector.java
@@ -5,8 +5,6 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.android.contacts.common.testing.NeededForTesting;
-
 import java.util.Locale;
 
 /**
@@ -62,7 +60,6 @@
     /**
      * Factory method for {@link CountryDetector} that allows the caller to provide mock objects.
      */
-    @NeededForTesting
     public CountryDetector getInstanceForTest(Context context, TelephonyManager telephonyManager,
             LocaleProvider localeProvider) {
         return new CountryDetector(context, telephonyManager, localeProvider);
diff --git a/src/com/android/contacts/common/model/AccountTypeManager.java b/src/com/android/contacts/common/model/AccountTypeManager.java
index 3ef3502..aaf1476 100644
--- a/src/com/android/contacts/common/model/AccountTypeManager.java
+++ b/src/com/android/contacts/common/model/AccountTypeManager.java
@@ -52,7 +52,6 @@
 import com.android.contacts.common.model.account.GoogleAccountType;
 import com.android.contacts.common.model.account.SamsungAccountType;
 import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.common.util.Constants;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Objects;
@@ -101,7 +100,6 @@
      *
      * @param mockManager The mock AccountTypeManager.
      */
-    @NeededForTesting
     public static void setInstanceForTest(AccountTypeManager mockManager) {
         synchronized (mInitializationLock) {
             mAccountTypeManager = mockManager;
diff --git a/src/com/android/contacts/common/model/RawContactDelta.java b/src/com/android/contacts/common/model/RawContactDelta.java
index b8709c3..85b0930 100644
--- a/src/com/android/contacts/common/model/RawContactDelta.java
+++ b/src/com/android/contacts/common/model/RawContactDelta.java
@@ -35,7 +35,6 @@
 import com.android.contacts.common.model.CPOWrapper;
 import com.android.contacts.common.model.ValuesDelta;
 import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.testing.NeededForTesting;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
@@ -183,7 +182,6 @@
      *     doesn't exist (may be a primary, or just a random item
      * @return
      */
-    @NeededForTesting
     public ValuesDelta getSuperPrimaryEntry(String mimeType, boolean forceSelection) {
         final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType, false);
         if (mimeEntries == null) return null;
diff --git a/src/com/android/contacts/common/model/ValuesDelta.java b/src/com/android/contacts/common/model/ValuesDelta.java
index 9023709..844ba36 100644
--- a/src/com/android/contacts/common/model/ValuesDelta.java
+++ b/src/com/android/contacts/common/model/ValuesDelta.java
@@ -26,7 +26,6 @@
 
 import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.model.BuilderWrapper;
-import com.android.contacts.common.testing.NeededForTesting;
 import com.google.common.collect.Sets;
 
 import java.util.HashSet;
@@ -80,7 +79,6 @@
         return entry;
     }
 
-    @NeededForTesting
     public ContentValues getAfter() {
         return mAfter;
     }
diff --git a/src/com/android/contacts/common/model/account/BaseAccountType.java b/src/com/android/contacts/common/model/account/BaseAccountType.java
index 46c57d4..2f47c50 100644
--- a/src/com/android/contacts/common/model/account/BaseAccountType.java
+++ b/src/com/android/contacts/common/model/account/BaseAccountType.java
@@ -42,7 +42,6 @@
 import com.android.contacts.common.R;
 import com.android.contacts.common.model.dataitem.CustomDataItem;
 import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.common.util.CommonDateUtils;
 import com.android.contacts.common.util.ContactDisplayUtils;
 import com.google.common.collect.Lists;
@@ -501,7 +500,6 @@
                     + " mColumnName" + mColumnName;
         }
 
-        @NeededForTesting
         public String getColumnNameForTest() {
             return mColumnName;
         }
diff --git a/src/com/android/contacts/common/model/account/FallbackAccountType.java b/src/com/android/contacts/common/model/account/FallbackAccountType.java
index 42e6b6a..8a7b964 100644
--- a/src/com/android/contacts/common/model/account/FallbackAccountType.java
+++ b/src/com/android/contacts/common/model/account/FallbackAccountType.java
@@ -21,7 +21,6 @@
 
 import com.android.contacts.common.R;
 import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.testing.NeededForTesting;
 
 public class FallbackAccountType extends BaseAccountType {
     private static final String TAG = "FallbackAccountType";
@@ -67,7 +66,6 @@
      * In order to build {@link DataKind}s with the same resource package name,
      * {@code resPackageName} is injectable.
      */
-    @NeededForTesting
     static AccountType createWithPackageNameForTest(Context context, String resPackageName) {
         return new FallbackAccountType(context, resPackageName);
     }
diff --git a/src/com/android/contacts/common/testing/InjectedServices.java b/src/com/android/contacts/common/testing/InjectedServices.java
index e89cec7..3b90676 100644
--- a/src/com/android/contacts/common/testing/InjectedServices.java
+++ b/src/com/android/contacts/common/testing/InjectedServices.java
@@ -29,14 +29,12 @@
  * while running tests. Activities, Services and the Application should check
  * with this class to see if a particular service has been overridden.
  */
-@NeededForTesting
 public class InjectedServices {
 
     private ContentResolver mContentResolver;
     private SharedPreferences mSharedPreferences;
     private HashMap<String, Object> mSystemServices;
 
-    @NeededForTesting
     public void setContentResolver(ContentResolver contentResolver) {
         this.mContentResolver = contentResolver;
     }
@@ -45,7 +43,6 @@
         return mContentResolver;
     }
 
-    @NeededForTesting
     public void setSharedPreferences(SharedPreferences sharedPreferences) {
         this.mSharedPreferences = sharedPreferences;
     }
@@ -54,7 +51,6 @@
         return mSharedPreferences;
     }
 
-    @NeededForTesting
     public void setSystemService(String name, Object service) {
         if (mSystemServices == null) {
             mSystemServices = Maps.newHashMap();
diff --git a/src/com/android/contacts/common/testing/NeededForTesting.java b/src/com/android/contacts/common/testing/NeededForTesting.java
deleted file mode 100644
index f841d55..0000000
--- a/src/com/android/contacts/common/testing/NeededForTesting.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.testing;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Denotes that the class, constructor, method or field is used by tests and therefore cannot be
- * removed by tools like ProGuard.
- */
-@Retention(RetentionPolicy.CLASS)
-@Target({ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.FIELD})
-public @interface NeededForTesting {}
diff --git a/src/com/android/contacts/editor/ContactEditorUtils.java b/src/com/android/contacts/editor/ContactEditorUtils.java
index 4a06698..1b0da05 100644
--- a/src/com/android/contacts/editor/ContactEditorUtils.java
+++ b/src/com/android/contacts/editor/ContactEditorUtils.java
@@ -26,7 +26,6 @@
 import android.util.Log;
 
 import com.android.contacts.common.R;
-import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountWithDataSet;
@@ -41,7 +40,6 @@
 /**
  * Utility methods for the "account changed" notification in the new contact creation flow.
  */
-@NeededForTesting
 public class ContactEditorUtils {
     private static final String TAG = "ContactEditorUtils";
 
@@ -80,13 +78,11 @@
         return sInstance;
     }
 
-    @NeededForTesting
     void cleanupForTest() {
         mPrefs.edit().remove(mDefaultAccountKey).remove(KEY_KNOWN_ACCOUNTS)
                 .remove(mAnythingSavedKey).apply();
     }
 
-    @NeededForTesting
     void removeDefaultAccountForTest() {
         mPrefs.edit().remove(mDefaultAccountKey).apply();
     }
@@ -120,7 +116,6 @@
      * @param defaultAccount the account used to save a newly created contact.  Or pass {@code null}
      *     If the user selected "local only".
      */
-    @NeededForTesting
     public void saveDefaultAndAllAccounts(AccountWithDataSet defaultAccount) {
         final SharedPreferences.Editor editor = mPrefs.edit()
                 .putBoolean(mAnythingSavedKey, true);
@@ -213,7 +208,6 @@
      * {@link #getDefaultAccount} will return a valid account.  (Either an account which still
      * exists, or {@code null} which should be interpreted as "local only".)
      */
-    @NeededForTesting
     public boolean shouldShowAccountChangedNotification() {
         final List<AccountWithDataSet> currentWritableAccounts = getWritableAccounts();
 
diff --git a/src/com/android/contacts/editor/EditorUiUtils.java b/src/com/android/contacts/editor/EditorUiUtils.java
index 0a5c765..8772cbb 100644
--- a/src/com/android/contacts/editor/EditorUiUtils.java
+++ b/src/com/android/contacts/editor/EditorUiUtils.java
@@ -52,7 +52,6 @@
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.GoogleAccountType;
 import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
 import com.android.contacts.util.ContactPhotoUtils;
 import com.android.contacts.widget.QuickContactImageView;
@@ -65,7 +64,6 @@
 /**
  * Utility methods for creating contact editor.
  */
-@NeededForTesting
 public class EditorUiUtils {
 
     // Maps DataKind.mimeType to editor view layouts.
@@ -116,7 +114,6 @@
     /**
      * Returns the account name and account type labels to display for local accounts.
      */
-    @NeededForTesting
     public static Pair<String,String> getLocalAccountInfo(Context context,
             String accountName, AccountType accountType) {
         if (TextUtils.isEmpty(accountName)) {
@@ -133,7 +130,6 @@
     /**
      * Returns the account name and account type labels to display for the given account type.
      */
-    @NeededForTesting
     public static Pair<String,String> getAccountInfo(Context context, String accountName,
             AccountType accountType) {
         CharSequence accountTypeDisplayLabel = accountType.getDisplayLabel(context);
@@ -214,7 +210,6 @@
     /**
      * Returns a ringtone string based on the ringtone URI and version #.
      */
-    @NeededForTesting
     public static String getRingtoneStringFromUri(Uri pickedUri, int currentVersion) {
         if (isNewerThanM(currentVersion)) {
             if (pickedUri == null) return ""; // silent ringtone
@@ -227,7 +222,6 @@
     /**
      * Returns a ringtone URI, based on the string and version #.
      */
-    @NeededForTesting
     public static Uri getRingtoneUriFromString(String str, int currentVersion) {
         if (str != null) {
             if (isNewerThanM(currentVersion) && TextUtils.isEmpty(str)) return null;
diff --git a/src/com/android/contacts/group/GroupUtil.java b/src/com/android/contacts/group/GroupUtil.java
index b9a6425..d42100d 100644
--- a/src/com/android/contacts/group/GroupUtil.java
+++ b/src/com/android/contacts/group/GroupUtil.java
@@ -33,7 +33,6 @@
 import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.list.ContactsSectionIndexer;
 import com.android.contacts.common.model.account.GoogleAccountType;
-import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.list.UiIntentActions;
 import com.google.common.base.Objects;
 
@@ -46,7 +45,6 @@
 /**
  * Group utility methods.
  */
-@NeededForTesting
 public final class GroupUtil {
 
     // System IDs of FFC groups in Google accounts
@@ -167,7 +165,6 @@
      * number of remaining elements in cursor. If count is more than what's in the indexer now,
      * then we don't need to trim.
      */
-    @NeededForTesting
     public static boolean needTrimming(int count, int[] counts, int[] positions) {
         // The sum of the last element in counts[] and the last element in positions[] is
         // the total number of remaining elements in cursor. If mCount is more than
@@ -179,7 +176,6 @@
     /**
      * Update Bundle extras so as to update indexer.
      */
-    @NeededForTesting
     public static void updateBundle(Bundle bundle, ContactsSectionIndexer indexer,
             List<Integer> subscripts, String[] sections, int[] counts) {
         for (int i : subscripts) {
@@ -293,4 +289,4 @@
                     && cursor.getInt(summaryCount) <= 0;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/contacts/interactions/ContactInteractionUtil.java b/src/com/android/contacts/interactions/ContactInteractionUtil.java
index b2bda5d..8de55da 100644
--- a/src/com/android/contacts/interactions/ContactInteractionUtil.java
+++ b/src/com/android/contacts/interactions/ContactInteractionUtil.java
@@ -20,8 +20,6 @@
 import android.content.Context;
 import android.text.format.DateUtils;
 
-import com.android.contacts.common.testing.NeededForTesting;
-
 import java.text.DateFormat;
 
 import java.util.Calendar;
@@ -36,7 +34,6 @@
     /**
      * @return a string like (?,?,?...) with {@param count} question marks.
      */
-    @NeededForTesting
     public static String questionMarks(int count) {
         Preconditions.checkArgument(count > 0);
         StringBuilder sb = new StringBuilder("(?");
@@ -50,7 +47,6 @@
      * Same as {@link formatDateStringFromTimestamp(long, Context, Calendar)} but uses the current
      * time.
      */
-    @NeededForTesting
     public static String formatDateStringFromTimestamp(long timestamp, Context context) {
         return formatDateStringFromTimestamp(timestamp, context, Calendar.getInstance());
     }
@@ -62,7 +58,6 @@
      * 1. If the timestamp is today, the time is shown
      * 2. Otherwise show full date and time
      */
-    @NeededForTesting
     public static String formatDateStringFromTimestamp(long timestamp, Context context,
             Calendar compareCalendar) {
         Calendar interactionCalendar = Calendar.getInstance();
@@ -91,7 +86,6 @@
      * Takes duration of the call in seconds.
      * Return the formatted duration in hr, min, sec order if they exist.
      */
-    @NeededForTesting
     public static String formatDuration(long callDuration, Context context) {
         final int hours = (int) callDuration / 3600;
         final int minutes = (int) (callDuration % 3600) / 60;
diff --git a/src/com/android/contacts/interactions/TestLoaderManagerBase.java b/src/com/android/contacts/interactions/TestLoaderManagerBase.java
index 92ae3b9..920df41 100644
--- a/src/com/android/contacts/interactions/TestLoaderManagerBase.java
+++ b/src/com/android/contacts/interactions/TestLoaderManagerBase.java
@@ -18,6 +18,8 @@
 
 import android.app.LoaderManager;
 
+import com.google.common.annotations.VisibleForTesting;
+
 /**
  * A {@link LoaderManager} that records which loaders have been completed.
  * <p>
@@ -71,6 +73,7 @@
  *   }
  * </pre>
  */
+@VisibleForTesting
 abstract class TestLoaderManagerBase extends LoaderManager {
 
     /**
@@ -84,6 +87,7 @@
      * It can not be set to null. Once set, it cannot be changed (but it allows setting it to the
      * same value again).
      */
+    @VisibleForTesting
     public abstract void setDelegate(LoaderManager delegate);
 
 }
diff --git a/src/com/android/contacts/widget/CompositeListAdapter.java b/src/com/android/contacts/widget/CompositeListAdapter.java
index 4c72ee8..44ff291 100644
--- a/src/com/android/contacts/widget/CompositeListAdapter.java
+++ b/src/com/android/contacts/widget/CompositeListAdapter.java
@@ -21,18 +21,13 @@
 import android.widget.BaseAdapter;
 import android.widget.ListAdapter;
 
-import com.android.contacts.common.testing.NeededForTesting;
 import com.google.common.annotations.VisibleForTesting;
 
 /**
  * A general purpose adapter that is composed of multiple sub-adapters. It just
  * appends them in the order they are added. It listens to changes from all
  * sub-adapters and propagates them to its own listeners.
- *
- * This class not used for now -- but let's keep running the test in case we want to revive it...
- * (So NeededForTesting)
  */
-@NeededForTesting
 public class CompositeListAdapter extends BaseAdapter {
 
     private static final int INITIAL_CAPACITY = 2;
