AdvancedPowerUsageDetailTest.java revision 046400c2c407429da47e6b2230ba8bbd21c43e9b
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; 225ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Matchers.anyInt; 235ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Matchers.anyLong; 245ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Matchers.eq; 255ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.doAnswer; 265ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.doReturn; 275ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.mock; 285ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.spy; 295ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.verify; 305ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak 31be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport android.app.Activity; 32046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport android.app.Fragment; 33ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.Context; 34ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.pm.ApplicationInfo; 355d2918a6756cdb9890ffbddf0991426486d86213jackqdyuleiimport android.content.pm.PackageManager; 36ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.graphics.drawable.Drawable; 37ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.BatteryStats; 38ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.Bundle; 395ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport android.os.UserHandle; 40841d1d5aabc33024b2e03276085b0d1dbdb92b23Fan Zhangimport android.support.v7.widget.RecyclerView; 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.LayoutPreference; 48ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.testutils.FakeFeatureFactory; 49d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhangimport com.android.settings.testutils.shadow.ShadowEntityHeaderController; 50d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhangimport com.android.settings.widget.EntityHeaderController; 5178e3a051d8da845997590ca8e04215e43264aa3aJesse Evansimport com.android.settingslib.applications.AppUtils; 52ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settingslib.applications.ApplicationsState; 5378e3a051d8da845997590ca8e04215e43264aa3aJesse Evansimport com.android.settingslib.applications.instantapps.InstantAppDataProvider; 54841d1d5aabc33024b2e03276085b0d1dbdb92b23Fan Zhangimport com.android.settingslib.core.lifecycle.Lifecycle; 55ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 56d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhangimport org.junit.After; 57ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Before; 58ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Test; 59ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.runner.RunWith; 60ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Answers; 61ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.ArgumentCaptor; 62ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Mock; 63ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.MockitoAnnotations; 64ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.stubbing.Answer; 65f4c1cef322f2c747b606ba0d78563bbb0e887c51jackqdyuleiimport org.robolectric.RuntimeEnvironment; 66ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.annotation.Config; 67ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.util.ReflectionHelpers; 68ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 69be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang@RunWith(SettingsRobolectricTestRunner.class) 70d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, 71d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang shadows = ShadowEntityHeaderController.class) 72ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleipublic class AdvancedPowerUsageDetailTest { 73ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final String APP_LABEL = "app label"; 74ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final String SUMMARY = "summary"; 75ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final String[] PACKAGE_NAME = {"com.android.app"}; 76ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final String USAGE_PERCENT = "16"; 77ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final int ICON_ID = 123; 78ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final int UID = 1; 79ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final long BACKGROUND_TIME_US = 100 * 1000; 80ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final long FOREGROUND_TIME_US = 200 * 1000; 81ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final long BACKGROUND_TIME_MS = 100; 82ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final long FOREGROUND_TIME_MS = 200; 8334145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei private static final long PHONE_FOREGROUND_TIME_MS = 250 * 1000; 8434145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei private static final long PHONE_BACKGROUND_TIME_MS = 0; 85ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 86ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock(answer = Answers.RETURNS_DEEP_STUBS) 87ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private Context mContext; 88be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang @Mock(answer = Answers.RETURNS_DEEP_STUBS) 89be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang private Activity mActivity; 90ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 91f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang private EntityHeaderController mEntityHeaderController; 92ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 93ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private LayoutPreference mHeaderPreference; 94ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 95ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private ApplicationsState mState; 96ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 97ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private ApplicationsState.AppEntry mAppEntry; 98ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 99ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private Bundle mBundle; 100ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 101ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private BatteryEntry mBatteryEntry; 102ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 103ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private BatterySipper mBatterySipper; 104ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 105ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private BatteryStatsHelper mBatteryStatsHelper; 106ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 107ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private BatteryStats.Uid mUid; 1085d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei @Mock 1095d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei private PackageManager mPackageManager; 110ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private AdvancedPowerUsageDetail mFragment; 111ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private FakeFeatureFactory mFeatureFactory; 112ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private SettingsActivity mTestActivity; 113ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 114ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Before 115ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void setUp() { 116ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei MockitoAnnotations.initMocks(this); 117ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei FakeFeatureFactory.setupForTest(mContext); 118ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); 119ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 120ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment = spy(new AdvancedPowerUsageDetail()); 121ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(mContext).when(mFragment).getContext(); 122be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang doReturn(mActivity).when(mFragment).getActivity(); 123ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(SUMMARY).when(mFragment).getString(anyInt()); 124046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(APP_LABEL).when(mBundle).getString(nullable(String.class)); 125ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(mBundle).when(mFragment).getArguments(); 126ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 127d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang ShadowEntityHeaderController.setUseMock(mEntityHeaderController); 128f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang doReturn(mEntityHeaderController).when(mEntityHeaderController) 129046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setRecyclerView(nullable(RecyclerView.class), nullable(Lifecycle.class)); 130841d1d5aabc33024b2e03276085b0d1dbdb92b23Fan Zhang doReturn(mEntityHeaderController).when(mEntityHeaderController) 131f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang .setButtonActions(anyInt(), anyInt()); 132f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang doReturn(mEntityHeaderController).when(mEntityHeaderController) 133046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setIcon(nullable(Drawable.class)); 134046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(mEntityHeaderController).when(mEntityHeaderController).setIcon(nullable( 135ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei ApplicationsState.AppEntry.class)); 136f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang doReturn(mEntityHeaderController).when(mEntityHeaderController) 137046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setLabel(nullable(String.class)); 138046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(mEntityHeaderController).when(mEntityHeaderController) 139046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setLabel(nullable(String.class)); 140046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(mEntityHeaderController).when(mEntityHeaderController) 141046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setLabel(nullable(ApplicationsState.AppEntry.class)); 142046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(mEntityHeaderController).when(mEntityHeaderController) 143046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setSummary(nullable(String.class)); 144ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 145ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(UID).when(mBatterySipper).getUid(); 146ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(APP_LABEL).when(mBatteryEntry).getLabel(); 147ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(BACKGROUND_TIME_US).when(mUid).getProcessStateTime( 148ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei eq(BatteryStats.Uid.PROCESS_STATE_BACKGROUND), anyLong(), anyInt()); 149ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(FOREGROUND_TIME_US).when(mUid).getProcessStateTime( 15001e690e37781553bae0dea3f7208103bb5474970jackqdyulei eq(BatteryStats.Uid.PROCESS_STATE_TOP), anyLong(), anyInt()); 151ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei ReflectionHelpers.setField(mBatteryEntry, "sipper", mBatterySipper); 152ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatteryEntry.iconId = ICON_ID; 153ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatterySipper.uidObj = mUid; 15434145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei mBatterySipper.drainType = BatterySipper.DrainType.APP; 155ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 156ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.mHeaderPreference = mHeaderPreference; 157ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.mState = mState; 158f4c1cef322f2c747b606ba0d78563bbb0e887c51jackqdyulei mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application); 159ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mAppEntry.info = mock(ApplicationInfo.class); 160ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 161ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mTestActivity = spy(new SettingsActivity()); 1625d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei doReturn(mPackageManager).when(mTestActivity).getPackageManager(); 163ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 164ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class); 165ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 166046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam Answer<Void> callable = invocation -> { 167046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam mBundle = captor.getValue(); 168046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam return null; 169ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei }; 170046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser( 171046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(Fragment.class), nullable(String.class), captor.capture(), anyInt(), 172046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(CharSequence.class), nullable(UserHandle.class)); 173ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 174ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 175d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang @After 176d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang public void reset() { 177d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang ShadowEntityHeaderController.reset(); 178d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang } 179d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang 180ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 181ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testInitHeader_NoAppEntry_BuildByBundle() { 182ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.mAppEntry = null; 183ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.initHeader(); 184ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 185046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(mEntityHeaderController).setIcon(nullable(Drawable.class)); 186f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setLabel(APP_LABEL); 187ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 188ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 189ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 190ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testInitHeader_HasAppEntry_BuildByAppEntry() { 19178e3a051d8da845997590ca8e04215e43264aa3aJesse Evans ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", 19278e3a051d8da845997590ca8e04215e43264aa3aJesse Evans new InstantAppDataProvider() { 19378e3a051d8da845997590ca8e04215e43264aa3aJesse Evans @Override 19478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans public boolean isInstantApp(ApplicationInfo info) { 19578e3a051d8da845997590ca8e04215e43264aa3aJesse Evans return false; 19678e3a051d8da845997590ca8e04215e43264aa3aJesse Evans } 19778e3a051d8da845997590ca8e04215e43264aa3aJesse Evans }); 19878e3a051d8da845997590ca8e04215e43264aa3aJesse Evans mFragment.mAppEntry = mAppEntry; 19978e3a051d8da845997590ca8e04215e43264aa3aJesse Evans mFragment.initHeader(); 20078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans 201f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setIcon(mAppEntry); 202f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setLabel(mAppEntry); 203f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setIsInstantApp(false); 20478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans } 20578e3a051d8da845997590ca8e04215e43264aa3aJesse Evans 20678e3a051d8da845997590ca8e04215e43264aa3aJesse Evans @Test 20778e3a051d8da845997590ca8e04215e43264aa3aJesse Evans public void testInitHeader_HasAppEntry_InstantApp() { 20878e3a051d8da845997590ca8e04215e43264aa3aJesse Evans ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", 20978e3a051d8da845997590ca8e04215e43264aa3aJesse Evans new InstantAppDataProvider() { 21078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans @Override 21178e3a051d8da845997590ca8e04215e43264aa3aJesse Evans public boolean isInstantApp(ApplicationInfo info) { 21278e3a051d8da845997590ca8e04215e43264aa3aJesse Evans return true; 21378e3a051d8da845997590ca8e04215e43264aa3aJesse Evans } 21478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans }); 215ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.mAppEntry = mAppEntry; 216ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.initHeader(); 217ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 218f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setIcon(mAppEntry); 219f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setLabel(mAppEntry); 220f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setIsInstantApp(true); 221f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setSummary((CharSequence) null); 222ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 223ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 224ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 225ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testStartBatteryDetailPage_hasBasicData() { 226ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0, 227ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatteryEntry, USAGE_PERCENT); 228ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 229ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); 230ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo( 231ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei BACKGROUND_TIME_MS); 232ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo( 233ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei FOREGROUND_TIME_MS); 234ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo( 23534145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei USAGE_PERCENT); 23634145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei } 23734145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei 23834145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei @Test 23934145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei public void testStartBatteryDetailPage_typeNotApp_hasBasicData() { 24034145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei mBatterySipper.drainType = BatterySipper.DrainType.PHONE; 24134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei mBatterySipper.usageTimeMs = PHONE_FOREGROUND_TIME_MS; 24234145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei 24334145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0, 24434145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei mBatteryEntry, USAGE_PERCENT); 24534145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei 24634145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); 24734145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo( 24834145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei PHONE_FOREGROUND_TIME_MS); 24934145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo( 25034145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei PHONE_BACKGROUND_TIME_MS); 25134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo( 252ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei USAGE_PERCENT); 253ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 254ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 255ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 256ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testStartBatteryDetailPage_NormalApp() { 257ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatterySipper.mPackages = PACKAGE_NAME; 258ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0, 259ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatteryEntry, USAGE_PERCENT); 260ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 261ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo( 262ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei PACKAGE_NAME[0]); 263ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 264ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 265ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 266ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testStartBatteryDetailPage_SystemApp() { 267ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatterySipper.mPackages = null; 268ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0, 269ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatteryEntry, USAGE_PERCENT); 270ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 271ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_LABEL)).isEqualTo(APP_LABEL); 272ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_ICON_ID)).isEqualTo(ICON_ID); 273ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo(null); 274ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 2755ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak 2765ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak @Test 2775ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak public void testStartBatteryDetailPage_WorkApp() { 2785ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak final int appUid = 1010019; 2795ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak mBatterySipper.mPackages = PACKAGE_NAME; 2805ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak doReturn(appUid).when(mBatterySipper).getUid(); 2815ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0, 2825ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak mBatteryEntry, USAGE_PERCENT); 2835ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak 2845ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak verify(mTestActivity).startPreferencePanelAsUser( 285046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(Fragment.class), nullable(String.class), nullable(Bundle.class), anyInt(), 286046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(CharSequence.class), eq(new UserHandle(10))); 2875ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak } 2882a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei 2892a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei @Test 2902a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei public void testStartBatteryDetailPage_noBatteryUsage_hasBasicData() { 2912a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class); 292046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam Answer<Void> callable = invocation -> { 293046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam mBundle = captor.getValue(); 294046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam return null; 2952a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei }; 296046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser(nullable(Fragment.class), 297046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(String.class), captor.capture(), anyInt(), nullable(CharSequence.class), 298046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(UserHandle.class)); 2992a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei 3002a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, PACKAGE_NAME[0]); 3012a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei 3022a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo( 3032a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei PACKAGE_NAME[0]); 3042a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo( 3052a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei "0%"); 3062a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei } 3072a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei 308ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei} 309