OSDN Git Service

Add extra log for battery tip.
authorjackqdyulei <jackqdyulei@google.com>
Sat, 3 Mar 2018 00:33:59 +0000 (16:33 -0800)
committerLei Yu <jackqdyulei@google.com>
Fri, 9 Mar 2018 23:47:03 +0000 (15:47 -0800)
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

16 files changed:
src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java
src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTip.java
src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTip.java
src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java
src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTip.java
src/com/android/settings/fuelgauge/batterytip/tips/SummaryTip.java
src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTip.java
tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java
tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java
tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTipTest.java
tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java
tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/SmartBatteryTipTest.java [new file with mode: 0644]

index 2702bb6..d2af589 100644 (file)
@@ -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;
             }
         }
index f252638..3c3a5c0 100644 (file)
@@ -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<BatteryTip>, 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);
 
index 7b8f624..908b873 100644 (file)
@@ -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
@@ -76,6 +78,12 @@ public class EarlyWarningTip extends BatteryTip {
     }
 
     @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);
         dest.writeBoolean(mPowerSaveModeOn);
index 475ea56..3ce7538 100644 (file)
@@ -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;
     }
index 32cbe02..86237dd 100644 (file)
@@ -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);
index 037457a..566cbfa 100644 (file)
@@ -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<AppInfo> getRestrictAppList() {
         return mRestrictAppList;
     }
index 7b408bb..68c7d70 100644 (file)
@@ -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);
index 458bd2e..8993754 100644 (file)
@@ -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);
index ec67f6a..93de9b7 100644 (file)
@@ -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
@@ -67,6 +68,11 @@ public class UnrestrictAppTip extends BatteryTip {
     }
 
     @Override
+    public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) {
+        // Do nothing
+    }
+
+    @Override
     public void writeToParcel(Parcel dest, int flags) {
         super.writeToParcel(dest, flags);
         dest.writeParcelable(mAppInfo, flags);
index a3dabba..9f1bb31 100644 (file)
@@ -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<AppInfo> 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));
     }
 }
index b5cb173..6f898b2 100644 (file)
@@ -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
index 753fc48..cee647e 100644 (file)
@@ -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);
index c30563d..1cac495 100644 (file)
@@ -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);
+    }
 }
index 85b1b02..b038a91 100644 (file)
@@ -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<AppInfo> 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);
+    }
 }
index a2e91cb..9d32b2b 100644 (file)
 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 (file)
index 0000000..1e4aef8
--- /dev/null
@@ -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);
+    }
+}