2 * Copyright (C) 2018 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.android.settings.fuelgauge.batterytip.tips;
18 import static com.google.common.truth.Truth.assertThat;
20 import static org.mockito.Mockito.verify;
22 import android.content.Context;
23 import android.os.Parcel;
24 import android.text.format.DateUtils;
26 import com.android.internal.logging.nano.MetricsProto;
27 import com.android.settings.fuelgauge.batterytip.AppInfo;
28 import com.android.settings.testutils.SettingsRobolectricTestRunner;
29 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 import org.mockito.Mock;
35 import org.mockito.MockitoAnnotations;
36 import org.robolectric.RuntimeEnvironment;
38 import java.util.ArrayList;
39 import java.util.List;
41 @RunWith(SettingsRobolectricTestRunner.class)
42 public class HighUsageTipTest {
44 private static final String PACKAGE_NAME = "com.android.app";
45 private static final long SCREEN_TIME = 30 * DateUtils.MINUTE_IN_MILLIS;
48 private MetricsFeatureProvider mMetricsFeatureProvider;
49 private Context mContext;
50 private HighUsageTip mBatteryTip;
51 private List<AppInfo> mUsageAppList;
55 MockitoAnnotations.initMocks(this);
57 mContext = RuntimeEnvironment.application;
58 mUsageAppList = new ArrayList<>();
59 mUsageAppList.add(new AppInfo.Builder()
60 .setPackageName(PACKAGE_NAME)
61 .setScreenOnTimeMs(SCREEN_TIME)
63 mBatteryTip = new HighUsageTip(SCREEN_TIME, mUsageAppList);
67 public void testParcelable() {
69 Parcel parcel = Parcel.obtain();
70 mBatteryTip.writeToParcel(parcel, mBatteryTip.describeContents());
71 parcel.setDataPosition(0);
73 final HighUsageTip parcelTip = new HighUsageTip(parcel);
75 assertThat(parcelTip.getTitle(mContext)).isEqualTo("Phone used more than usual");
76 assertThat(parcelTip.getType()).isEqualTo(BatteryTip.TipType.HIGH_DEVICE_USAGE);
77 assertThat(parcelTip.getState()).isEqualTo(BatteryTip.StateType.NEW);
78 assertThat(parcelTip.getScreenTimeMs()).isEqualTo(SCREEN_TIME);
79 assertThat(parcelTip.mHighUsageAppList).isNotNull();
80 assertThat(parcelTip.mHighUsageAppList.size()).isEqualTo(1);
81 final AppInfo app = parcelTip.mHighUsageAppList.get(0);
82 assertThat(app.packageName).isEqualTo(PACKAGE_NAME);
83 assertThat(app.screenOnTimeMs).isEqualTo(SCREEN_TIME);
87 public void toString_containsAppData() {
88 assertThat(mBatteryTip.toString()).isEqualTo(
89 "type=2 state=0 { packageName=com.android.app,anomalyTypes={},screenTime=1800000 "
94 public void testLog_logAppInfo() {
95 mBatteryTip.log(mContext, mMetricsFeatureProvider);
96 verify(mMetricsFeatureProvider).action(mContext,
97 MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP, BatteryTip.StateType.NEW);
99 verify(mMetricsFeatureProvider).action(mContext,
100 MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP_LIST,