1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 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 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 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. 15 */ 16 package com.android.settings.fuelgauge.batterytip.tips; 17 18 import static com.google.common.truth.Truth.assertThat; 19 20 import static org.mockito.Mockito.verify; 21 22 import android.content.Context; 23 import android.os.Parcel; 24 import android.text.format.DateUtils; 25 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; 30 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; 37 38 import java.util.ArrayList; 39 import java.util.List; 40 41 @RunWith(SettingsRobolectricTestRunner.class) 42 public class HighUsageTipTest { 43 44 private static final String PACKAGE_NAME = "com.android.app"; 45 private static final long SCREEN_TIME = 30 * DateUtils.MINUTE_IN_MILLIS; 46 private static final long LAST_FULL_CHARGE_TIME = 20 * DateUtils.MINUTE_IN_MILLIS; 47 48 @Mock 49 private MetricsFeatureProvider mMetricsFeatureProvider; 50 private Context mContext; 51 private HighUsageTip mBatteryTip; 52 private List<AppInfo> mUsageAppList; 53 54 @Before 55 public void setUp() { 56 MockitoAnnotations.initMocks(this); 57 58 mContext = RuntimeEnvironment.application; 59 mUsageAppList = new ArrayList<>(); 60 mUsageAppList.add(new AppInfo.Builder() 61 .setPackageName(PACKAGE_NAME) 62 .setScreenOnTimeMs(SCREEN_TIME) 63 .build()); 64 mBatteryTip = new HighUsageTip(LAST_FULL_CHARGE_TIME, mUsageAppList); 65 } 66 67 @Test 68 public void testParcelable() { 69 70 Parcel parcel = Parcel.obtain(); 71 mBatteryTip.writeToParcel(parcel, mBatteryTip.describeContents()); 72 parcel.setDataPosition(0); 73 74 final HighUsageTip parcelTip = new HighUsageTip(parcel); 75 76 assertThat(parcelTip.getTitle(mContext)).isEqualTo("Phone used more than usual"); 77 assertThat(parcelTip.getType()).isEqualTo(BatteryTip.TipType.HIGH_DEVICE_USAGE); 78 assertThat(parcelTip.getState()).isEqualTo(BatteryTip.StateType.NEW); 79 assertThat(parcelTip.getLastFullChargeTimeMs()).isEqualTo(LAST_FULL_CHARGE_TIME); 80 assertThat(parcelTip.mHighUsageAppList).isNotNull(); 81 assertThat(parcelTip.mHighUsageAppList.size()).isEqualTo(1); 82 final AppInfo app = parcelTip.mHighUsageAppList.get(0); 83 assertThat(app.packageName).isEqualTo(PACKAGE_NAME); 84 assertThat(app.screenOnTimeMs).isEqualTo(SCREEN_TIME); 85 } 86 87 @Test 88 public void toString_containsAppData() { 89 assertThat(mBatteryTip.toString()).isEqualTo( 90 "type=2 state=0 { packageName=com.android.app,anomalyTypes={},screenTime=1800000 " 91 + "}"); 92 } 93 94 @Test 95 public void testLog_logAppInfo() { 96 mBatteryTip.log(mContext, mMetricsFeatureProvider); 97 verify(mMetricsFeatureProvider).action(mContext, 98 MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP, BatteryTip.StateType.NEW); 99 100 verify(mMetricsFeatureProvider).action(mContext, 101 MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP_LIST, 102 PACKAGE_NAME); 103 } 104 } 105