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());
}
}