AdvancedPowerUsageDetailTest.java revision 78e3a051d8da845997590ca8e04215e43264aa3a
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
19ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static com.google.common.truth.Truth.assertThat;
2078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans
21be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Matchers.any;
22be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Matchers.anyInt;
23be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Matchers.anyLong;
24be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Matchers.anyString;
25be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Matchers.eq;
26be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Mockito.doAnswer;
27be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Mockito.doReturn;
28be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Mockito.mock;
29be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Mockito.spy;
30be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport static org.mockito.Mockito.verify;
31ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
32be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport android.app.Activity;
33ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.app.Fragment;
34ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.Context;
35ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.pm.ApplicationInfo;
365d2918a6756cdb9890ffbddf0991426486d86213jackqdyuleiimport android.content.pm.PackageManager;
37ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.graphics.drawable.Drawable;
38ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.BatteryStats;
39ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.Bundle;
40ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.view.View;
41ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
42ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.internal.os.BatterySipper;
43ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.internal.os.BatteryStatsHelper;
44ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.SettingsActivity;
45be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport com.android.settings.SettingsRobolectricTestRunner;
46ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.TestConfig;
47ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.applications.AppHeaderController;
48ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.applications.LayoutPreference;
49ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.testutils.FakeFeatureFactory;
5078e3a051d8da845997590ca8e04215e43264aa3aJesse Evansimport com.android.settingslib.applications.AppUtils;
51ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settingslib.applications.ApplicationsState;
5278e3a051d8da845997590ca8e04215e43264aa3aJesse Evansimport com.android.settingslib.applications.instantapps.InstantAppDataProvider;
53ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
54ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Before;
55ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Test;
56ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.runner.RunWith;
57ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Answers;
58ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.ArgumentCaptor;
59ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Mock;
60ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.MockitoAnnotations;
61ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.invocation.InvocationOnMock;
62ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.stubbing.Answer;
63f4c1cef322f2c747b606ba0d78563bbb0e887c51jackqdyuleiimport org.robolectric.RuntimeEnvironment;
64ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.annotation.Config;
65ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.util.ReflectionHelpers;
66ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
67be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang@RunWith(SettingsRobolectricTestRunner.class)
68ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
69ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleipublic class AdvancedPowerUsageDetailTest {
70ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String APP_LABEL = "app label";
71ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String SUMMARY = "summary";
72ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String[] PACKAGE_NAME = {"com.android.app"};
73ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String USAGE_PERCENT = "16";
74ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final int ICON_ID = 123;
75ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final int UID = 1;
76ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long BACKGROUND_TIME_US = 100 * 1000;
77ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long FOREGROUND_TIME_US = 200 * 1000;
78ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long BACKGROUND_TIME_MS = 100;
79ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long FOREGROUND_TIME_MS = 200;
8034145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    private static final long PHONE_FOREGROUND_TIME_MS = 250 * 1000;
8134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    private static final long PHONE_BACKGROUND_TIME_MS = 0;
82ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
83ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
84ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private Context mContext;
85be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
86be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang    private Activity mActivity;
87ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
88ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private AppHeaderController mAppHeaderController;
89ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
90ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private LayoutPreference mHeaderPreference;
91ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
92ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private ApplicationsState mState;
93ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
94ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private ApplicationsState.AppEntry mAppEntry;
95ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
96ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private Bundle mBundle;
97ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
98ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatteryEntry mBatteryEntry;
99ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
100ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatterySipper mBatterySipper;
101ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
102ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatteryStatsHelper mBatteryStatsHelper;
103ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
104ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatteryStats.Uid mUid;
1055d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei    @Mock
1065d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei    private PackageManager mPackageManager;
107ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private AdvancedPowerUsageDetail mFragment;
108ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private FakeFeatureFactory mFeatureFactory;
109ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private SettingsActivity mTestActivity;
110ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
111ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Before
112ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void setUp() {
113ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        MockitoAnnotations.initMocks(this);
114ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        FakeFeatureFactory.setupForTest(mContext);
115ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
116ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
117ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment = spy(new AdvancedPowerUsageDetail());
118ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mContext).when(mFragment).getContext();
119be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang        doReturn(mActivity).when(mFragment).getActivity();
120ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(SUMMARY).when(mFragment).getString(anyInt());
121ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(APP_LABEL).when(mBundle).getString(anyString());
122ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mBundle).when(mFragment).getArguments();
123ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
124ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mFeatureFactory.applicationFeatureProvider)
125ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                .newAppHeaderController(any(Fragment.class), any(View.class));
126ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setButtonActions(anyInt(),
127ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                anyInt());
128ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setIcon(any(Drawable.class));
129ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setIcon(any(
130ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                ApplicationsState.AppEntry.class));
131ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setLabel(anyString());
132ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setLabel(any(
133ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                ApplicationsState.AppEntry.class));
134ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setSummary(anyString());
135ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
136ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
137ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(UID).when(mBatterySipper).getUid();
138ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(APP_LABEL).when(mBatteryEntry).getLabel();
139ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(BACKGROUND_TIME_US).when(mUid).getProcessStateTime(
140ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                eq(BatteryStats.Uid.PROCESS_STATE_BACKGROUND), anyLong(), anyInt());
141ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(FOREGROUND_TIME_US).when(mUid).getProcessStateTime(
142ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                eq(BatteryStats.Uid.PROCESS_STATE_FOREGROUND), anyLong(), anyInt());
143ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        ReflectionHelpers.setField(mBatteryEntry, "sipper", mBatterySipper);
144ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatteryEntry.iconId = ICON_ID;
145ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatterySipper.uidObj = mUid;
14634145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        mBatterySipper.drainType = BatterySipper.DrainType.APP;
147ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
148ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mHeaderPreference = mHeaderPreference;
149ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mState = mState;
150f4c1cef322f2c747b606ba0d78563bbb0e887c51jackqdyulei        mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application);
151ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mAppEntry.info = mock(ApplicationInfo.class);
152ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
153ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mTestActivity = spy(new SettingsActivity());
1545d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei        doReturn(mPackageManager).when(mTestActivity).getPackageManager();
155ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
156ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
157ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
158ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        Answer<Void> callable = new Answer<Void>() {
159ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei            @Override
160ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei            public Void answer(InvocationOnMock invocation) throws Exception {
161ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                mBundle = captor.getValue();
162ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                return null;
163ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei            }
164ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        };
165ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser(any(), anyString(),
166ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                captor.capture(), anyInt(), any(), any());
167ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
168ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
169ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
170ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testInitHeader_NoAppEntry_BuildByBundle() {
171ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mAppEntry = null;
172ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.initHeader();
173ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
174ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        verify(mAppHeaderController).setIcon(any(Drawable.class));
175ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        verify(mAppHeaderController).setLabel(APP_LABEL);
176ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
177ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
178ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
179ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testInitHeader_HasAppEntry_BuildByAppEntry() {
18078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
18178e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                new InstantAppDataProvider() {
18278e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    @Override
18378e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    public boolean isInstantApp(ApplicationInfo info) {
18478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                        return false;
18578e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    }
18678e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                });
18778e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        mFragment.mAppEntry = mAppEntry;
18878e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        mFragment.initHeader();
18978e3a051d8da845997590ca8e04215e43264aa3aJesse Evans
19078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        verify(mAppHeaderController).setIcon(mAppEntry);
19178e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        verify(mAppHeaderController).setLabel(mAppEntry);
19278e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        verify(mAppHeaderController).setIsInstantApp(false);
19378e3a051d8da845997590ca8e04215e43264aa3aJesse Evans    }
19478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans
19578e3a051d8da845997590ca8e04215e43264aa3aJesse Evans    @Test
19678e3a051d8da845997590ca8e04215e43264aa3aJesse Evans    public void testInitHeader_HasAppEntry_InstantApp() {
19778e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
19878e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                new InstantAppDataProvider() {
19978e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    @Override
20078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    public boolean isInstantApp(ApplicationInfo info) {
20178e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                        return true;
20278e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                    }
20378e3a051d8da845997590ca8e04215e43264aa3aJesse Evans                });
204ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mAppEntry = mAppEntry;
205ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.initHeader();
206ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
207ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        verify(mAppHeaderController).setIcon(mAppEntry);
208ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        verify(mAppHeaderController).setLabel(mAppEntry);
20978e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        verify(mAppHeaderController).setIsInstantApp(true);
21078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans        verify(mAppHeaderController).setSummary((CharSequence) null);
211ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
212ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
213ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
214ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testStartBatteryDetailPage_hasBasicData() {
215ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
216ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                mBatteryEntry, USAGE_PERCENT);
217ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
218ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
219ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo(
220ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                BACKGROUND_TIME_MS);
221ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo(
222ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                FOREGROUND_TIME_MS);
223ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo(
22434145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei                USAGE_PERCENT);
22534145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    }
22634145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei
22734145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    @Test
22834145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei    public void testStartBatteryDetailPage_typeNotApp_hasBasicData() {
22934145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        mBatterySipper.drainType = BatterySipper.DrainType.PHONE;
23034145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        mBatterySipper.usageTimeMs = PHONE_FOREGROUND_TIME_MS;
23134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei
23234145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
23334145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei                mBatteryEntry, USAGE_PERCENT);
23434145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei
23534145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
23634145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo(
23734145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei                PHONE_FOREGROUND_TIME_MS);
23834145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo(
23934145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei                PHONE_BACKGROUND_TIME_MS);
24034145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo(
241ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                USAGE_PERCENT);
242ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
243ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
244ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
245ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testStartBatteryDetailPage_NormalApp() {
246ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatterySipper.mPackages = PACKAGE_NAME;
247ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
248ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                mBatteryEntry, USAGE_PERCENT);
249ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
250ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo(
251ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                PACKAGE_NAME[0]);
252ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
253ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
254ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
255ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testStartBatteryDetailPage_SystemApp() {
256ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatterySipper.mPackages = null;
257ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
258ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                mBatteryEntry, USAGE_PERCENT);
259ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
260ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_LABEL)).isEqualTo(APP_LABEL);
261ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_ICON_ID)).isEqualTo(ICON_ID);
262ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo(null);
263ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
264ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei}
265