From 513ddb14a6970454ce54ce56135c16fd7999daaa Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Fri, 2 Mar 2018 16:33:59 -0800 Subject: [PATCH] Add extra log for battery tip. For each visible battery tip, logs its type and state. For battery tip with app list, also log that list: 1. HighUsageTip: apps that used too much battery 2. RestrictAppTip: apps with anomaly, also logs the anomaly type Bug: 73888115 Test: RunSettingsRoboTests Change-Id: I1b61eb1d793d979baab4864d2d652e12260b590d --- .../BatteryTipPreferenceController.java | 4 +- .../fuelgauge/batterytip/tips/BatteryTip.java | 7 +++ .../batterytip/tips/EarlyWarningTip.java | 8 +++ .../batterytip/tips/HighUsageTip.java | 14 +++++ .../batterytip/tips/LowBatteryTip.java | 8 +++ .../batterytip/tips/RestrictAppTip.java | 21 +++++++ .../batterytip/tips/SmartBatteryTip.java | 8 +++ .../fuelgauge/batterytip/tips/SummaryTip.java | 8 +++ .../batterytip/tips/UnrestrictAppTip.java | 6 ++ .../BatteryTipDialogFragmentTest.java | 11 ++-- .../BatteryTipPreferenceControllerTest.java | 6 +- .../batterytip/tips/BatteryTipTest.java | 6 ++ .../batterytip/tips/EarlyWarningTipTest.java | 26 +++++++-- .../batterytip/tips/HighUsageTipTest.java | 22 +++++++- .../batterytip/tips/RestrictAppTipTest.java | 37 ++++++++++++ .../batterytip/tips/SmartBatteryTipTest.java | 56 +++++++++++++++++++ 16 files changed, 231 insertions(+), 17 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTipTest.java diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java index 2702bb6cb32..d2af58973d7 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java @@ -104,9 +104,7 @@ public class BatteryTipPreferenceController extends BasePreferenceController { final Preference preference = batteryTip.buildPreference(mPrefContext); mBatteryTipMap.put(preference.getKey(), batteryTip); mPreferenceGroup.addPreference(preference); - mMetricsFeatureProvider.action(mContext, - MetricsProto.MetricsEvent.ACTION_BATTERY_TIP_SHOWN, - batteryTip.getType()); + batteryTip.log(mContext, mMetricsFeatureProvider); break; } } diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java index f2526382f85..3c3a5c06992 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java @@ -25,6 +25,8 @@ import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.util.SparseIntArray; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -123,6 +125,11 @@ public abstract class BatteryTip implements Comparable, Parcelable { */ public abstract void updateState(BatteryTip tip); + /** + * Log the battery tip + */ + public abstract void log(Context context, MetricsFeatureProvider metricsFeatureProvider); + public Preference buildPreference(Context context) { Preference preference = new Preference(context); diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java index 7b8f624fe3e..908b87376a1 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java @@ -19,7 +19,9 @@ package com.android.settings.fuelgauge.batterytip.tips; import android.content.Context; import android.os.Parcel; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; /** * Tip to show early warning if battery couldn't make to usual charging time @@ -75,6 +77,12 @@ public class EarlyWarningTip extends BatteryTip { mPowerSaveModeOn = earlyWarningTip.mPowerSaveModeOn; } + @Override + public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { + metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_EARLY_WARNING_TIP, + mState); + } + @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTip.java index 475ea561e62..3ce753851e1 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTip.java @@ -21,9 +21,11 @@ import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.VisibleForTesting; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.fuelgauge.batterytip.AppInfo; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.utils.StringUtil; import java.util.List; @@ -78,6 +80,18 @@ public class HighUsageTip extends BatteryTip { mState = tip.mState; } + @Override + public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { + metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP, + mState); + for (int i = 0, size = mHighUsageAppList.size(); i < size; i++) { + final AppInfo appInfo = mHighUsageAppList.get(i); + metricsFeatureProvider.action(context, + MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP_LIST, + appInfo.packageName); + } + } + public long getScreenTimeMs() { return mScreenTimeMs; } diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTip.java index 32cbe0242b1..86237dd9a98 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTip.java @@ -20,7 +20,9 @@ import android.content.Context; import android.os.Parcel; import android.os.Parcelable; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; /** * Tip to show current battery life is short @@ -55,6 +57,12 @@ public class LowBatteryTip extends BatteryTip { mState = tip.mState; } + @Override + public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { + metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_LOW_BATTERY_TIP, + mState); + } + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public BatteryTip createFromParcel(Parcel in) { return new LowBatteryTip(in); diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java index 037457a1f8b..566cbfac882 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java @@ -19,11 +19,14 @@ package com.android.settings.fuelgauge.batterytip.tips; import android.content.Context; import android.content.res.Resources; import android.os.Parcel; +import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.fuelgauge.batterytip.AppInfo; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.ArrayList; import java.util.List; @@ -93,6 +96,24 @@ public class RestrictAppTip extends BatteryTip { } } + @Override + public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { + metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, + mState); + if (mState == StateType.NEW) { + for (int i = 0, size = mRestrictAppList.size(); i < size; i++) { + final AppInfo appInfo = mRestrictAppList.get(i); + for (Integer anomalyType : appInfo.anomalyTypes) { + metricsFeatureProvider.action(context, + MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST, + appInfo.packageName, + Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, anomalyType)); + } + + } + } + } + public List getRestrictAppList() { return mRestrictAppList; } diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTip.java index 7b408bb5e96..68c7d70be5e 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTip.java @@ -20,7 +20,9 @@ import android.content.Context; import android.os.Parcel; import android.provider.Settings; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; /** * Tip to suggest turn on smart battery if it is not on @@ -55,6 +57,12 @@ public class SmartBatteryTip extends BatteryTip { mState = tip.mState; } + @Override + public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { + metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_SMART_BATTERY_TIP, + mState); + } + public static final Creator CREATOR = new Creator() { public BatteryTip createFromParcel(Parcel in) { return new SmartBatteryTip(in); diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/SummaryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/SummaryTip.java index 458bd2e89eb..899375436a1 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/SummaryTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/SummaryTip.java @@ -20,7 +20,9 @@ import android.content.Context; import android.os.Parcel; import android.os.Parcelable; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; /** * Tip to show general summary about battery life @@ -55,6 +57,12 @@ public class SummaryTip extends BatteryTip { mState = tip.mState; } + @Override + public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { + metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_SUMMARY_TIP, + mState); + } + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public BatteryTip createFromParcel(Parcel in) { return new SummaryTip(in); diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTip.java index ec67f6a47b1..93de9b77128 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTip.java @@ -21,6 +21,7 @@ import android.os.Parcel; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.fuelgauge.batterytip.AppInfo; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; /** * Tip to suggest user to remove app restriction. This is the empty tip and it is only used in @@ -66,6 +67,11 @@ public class UnrestrictAppTip extends BatteryTip { mState = tip.mState; } + @Override + public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { + // Do nothing + } + @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java index a3dabba009e..9f1bb319a82 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java @@ -17,6 +17,7 @@ package com.android.settings.fuelgauge.batterytip; import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Mockito.spy; import static org.robolectric.Shadows.shadowOf; @@ -29,7 +30,6 @@ import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip; import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip; import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip; -import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowUtils; @@ -67,7 +67,6 @@ public class BatteryTipDialogFragmentTest { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); - FakeFeatureFactory.setupForTest(); List highUsageTips = new ArrayList<>(); final AppInfo appInfo = new AppInfo.Builder() @@ -102,7 +101,7 @@ public class BatteryTipDialogFragmentTest { ShadowAlertDialog shadowDialog = shadowOf(dialog); assertThat(shadowDialog.getMessage()) - .isEqualTo(mContext.getString(R.string.battery_tip_dialog_message, "1h")); + .isEqualTo(mContext.getString(R.string.battery_tip_dialog_message, "1h")); } @Test @@ -116,7 +115,7 @@ public class BatteryTipDialogFragmentTest { assertThat(shadowDialog.getTitle()).isEqualTo("Restrict app?"); assertThat(shadowDialog.getMessage()) - .isEqualTo(mContext.getString(R.string.battery_tip_restrict_app_dialog_message)); + .isEqualTo(mContext.getString(R.string.battery_tip_restrict_app_dialog_message)); } @Test @@ -134,7 +133,7 @@ public class BatteryTipDialogFragmentTest { assertThat(shadowDialog.getTitle()).isEqualTo("Restrict 2 apps?"); assertThat(shadowDialog.getMessage()) - .isEqualTo(mContext.getString(R.string.battery_tip_restrict_app_dialog_message)); + .isEqualTo(mContext.getString(R.string.battery_tip_restrict_app_dialog_message)); assertThat(shadowDialog.getView()).isNotNull(); } @@ -150,6 +149,6 @@ public class BatteryTipDialogFragmentTest { assertThat(shadowDialog.getTitle()).isEqualTo("Remove restriction for app?"); assertThat(shadowDialog.getMessage()) - .isEqualTo(mContext.getString(R.string.battery_tip_unrestrict_app_dialog_message)); + .isEqualTo(mContext.getString(R.string.battery_tip_unrestrict_app_dialog_message)); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java index b5cb1733f7a..6f898b249bb 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java @@ -119,9 +119,9 @@ public class BatteryTipPreferenceControllerTest { public void testUpdateBatteryTips_logBatteryTip() { mBatteryTipPreferenceController.updateBatteryTips(mOldBatteryTips); - verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class), - eq(MetricsProto.MetricsEvent.ACTION_BATTERY_TIP_SHOWN), - eq(BatteryTip.TipType.SUMMARY)); + verify(mFeatureFactory.metricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_SUMMARY_TIP, + BatteryTip.StateType.NEW); } @Test diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java index 753fc480be2..cee647ec004 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java @@ -25,6 +25,7 @@ import android.support.v7.preference.Preference; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import org.junit.Before; import org.junit.Test; @@ -122,6 +123,11 @@ public class BatteryTipTest { // do nothing } + @Override + public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { + // do nothing + } + public final Parcelable.Creator CREATOR = new Parcelable.Creator() { public BatteryTip createFromParcel(Parcel in) { return new TestBatteryTip(in); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java index c30563d9db2..1cac495d79e 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java @@ -17,28 +17,38 @@ package com.android.settings.fuelgauge.batterytip.tips; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.verify; + import android.content.Context; import android.os.Parcel; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; 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; @RunWith(SettingsRobolectricTestRunner.class) public class EarlyWarningTipTest { + @Mock + private MetricsFeatureProvider mMetricsFeatureProvider; private Context mContext; private EarlyWarningTip mEarlyWarningTip; @Before public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; mEarlyWarningTip = - new EarlyWarningTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */); + new EarlyWarningTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */); } @Test @@ -55,7 +65,7 @@ public class EarlyWarningTipTest { @Test public void testInfo_stateNew_displayPowerModeInfo() { final EarlyWarningTip tip = - new EarlyWarningTip(BatteryTip.StateType.NEW, false /* powerModeOn */); + new EarlyWarningTip(BatteryTip.StateType.NEW, false /* powerModeOn */); assertThat(tip.getTitle(mContext)).isEqualTo("Turn on Low Battery Mode"); assertThat(tip.getSummary(mContext)).isEqualTo("Extend your battery life"); @@ -65,7 +75,7 @@ public class EarlyWarningTipTest { @Test public void testInfo_stateHandled_displayPowerModeHandledInfo() { final EarlyWarningTip tip = - new EarlyWarningTip(BatteryTip.StateType.HANDLED, false /* powerModeOn */); + new EarlyWarningTip(BatteryTip.StateType.HANDLED, false /* powerModeOn */); assertThat(tip.getTitle(mContext)).isEqualTo("Low Battery Mode is on"); assertThat(tip.getSummary(mContext)).isEqualTo("Some features are limited"); @@ -75,7 +85,7 @@ public class EarlyWarningTipTest { @Test public void testUpdate_powerModeTurnedOn_typeBecomeHandled() { final EarlyWarningTip nextTip = - new EarlyWarningTip(BatteryTip.StateType.INVISIBLE, true /* powerModeOn */); + new EarlyWarningTip(BatteryTip.StateType.INVISIBLE, true /* powerModeOn */); mEarlyWarningTip.updateState(nextTip); @@ -115,4 +125,12 @@ public class EarlyWarningTipTest { assertThat(earlyWarningTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE); } + + @Test + public void testLog() { + mEarlyWarningTip.log(mContext, mMetricsFeatureProvider); + + verify(mMetricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_EARLY_WARNING_TIP, BatteryTip.StateType.NEW); + } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTipTest.java index 85b1b029c48..b038a912307 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTipTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTipTest.java @@ -17,16 +17,22 @@ package com.android.settings.fuelgauge.batterytip.tips; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.verify; + import android.content.Context; import android.os.Parcel; import android.text.format.DateUtils; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.fuelgauge.batterytip.AppInfo; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; 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 java.util.ArrayList; @@ -38,14 +44,17 @@ public class HighUsageTipTest { private static final String PACKAGE_NAME = "com.android.app"; private static final long SCREEN_TIME = 30 * DateUtils.MINUTE_IN_MILLIS; + @Mock + private MetricsFeatureProvider mMetricsFeatureProvider; private Context mContext; private HighUsageTip mBatteryTip; private List mUsageAppList; @Before public void setUp() { - mContext = RuntimeEnvironment.application; + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; mUsageAppList = new ArrayList<>(); mUsageAppList.add(new AppInfo.Builder() .setPackageName(PACKAGE_NAME) @@ -80,4 +89,15 @@ public class HighUsageTipTest { "type=2 state=0 { packageName=com.android.app,anomalyTypes={},screenTime=1800000 " + "}"); } + + @Test + public void testLog_logAppInfo() { + mBatteryTip.log(mContext, mMetricsFeatureProvider); + verify(mMetricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP, BatteryTip.StateType.NEW); + + verify(mMetricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP_LIST, + PACKAGE_NAME); + } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java index a2e91cb7beb..9d32b2b4da7 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java @@ -16,16 +16,25 @@ package com.android.settings.fuelgauge.batterytip.tips; import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Parcel; +import android.util.Pair; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.fuelgauge.batterytip.AppInfo; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import org.junit.Before; import org.junit.Test; @@ -53,6 +62,8 @@ public class RestrictAppTipTest { private ApplicationInfo mApplicationInfo; @Mock private PackageManager mPackageManager; + @Mock + private MetricsFeatureProvider mMetricsFeatureProvider; @Before public void setUp() throws Exception { @@ -132,4 +143,30 @@ public class RestrictAppTipTest { assertThat(mNewBatteryTip.toString()).isEqualTo( "type=1 state=0 { packageName=com.android.app,anomalyTypes={0, 1},screenTime=0 }"); } + + @Test + public void testLog_stateNew_logAppInfo() { + mNewBatteryTip.log(mContext, mMetricsFeatureProvider); + + verify(mMetricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, BatteryTip.StateType.NEW); + verify(mMetricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST, + PACKAGE_NAME, + Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_WAKEUP)); + verify(mMetricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST, + PACKAGE_NAME, + Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_WAKELOCK)); + } + + @Test + public void testLog_stateHandled_doNotLogAppInfo() { + mHandledBatteryTip.log(mContext, mMetricsFeatureProvider); + + verify(mMetricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, BatteryTip.StateType.HANDLED); + verify(mMetricsFeatureProvider, never()).action(any(), anyInt(), anyString(), any()); + + } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTipTest.java new file mode 100644 index 00000000000..1e4aef8fa66 --- /dev/null +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTipTest.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2018 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.fuelgauge.batterytip.tips; + +import static org.mockito.Mockito.verify; + +import android.content.Context; + +import com.android.internal.logging.nano.MetricsProto; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; + +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; + +@RunWith(SettingsRobolectricTestRunner.class) +public class SmartBatteryTipTest { + + @Mock + private MetricsFeatureProvider mMetricsFeatureProvider; + private Context mContext; + private SmartBatteryTip mSmartBatteryTip; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mContext = RuntimeEnvironment.application; + mSmartBatteryTip = new SmartBatteryTip(BatteryTip.StateType.NEW); + } + + @Test + public void testLog() { + mSmartBatteryTip.log(mContext, mMetricsFeatureProvider); + + verify(mMetricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_SMART_BATTERY_TIP, BatteryTip.StateType.NEW); + } +}