diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index 3b83fa52653..0142e629fa1 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -16,7 +16,9 @@ package com.android.settings.fuelgauge; +import android.annotation.UserIdInt; import android.app.Activity; +import android.app.ActivityManager; import android.app.LoaderManager; import android.app.admin.DevicePolicyManager; import android.content.Context; @@ -152,7 +154,14 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements caller.startPreferencePanelAsUser(fragment, AdvancedPowerUsageDetail.class.getName(), args, R.string.battery_details_title, null, - new UserHandle(UserHandle.getUserId(sipper.getUid()))); + new UserHandle(getUserIdToLaunchAdvancePowerUsageDetail(sipper))); + } + + private static @UserIdInt int getUserIdToLaunchAdvancePowerUsageDetail(BatterySipper bs) { + if (bs.drainType == BatterySipper.DrainType.USER) { + return ActivityManager.getCurrentUser(); + } + return UserHandle.getUserId(bs.getUid()); } public static void startBatteryDetailPage(SettingsActivity caller, PreferenceFragment fragment, diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 3d44c40708a..1596aca70b8 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -428,7 +428,8 @@ public class PowerUsageSummary extends PowerUsageBase implements } private static boolean isSystemUid(int uid) { - return uid >= Process.SYSTEM_UID && uid < Process.FIRST_APPLICATION_UID; + final int appUid = UserHandle.getAppId(uid); + return appUid >= Process.SYSTEM_UID && appUid < Process.FIRST_APPLICATION_UID; } /** diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java index 54d043c419d..c9fcf26ddb2 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java @@ -53,6 +53,7 @@ import com.android.settings.TestConfig; import com.android.settings.applications.LayoutPreference; import com.android.settings.R; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.shadow.ShadowActivityManager; import com.android.settings.testutils.shadow.ShadowEntityHeaderController; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.applications.AppUtils; @@ -78,7 +79,7 @@ import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = ShadowEntityHeaderController.class) + shadows = {ShadowEntityHeaderController.class, ShadowActivityManager.class}) public class AdvancedPowerUsageDetailTest { private static final String APP_LABEL = "app label"; private static final String SUMMARY = "summary"; @@ -349,6 +350,22 @@ public class AdvancedPowerUsageDetailTest { nullable(CharSequence.class), eq(new UserHandle(10))); } + @Test + public void testStartBatteryDetailPage_typeUser_startByCurrentUser() { + mBatterySipper.drainType = BatterySipper.DrainType.USER; + mBatterySipper.userId = 10; + + final int currentUser = 20; + ShadowActivityManager.setCurrentUser(currentUser); + AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, + mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); + + + verify(mTestActivity).startPreferencePanelAsUser( + nullable(Fragment.class), nullable(String.class), nullable(Bundle.class), anyInt(), + nullable(CharSequence.class), eq(new UserHandle(currentUser))); + } + @Test public void testStartBatteryDetailPage_noBatteryUsage_hasBasicData() { final ArgumentCaptor captor = ArgumentCaptor.forClass(Bundle.class); diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowActivityManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowActivityManager.java new file mode 100644 index 00000000000..b7698b302ce --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowActivityManager.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.testutils.shadow; + +import android.app.ActivityManager; + +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@Implements(ActivityManager.class) +public class ShadowActivityManager { + private static int sCurrentUserId = 0; + + @Implementation + public static int getCurrentUser() { + return sCurrentUserId; + } + + public static void setCurrentUser(int userId) { + sCurrentUserId = userId; + } +}