Use analytics activities and fragments

All ContactsCommon's activities and fragments now inherit from
analytics base classes.

Also renamed dialerbind.analytics -> commonbind.analytics

Analytics CL #1/6

Bug: 18039620
Change-Id: Ie9cef92bfcadf6764970d70474ced24dba7f828d
diff --git a/src/com/android/contacts/common/activity/TransactionSafeActivity.java b/src/com/android/contacts/common/activity/TransactionSafeActivity.java
index 6c2e4fe..6b50108 100644
--- a/src/com/android/contacts/common/activity/TransactionSafeActivity.java
+++ b/src/com/android/contacts/common/activity/TransactionSafeActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.contacts.common.activity;
 
+import com.android.contacts.commonbind.analytics.AnalyticsActivity;
+
 import android.app.Activity;
 import android.os.Bundle;
 
@@ -23,7 +25,7 @@
  * A common superclass that keeps track of whether an {@link Activity} has saved its state yet or
  * not.
  */
-public abstract class TransactionSafeActivity extends Activity {
+public abstract class TransactionSafeActivity extends AnalyticsActivity {
 
     private boolean mIsSafeToCommitTransactions;
 
diff --git a/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java b/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java
index 2cfd36e..44bdd95 100644
--- a/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java
+++ b/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java
@@ -18,7 +18,6 @@
 
 import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.app.FragmentManager;
 import android.content.ContentResolver;
 import android.content.DialogInterface;
@@ -28,11 +27,12 @@
 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 DialogFragment {
+public class ClearFrequentsDialog extends AnalyticsDialogFragment {
     /** 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 2fe059f..c26d6b4 100644
--- a/src/com/android/contacts/common/dialog/IndeterminateProgressDialog.java
+++ b/src/com/android/contacts/common/dialog/IndeterminateProgressDialog.java
@@ -16,8 +16,9 @@
 
 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;
@@ -41,7 +42,7 @@
  * after a device orientation change because the {@link #setRetainInstance(boolean)} is called
  * internally with true.
  */
-public class IndeterminateProgressDialog extends DialogFragment {
+public class IndeterminateProgressDialog extends AnalyticsDialogFragment {
     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 c2ebbbf..133b0db 100644
--- a/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
+++ b/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
@@ -18,7 +18,6 @@
 
 import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.content.DialogInterface;
@@ -27,13 +26,14 @@
 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 DialogFragment {
+public final class SelectAccountDialogFragment extends AnalyticsDialogFragment {
     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 99b8df5..6bfd42a 100644
--- a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
+++ b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
@@ -48,7 +48,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.dialerbind.analytics.AnalyticsDialogFragment;
+import com.android.contacts.commonbind.analytics.AnalyticsDialogFragment;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/src/com/android/contacts/common/list/AccountFilterActivity.java b/src/com/android/contacts/common/list/AccountFilterActivity.java
index 58450c6..91bffba 100644
--- a/src/com/android/contacts/common/list/AccountFilterActivity.java
+++ b/src/com/android/contacts/common/list/AccountFilterActivity.java
@@ -38,6 +38,8 @@
 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;
@@ -47,7 +49,8 @@
  * Shows a list of all available accounts, letting the user select under which account to view
  * contacts.
  */
-public class AccountFilterActivity extends Activity implements AdapterView.OnItemClickListener {
+public class AccountFilterActivity extends AnalyticsActivity
+        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 62515e2..e9ab15d 100644
--- a/src/com/android/contacts/common/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/common/list/ContactEntryListFragment.java
@@ -23,7 +23,6 @@
 import android.content.CursorLoader;
 import android.content.Intent;
 import android.content.Loader;
-import android.content.res.Resources;
 import android.database.Cursor;
 import android.os.Bundle;
 import android.os.Handler;
@@ -45,12 +44,10 @@
 import android.widget.ListView;
 
 import com.android.common.widget.CompositeCursorAdapter.Partition;
-import com.android.contacts.common.R;
 import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.common.util.ContactListViewUtils;
-import com.android.contacts.common.util.SchedulingUtils;
-import com.android.dialerbind.analytics.AnalyticsFragment;
+import com.android.contacts.commonbind.analytics.AnalyticsFragment;
 
 import java.util.Locale;
 
diff --git a/src/com/android/contacts/common/list/CustomContactListFilterActivity.java b/src/com/android/contacts/common/list/CustomContactListFilterActivity.java
index feb7df2..2a0a46c 100644
--- a/src/com/android/contacts/common/list/CustomContactListFilterActivity.java
+++ b/src/com/android/contacts/common/list/CustomContactListFilterActivity.java
@@ -62,6 +62,8 @@
 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;
@@ -73,7 +75,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 Activity
+public class CustomContactListFilterActivity extends AnalyticsActivity
         implements View.OnClickListener, ExpandableListView.OnChildClickListener,
         LoaderCallbacks<CustomContactListFilterActivity.AccountSet>
 {
diff --git a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
index e49f38a..7f0850c 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 PreferenceFragment {
+public class DisplayOptionsPreferenceFragment extends AnalyticsPreferenceFragment {
 
     @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 20869f7..86bfd55 100644
--- a/src/com/android/contacts/common/vcard/CancelActivity.java
+++ b/src/com/android/contacts/common/vcard/CancelActivity.java
@@ -15,7 +15,6 @@
  */
 package com.android.contacts.common.vcard;
 
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.ComponentName;
@@ -29,11 +28,12 @@
 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 Activity implements ServiceConnection {
+public class CancelActivity extends AnalyticsActivity 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 008beb6..f508cd3 100644
--- a/src/com/android/contacts/common/vcard/ExportVCardActivity.java
+++ b/src/com/android/contacts/common/vcard/ExportVCardActivity.java
@@ -15,7 +15,6 @@
  */
 package com.android.contacts.common.vcard;
 
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.ComponentName;
@@ -36,6 +35,7 @@
 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 Activity implements ServiceConnection,
+public class ExportVCardActivity extends AnalyticsActivity 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 62e8431..ca7e39a 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.common.util.AccountSelectionUtil;
+import com.android.contacts.commonbind.analytics.AnalyticsActivity;
 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 Activity {
+public class ImportVCardActivity extends AnalyticsActivity {
     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 96f224a..dca9046 100644
--- a/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
+++ b/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
@@ -16,7 +16,6 @@
 
 package com.android.contacts.common.vcard;
 
-import android.app.Activity;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -34,6 +33,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.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 Activity implements ServiceConnection,
+public class NfcImportVCardActivity extends AnalyticsActivity 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 d05810d..851ae4d 100644
--- a/src/com/android/contacts/common/vcard/SelectAccountActivity.java
+++ b/src/com/android/contacts/common/vcard/SelectAccountActivity.java
@@ -15,7 +15,6 @@
  */
 package com.android.contacts.common.vcard;
 
-import android.app.Activity;
 import android.app.Dialog;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -26,10 +25,11 @@
 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 Activity {
+public class SelectAccountActivity extends AnalyticsActivity {
     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 0dbe70a..c0bbcce 100644
--- a/src/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
+++ b/src/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
@@ -20,7 +20,6 @@
 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;
@@ -38,6 +37,7 @@
 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 DialogFragment {
+public class SelectPhoneAccountDialogFragment extends AnalyticsDialogFragment {
     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
new file mode 100644
index 0000000..5427bec
--- /dev/null
+++ b/src/com/android/contacts/commonbind/analytics/AnalyticsActivity.java
@@ -0,0 +1,29 @@
+/*
+ * 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
new file mode 100644
index 0000000..4409201
--- /dev/null
+++ b/src/com/android/contacts/commonbind/analytics/AnalyticsDialogFragment.java
@@ -0,0 +1,29 @@
+/*
+ * 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
new file mode 100644
index 0000000..ebe2903
--- /dev/null
+++ b/src/com/android/contacts/commonbind/analytics/AnalyticsFragment.java
@@ -0,0 +1,29 @@
+/*
+ * 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
new file mode 100644
index 0000000..f003d67
--- /dev/null
+++ b/src/com/android/contacts/commonbind/analytics/AnalyticsInterface.java
@@ -0,0 +1,23 @@
+/*
+ * 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
new file mode 100644
index 0000000..38840ef
--- /dev/null
+++ b/src/com/android/contacts/commonbind/analytics/AnalyticsListFragment.java
@@ -0,0 +1,30 @@
+/*
+ * 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
new file mode 100644
index 0000000..9f3ac98
--- /dev/null
+++ b/src/com/android/contacts/commonbind/analytics/AnalyticsPreferenceActivity.java
@@ -0,0 +1,30 @@
+/*
+ * 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
new file mode 100644
index 0000000..827f469
--- /dev/null
+++ b/src/com/android/contacts/commonbind/analytics/AnalyticsPreferenceFragment.java
@@ -0,0 +1,30 @@
+/*
+ * 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() {
+    }
+}