Revert "DO NOT MERGE Add metric log for anomaly."

This reverts commit adf11594d3.

Merged-In: I83761e2a9c206ea7a04f7d031a6961fdab7ca9a0
Change-Id: I015d8c0d05c7ae9abfd4939f7a95e1f0daecc1fc
This commit is contained in:
Lei Yu
2018-01-17 23:22:47 +00:00
parent 2755f3de0a
commit 00322c0f83
8 changed files with 27 additions and 143 deletions

View File

@@ -45,7 +45,6 @@ import com.android.settings.applications.LayoutPreference;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl; 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.Anomaly;
import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment; import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment;
import com.android.settings.fuelgauge.anomaly.AnomalyLoader; import com.android.settings.fuelgauge.anomaly.AnomalyLoader;
@@ -349,9 +348,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
@Override @Override
public void onLoadFinished(Loader<List<Anomaly>> loader, List<Anomaly> data) { 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); mAnomalySummaryPreferenceController.updateAnomalySummaryPreference(data);
} }

View File

@@ -68,7 +68,6 @@ import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment.AnomalyDialogListener; import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment.AnomalyDialogListener;
import com.android.settings.fuelgauge.anomaly.AnomalyLoader; import com.android.settings.fuelgauge.anomaly.AnomalyLoader;
import com.android.settings.fuelgauge.anomaly.AnomalySummaryPreferenceController; import com.android.settings.fuelgauge.anomaly.AnomalySummaryPreferenceController;
import com.android.settings.fuelgauge.anomaly.AnomalyUtils;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
@@ -152,10 +151,6 @@ public class PowerUsageSummary extends PowerUsageBase implements
@Override @Override
public void onLoadFinished(Loader<List<Anomaly>> loader, List<Anomaly> data) { 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 // show high usage preference if possible
mAnomalySummaryPreferenceController.updateAnomalySummaryPreference(data); mAnomalySummaryPreferenceController.updateAnomalySummaryPreference(data);

View File

@@ -100,13 +100,9 @@ public class AnomalyDialogFragment extends InstrumentedDialogFragment implements
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
final Bundle bundle = getArguments(); final Bundle bundle = getArguments();
final Context context = getContext();
final AnomalyUtils anomalyUtils = AnomalyUtils.getInstance(context);
mAnomaly = bundle.getParcelable(ARG_ANOMALY); mAnomaly = bundle.getParcelable(ARG_ANOMALY);
anomalyUtils.logAnomaly(mMetricsFeatureProvider, mAnomaly,
MetricsProto.MetricsEvent.DIALOG_HANDLE_ANOMALY);
final Context context = getContext();
final AnomalyAction anomalyAction = mAnomalyUtils.getAnomalyAction(mAnomaly); final AnomalyAction anomalyAction = mAnomalyUtils.getAnomalyAction(mAnomaly);
switch (anomalyAction.getActionType()) { switch (anomalyAction.getActionType()) {
case Anomaly.AnomalyActionType.FORCE_STOP: case Anomaly.AnomalyActionType.FORCE_STOP:

View File

@@ -19,12 +19,8 @@ package com.android.settings.fuelgauge.anomaly;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import android.support.annotation.VisibleForTesting; 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.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.AnomalyAction;
import com.android.settings.fuelgauge.anomaly.action.ForceStopAction; import com.android.settings.fuelgauge.anomaly.action.ForceStopAction;
import com.android.settings.fuelgauge.anomaly.action.LocationCheckAction; import com.android.settings.fuelgauge.anomaly.action.LocationCheckAction;
@@ -44,17 +40,6 @@ public class AnomalyUtils {
private Context mContext; private Context mContext;
private static AnomalyUtils sInstance; 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 @VisibleForTesting
AnomalyUtils(Context context) { AnomalyUtils(Context context) {
mContext = context.getApplicationContext(); mContext = context.getApplicationContext();
@@ -133,39 +118,4 @@ public class AnomalyUtils {
return anomalies; 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,6 +58,5 @@ public abstract class AnomalyAction {
*/ */
public abstract boolean isActionActive(Anomaly anomaly); public abstract boolean isActionActive(Anomaly anomaly);
@Anomaly.AnomalyActionType
public abstract int getActionType(); public abstract int getActionType();
} }

View File

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

View File

@@ -32,7 +32,6 @@ import android.os.Build;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.fuelgauge.anomaly.action.AnomalyAction; import com.android.settings.fuelgauge.anomaly.action.AnomalyAction;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
@@ -69,7 +68,7 @@ public class AnomalyDialogFragmentTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = RuntimeEnvironment.application;
mWakeLockAnomaly = new Anomaly.Builder() mWakeLockAnomaly = new Anomaly.Builder()
.setType(Anomaly.AnomalyType.WAKE_LOCK) .setType(Anomaly.AnomalyType.WAKE_LOCK)
.setUid(UID) .setUid(UID)
@@ -95,7 +94,6 @@ public class AnomalyDialogFragmentTest {
.setPackageName(PACKAGE_NAME) .setPackageName(PACKAGE_NAME)
.setDisplayName(DISPLAY_NAME) .setDisplayName(DISPLAY_NAME)
.build(); .build();
FakeFeatureFactory.setupForTest(mContext);
} }
@Test @Test
@@ -168,4 +166,29 @@ public class AnomalyDialogFragmentTest {
assertThat(dialog.getButton(DialogInterface.BUTTON_NEGATIVE).getText()).isEqualTo( assertThat(dialog.getButton(DialogInterface.BUTTON_NEGATIVE).getText()).isEqualTo(
mContext.getString(R.string.dlg_cancel)); mContext.getString(R.string.dlg_cancel));
} }
@Test
public void testOnCreateDialog_bluetoothAnomaly_fireLocationCheckDialog() {
mAnomalyDialogFragment = spy(AnomalyDialogFragment.newInstance(mBluetoothAnomaly,
0 /* metricskey */));
mAnomalyDialogFragment.mAnomalyUtils = mAnomalyUtils;
doReturn(mAnomalyAction).when(mAnomalyUtils).getAnomalyAction(any());
doNothing().when(mAnomalyDialogFragment).initAnomalyUtils();
doReturn(Anomaly.AnomalyActionType.LOCATION_CHECK).when(mAnomalyAction).getActionType();
FragmentTestUtil.startFragment(mAnomalyDialogFragment);
final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
ShadowAlertDialog shadowDialog = shadowOf(dialog);
assertThat(shadowDialog.getMessage()).isEqualTo(
mContext.getString(R.string.dialog_location_message,
mWakeLockAnomaly.displayName));
assertThat(shadowDialog.getTitle()).isEqualTo(
mContext.getString(R.string.dialog_location_title));
assertThat(dialog.getButton(DialogInterface.BUTTON_POSITIVE).getText()).isEqualTo(
mContext.getString(R.string.dialog_location_ok));
assertThat(dialog.getButton(DialogInterface.BUTTON_NEGATIVE).getText()).isEqualTo(
mContext.getString(R.string.dlg_cancel));
}
} }

View File

@@ -18,13 +18,8 @@ package com.android.settings.fuelgauge.anomaly;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.verify;
import android.os.Build; import android.os.Build;
import android.util.Pair;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.fuelgauge.anomaly.action.StopAndBackgroundCheckAction; import com.android.settings.fuelgauge.anomaly.action.StopAndBackgroundCheckAction;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
@@ -36,42 +31,18 @@ import com.android.settings.fuelgauge.anomaly.checker.WakeupAlarmAnomalyDetector
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
ShadowKeyValueListParserWrapperImpl.class}) ShadowKeyValueListParserWrapperImpl.class})
public class AnomalyUtilsTest { public class AnomalyUtilsTest {
private static final String PACKAGE_NAME_WAKEUP = "com.android.app1";
private static final String PACKAGE_NAME_WAKELOCK = "com.android.app2";
private static final int CONTEXT_ID = 55;
@Mock
private MetricsFeatureProvider mMetricsFeatureProvider;
private AnomalyUtils mAnomalyUtils; private AnomalyUtils mAnomalyUtils;
private Anomaly mWakeupAnomaly;
private Anomaly mWakeLockAnomaly;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this);
mAnomalyUtils = new AnomalyUtils(RuntimeEnvironment.application); mAnomalyUtils = new AnomalyUtils(RuntimeEnvironment.application);
mWakeLockAnomaly = new Anomaly.Builder()
.setType(Anomaly.AnomalyType.WAKE_LOCK)
.setPackageName(PACKAGE_NAME_WAKELOCK)
.build();
mWakeupAnomaly = new Anomaly.Builder()
.setType(Anomaly.AnomalyType.WAKEUP_ALARM)
.setPackageName(PACKAGE_NAME_WAKEUP)
.build();
} }
@Test @Test
@@ -126,47 +97,4 @@ public class AnomalyUtilsTest {
assertThat(mAnomalyUtils.getAnomalyDetector(Anomaly.AnomalyType.WAKEUP_ALARM)).isInstanceOf( assertThat(mAnomalyUtils.getAnomalyDetector(Anomaly.AnomalyType.WAKEUP_ALARM)).isInstanceOf(
WakeupAlarmAnomalyDetector.class); WakeupAlarmAnomalyDetector.class);
} }
@Test
public void testLogAnomaly() {
mAnomalyUtils.logAnomaly(mMetricsFeatureProvider, mWakeLockAnomaly, CONTEXT_ID);
verify(mMetricsFeatureProvider).action(RuntimeEnvironment.application,
MetricsProto.MetricsEvent.ANOMALY_TYPE_WAKELOCK,
PACKAGE_NAME_WAKELOCK,
Pair.create(
MetricsProto.MetricsEvent.FIELD_CONTEXT,
CONTEXT_ID),
Pair.create(
MetricsProto.MetricsEvent.FIELD_ANOMALY_ACTION_TYPE,
Anomaly.AnomalyActionType.FORCE_STOP));
}
@Test
public void testLogAnomalies() {
final List<Anomaly> anomalies = new ArrayList<>();
anomalies.add(mWakeLockAnomaly);
anomalies.add(mWakeupAnomaly);
mAnomalyUtils.logAnomalies(mMetricsFeatureProvider, anomalies, CONTEXT_ID);
verify(mMetricsFeatureProvider).action(RuntimeEnvironment.application,
MetricsProto.MetricsEvent.ANOMALY_TYPE_WAKELOCK,
PACKAGE_NAME_WAKELOCK,
Pair.create(
MetricsProto.MetricsEvent.FIELD_CONTEXT,
CONTEXT_ID),
Pair.create(
MetricsProto.MetricsEvent.FIELD_ANOMALY_ACTION_TYPE,
Anomaly.AnomalyActionType.FORCE_STOP));
verify(mMetricsFeatureProvider).action(RuntimeEnvironment.application,
MetricsProto.MetricsEvent.ANOMALY_TYPE_WAKEUP_ALARM,
PACKAGE_NAME_WAKEUP,
Pair.create(
MetricsProto.MetricsEvent.FIELD_CONTEXT,
CONTEXT_ID),
Pair.create(
MetricsProto.MetricsEvent.FIELD_ANOMALY_ACTION_TYPE,
Anomaly.AnomalyActionType.STOP_AND_BACKGROUND_CHECK));
}
} }