diff --git a/src/com/android/contacts/common/activity/TransactionSafeActivity.java b/src/com/android/contacts/common/activity/TransactionSafeActivity.java
index 6b50108..6c2e4fe 100644
--- a/src/com/android/contacts/common/activity/TransactionSafeActivity.java
+++ b/src/com/android/contacts/common/activity/TransactionSafeActivity.java
@@ -16,8 +16,6 @@
 
 package com.android.contacts.common.activity;
 
-import com.android.contacts.commonbind.analytics.AnalyticsActivity;
-
 import android.app.Activity;
 import android.os.Bundle;
 
@@ -25,7 +23,7 @@
  * A common superclass that keeps track of whether an {@link Activity} has saved its state yet or
  * not.
  */
-public abstract class TransactionSafeActivity extends AnalyticsActivity {
+public abstract class TransactionSafeActivity extends Activity {
 
     private boolean mIsSafeToCommitTransactions;
 
diff --git a/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java b/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java
index 44bdd95..2cfd36e 100644
--- a/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java
+++ b/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java
@@ -18,6 +18,7 @@
 
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.app.DialogFragment;
 import android.app.FragmentManager;
 import android.content.ContentResolver;
 import android.content.DialogInterface;
@@ -27,12 +28,11 @@
 import android.provider.ContactsContract;
 
 import com.android.contacts.common.R;
-import com.android.contacts.commonbind.analytics.AnalyticsDialogFragment;
 
 /**
  * Dialog that clears the frequently contacted list after confirming with the user.
  */
-public class ClearFrequentsDialog extends AnalyticsDialogFragment {
+public class ClearFrequentsDialog extends DialogFragment {
     /** Preferred way to show this dialog */
     public static void show(FragmentManager fragmentManager) {
         ClearFrequentsDialog dialog = new ClearFrequentsDialog();
diff --git a/src/com/android/contacts/common/dialog/IndeterminateProgressDialog.java b/src/com/android/contacts/common/dialog/IndeterminateProgressDialog.java
index c26d6b4..2fe059f 100644
--- a/src/com/android/contacts/common/dialog/IndeterminateProgressDialog.java
+++ b/src/com/android/contacts/common/dialog/IndeterminateProgressDialog.java
@@ -16,9 +16,8 @@
 
 package com.android.contacts.common.dialog;
 
-import com.android.contacts.commonbind.analytics.AnalyticsDialogFragment;
-
 import android.app.Dialog;
+import android.app.DialogFragment;
 import android.app.FragmentManager;
 import android.app.ProgressDialog;
 import android.content.DialogInterface;
@@ -42,7 +41,7 @@
  * after a device orientation change because the {@link #setRetainInstance(boolean)} is called
  * internally with true.
  */
-public class IndeterminateProgressDialog extends AnalyticsDialogFragment {
+public class IndeterminateProgressDialog extends DialogFragment {
     private static final String TAG = IndeterminateProgressDialog.class.getSimpleName();
 
     private CharSequence mTitle;
diff --git a/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java b/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
index 133b0db..c2ebbbf 100644
--- a/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
+++ b/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
@@ -18,6 +18,7 @@
 
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.app.DialogFragment;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.content.DialogInterface;
@@ -26,14 +27,13 @@
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.util.AccountsListAdapter;
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.commonbind.analytics.AnalyticsDialogFragment;
 
 /**
  * Shows a dialog asking the user which account to chose.
  *
  * The result is passed to {@code targetFragment} passed to {@link #show}.
  */
-public final class SelectAccountDialogFragment extends AnalyticsDialogFragment {
+public final class SelectAccountDialogFragment extends DialogFragment {
     public static final String TAG = "SelectAccountDialogFragment";
 
     private static final String KEY_TITLE_RES_ID = "title_res_id";
diff --git a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
index 6bfd42a..437d855 100644
--- a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
+++ b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
@@ -19,6 +19,7 @@
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.app.DialogFragment;
 import android.app.FragmentManager;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -48,7 +49,7 @@
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
 import com.android.contacts.common.vcard.ExportVCardActivity;
 import com.android.contacts.common.vcard.VCardCommonArguments;
-import com.android.contacts.commonbind.analytics.AnalyticsDialogFragment;
+import com.android.contacts.commonbind.analytics.AnalyticsUtil;
 
 import java.util.Collections;
 import java.util.List;
@@ -56,7 +57,7 @@
 /**
  * An dialog invoked to import/export contacts.
  */
-public class ImportExportDialogFragment extends AnalyticsDialogFragment
+public class ImportExportDialogFragment extends DialogFragment
         implements SelectAccountDialogFragment.Listener {
     public static final String TAG = "ImportExportDialogFragment";
 
@@ -82,7 +83,7 @@
     @Override
     public void onAttach(Activity activity) {
         super.onAttach(activity);
-        sendScreenView();
+        AnalyticsUtil.sendScreenView(this);
     }
 
     @Override
diff --git a/src/com/android/contacts/common/list/AccountFilterActivity.java b/src/com/android/contacts/common/list/AccountFilterActivity.java
index 91bffba..58450c6 100644
--- a/src/com/android/contacts/common/list/AccountFilterActivity.java
+++ b/src/com/android/contacts/common/list/AccountFilterActivity.java
@@ -38,8 +38,6 @@
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.commonbind.analytics.AnalyticsActivity;
-
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
@@ -49,8 +47,7 @@
  * Shows a list of all available accounts, letting the user select under which account to view
  * contacts.
  */
-public class AccountFilterActivity extends AnalyticsActivity
-        implements AdapterView.OnItemClickListener {
+public class AccountFilterActivity extends Activity implements AdapterView.OnItemClickListener {
 
     private static final String TAG = AccountFilterActivity.class.getSimpleName();
 
diff --git a/src/com/android/contacts/common/list/ContactEntryListFragment.java b/src/com/android/contacts/common/list/ContactEntryListFragment.java
index e9ab15d..c38e969 100644
--- a/src/com/android/contacts/common/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/common/list/ContactEntryListFragment.java
@@ -17,6 +17,7 @@
 package com.android.contacts.common.list;
 
 import android.app.Activity;
+import android.app.Fragment;
 import android.app.LoaderManager;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Context;
@@ -47,7 +48,6 @@
 import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.common.util.ContactListViewUtils;
-import com.android.contacts.commonbind.analytics.AnalyticsFragment;
 
 import java.util.Locale;
 
@@ -55,7 +55,7 @@
  * Common base class for various contact-related list fragments.
  */
 public abstract class ContactEntryListFragment<T extends ContactEntryListAdapter>
-        extends AnalyticsFragment
+        extends Fragment
         implements OnItemClickListener, OnScrollListener, OnFocusChangeListener, OnTouchListener,
                 LoaderCallbacks<Cursor> {
     private static final String TAG = "ContactEntryListFragment";
diff --git a/src/com/android/contacts/common/list/CustomContactListFilterActivity.java b/src/com/android/contacts/common/list/CustomContactListFilterActivity.java
index 2a0a46c..feb7df2 100644
--- a/src/com/android/contacts/common/list/CustomContactListFilterActivity.java
+++ b/src/com/android/contacts/common/list/CustomContactListFilterActivity.java
@@ -62,8 +62,6 @@
 import com.android.contacts.common.util.EmptyService;
 import com.android.contacts.common.util.LocalizedNameResolver;
 import com.android.contacts.common.util.WeakAsyncTask;
-import com.android.contacts.commonbind.analytics.AnalyticsActivity;
-
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
@@ -75,7 +73,7 @@
  * Shows a list of all available {@link Groups} available, letting the user
  * select which ones they want to be visible.
  */
-public class CustomContactListFilterActivity extends AnalyticsActivity
+public class CustomContactListFilterActivity extends Activity
         implements View.OnClickListener, ExpandableListView.OnChildClickListener,
         LoaderCallbacks<CustomContactListFilterActivity.AccountSet>
 {
diff --git a/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
index 47cce8b..968f8db 100644
--- a/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
@@ -15,7 +15,6 @@
  */
 package com.android.contacts.common.list;
 
-import android.content.CursorLoader;
 import android.content.Intent;
 import android.content.Loader;
 import android.database.Cursor;
diff --git a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
index 7f0850c..e49f38a 100644
--- a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
+++ b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
@@ -17,14 +17,14 @@
 package com.android.contacts.common.preference;
 
 import android.os.Bundle;
+import android.preference.PreferenceFragment;
 
 import com.android.contacts.common.R;
-import com.android.contacts.commonbind.analytics.AnalyticsPreferenceFragment;
 
 /**
  * This fragment shows the preferences for the first header.
  */
-public class DisplayOptionsPreferenceFragment extends AnalyticsPreferenceFragment {
+public class DisplayOptionsPreferenceFragment extends PreferenceFragment {
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
diff --git a/src/com/android/contacts/common/vcard/CancelActivity.java b/src/com/android/contacts/common/vcard/CancelActivity.java
index 86bfd55..20869f7 100644
--- a/src/com/android/contacts/common/vcard/CancelActivity.java
+++ b/src/com/android/contacts/common/vcard/CancelActivity.java
@@ -15,6 +15,7 @@
  */
 package com.android.contacts.common.vcard;
 
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.ComponentName;
@@ -28,12 +29,11 @@
 import android.util.Log;
 
 import com.android.contacts.common.R;
-import com.android.contacts.commonbind.analytics.AnalyticsActivity;
 
 /**
  * The Activity for canceling vCard import/export.
  */
-public class CancelActivity extends AnalyticsActivity implements ServiceConnection {
+public class CancelActivity extends Activity implements ServiceConnection {
     private final String LOG_TAG = "VCardCancel";
 
     /* package */ final static String JOB_ID = "job_id";
diff --git a/src/com/android/contacts/common/vcard/ExportVCardActivity.java b/src/com/android/contacts/common/vcard/ExportVCardActivity.java
index f508cd3..008beb6 100644
--- a/src/com/android/contacts/common/vcard/ExportVCardActivity.java
+++ b/src/com/android/contacts/common/vcard/ExportVCardActivity.java
@@ -15,6 +15,7 @@
  */
 package com.android.contacts.common.vcard;
 
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.ComponentName;
@@ -35,7 +36,6 @@
 import android.util.Log;
 
 import com.android.contacts.common.R;
-import com.android.contacts.commonbind.analytics.AnalyticsActivity;
 
 import java.io.File;
 
@@ -46,7 +46,7 @@
  * a user. After the user's confirmation, it send export request with the file name, assuming the
  * file name is not reserved yet.
  */
-public class ExportVCardActivity extends AnalyticsActivity implements ServiceConnection,
+public class ExportVCardActivity extends Activity implements ServiceConnection,
         DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
     private static final String LOG_TAG = "VCardExport";
     private static final boolean DEBUG = VCardService.DEBUG;
diff --git a/src/com/android/contacts/common/vcard/ImportVCardActivity.java b/src/com/android/contacts/common/vcard/ImportVCardActivity.java
index ca7e39a..62e8431 100644
--- a/src/com/android/contacts/common/vcard/ImportVCardActivity.java
+++ b/src/com/android/contacts/common/vcard/ImportVCardActivity.java
@@ -48,7 +48,7 @@
 import com.android.contacts.common.R;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.commonbind.analytics.AnalyticsActivity;
+import com.android.contacts.common.util.AccountSelectionUtil;
 import com.android.vcard.VCardEntryCounter;
 import com.android.vcard.VCardParser;
 import com.android.vcard.VCardParser_V21;
@@ -85,7 +85,7 @@
  * any Dialog in the instance. So this code is careless about the management around managed
  * dialogs stuffs (like how onCreateDialog() is used).
  */
-public class ImportVCardActivity extends AnalyticsActivity {
+public class ImportVCardActivity extends Activity {
     private static final String LOG_TAG = "VCardImport";
 
     private static final int SELECT_ACCOUNT = 0;
diff --git a/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java b/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
index dca9046..96f224a 100644
--- a/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
+++ b/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts.common.vcard;
 
+import android.app.Activity;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -33,7 +34,6 @@
 import com.android.contacts.common.R;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.commonbind.analytics.AnalyticsActivity;
 import com.android.vcard.VCardEntry;
 import com.android.vcard.VCardEntryCounter;
 import com.android.vcard.VCardParser;
@@ -49,7 +49,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class NfcImportVCardActivity extends AnalyticsActivity implements ServiceConnection,
+public class NfcImportVCardActivity extends Activity implements ServiceConnection,
         VCardImportExportListener {
     private static final String TAG = "NfcImportVCardActivity";
 
diff --git a/src/com/android/contacts/common/vcard/SelectAccountActivity.java b/src/com/android/contacts/common/vcard/SelectAccountActivity.java
index 851ae4d..d05810d 100644
--- a/src/com/android/contacts/common/vcard/SelectAccountActivity.java
+++ b/src/com/android/contacts/common/vcard/SelectAccountActivity.java
@@ -15,6 +15,7 @@
  */
 package com.android.contacts.common.vcard;
 
+import android.app.Activity;
 import android.app.Dialog;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -25,11 +26,10 @@
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.util.AccountSelectionUtil;
-import com.android.contacts.commonbind.analytics.AnalyticsActivity;
 
 import java.util.List;
 
-public class SelectAccountActivity extends AnalyticsActivity {
+public class SelectAccountActivity extends Activity {
     private static final String LOG_TAG = "SelectAccountActivity";
 
     public static final String ACCOUNT_NAME = "account_name";
diff --git a/src/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java b/src/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
index c0bbcce..0dbe70a 100644
--- a/src/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
+++ b/src/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
@@ -20,6 +20,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.app.DialogFragment;
 import android.app.FragmentManager;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -37,7 +38,6 @@
 import android.widget.TextView;
 
 import com.android.contacts.common.R;
-import com.android.contacts.commonbind.analytics.AnalyticsDialogFragment;
 
 import java.util.List;
 
@@ -45,7 +45,7 @@
  * Dialog that allows the user to select a phone accounts for a given action. Optionally provides
  * the choice to set the phone account as default.
  */
-public class SelectPhoneAccountDialogFragment extends AnalyticsDialogFragment {
+public class SelectPhoneAccountDialogFragment extends DialogFragment {
     private boolean mCanSetDefault;
     private List<PhoneAccountHandle> mAccountHandles;
     private boolean mIsSelected;
diff --git a/src/com/android/contacts/commonbind/analytics/AnalyticsActivity.java b/src/com/android/contacts/commonbind/analytics/AnalyticsActivity.java
deleted file mode 100644
index 5427bec..0000000
--- a/src/com/android/contacts/commonbind/analytics/AnalyticsActivity.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2014 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.commonbind.analytics;
-
-import android.app.Activity;
-
-public abstract class AnalyticsActivity extends Activity implements AnalyticsInterface {
-    @Override
-    public void sendHitEvent(String categoryId, String actionId, String labelId) {
-    }
-
-    @Override
-    public void sendScreenView() {
-    }
-}
diff --git a/src/com/android/contacts/commonbind/analytics/AnalyticsDialogFragment.java b/src/com/android/contacts/commonbind/analytics/AnalyticsDialogFragment.java
deleted file mode 100644
index 4409201..0000000
--- a/src/com/android/contacts/commonbind/analytics/AnalyticsDialogFragment.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2014 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.commonbind.analytics;
-
-import android.app.DialogFragment;
-
-public abstract class AnalyticsDialogFragment extends DialogFragment implements AnalyticsInterface {
-    @Override
-    public void sendHitEvent(String categoryId, String actionId, String labelId) {
-    }
-
-    @Override
-    public void sendScreenView() {
-    }
-}
diff --git a/src/com/android/contacts/commonbind/analytics/AnalyticsFragment.java b/src/com/android/contacts/commonbind/analytics/AnalyticsFragment.java
deleted file mode 100644
index ebe2903..0000000
--- a/src/com/android/contacts/commonbind/analytics/AnalyticsFragment.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2014 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.commonbind.analytics;
-
-import android.app.Fragment;
-
-public abstract class AnalyticsFragment extends Fragment implements AnalyticsInterface {
-    @Override
-    public void sendHitEvent(String categoryId, String actionId, String labelId) {
-    }
-
-    @Override
-    public void sendScreenView() {
-    }
-}
diff --git a/src/com/android/contacts/commonbind/analytics/AnalyticsInterface.java b/src/com/android/contacts/commonbind/analytics/AnalyticsInterface.java
deleted file mode 100644
index f003d67..0000000
--- a/src/com/android/contacts/commonbind/analytics/AnalyticsInterface.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2014 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.commonbind.analytics;
-
-public interface AnalyticsInterface {
-    void sendHitEvent(String categoryId, String actionId, String labelId);
-
-    void sendScreenView();
-}
diff --git a/src/com/android/contacts/commonbind/analytics/AnalyticsListFragment.java b/src/com/android/contacts/commonbind/analytics/AnalyticsListFragment.java
deleted file mode 100644
index 38840ef..0000000
--- a/src/com/android/contacts/commonbind/analytics/AnalyticsListFragment.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2014 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.commonbind.analytics;
-
-import android.app.ListFragment;
-
-public abstract class AnalyticsListFragment extends ListFragment implements
-        AnalyticsInterface {
-    @Override
-    public void sendHitEvent(String categoryId, String actionId, String labelId) {
-    }
-
-    @Override
-    public void sendScreenView() {
-    }
-}
diff --git a/src/com/android/contacts/commonbind/analytics/AnalyticsPreferenceActivity.java b/src/com/android/contacts/commonbind/analytics/AnalyticsPreferenceActivity.java
deleted file mode 100644
index 9f3ac98..0000000
--- a/src/com/android/contacts/commonbind/analytics/AnalyticsPreferenceActivity.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2014 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.commonbind.analytics;
-
-import android.preference.PreferenceActivity;
-
-public abstract class AnalyticsPreferenceActivity extends PreferenceActivity
-        implements AnalyticsInterface {
-    @Override
-    public void sendHitEvent(String categoryId, String actionId, String labelId) {
-    }
-
-    @Override
-    public void sendScreenView() {
-    }
-}
diff --git a/src/com/android/contacts/commonbind/analytics/AnalyticsPreferenceFragment.java b/src/com/android/contacts/commonbind/analytics/AnalyticsPreferenceFragment.java
deleted file mode 100644
index 827f469..0000000
--- a/src/com/android/contacts/commonbind/analytics/AnalyticsPreferenceFragment.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2014 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.commonbind.analytics;
-
-import android.preference.PreferenceFragment;
-
-public abstract class AnalyticsPreferenceFragment extends PreferenceFragment
-        implements AnalyticsInterface {
-    @Override
-    public void sendHitEvent(String categoryId, String actionId, String labelId) {
-    }
-
-    @Override
-    public void sendScreenView() {
-    }
-}
diff --git a/src/com/android/contacts/commonbind/analytics/AnalyticsUtil.java b/src/com/android/contacts/commonbind/analytics/AnalyticsUtil.java
new file mode 100644
index 0000000..251b7f9
--- /dev/null
+++ b/src/com/android/contacts/commonbind/analytics/AnalyticsUtil.java
@@ -0,0 +1,17 @@
+package com.android.contacts.commonbind.analytics;
+
+import android.app.Application;
+import android.app.Fragment;
+
+public class AnalyticsUtil {
+
+    /**
+     * Initialize this class and setup automatic activity tracking.
+     */
+    public static void initialize(Application application) { }
+
+    /**
+     * Log a screen view for {@param fragment}.
+     */
+    public static void sendScreenView(Fragment fragment) { }
+}
\ No newline at end of file
