diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2018-02-08 04:16:36 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-02-08 04:16:36 +0000 |
commit | 9d66948caaf607cca2d5631b80de813e241953a8 (patch) | |
tree | f7584ce9f33a07ee6c7349e578e07ce235275d83 | |
parent | 6021cde9513345ff2bc20b518a3d8aadc2e4d15b (diff) | |
parent | 8d6b7d51bbe037dda9a38e6a0cff205d15d05759 (diff) | |
download | packages_apps_Settings-9d66948caaf607cca2d5631b80de813e241953a8.tar.gz packages_apps_Settings-9d66948caaf607cca2d5631b80de813e241953a8.tar.bz2 packages_apps_Settings-9d66948caaf607cca2d5631b80de813e241953a8.zip |
Merge cherrypicks of [3581037, 3581038, 3580473, 3580624, 3580656, 3580657, 3580658, 3580382, 3580474, 3580475, 3581039, 3581040, 3580476, 3580206, 3581527, 3580955, 3580956, 3580957, 3580958, 3580959, 3580960, 3580961, 3580962, 3580963, 3580964, 3580965, 3580966, 3581567, 3581568, 3581569, 3581570, 3581571, 3580625, 3580626, 3581587, 3581513, 3581514, 3581515, 3580477, 3581588, 3580659, 3580660, 3580383, 3580384, 3580478, 3580719, 3580479, 3580480, 3581385, 3581528, 3581041, 3581042, 3581043, 3581044, 3581045, 3581046, 3581607, 3580385, 3580481, 3580482, 3580483, 3580661, 3580662, 3580663, 3580664, 3580665, 3580484, 3580485, 3581608, 3581609, 3581610, 3581611, 3581612, 3581589, 3581613, 3580486, 3581519, 3581627, 3581628, 3581529, 3581530, 3581531, 3581629, 3581630] into oc-mr1-releaseandroid-wear-8.1.0_r1android-8.1.0_r19
Change-Id: I5eeff9fc814bc819c9dbbedb281f148b7e297eba
9 files changed, 146 insertions, 31 deletions
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index 3b83fa5265..160b52f118 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -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); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java b/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java index bf4c2afbfb..0d73511e84 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java +++ b/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java @@ -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() { diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index ee6ebb20d4..3ff40ad169 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -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); diff --git a/src/com/android/settings/fuelgauge/anomaly/AnomalyDialogFragment.java b/src/com/android/settings/fuelgauge/anomaly/AnomalyDialogFragment.java index 69d03b94c1..538f5b18b6 100644 --- a/src/com/android/settings/fuelgauge/anomaly/AnomalyDialogFragment.java +++ b/src/com/android/settings/fuelgauge/anomaly/AnomalyDialogFragment.java @@ -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(); + 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: diff --git a/src/com/android/settings/fuelgauge/anomaly/AnomalyUtils.java b/src/com/android/settings/fuelgauge/anomaly/AnomalyUtils.java index 491a3b4860..39d51dc08a 100644 --- a/src/com/android/settings/fuelgauge/anomaly/AnomalyUtils.java +++ b/src/com/android/settings/fuelgauge/anomaly/AnomalyUtils.java @@ -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())); + } + } diff --git a/src/com/android/settings/fuelgauge/anomaly/action/AnomalyAction.java b/src/com/android/settings/fuelgauge/anomaly/action/AnomalyAction.java index 87212e7b6c..3ee89d1c4a 100644 --- a/src/com/android/settings/fuelgauge/anomaly/action/AnomalyAction.java +++ b/src/com/android/settings/fuelgauge/anomaly/action/AnomalyAction.java @@ -58,5 +58,6 @@ public abstract class AnomalyAction { */ public abstract boolean isActionActive(Anomaly anomaly); + @Anomaly.AnomalyActionType public abstract int getActionType(); } diff --git a/src/com/android/settings/fuelgauge/anomaly/action/StopAndBackgroundCheckAction.java b/src/com/android/settings/fuelgauge/anomaly/action/StopAndBackgroundCheckAction.java index dba221a35f..2c799eedec 100644 --- a/src/com/android/settings/fuelgauge/anomaly/action/StopAndBackgroundCheckAction.java +++ b/src/com/android/settings/fuelgauge/anomaly/action/StopAndBackgroundCheckAction.java @@ -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); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDialogFragmentTest.java b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDialogFragmentTest.java index 1111804dd8..51a82c8883 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDialogFragmentTest.java @@ -32,6 +32,7 @@ import android.os.Build; import com.android.settings.R; import com.android.settings.fuelgauge.anomaly.action.AnomalyAction; +import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; @@ -68,7 +69,7 @@ public class AnomalyDialogFragmentTest { public void setUp() { MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; + mContext = spy(RuntimeEnvironment.application); mWakeLockAnomaly = new Anomaly.Builder() .setType(Anomaly.AnomalyType.WAKE_LOCK) .setUid(UID) @@ -94,6 +95,7 @@ public class AnomalyDialogFragmentTest { .setPackageName(PACKAGE_NAME) .setDisplayName(DISPLAY_NAME) .build(); + FakeFeatureFactory.setupForTest(mContext); } @Test @@ -166,29 +168,4 @@ public class AnomalyDialogFragmentTest { assertThat(dialog.getButton(DialogInterface.BUTTON_NEGATIVE).getText()).isEqualTo( 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)); - } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyUtilsTest.java index 8cd5a063b7..38391c9350 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyUtilsTest.java @@ -18,8 +18,13 @@ package com.android.settings.fuelgauge.anomaly; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.verify; + 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.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; @@ -31,18 +36,42 @@ import com.android.settings.fuelgauge.anomaly.checker.WakeupAlarmAnomalyDetector import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import java.util.ArrayList; +import java.util.List; + @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { ShadowKeyValueListParserWrapperImpl.class}) 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 Anomaly mWakeupAnomaly; + private Anomaly mWakeLockAnomaly; @Before public void setUp() { + MockitoAnnotations.initMocks(this); + 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 @@ -97,4 +126,47 @@ public class AnomalyUtilsTest { assertThat(mAnomalyUtils.getAnomalyDetector(Anomaly.AnomalyType.WAKEUP_ALARM)).isInstanceOf( 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)); + } } |