AdvancedPowerUsageDetailTest.java revision bfc2b11b9357c4508756243f540760458611b3b8
1ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei/*
2ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * Copyright (C) 2017 The Android Open Source Project
3ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei *
4ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * Licensed under the Apache License, Version 2.0 (the "License");
5ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * you may not use this file except in compliance with the License.
6ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * You may obtain a copy of the License at
7ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei *
8ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei *      http://www.apache.org/licenses/LICENSE-2.0
9ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei *
10ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * Unless required by applicable law or agreed to in writing, software
11ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * distributed under the License is distributed on an "AS IS" BASIS,
12ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * See the License for the specific language governing permissions and
14ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * limitations under the License.
15ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei */
16ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
17ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleipackage com.android.settings.fuelgauge;
18ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
195ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static com.google.common.truth.Truth.assertThat;
205ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak
21046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport static org.mockito.ArgumentMatchers.nullable;
223fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport static org.mockito.Matchers.any;
235ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Matchers.anyInt;
245ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Matchers.anyLong;
255ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Matchers.eq;
265ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.doAnswer;
275ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.doReturn;
285ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.mock;
295ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.spy;
305ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.verify;
315ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak
32be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport android.app.Activity;
33bfc2b11b9357c4508756243f540760458611b3b8jackqdyuleiimport android.app.AppOpsManager;
34046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport android.app.Fragment;
353fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport android.app.LoaderManager;
36ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.Context;
37ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.pm.ApplicationInfo;
385d2918a6756cdb9890ffbddf0991426486d86213jackqdyuleiimport android.content.pm.PackageManager;
39ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.graphics.drawable.Drawable;
40ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.BatteryStats;
41ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.Bundle;
425ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport android.os.UserHandle;
43040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyuleiimport android.support.v7.preference.Preference;
44841d1d5aabc33024b2e03276085b0d1dbdb92b23Fan Zhangimport android.support.v7.widget.RecyclerView;
45ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
46ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.internal.os.BatterySipper;
47ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.internal.os.BatteryStatsHelper;
48ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.SettingsActivity;
493fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport com.android.settings.fuelgauge.anomaly.Anomaly;
503fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport com.android.settings.fuelgauge.anomaly.AnomalySummaryPreferenceController;
519f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner;
52ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.TestConfig;
53ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.applications.LayoutPreference;
54040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyuleiimport com.android.settings.R;
55ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.testutils.FakeFeatureFactory;
56d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhangimport com.android.settings.testutils.shadow.ShadowEntityHeaderController;
57d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhangimport com.android.settings.widget.EntityHeaderController;
5878e3a051d8da845997590ca8e04215e43264aa3aJesse Evansimport com.android.settingslib.applications.AppUtils;
59ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settingslib.applications.ApplicationsState;
6078e3a051d8da845997590ca8e04215e43264aa3aJesse Evansimport com.android.settingslib.applications.instantapps.InstantAppDataProvider;
61841d1d5aabc33024b2e03276085b0d1dbdb92b23Fan Zhangimport com.android.settingslib.core.lifecycle.Lifecycle;
62ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
63d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhangimport org.junit.After;
64ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Before;
65ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Test;
66ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.runner.RunWith;
67ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Answers;
68ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.ArgumentCaptor;
69ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Mock;
70ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.MockitoAnnotations;
71ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.stubbing.Answer;
72f4c1cef322f2c747b606ba0d78563bbb0e887c51jackqdyuleiimport org.robolectric.RuntimeEnvironment;
73ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.annotation.Config;
74ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.util.ReflectionHelpers;
75ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
763fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport java.util.ArrayList;
773fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport java.util.List;
783fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei
79be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang@RunWith(SettingsRobolectricTestRunner.class)
80d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
81d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang        shadows = ShadowEntityHeaderController.class)
82ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleipublic class AdvancedPowerUsageDetailTest {
83ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String APP_LABEL = "app label";
84ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String SUMMARY = "summary";
85ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String[] PACKAGE_NAME = {"com.android.app"};
86040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei    private static final String USAGE_PERCENT = "16%";
87ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final int ICON_ID = 123;
88ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final int UID = 1;
89040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei    private static final int POWER_MAH = 150;
90ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long BACKGROUND_TIME_US = 100 * 1000;
91ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long FOREGROUND_TIME_US = 200 * 1000;
92ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long BACKGROUND_TIME_MS = 100;
93ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long FOREGROUND_TIME_MS = 200;
9434145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    private static final long PHONE_FOREGROUND_TIME_MS = 250 * 1000;
9534145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    private static final long PHONE_BACKGROUND_TIME_MS = 0;
96ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
97ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
98be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang    private Activity mActivity;
99ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
100f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang    private EntityHeaderController mEntityHeaderController;
101ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
102ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private LayoutPreference mHeaderPreference;
103ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
104ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private ApplicationsState mState;
105ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
106ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private ApplicationsState.AppEntry mAppEntry;
107ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
108ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private Bundle mBundle;
109ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
110ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatteryEntry mBatteryEntry;
111ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
112ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatterySipper mBatterySipper;
113ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
114ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatteryStatsHelper mBatteryStatsHelper;
115ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
116ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatteryStats.Uid mUid;
1175d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei    @Mock
1185d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei    private PackageManager mPackageManager;
1193fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    @Mock
120bfc2b11b9357c4508756243f540760458611b3b8jackqdyulei    private AppOpsManager mAppOpsManager;
121bfc2b11b9357c4508756243f540760458611b3b8jackqdyulei    @Mock
1223fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    private LoaderManager mLoaderManager;
1233fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    @Mock
1243fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    private AnomalySummaryPreferenceController mAnomalySummaryPreferenceController;
12543cbee69144b685fad373be43a35a884a0c4f3f3jackqdyulei    @Mock
12643cbee69144b685fad373be43a35a884a0c4f3f3jackqdyulei    private BatteryStats.Timer mTimer;
127040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei    private Context mContext;
128040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei    private Preference mForegroundPreference;
129040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei    private Preference mBackgroundPreference;
130040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei    private Preference mPowerUsagePreference;
131ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private AdvancedPowerUsageDetail mFragment;
132ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private FakeFeatureFactory mFeatureFactory;
133ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private SettingsActivity mTestActivity;
1343fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    private List<Anomaly> mAnomalies;
135ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
136ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Before
137ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void setUp() {
138ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        MockitoAnnotations.initMocks(this);
139040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei
140040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        mContext = spy(RuntimeEnvironment.application);
141ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        FakeFeatureFactory.setupForTest(mContext);
142ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
143ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
144ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment = spy(new AdvancedPowerUsageDetail());
145ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mContext).when(mFragment).getContext();
146be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang        doReturn(mActivity).when(mFragment).getActivity();
147ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(SUMMARY).when(mFragment).getString(anyInt());
148046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        doReturn(APP_LABEL).when(mBundle).getString(nullable(String.class));
149ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mBundle).when(mFragment).getArguments();
1503fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        doReturn(mLoaderManager).when(mFragment).getLoaderManager();
151ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
152d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang        ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
153f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        doReturn(mEntityHeaderController).when(mEntityHeaderController)
154046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                .setRecyclerView(nullable(RecyclerView.class), nullable(Lifecycle.class));
155841d1d5aabc33024b2e03276085b0d1dbdb92b23Fan Zhang        doReturn(mEntityHeaderController).when(mEntityHeaderController)
156f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang                .setButtonActions(anyInt(), anyInt());
157f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        doReturn(mEntityHeaderController).when(mEntityHeaderController)
158046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                .setIcon(nullable(Drawable.class));
159046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        doReturn(mEntityHeaderController).when(mEntityHeaderController).setIcon(nullable(
160ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                ApplicationsState.AppEntry.class));
161f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        doReturn(mEntityHeaderController).when(mEntityHeaderController)
162046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                .setLabel(nullable(String.class));
163046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        doReturn(mEntityHeaderController).when(mEntityHeaderController)
164046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                .setLabel(nullable(String.class));
165046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        doReturn(mEntityHeaderController).when(mEntityHeaderController)
166046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                .setLabel(nullable(ApplicationsState.AppEntry.class));
167046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        doReturn(mEntityHeaderController).when(mEntityHeaderController)
168046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                .setSummary(nullable(String.class));
169ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
170ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(UID).when(mBatterySipper).getUid();
171ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(APP_LABEL).when(mBatteryEntry).getLabel();
172ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(BACKGROUND_TIME_US).when(mUid).getProcessStateTime(
173ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                eq(BatteryStats.Uid.PROCESS_STATE_BACKGROUND), anyLong(), anyInt());
174ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(FOREGROUND_TIME_US).when(mUid).getProcessStateTime(
17501e690e37781553bae0dea3f7208103bb5474970jackqdyulei                eq(BatteryStats.Uid.PROCESS_STATE_TOP), anyLong(), anyInt());
17643cbee69144b685fad373be43a35a884a0c4f3f3jackqdyulei        doReturn(mTimer).when(mUid).getForegroundActivityTimer();
17743cbee69144b685fad373be43a35a884a0c4f3f3jackqdyulei        doReturn(FOREGROUND_TIME_US).when(mTimer).getTotalTimeLocked(anyLong(), anyInt());
178ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        ReflectionHelpers.setField(mBatteryEntry, "sipper", mBatterySipper);
179ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatteryEntry.iconId = ICON_ID;
180ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatterySipper.uidObj = mUid;
18134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        mBatterySipper.drainType = BatterySipper.DrainType.APP;
182ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
183ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mHeaderPreference = mHeaderPreference;
184ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mState = mState;
185f4c1cef322f2c747b606ba0d78563bbb0e887c51jackqdyulei        mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application);
186ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mAppEntry.info = mock(ApplicationInfo.class);
187ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
188ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mTestActivity = spy(new SettingsActivity());
1895d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei        doReturn(mPackageManager).when(mTestActivity).getPackageManager();
190bfc2b11b9357c4508756243f540760458611b3b8jackqdyulei        doReturn(mAppOpsManager).when(mTestActivity).getSystemService(Context.APP_OPS_SERVICE);
191ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
192ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
193ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
194046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        Answer<Void> callable = invocation -> {
195046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam            mBundle = captor.getValue();
196046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam            return null;
197ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        };
198046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser(
199046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                nullable(Fragment.class), nullable(String.class), captor.capture(), anyInt(),
200046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                nullable(CharSequence.class), nullable(UserHandle.class));
201040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei
202040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        mForegroundPreference = new Preference(mContext);
203040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        mBackgroundPreference = new Preference(mContext);
204040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        mPowerUsagePreference = new Preference(mContext);
205040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        mFragment.mForegroundPreference = mForegroundPreference;
206040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        mFragment.mBackgroundPreference = mBackgroundPreference;
207040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        mFragment.mPowerUsagePreference = mPowerUsagePreference;
2083fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        mFragment.mAnomalySummaryPreferenceController = mAnomalySummaryPreferenceController;
2093fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei
2103fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        mAnomalies = new ArrayList<>();
2113fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        mAnomalies.add(new Anomaly.Builder().setUid(UID).setType(
2123fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                Anomaly.AnomalyType.WAKE_LOCK).build());
213ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
214ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
215d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang    @After
216d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang    public void reset() {
217d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang        ShadowEntityHeaderController.reset();
218d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang    }
219d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang
220ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
221ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testInitHeader_NoAppEntry_BuildByBundle() {
222ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mAppEntry = null;
223ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.initHeader();
224ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
225046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        verify(mEntityHeaderController).setIcon(nullable(Drawable.class));
226f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        verify(mEntityHeaderController).setLabel(APP_LABEL);
227ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
228ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
229ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
230ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testInitHeader_HasAppEntry_BuildByAppEntry() {
23178e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
23278e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                new InstantAppDataProvider() {
23378e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    @Override
23478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    public boolean isInstantApp(ApplicationInfo info) {
23578e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                        return false;
23678e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    }
23778e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                });
23878e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        mFragment.mAppEntry = mAppEntry;
23978e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        mFragment.initHeader();
24078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans
241f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        verify(mEntityHeaderController).setIcon(mAppEntry);
242f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        verify(mEntityHeaderController).setLabel(mAppEntry);
243f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        verify(mEntityHeaderController).setIsInstantApp(false);
24478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans    }
24578e3a051d8da845997590ca8e04215e43264aa3aJesse Evans
24678e3a051d8da845997590ca8e04215e43264aa3aJesse Evans    @Test
24778e3a051d8da845997590ca8e04215e43264aa3aJesse Evans    public void testInitHeader_HasAppEntry_InstantApp() {
24878e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
24978e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                new InstantAppDataProvider() {
25078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    @Override
25178e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    public boolean isInstantApp(ApplicationInfo info) {
25278e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                        return true;
25378e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    }
25478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                });
255ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mAppEntry = mAppEntry;
256ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.initHeader();
257ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
258f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        verify(mEntityHeaderController).setIcon(mAppEntry);
259f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        verify(mEntityHeaderController).setLabel(mAppEntry);
260f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        verify(mEntityHeaderController).setIsInstantApp(true);
261f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang        verify(mEntityHeaderController).setSummary((CharSequence) null);
262ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
263ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
264ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
265ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testStartBatteryDetailPage_hasBasicData() {
266ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
2673fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                mBatteryEntry, USAGE_PERCENT, mAnomalies);
268ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
269ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
270ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo(
271ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                BACKGROUND_TIME_MS);
272ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo(
273ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                FOREGROUND_TIME_MS);
274ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo(
27534145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei                USAGE_PERCENT);
2763fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        assertThat(mBundle.getParcelableArrayList(
2773fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST)).isEqualTo(mAnomalies);
27834145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    }
27934145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei
28034145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    @Test
28134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    public void testStartBatteryDetailPage_typeNotApp_hasBasicData() {
28234145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        mBatterySipper.drainType = BatterySipper.DrainType.PHONE;
28334145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        mBatterySipper.usageTimeMs = PHONE_FOREGROUND_TIME_MS;
28434145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei
28534145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
2863fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                mBatteryEntry, USAGE_PERCENT, null);
28734145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei
28834145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
28934145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo(
29034145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei                PHONE_FOREGROUND_TIME_MS);
29134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo(
29234145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei                PHONE_BACKGROUND_TIME_MS);
29334145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo(
294ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                USAGE_PERCENT);
2953fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        assertThat(mBundle.getParcelableArrayList(
2963fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST)).isNull();
297ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
298ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
299ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
300ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testStartBatteryDetailPage_NormalApp() {
301ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatterySipper.mPackages = PACKAGE_NAME;
302a64839b59d4aaa21ffb83bba6f0321db2f386e96jackqdyulei        mBatteryEntry.defaultPackageName = PACKAGE_NAME[0];
303ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
3043fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                mBatteryEntry, USAGE_PERCENT, mAnomalies);
305ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
306ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo(
307ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                PACKAGE_NAME[0]);
3083fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        assertThat(mBundle.getParcelableArrayList(
3093fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST)).isEqualTo(mAnomalies);
310ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
311ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
312ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
313ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testStartBatteryDetailPage_SystemApp() {
314ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatterySipper.mPackages = null;
315ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
3163fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                mBatteryEntry, USAGE_PERCENT, null);
317ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
318ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_LABEL)).isEqualTo(APP_LABEL);
319ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_ICON_ID)).isEqualTo(ICON_ID);
3203fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isNull();
3213fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        assertThat(mBundle.getParcelableArrayList(
3223fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST)).isNull();
323ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
3245ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak
3255ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak    @Test
3265ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak    public void testStartBatteryDetailPage_WorkApp() {
3275ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak        final int appUid = 1010019;
3285ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak        mBatterySipper.mPackages = PACKAGE_NAME;
3295ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak        doReturn(appUid).when(mBatterySipper).getUid();
3305ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
3313fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                mBatteryEntry, USAGE_PERCENT, null);
3325ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak
3335ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak        verify(mTestActivity).startPreferencePanelAsUser(
334046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                nullable(Fragment.class), nullable(String.class), nullable(Bundle.class), anyInt(),
335046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                nullable(CharSequence.class), eq(new UserHandle(10)));
3365ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak    }
3372a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei
3382a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei    @Test
3392a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei    public void testStartBatteryDetailPage_noBatteryUsage_hasBasicData() {
3402a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei        final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
341046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        Answer<Void> callable = invocation -> {
342046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam            mBundle = captor.getValue();
343046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam            return null;
3442a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei        };
345046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam        doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser(nullable(Fragment.class),
346046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                nullable(String.class), captor.capture(), anyInt(), nullable(CharSequence.class),
347046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam                nullable(UserHandle.class));
3482a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei
3492a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, PACKAGE_NAME[0]);
3502a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei
3512a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo(
3522a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei                PACKAGE_NAME[0]);
3532a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo(
3542a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei                "0%");
3552a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei    }
3562a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei
357040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei    @Test
358040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei    public void testInitPreference_hasCorrectSummary() {
359040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        Bundle bundle = new Bundle(4);
360040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, BACKGROUND_TIME_MS);
361040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, FOREGROUND_TIME_MS);
362040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        bundle.putString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT, USAGE_PERCENT);
363040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        bundle.putInt(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_AMOUNT, POWER_MAH);
364040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        doReturn(bundle).when(mFragment).getArguments();
365040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei
366040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        doReturn(mContext.getText(R.string.battery_used_for)).when(mFragment).getText(
367040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei                R.string.battery_used_for);
368040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        doReturn(mContext.getText(R.string.battery_active_for)).when(mFragment).getText(
369040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei                R.string.battery_active_for);
370040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        doReturn(mContext.getString(R.string.battery_detail_power_percentage, USAGE_PERCENT,
371040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei                POWER_MAH)).when(mFragment)
372040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei                .getString(R.string.battery_detail_power_percentage, USAGE_PERCENT, POWER_MAH);
373040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei
374040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        mFragment.initPreference();
375040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei
376040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        assertThat(mForegroundPreference.getSummary().toString()).isEqualTo("Used for 0m");
377040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        assertThat(mBackgroundPreference.getSummary().toString()).isEqualTo("Active for 0m");
378040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei        assertThat(mPowerUsagePreference.getSummary()).isEqualTo("16% of total app usage (150mAh)");
379040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei    }
380040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei
3813fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    @Test
3823fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    public void testInitAnomalyInfo_anomalyNull_startAnomalyLoader() {
3833fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        doReturn(null).when(mBundle).getParcelableArrayList(
3843fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST);
3853fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei
3863fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        mFragment.initAnomalyInfo();
3873fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei
3883fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        verify(mLoaderManager).initLoader(eq(0), eq(Bundle.EMPTY), any());
3893fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    }
3903fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei
3913fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    @Test
3923fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    public void testInitAnomalyInfo_anomalyExisted_updateAnomaly() {
3933fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        doReturn(mAnomalies).when(mBundle).getParcelableArrayList(
3943fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei                AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST);
3953fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei
3963fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        mFragment.initAnomalyInfo();
3973fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei
3983fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei        verify(mAnomalySummaryPreferenceController).updateAnomalySummaryPreference(mAnomalies);
3993fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei    }
4003fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei
401ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei}
402