Move SharedPreferenceLogger to instrumentation package.

Bug: 30914916
Test: SettingsUnitTests and RunSettingsRoboTests

- Added interface to abstract logger
- Added test for SharePrefLogger
- Moved Existing tests for instrumentation to robotests.

Change-Id: I2b431ea4b0fd09d0f11389d8b9181448f08a52c5
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());
     }
 }