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