Merge changes from topic "anomaly_metric_update"

* changes:
  Add metric log for anomaly.
  Add metric id for anomaly fragments.
This commit is contained in:
TreeHugger Robot
2017-10-31 02:09:47 +00:00
committed by Android (Google) Code Review
8 changed files with 145 additions and 7 deletions

View File

@@ -45,6 +45,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.fuelgauge.anomaly.AnomalyUtils;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.fuelgauge.anomaly.Anomaly;
import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment;
@@ -360,6 +361,9 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
@Override
public void onLoadFinished(Loader<List<Anomaly>> loader, List<Anomaly> data) {
final AnomalyUtils anomalyUtils = AnomalyUtils.getInstance(getContext());
anomalyUtils.logAnomalies(mMetricsFeatureProvider, data,
MetricsEvent.FUELGAUGE_POWER_USAGE_DETAIL);
mAnomalySummaryPreferenceController.updateAnomalySummaryPreference(data);
}

View File

@@ -125,8 +125,7 @@ public class PowerUsageAnomalyDetails extends DashboardFragment implements
@Override
public int getMetricsCategory() {
//TODO(b/37681923): add correct metrics category
return 0;
return MetricsProto.MetricsEvent.FUELGAUGE_ANOMALY_DETAIL;
}
void refreshUi() {

View File

@@ -67,6 +67,7 @@ import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment.AnomalyDialogListener;
import com.android.settings.fuelgauge.anomaly.AnomalyLoader;
import com.android.settings.fuelgauge.anomaly.AnomalySummaryPreferenceController;
import com.android.settings.fuelgauge.anomaly.AnomalyUtils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -148,6 +149,10 @@ public class PowerUsageSummary extends PowerUsageBase implements
@Override
public void onLoadFinished(Loader<List<Anomaly>> loader, List<Anomaly> data) {
final AnomalyUtils anomalyUtils = AnomalyUtils.getInstance(getContext());
anomalyUtils.logAnomalies(mMetricsFeatureProvider, data,
MetricsEvent.FUELGAUGE_POWER_USAGE_SUMMARY);
// show high usage preference if possible
mAnomalySummaryPreferenceController.updateAnomalySummaryPreference(data);

View File

@@ -23,6 +23,7 @@ import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.fuelgauge.anomaly.action.AnomalyAction;
@@ -79,8 +80,7 @@ public class AnomalyDialogFragment extends InstrumentedDialogFragment implements
@Override
public int getMetricsCategory() {
// TODO(b/37681923): add anomaly metric id
return 0;
return MetricsProto.MetricsEvent.DIALOG_HANDLE_ANOMALY;
}
@Override
@@ -100,9 +100,13 @@ public class AnomalyDialogFragment extends InstrumentedDialogFragment implements
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Bundle bundle = getArguments();
mAnomaly = bundle.getParcelable(ARG_ANOMALY);
final Context context = getContext();
final AnomalyUtils anomalyUtils = AnomalyUtils.getInstance(context);
mAnomaly = bundle.getParcelable(ARG_ANOMALY);
anomalyUtils.logAnomaly(mMetricsFeatureProvider, mAnomaly,
MetricsProto.MetricsEvent.DIALOG_HANDLE_ANOMALY);
final AnomalyAction anomalyAction = mAnomalyUtils.getAnomalyAction(mAnomaly);
switch (anomalyAction.getActionType()) {
case Anomaly.AnomalyActionType.FORCE_STOP:

View File

@@ -19,8 +19,12 @@ package com.android.settings.fuelgauge.anomaly;
import android.content.Context;
import android.os.Build;
import android.support.annotation.VisibleForTesting;
import android.util.Pair;
import android.util.SparseIntArray;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.fuelgauge.anomaly.action.AnomalyAction;
import com.android.settings.fuelgauge.anomaly.action.ForceStopAction;
import com.android.settings.fuelgauge.anomaly.action.LocationCheckAction;
@@ -40,6 +44,17 @@ public class AnomalyUtils {
private Context mContext;
private static AnomalyUtils sInstance;
private static final SparseIntArray mMetricArray;
static {
mMetricArray = new SparseIntArray();
mMetricArray.append(Anomaly.AnomalyType.WAKE_LOCK,
MetricsProto.MetricsEvent.ANOMALY_TYPE_WAKELOCK);
mMetricArray.append(Anomaly.AnomalyType.WAKEUP_ALARM,
MetricsProto.MetricsEvent.ANOMALY_TYPE_WAKEUP_ALARM);
mMetricArray.append(Anomaly.AnomalyType.BLUETOOTH_SCAN,
MetricsProto.MetricsEvent.ANOMALY_TYPE_UNOPTIMIZED_BT);
}
@VisibleForTesting
AnomalyUtils(Context context) {
mContext = context.getApplicationContext();
@@ -118,4 +133,39 @@ public class AnomalyUtils {
return anomalies;
}
/**
* Log the list of {@link Anomaly} using {@link MetricsFeatureProvider}, which contains
* anomaly type, package name, field_context, field_action_type
*
* @param provider provider to do the logging
* @param anomalies contains the data to log
* @param contextId which page invoke this logging
* @see #logAnomaly(MetricsFeatureProvider, Anomaly, int)
*/
public void logAnomalies(MetricsFeatureProvider provider, List<Anomaly> anomalies,
int contextId) {
for (int i = 0, size = anomalies.size(); i < size; i++) {
logAnomaly(provider, anomalies.get(i), contextId);
}
}
/**
* Log the {@link Anomaly} using {@link MetricsFeatureProvider}, which contains
* anomaly type, package name, field_context, field_action_type
*
* @param provider provider to do the logging
* @param anomaly contains the data to log
* @param contextId which page invoke this logging
* @see #logAnomalies(MetricsFeatureProvider, List, int)
*/
public void logAnomaly(MetricsFeatureProvider provider, Anomaly anomaly, int contextId) {
provider.action(
mContext,
mMetricArray.get(anomaly.type, MetricsProto.MetricsEvent.VIEW_UNKNOWN),
anomaly.packageName,
Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, contextId),
Pair.create(MetricsProto.MetricsEvent.FIELD_ANOMALY_ACTION_TYPE,
getAnomalyAction(anomaly).getActionType()));
}
}

View File

@@ -58,5 +58,6 @@ public abstract class AnomalyAction {
*/
public abstract boolean isActionActive(Anomaly anomaly);
@Anomaly.AnomalyActionType
public abstract int getActionType();
}

View File

@@ -19,6 +19,7 @@ package com.android.settings.fuelgauge.anomaly.action;
import android.content.Context;
import android.support.annotation.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.fuelgauge.anomaly.Anomaly;
/**
@@ -34,6 +35,7 @@ public class StopAndBackgroundCheckAction extends AnomalyAction {
public StopAndBackgroundCheckAction(Context context) {
this(context, new ForceStopAction(context), new BackgroundCheckAction(context));
mActionMetricKey = MetricsProto.MetricsEvent.ACTION_APP_STOP_AND_BACKGROUND_CHECK;
}
@VisibleForTesting
@@ -46,6 +48,7 @@ public class StopAndBackgroundCheckAction extends AnomalyAction {
@Override
public void handlePositiveAction(Anomaly anomaly, int metricsKey) {
super.handlePositiveAction(anomaly, metricsKey);
mForceStopAction.handlePositiveAction(anomaly, metricsKey);
mBackgroundCheckAction.handlePositiveAction(anomaly, metricsKey);
}