diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index ee0d2ec..36350f5 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -71,6 +71,7 @@
 import com.android.settings.applications.VrListenerSettings;
 import com.android.settings.applications.WriteSettingsDetails;
 import com.android.settings.bluetooth.BluetoothSettings;
+import com.android.settings.core.instrumentation.SharedPreferencesLogger;
 import com.android.settings.dashboard.DashboardContainerFragment;
 import com.android.settings.dashboard.SearchResultsSummary;
 import com.android.settings.datausage.DataUsageSummary;
diff --git a/src/com/android/settings/core/instrumentation/EventLogWriter.java b/src/com/android/settings/core/instrumentation/EventLogWriter.java
index 1ec5b94..de37cba 100644
--- a/src/com/android/settings/core/instrumentation/EventLogWriter.java
+++ b/src/com/android/settings/core/instrumentation/EventLogWriter.java
@@ -21,9 +21,9 @@
 import com.android.internal.logging.MetricsLogger;
 
 /**
- * Pass-through Metrics logger for {@link MetricsLogger}.
+ * {@link LogWriter} that writes data to eventlog.
  */
-public class EventLogWriter {
+public class EventLogWriter implements LogWriter {
 
     public void visible(Context context, int category) {
         MetricsLogger.visible(context, category);
diff --git a/src/com/android/settings/core/instrumentation/LogWriter.java b/src/com/android/settings/core/instrumentation/LogWriter.java
new file mode 100644
index 0000000..45f1d57
--- /dev/null
+++ b/src/com/android/settings/core/instrumentation/LogWriter.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2016 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.settings.core.instrumentation;
+
+import android.content.Context;
+
+/**
+ * Generic log writer interface.
+ */
+public interface LogWriter {
+
+    /**
+     * Logs a visibility event when view becomes visible.
+     */
+    void visible(Context context, int category);
+
+    /**
+     * Logs a visibility event when view becomes hidden.
+     */
+    void hidden(Context context, int category);
+
+    /**
+     * Logs an user action.
+     */
+    void action(Context context, int category);
+
+    /**
+     * Logs an user action.
+     */
+    void action(Context context, int category, int value);
+
+    /**
+     * Logs an user action.
+     */
+    void action(Context context, int category, boolean value);
+
+    /**
+     * Logs an user action.
+     */
+    void action(Context context, int category, String pkg);
+
+    /**
+     * Logs a count.
+     */
+    void count(Context context, String name, int value);
+
+    /**
+     * Logs a histogram event.
+     */
+    void histogram(Context context, String name, int bucket);
+}
diff --git a/src/com/android/settings/core/instrumentation/MetricsFactory.java b/src/com/android/settings/core/instrumentation/MetricsFactory.java
index 3f315df..8ea6d70 100644
--- a/src/com/android/settings/core/instrumentation/MetricsFactory.java
+++ b/src/com/android/settings/core/instrumentation/MetricsFactory.java
@@ -16,11 +16,13 @@
 
 package com.android.settings.core.instrumentation;
 
+import android.support.annotation.VisibleForTesting;
+
 public class MetricsFactory {
 
     private static MetricsFactory sInstance;
 
-    private EventLogWriter mLogger;
+    private LogWriter mLogger;
 
     public static MetricsFactory get() {
         if (sInstance == null) {
@@ -29,10 +31,15 @@
         return sInstance;
     }
 
-    public EventLogWriter getLogger() {
+    public LogWriter getLogger() {
         if (mLogger == null) {
             mLogger = new EventLogWriter();
         }
         return mLogger;
     }
+
+    @VisibleForTesting
+    void setLogger(LogWriter logger) {
+        mLogger = logger;
+    }
 }
diff --git a/src/com/android/settings/SharedPreferencesLogger.java b/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java
similarity index 93%
rename from src/com/android/settings/SharedPreferencesLogger.java
rename to src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java
index af34f16..594ab96 100644
--- a/src/com/android/settings/SharedPreferencesLogger.java
+++ b/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java
@@ -12,9 +12,7 @@
  * permissions and limitations under the License.
  */
 
-package com.android.settings;
-
-import com.android.internal.logging.MetricsLogger;
+package com.android.settings.core.instrumentation;
 
 import android.annotation.Nullable;
 import android.content.ComponentName;
@@ -23,7 +21,7 @@
 import android.content.pm.PackageManager;
 import android.os.AsyncTask;
 import android.text.TextUtils;
-import android.util.Log;
+
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 
 import java.util.Map;
@@ -33,10 +31,12 @@
 
     private final String mTag;
     private final Context mContext;
+    private final LogWriter mLogWriter;
 
     public SharedPreferencesLogger(Context context, String tag) {
         mContext = context;
         mTag = tag;
+        mLogWriter = MetricsFactory.get().getLogger();
     }
 
     @Override
@@ -95,12 +95,12 @@
     }
 
     private void logValue(String key, String value) {
-        MetricsLogger.count(mContext, mTag + "/" + key + "|" + value, 1);
+        mLogWriter.count(mContext, mTag + "/" + key + "|" + value, 1);
     }
 
     private void logPackageName(String key, String value) {
-        MetricsLogger.count(mContext, mTag + "/" + key, 1);
-        MetricsLogger.action(mContext, MetricsEvent.ACTION_GENERIC_PACKAGE,
+        mLogWriter.count(mContext, mTag + "/" + key, 1);
+        mLogWriter.action(mContext, MetricsEvent.ACTION_GENERIC_PACKAGE,
                 mTag + "/" + key + "|" + value);
     }
 
diff --git a/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java b/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java
index 4e52478..29a804b 100644
--- a/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java
+++ b/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java
@@ -24,22 +24,22 @@
 public class VisibilityLoggerMixin {
 
     private final Instrumentable mInstrumentable;
-    private final EventLogWriter mEventLogWriter;
+    private final LogWriter mLogWriter;
 
     public VisibilityLoggerMixin(Instrumentable instrumentable) {
         this(instrumentable, MetricsFactory.get().getLogger());
     }
 
-    public VisibilityLoggerMixin(Instrumentable instrumentable, EventLogWriter eventLogWriter) {
+    public VisibilityLoggerMixin(Instrumentable instrumentable, LogWriter logWriter) {
         mInstrumentable = instrumentable;
-        mEventLogWriter = eventLogWriter;
+        mLogWriter = logWriter;
     }
 
     public void onResume(Context context) {
-        mEventLogWriter.visible(context, mInstrumentable.getMetricsCategory());
+        mLogWriter.visible(context, mInstrumentable.getMetricsCategory());
     }
 
     public void onPause(Context context) {
-        mEventLogWriter.hidden(context, mInstrumentable.getMetricsCategory());
+        mLogWriter.hidden(context, mInstrumentable.getMetricsCategory());
     }
 }
