Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit adf11594 authored by jackqdyulei's avatar jackqdyulei
Browse files

DO NOT MERGE Add metric log for anomaly.

This cl creates metric log when anomaly surfaces in battery page or
anomaly dialog.

Each anomaly action contains two fields:
1. FIELD_CONTEXT(int): determine which fragment start this action.
2. FIELD_ANOMALY_ACTION_TYPE(int): determine action type for this
anomaly.

**Cherry-picked from ag/3120176. Fix merge conflict in import part
in AdvancedPowerUsageDetail**

Bug: 68215016
Test: RunSettingsRoboTests
Change-Id: I83761e2a9c206ea7a04f7d031a6961fdab7ca9a0
parent 2fd1c983
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import com.android.settings.applications.LayoutPreference;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.fuelgauge.anomaly.AnomalyUtils;
import com.android.settings.fuelgauge.anomaly.Anomaly;
import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment;
import com.android.settings.fuelgauge.anomaly.AnomalyLoader;
@@ -348,6 +349,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);
    }

+5 −0
Original line number Diff line number Diff line
@@ -68,6 +68,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;
@@ -151,6 +152,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);

+5 −1
Original line number Diff line number Diff line
@@ -100,9 +100,13 @@ public class AnomalyDialogFragment extends InstrumentedDialogFragment implements
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Bundle bundle = getArguments();
        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 Context context = getContext();
        final AnomalyAction anomalyAction = mAnomalyUtils.getAnomalyAction(mAnomaly);
        switch (anomalyAction.getActionType()) {
            case Anomaly.AnomalyActionType.FORCE_STOP:
+50 −0
Original line number Diff line number Diff line
@@ -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()));
    }

}
+1 −0
Original line number Diff line number Diff line
@@ -58,5 +58,6 @@ public abstract class AnomalyAction {
     */
    public abstract boolean isActionActive(Anomaly anomaly);

    @Anomaly.AnomalyActionType
    public abstract int getActionType();
}
Loading