1ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei/* 2ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * Copyright (C) 2017 The Android Open Source Project 3ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * 4ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * Licensed under the Apache License, Version 2.0 (the "License"); 5ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * you may not use this file except in compliance with the License. 6ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * You may obtain a copy of the License at 7ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * 8ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * http://www.apache.org/licenses/LICENSE-2.0 9ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * 10ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * Unless required by applicable law or agreed to in writing, software 11ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * distributed under the License is distributed on an "AS IS" BASIS, 12ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * See the License for the specific language governing permissions and 14ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * limitations under the License. 15ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei */ 16ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 17ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleipackage com.android.settings.fuelgauge; 18ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 195ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static com.google.common.truth.Truth.assertThat; 205ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak 21046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport static org.mockito.ArgumentMatchers.nullable; 223fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport static org.mockito.Matchers.any; 235ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Matchers.anyInt; 245ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Matchers.anyLong; 255ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Matchers.eq; 265ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.doAnswer; 275ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.doReturn; 285ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.mock; 295ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.spy; 305ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport static org.mockito.Mockito.verify; 315ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak 32be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhangimport android.app.Activity; 33bfc2b11b9357c4508756243f540760458611b3b8jackqdyuleiimport android.app.AppOpsManager; 34046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport android.app.Fragment; 353fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport android.app.LoaderManager; 36ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.Context; 37ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.pm.ApplicationInfo; 385d2918a6756cdb9890ffbddf0991426486d86213jackqdyuleiimport android.content.pm.PackageManager; 39ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.graphics.drawable.Drawable; 40ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.BatteryStats; 41ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.Bundle; 425ab93ad700b06cde50d052cdb70af4dad78bebaeTony Makimport android.os.UserHandle; 43040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyuleiimport android.support.v7.preference.Preference; 44841d1d5aabc33024b2e03276085b0d1dbdb92b23Fan Zhangimport android.support.v7.widget.RecyclerView; 45ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 46ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.internal.os.BatterySipper; 47ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.internal.os.BatteryStatsHelper; 48ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.SettingsActivity; 493fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport com.android.settings.fuelgauge.anomaly.Anomaly; 503fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport com.android.settings.fuelgauge.anomaly.AnomalySummaryPreferenceController; 519f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner; 52ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.TestConfig; 53ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.applications.LayoutPreference; 54040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyuleiimport com.android.settings.R; 55ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.testutils.FakeFeatureFactory; 56d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhangimport com.android.settings.testutils.shadow.ShadowEntityHeaderController; 57d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhangimport com.android.settings.widget.EntityHeaderController; 5878e3a051d8da845997590ca8e04215e43264aa3aJesse Evansimport com.android.settingslib.applications.AppUtils; 59ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settingslib.applications.ApplicationsState; 6078e3a051d8da845997590ca8e04215e43264aa3aJesse Evansimport com.android.settingslib.applications.instantapps.InstantAppDataProvider; 61841d1d5aabc33024b2e03276085b0d1dbdb92b23Fan Zhangimport com.android.settingslib.core.lifecycle.Lifecycle; 62ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 63d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhangimport org.junit.After; 64ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Before; 65ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Test; 66ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.runner.RunWith; 67ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Answers; 68ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.ArgumentCaptor; 69ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Mock; 70ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.MockitoAnnotations; 71ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.stubbing.Answer; 72f4c1cef322f2c747b606ba0d78563bbb0e887c51jackqdyuleiimport org.robolectric.RuntimeEnvironment; 73ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.annotation.Config; 74ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.util.ReflectionHelpers; 75ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 763fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport java.util.ArrayList; 773fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyuleiimport java.util.List; 783fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei 79be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang@RunWith(SettingsRobolectricTestRunner.class) 80d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, 81d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang shadows = ShadowEntityHeaderController.class) 82ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleipublic class AdvancedPowerUsageDetailTest { 83ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final String APP_LABEL = "app label"; 84ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final String SUMMARY = "summary"; 85ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final String[] PACKAGE_NAME = {"com.android.app"}; 86040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei private static final String USAGE_PERCENT = "16%"; 87ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final int ICON_ID = 123; 88ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final int UID = 1; 89040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei private static final int POWER_MAH = 150; 90ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private static final long BACKGROUND_TIME_MS = 100; 91987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private static final long FOREGROUND_ACTIVITY_TIME_MS = 123; 92987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private static final long FOREGROUND_SERVICE_TIME_MS = 444; 93987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private static final long FOREGROUND_TIME_MS = 94987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz FOREGROUND_ACTIVITY_TIME_MS + FOREGROUND_SERVICE_TIME_MS; 95987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private static final long PROCSTATE_TOP_TIME_MS = FOREGROUND_ACTIVITY_TIME_MS; 96987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private static final long BACKGROUND_TIME_US = BACKGROUND_TIME_MS * 1000; 97987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private static final long FOREGROUND_ACTIVITY_TIME_US = FOREGROUND_ACTIVITY_TIME_MS * 1000; 98987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private static final long FOREGROUND_SERVICE_TIME_US = FOREGROUND_SERVICE_TIME_MS * 1000; 99987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private static final long FOREGROUND_TIME_US = FOREGROUND_TIME_MS * 1000; 100987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private static final long PROCSTATE_TOP_TIME_US = PROCSTATE_TOP_TIME_MS * 1000; 10134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei private static final long PHONE_FOREGROUND_TIME_MS = 250 * 1000; 10234145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei private static final long PHONE_BACKGROUND_TIME_MS = 0; 103ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 104ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock(answer = Answers.RETURNS_DEEP_STUBS) 105be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang private Activity mActivity; 106ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 107f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang private EntityHeaderController mEntityHeaderController; 108ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 109ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private LayoutPreference mHeaderPreference; 110ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 111ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private ApplicationsState mState; 112ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 113ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private ApplicationsState.AppEntry mAppEntry; 114ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 115ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private Bundle mBundle; 116ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 117ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private BatteryEntry mBatteryEntry; 118ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 119ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private BatterySipper mBatterySipper; 120ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 121ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private BatteryStatsHelper mBatteryStatsHelper; 122ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Mock 123ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private BatteryStats.Uid mUid; 1245d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei @Mock 1255d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei private PackageManager mPackageManager; 1263fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei @Mock 127bfc2b11b9357c4508756243f540760458611b3b8jackqdyulei private AppOpsManager mAppOpsManager; 128bfc2b11b9357c4508756243f540760458611b3b8jackqdyulei @Mock 1293fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei private LoaderManager mLoaderManager; 1303fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei @Mock 1313fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei private AnomalySummaryPreferenceController mAnomalySummaryPreferenceController; 13243cbee69144b685fad373be43a35a884a0c4f3f3jackqdyulei @Mock 133987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private BatteryStats.Timer mForegroundActivityTimer; 134987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz @Mock 135987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz private BatteryUtils mBatteryUtils; 136040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei private Context mContext; 137040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei private Preference mForegroundPreference; 138040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei private Preference mBackgroundPreference; 139040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei private Preference mPowerUsagePreference; 140ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private AdvancedPowerUsageDetail mFragment; 141ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private FakeFeatureFactory mFeatureFactory; 142ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei private SettingsActivity mTestActivity; 1433fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei private List<Anomaly> mAnomalies; 144ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 145ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Before 146ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void setUp() { 147ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei MockitoAnnotations.initMocks(this); 148040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei 149040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei mContext = spy(RuntimeEnvironment.application); 150ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei FakeFeatureFactory.setupForTest(mContext); 151ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); 152ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 153ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment = spy(new AdvancedPowerUsageDetail()); 154ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(mContext).when(mFragment).getContext(); 155be6fab0135d785b18996e20c1be2eb49e7934881Fan Zhang doReturn(mActivity).when(mFragment).getActivity(); 156ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(SUMMARY).when(mFragment).getString(anyInt()); 157046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(APP_LABEL).when(mBundle).getString(nullable(String.class)); 158ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(mBundle).when(mFragment).getArguments(); 1593fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei doReturn(mLoaderManager).when(mFragment).getLoaderManager(); 160ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 161d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang ShadowEntityHeaderController.setUseMock(mEntityHeaderController); 162f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang doReturn(mEntityHeaderController).when(mEntityHeaderController) 163046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setRecyclerView(nullable(RecyclerView.class), nullable(Lifecycle.class)); 164841d1d5aabc33024b2e03276085b0d1dbdb92b23Fan Zhang doReturn(mEntityHeaderController).when(mEntityHeaderController) 165f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang .setButtonActions(anyInt(), anyInt()); 166f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang doReturn(mEntityHeaderController).when(mEntityHeaderController) 167046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setIcon(nullable(Drawable.class)); 168046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(mEntityHeaderController).when(mEntityHeaderController).setIcon(nullable( 169ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei ApplicationsState.AppEntry.class)); 170f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang doReturn(mEntityHeaderController).when(mEntityHeaderController) 171046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setLabel(nullable(String.class)); 172046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(mEntityHeaderController).when(mEntityHeaderController) 173046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setLabel(nullable(String.class)); 174046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(mEntityHeaderController).when(mEntityHeaderController) 175046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setLabel(nullable(ApplicationsState.AppEntry.class)); 176046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doReturn(mEntityHeaderController).when(mEntityHeaderController) 177046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam .setSummary(nullable(String.class)); 178ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 179ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(UID).when(mBatterySipper).getUid(); 180ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(APP_LABEL).when(mBatteryEntry).getLabel(); 181ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei doReturn(BACKGROUND_TIME_US).when(mUid).getProcessStateTime( 182ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei eq(BatteryStats.Uid.PROCESS_STATE_BACKGROUND), anyLong(), anyInt()); 183987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz doReturn(PROCSTATE_TOP_TIME_US).when(mUid).getProcessStateTime( 18401e690e37781553bae0dea3f7208103bb5474970jackqdyulei eq(BatteryStats.Uid.PROCESS_STATE_TOP), anyLong(), anyInt()); 185987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz doReturn(mForegroundActivityTimer).when(mUid).getForegroundActivityTimer(); 186987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz doReturn(FOREGROUND_ACTIVITY_TIME_US).when(mForegroundActivityTimer) 187987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz .getTotalTimeLocked(anyLong(), anyInt()); 188ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei ReflectionHelpers.setField(mBatteryEntry, "sipper", mBatterySipper); 189ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatteryEntry.iconId = ICON_ID; 190ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatterySipper.uidObj = mUid; 19134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei mBatterySipper.drainType = BatterySipper.DrainType.APP; 192ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 193ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.mHeaderPreference = mHeaderPreference; 194ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.mState = mState; 195f4c1cef322f2c747b606ba0d78563bbb0e887c51jackqdyulei mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application); 196ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mAppEntry.info = mock(ApplicationInfo.class); 197ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 198ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mTestActivity = spy(new SettingsActivity()); 1995d2918a6756cdb9890ffbddf0991426486d86213jackqdyulei doReturn(mPackageManager).when(mTestActivity).getPackageManager(); 200bfc2b11b9357c4508756243f540760458611b3b8jackqdyulei doReturn(mAppOpsManager).when(mTestActivity).getSystemService(Context.APP_OPS_SERVICE); 201ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 202987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz mBatteryUtils = spy(BatteryUtils.getInstance(mTestActivity)); 203987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz doReturn(FOREGROUND_SERVICE_TIME_US).when(mBatteryUtils).getForegroundServiceTotalTimeUs( 204987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz any(BatteryStats.Uid.class), anyLong()); 205987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz 206ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class); 207ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 208046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam Answer<Void> callable = invocation -> { 209046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam mBundle = captor.getValue(); 210046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam return null; 211ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei }; 212046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser( 213046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(Fragment.class), nullable(String.class), captor.capture(), anyInt(), 214046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(CharSequence.class), nullable(UserHandle.class)); 215040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei 216040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei mForegroundPreference = new Preference(mContext); 217040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei mBackgroundPreference = new Preference(mContext); 218040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei mPowerUsagePreference = new Preference(mContext); 219040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei mFragment.mForegroundPreference = mForegroundPreference; 220040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei mFragment.mBackgroundPreference = mBackgroundPreference; 221040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei mFragment.mPowerUsagePreference = mPowerUsagePreference; 2223fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei mFragment.mAnomalySummaryPreferenceController = mAnomalySummaryPreferenceController; 2233fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei 2243fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei mAnomalies = new ArrayList<>(); 2253fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei mAnomalies.add(new Anomaly.Builder().setUid(UID).setType( 2263fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei Anomaly.AnomalyType.WAKE_LOCK).build()); 227ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 228ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 229d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang @After 230d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang public void reset() { 231d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang ShadowEntityHeaderController.reset(); 232d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang } 233d7414259d03f00b08d2ad4bc223ff1d417c4c4a8Fan Zhang 234ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 235ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testInitHeader_NoAppEntry_BuildByBundle() { 236ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.mAppEntry = null; 237ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.initHeader(); 238ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 239046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(mEntityHeaderController).setIcon(nullable(Drawable.class)); 240f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setLabel(APP_LABEL); 241ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 242ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 243ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 244ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testInitHeader_HasAppEntry_BuildByAppEntry() { 24578e3a051d8da845997590ca8e04215e43264aa3aJesse Evans ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", 24678e3a051d8da845997590ca8e04215e43264aa3aJesse Evans new InstantAppDataProvider() { 24778e3a051d8da845997590ca8e04215e43264aa3aJesse Evans @Override 24878e3a051d8da845997590ca8e04215e43264aa3aJesse Evans public boolean isInstantApp(ApplicationInfo info) { 24978e3a051d8da845997590ca8e04215e43264aa3aJesse Evans return false; 25078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans } 25178e3a051d8da845997590ca8e04215e43264aa3aJesse Evans }); 25278e3a051d8da845997590ca8e04215e43264aa3aJesse Evans mFragment.mAppEntry = mAppEntry; 25378e3a051d8da845997590ca8e04215e43264aa3aJesse Evans mFragment.initHeader(); 25478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans 255f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setIcon(mAppEntry); 256f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setLabel(mAppEntry); 257f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setIsInstantApp(false); 25878e3a051d8da845997590ca8e04215e43264aa3aJesse Evans } 25978e3a051d8da845997590ca8e04215e43264aa3aJesse Evans 26078e3a051d8da845997590ca8e04215e43264aa3aJesse Evans @Test 26178e3a051d8da845997590ca8e04215e43264aa3aJesse Evans public void testInitHeader_HasAppEntry_InstantApp() { 26278e3a051d8da845997590ca8e04215e43264aa3aJesse Evans ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", 26378e3a051d8da845997590ca8e04215e43264aa3aJesse Evans new InstantAppDataProvider() { 26478e3a051d8da845997590ca8e04215e43264aa3aJesse Evans @Override 26578e3a051d8da845997590ca8e04215e43264aa3aJesse Evans public boolean isInstantApp(ApplicationInfo info) { 26678e3a051d8da845997590ca8e04215e43264aa3aJesse Evans return true; 26778e3a051d8da845997590ca8e04215e43264aa3aJesse Evans } 26878e3a051d8da845997590ca8e04215e43264aa3aJesse Evans }); 269ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.mAppEntry = mAppEntry; 270ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mFragment.initHeader(); 271ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 272f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setIcon(mAppEntry); 273f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setLabel(mAppEntry); 274f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setIsInstantApp(true); 275f5bd885a1d0cd5e61aeb3d4a03261dea6548789aFan Zhang verify(mEntityHeaderController).setSummary((CharSequence) null); 276ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 277ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 278ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 279ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testStartBatteryDetailPage_hasBasicData() { 280987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, 281987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, mAnomalies); 282ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 283ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); 284ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo( 285ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei BACKGROUND_TIME_MS); 286ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo( 287ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei FOREGROUND_TIME_MS); 288ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo( 28934145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei USAGE_PERCENT); 2903fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei assertThat(mBundle.getParcelableArrayList( 2913fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST)).isEqualTo(mAnomalies); 29234145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei } 29334145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei 29434145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei @Test 29534145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei public void testStartBatteryDetailPage_typeNotApp_hasBasicData() { 29634145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei mBatterySipper.drainType = BatterySipper.DrainType.PHONE; 29734145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei mBatterySipper.usageTimeMs = PHONE_FOREGROUND_TIME_MS; 29834145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei 299987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, 300987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); 30134145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei 30234145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); 30334145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo( 30434145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei PHONE_FOREGROUND_TIME_MS); 30534145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo( 30634145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei PHONE_BACKGROUND_TIME_MS); 30734145705de97c99eb809aaa275480f7bfa45f1edjackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo( 308ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei USAGE_PERCENT); 3093fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei assertThat(mBundle.getParcelableArrayList( 3103fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST)).isNull(); 311ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 312ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 313ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 314ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testStartBatteryDetailPage_NormalApp() { 315ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatterySipper.mPackages = PACKAGE_NAME; 316a64839b59d4aaa21ffb83bba6f0321db2f386e96jackqdyulei mBatteryEntry.defaultPackageName = PACKAGE_NAME[0]; 317987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, 318987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, mAnomalies); 319ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 320ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo( 321ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei PACKAGE_NAME[0]); 3223fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei assertThat(mBundle.getParcelableArrayList( 3233fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST)).isEqualTo(mAnomalies); 324ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 325ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 326ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei @Test 327ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei public void testStartBatteryDetailPage_SystemApp() { 328ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei mBatterySipper.mPackages = null; 329987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, 330987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); 331ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei 332ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_LABEL)).isEqualTo(APP_LABEL); 333ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_ICON_ID)).isEqualTo(ICON_ID); 3343fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isNull(); 3353fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei assertThat(mBundle.getParcelableArrayList( 3363fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST)).isNull(); 337ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei } 3385ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak 3395ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak @Test 3405ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak public void testStartBatteryDetailPage_WorkApp() { 3415ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak final int appUid = 1010019; 3425ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak mBatterySipper.mPackages = PACKAGE_NAME; 3435ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak doReturn(appUid).when(mBatterySipper).getUid(); 344987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, 345987711712cf9677bb24686df3a03a6f78adbdc85Michael Wachenschwanz mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); 3465ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak 3475ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak verify(mTestActivity).startPreferencePanelAsUser( 348046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(Fragment.class), nullable(String.class), nullable(Bundle.class), anyInt(), 349046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(CharSequence.class), eq(new UserHandle(10))); 3505ab93ad700b06cde50d052cdb70af4dad78bebaeTony Mak } 3512a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei 3522a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei @Test 3532a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei public void testStartBatteryDetailPage_noBatteryUsage_hasBasicData() { 3542a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class); 355046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam Answer<Void> callable = invocation -> { 356046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam mBundle = captor.getValue(); 357046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam return null; 3582a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei }; 359046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser(nullable(Fragment.class), 360046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(String.class), captor.capture(), anyInt(), nullable(CharSequence.class), 361046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(UserHandle.class)); 3622a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei 3632a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, PACKAGE_NAME[0]); 3642a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei 3652a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo( 3662a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei PACKAGE_NAME[0]); 3672a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo( 3682a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei "0%"); 3692a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei } 3702a95a634660199d6f1bd003f5fb6aba82e105810jackqdyulei 371040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei @Test 372fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei public void testStartBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName() throws 373fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei PackageManager.NameNotFoundException{ 374fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */); 375fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei 376fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, PACKAGE_NAME[0]); 377fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei 378fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); 379fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei } 380fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei 381fe5a771e92cb22631e688403cce45c826bbda044jackqdyulei @Test 38251872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei public void testStartBatteryDetailPage_defaultPackageNull_chooseFromBatterySipper() { 38351872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei mBatteryEntry.defaultPackageName = null; 38451872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei mBatteryEntry.sipper.mPackages = PACKAGE_NAME; 38551872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei 38651872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, 38751872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); 38851872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei 38951872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo( 39051872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei PACKAGE_NAME[0]); 39151872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei } 39251872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei 39351872ed3456582533585d229d83d4df3ff4c0cb7jackqdyulei @Test 394040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei public void testInitPreference_hasCorrectSummary() { 395040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei Bundle bundle = new Bundle(4); 396040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, BACKGROUND_TIME_MS); 397040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, FOREGROUND_TIME_MS); 398040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei bundle.putString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT, USAGE_PERCENT); 399040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei bundle.putInt(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_AMOUNT, POWER_MAH); 400040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei doReturn(bundle).when(mFragment).getArguments(); 401040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei 402040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei doReturn(mContext.getText(R.string.battery_used_for)).when(mFragment).getText( 403040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei R.string.battery_used_for); 404040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei doReturn(mContext.getText(R.string.battery_active_for)).when(mFragment).getText( 405040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei R.string.battery_active_for); 406040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei doReturn(mContext.getString(R.string.battery_detail_power_percentage, USAGE_PERCENT, 407040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei POWER_MAH)).when(mFragment) 408040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei .getString(R.string.battery_detail_power_percentage, USAGE_PERCENT, POWER_MAH); 409040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei 410040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei mFragment.initPreference(); 411040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei 412040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei assertThat(mForegroundPreference.getSummary().toString()).isEqualTo("Used for 0m"); 413040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei assertThat(mBackgroundPreference.getSummary().toString()).isEqualTo("Active for 0m"); 414040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei assertThat(mPowerUsagePreference.getSummary()).isEqualTo("16% of total app usage (150mAh)"); 415040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei } 416040c21bcb50bbaf550fa1473ee062cfc75b5e30bjackqdyulei 4173fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei @Test 4183fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei public void testInitAnomalyInfo_anomalyNull_startAnomalyLoader() { 4193fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei doReturn(null).when(mBundle).getParcelableArrayList( 4203fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST); 4213fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei 4223fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei mFragment.initAnomalyInfo(); 4233fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei 4243fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei verify(mLoaderManager).initLoader(eq(0), eq(Bundle.EMPTY), any()); 4253fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei } 4263fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei 4273fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei @Test 4283fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei public void testInitAnomalyInfo_anomalyExisted_updateAnomaly() { 4293fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei doReturn(mAnomalies).when(mBundle).getParcelableArrayList( 4303fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei AdvancedPowerUsageDetail.EXTRA_ANOMALY_LIST); 4313fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei 4323fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei mFragment.initAnomalyInfo(); 4333fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei 4343fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei verify(mAnomalySummaryPreferenceController).updateAnomalySummaryPreference(mAnomalies); 4353fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei } 4363fb054f3d3df6ed3ca07036720116f9eae4098b7jackqdyulei 437ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei} 438