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