Add logging when "Advanced" button is clicked

Change-Id: I8259b1b863991935165afb19e34c30dcf5056acf
Fix: 35356464
Test: RunSettingsRoboTests
This commit is contained in:
Fan Zhang
2017-02-14 13:59:41 -08:00
parent b4d6b4f7f8
commit fe9f0fda35
9 changed files with 116 additions and 102 deletions

View File

@@ -17,8 +17,10 @@
package com.android.settings.core.instrumentation;
import android.content.Context;
import android.metrics.LogMaker;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
/**
* {@link LogWriter} that writes data to eventlog.
@@ -37,6 +39,15 @@ public class EventLogWriter implements LogWriter {
MetricsLogger.action(context, category, "");
}
public void actionWithSource(Context context, int source, int category) {
final LogMaker logMaker = new LogMaker(category)
.setType(MetricsProto.MetricsEvent.TYPE_ACTION);
if (source != MetricsProto.MetricsEvent.VIEW_UNKNOWN) {
logMaker.addTaggedData(MetricsProto.MetricsEvent.FIELD_CONTEXT, source);
}
MetricsLogger.action(logMaker);
}
public void action(Context context, int category, int value) {
MetricsLogger.action(context, category, Integer.toString(value));
}

View File

@@ -37,6 +37,11 @@ public interface LogWriter {
*/
void action(Context context, int category);
/**
* Logs an user action.
*/
void actionWithSource(Context context, int source, int category);
/**
* Logs an user action.
*/

View File

@@ -15,8 +15,79 @@
*/
package com.android.settings.core.instrumentation;
import android.content.Context;
import android.metrics.LogMaker;
import java.util.ArrayList;
import java.util.List;
/**
* FeatureProvider for metrics.
*/
public interface MetricsFeatureProvider extends LogWriter {
public class MetricsFeatureProvider {
private List<LogWriter> mLoggerWriters;
public MetricsFeatureProvider() {
mLoggerWriters = new ArrayList<>();
installLogWriters();
}
protected void installLogWriters() {
mLoggerWriters.add(new EventLogWriter());
mLoggerWriters.add(new SettingSuggestionsLogWriter());
}
public void visible(Context context, int category) {
for (LogWriter writer : mLoggerWriters) {
writer.visible(context, category);
}
}
public void hidden(Context context, int category) {
for (LogWriter writer : mLoggerWriters) {
writer.hidden(context, category);
}
}
public void actionWithSource(Context context, int source, int category) {
for (LogWriter writer : mLoggerWriters) {
writer.actionWithSource(context, source, category);
}
}
public void action(Context context, int category) {
for (LogWriter writer : mLoggerWriters) {
writer.action(context, category);
}
}
public void action(Context context, int category, int value) {
for (LogWriter writer : mLoggerWriters) {
writer.action(context, category, value);
}
}
public void action(Context context, int category, boolean value) {
for (LogWriter writer : mLoggerWriters) {
writer.action(context, category, value);
}
}
public void action(Context context, int category, String pkg) {
for (LogWriter writer : mLoggerWriters) {
writer.action(context, category, pkg);
}
}
public void count(Context context, String name, int value) {
for (LogWriter writer : mLoggerWriters) {
writer.count(context, name, value);
}
}
public void histogram(Context context, String name, int bucket) {
for (LogWriter writer : mLoggerWriters) {
writer.histogram(context, name, bucket);
}
}
}

View File

@@ -1,95 +0,0 @@
/*
* 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;
import java.util.ArrayList;
import java.util.List;
/**
* Implementation for {@link MetricsFeatureProvider}
*/
public class MetricsFeatureProviderImpl implements MetricsFeatureProvider {
private List<LogWriter> mLoggerWriters;
public MetricsFeatureProviderImpl() {
mLoggerWriters = new ArrayList<>();
installLogWriters();
}
protected void installLogWriters() {
mLoggerWriters.add(new EventLogWriter());
mLoggerWriters.add(new SettingSuggestionsLogWriter());
}
@Override
public void visible(Context context, int category) {
for (LogWriter writer : mLoggerWriters) {
writer.visible(context, category);
}
}
@Override
public void hidden(Context context, int category) {
for (LogWriter writer : mLoggerWriters) {
writer.hidden(context, category);
}
}
@Override
public void action(Context context, int category) {
for (LogWriter writer : mLoggerWriters) {
writer.action(context, category);
}
}
@Override
public void action(Context context, int category, int value) {
for (LogWriter writer : mLoggerWriters) {
writer.action(context, category, value);
}
}
@Override
public void action(Context context, int category, boolean value) {
for (LogWriter writer : mLoggerWriters) {
writer.action(context, category, value);
}
}
@Override
public void action(Context context, int category, String pkg) {
for (LogWriter writer : mLoggerWriters) {
writer.action(context, category, pkg);
}
}
@Override
public void count(Context context, String name, int value) {
for (LogWriter writer : mLoggerWriters) {
writer.count(context, name, value);
}
}
@Override
public void histogram(Context context, String name, int bucket) {
for (LogWriter writer : mLoggerWriters) {
writer.histogram(context, name, bucket);
}
}
}

View File

@@ -17,6 +17,8 @@
package com.android.settings.core.instrumentation;
import android.content.Context;
import android.metrics.LogMaker;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.logging.MetricsLogger;
import com.android.settings.suggestions.EventStore;
@@ -40,6 +42,10 @@ public class SettingSuggestionsLogWriter implements LogWriter {
public void action(Context context, int category) {
}
@Override
public void actionWithSource(Context context, int source, int category) {
}
@Override
public void action(Context context, int category, int value) {
}

View File

@@ -181,7 +181,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
@Override
public ProgressiveDisclosureMixin getProgressiveDisclosureMixin(Context context,
DashboardFragment fragment) {
return new ProgressiveDisclosureMixin(context, this, fragment);
return new ProgressiveDisclosureMixin(context, this, mMetricsFeatureProvider, fragment);
}
@Override

View File

@@ -25,7 +25,10 @@ import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.Instrumentable;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.core.lifecycle.LifecycleObserver;
import com.android.settings.core.lifecycle.events.OnCreate;
import com.android.settings.core.lifecycle.events.OnSaveInstanceState;
@@ -45,19 +48,23 @@ public class ProgressiveDisclosureMixin implements Preference.OnPreferenceClickL
private final DashboardFeatureProvider mDashboardFeatureProvider;
// Collapsed preference sorted by order.
private final List<Preference> mCollapsedPrefs = new ArrayList<>();
private /* final */ ExpandPreference mExpandButton;
private final MetricsFeatureProvider mMetricsFeatureProvider;
private final PreferenceFragment mFragment;
private /* final */ ExpandPreference mExpandButton;
private int mTileLimit = DEFAULT_TILE_LIMIT;
private boolean mUserExpanded;
public ProgressiveDisclosureMixin(Context context,
DashboardFeatureProvider dashboardFeatureProvider, PreferenceFragment fragment) {
DashboardFeatureProvider dashboardFeatureProvider,
MetricsFeatureProvider metricsFeatureProvider,
PreferenceFragment fragment) {
mContext = context;
mFragment = fragment;
mExpandButton = new ExpandPreference(context);
mExpandButton.setOnPreferenceClickListener(this);
mDashboardFeatureProvider = dashboardFeatureProvider;
mMetricsFeatureProvider = metricsFeatureProvider;
}
@Override
@@ -83,6 +90,14 @@ public class ProgressiveDisclosureMixin implements Preference.OnPreferenceClickL
}
mCollapsedPrefs.clear();
mUserExpanded = true;
final int metricsCategory;
if (mFragment instanceof Instrumentable) {
metricsCategory = ((Instrumentable) mFragment).getMetricsCategory();
} else {
metricsCategory = MetricsProto.MetricsEvent.VIEW_UNKNOWN;
}
mMetricsFeatureProvider.actionWithSource(mContext, metricsCategory,
MetricsProto.MetricsEvent.ACTION_SETTINGS_ADVANCED_BUTTON_EXPAND);
}
}
return false;

View File

@@ -28,7 +28,6 @@ import com.android.settings.applications.ApplicationFeatureProviderImpl;
import com.android.settings.applications.IPackageManagerWrapperImpl;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.core.instrumentation.MetricsFeatureProviderImpl;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.DashboardFeatureProviderImpl;
import com.android.settings.dashboard.SuggestionFeatureProvider;
@@ -70,7 +69,7 @@ public class FeatureFactoryImpl extends FeatureFactory {
@Override
public MetricsFeatureProvider getMetricsFeatureProvider() {
if (mMetricsFeatureProvider == null) {
mMetricsFeatureProvider = new MetricsFeatureProviderImpl();
mMetricsFeatureProvider = new MetricsFeatureProvider();
}
return mMetricsFeatureProvider;
}

View File

@@ -74,7 +74,9 @@ public class ProgressiveDisclosureTest {
mAppContext = ShadowApplication.getInstance().getApplicationContext();
mFakeFeatureFactory = (FakeFeatureFactory) FeatureFactory.getFactory(mContext);
mMixin = new ProgressiveDisclosureMixin(mAppContext,
mFakeFeatureFactory.dashboardFeatureProvider, mPreferenceFragment);
mFakeFeatureFactory.dashboardFeatureProvider,
mFakeFeatureFactory.metricsFeatureProvider,
mPreferenceFragment);
ReflectionHelpers.setField(mMixin, "mExpandButton", mExpandButton);
mPreference = new Preference(mAppContext);
mPreference.setKey("test");