Replace @NeededForTesting w/ proguard keep flags (1/2)

* Replace -keep of entire c.a.c.common package
  with individual classes
* Remove all use of @NeededForTesting annotations
  (and the file itself since @VisibleForTesting
  accomplishes the same thing)

Test: Ran user build ContactsTests on Nexus 5 MOB30H

Bug: 30976481

Change-Id: I8d9a4d6b3409a159a108b39c1c4837a19e2325ca
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;