diff --git a/res/values/strings.xml b/res/values/strings.xml
index 90708da8871..edc1ae5c473 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10479,13 +10479,15 @@
Allowing %1$s to always run in the background may reduce battery life.
\n\nYou can change this later from Settings > Apps & notifications.
- %1$s use for past 24 hours
-
-
- Power management
+ %1$s use since last full charge
+
+ %1$s use for past 24 hours
- No battery use for past 24 hours
+ No battery use since last full charge
+
+
+ No battery use for past 24 hours
App settings
diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
index 1f0777a5ff4..d83f5d147dd 100644
--- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
@@ -18,11 +18,14 @@ package com.android.settings.applications.appinfo;
import android.content.Context;
import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.BatteryUsageStats;
import android.os.Bundle;
import android.os.UidBatteryConsumer;
+import android.os.UserHandle;
import android.os.UserManager;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
@@ -40,6 +43,8 @@ import com.android.settings.fuelgauge.BatteryDiffEntry;
import com.android.settings.fuelgauge.BatteryEntry;
import com.android.settings.fuelgauge.BatteryUsageStatsLoader;
import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
@@ -50,6 +55,7 @@ import java.util.List;
public class AppBatteryPreferenceController extends BasePreferenceController
implements LifecycleObserver, OnResume, OnPause {
+ private static final String TAG = "AppBatteryPreferenceController";
private static final String KEY_BATTERY = "battery";
@VisibleForTesting
@@ -61,13 +67,16 @@ public class AppBatteryPreferenceController extends BasePreferenceController
BatteryUsageStats mBatteryUsageStats;
@VisibleForTesting
UidBatteryConsumer mUidBatteryConsumer;
+ @VisibleForTesting
+ BatteryDiffEntry mBatteryDiffEntry;
+ @VisibleForTesting
+ boolean mIsChartGraphEnabled;
private Preference mPreference;
private final AppInfoDashboardFragment mParent;
private String mBatteryPercent;
private final String mPackageName;
private final int mUid;
- private BatteryDiffEntry mBatteryDiffEntry;
private boolean mBatteryUsageStatsLoaded = false;
private boolean mBatteryDiffEntriesLoaded = false;
@@ -78,6 +87,7 @@ public class AppBatteryPreferenceController extends BasePreferenceController
mBatteryUtils = BatteryUtils.getInstance(mContext);
mPackageName = packageName;
mUid = uid;
+ refreshFeatureFlag(mContext);
if (lifecycle != null) {
lifecycle.addObserver(this);
}
@@ -108,7 +118,8 @@ public class AppBatteryPreferenceController extends BasePreferenceController
mParent.getActivity(),
mParent,
mBatteryDiffEntry,
- mBatteryPercent,
+ Utils.formatPercentage(
+ mBatteryDiffEntry.getPercentOfTotal(), /* round */ true),
/*isValidToShowSummary=*/ true,
/*slotInformation=*/ null);
return true;
@@ -120,8 +131,9 @@ public class AppBatteryPreferenceController extends BasePreferenceController
final BatteryEntry entry = new BatteryEntry(mContext, /* handler */null, userManager,
mUidBatteryConsumer, /* isHidden */ false,
mUidBatteryConsumer.getUid(), /* packages */ null, mPackageName);
- AdvancedPowerUsageDetail.startBatteryDetailPage(mParent.getActivity(), mParent,
- entry, mBatteryPercent);
+ AdvancedPowerUsageDetail.startBatteryDetailPage(mParent.getActivity(), mParent, entry,
+ mIsChartGraphEnabled ? Utils.formatPercentage(0) : mBatteryPercent,
+ !mIsChartGraphEnabled);
} else {
AdvancedPowerUsageDetail.startBatteryDetailPage(mParent.getActivity(), mParent,
mPackageName);
@@ -161,12 +173,29 @@ public class AppBatteryPreferenceController extends BasePreferenceController
@Override
protected void onPostExecute(BatteryDiffEntry batteryDiffEntry) {
mBatteryDiffEntry = batteryDiffEntry;
- mBatteryDiffEntriesLoaded = true;
- mPreference.setEnabled(mBatteryUsageStatsLoaded);
+ updateBatteryWithDiffEntry();
}
}.execute();
}
+ @VisibleForTesting
+ void updateBatteryWithDiffEntry() {
+ if (mIsChartGraphEnabled) {
+ if (mBatteryDiffEntry != null && mBatteryDiffEntry.mConsumePower > 0) {
+ mBatteryPercent = Utils.formatPercentage(
+ mBatteryDiffEntry.getPercentOfTotal(), /* round */ true);
+ mPreference.setSummary(mContext.getString(
+ R.string.battery_summary_24hr, mBatteryPercent));
+ } else {
+ mPreference.setSummary(
+ mContext.getString(R.string.no_battery_summary_24hr));
+ }
+ }
+
+ mBatteryDiffEntriesLoaded = true;
+ mPreference.setEnabled(mBatteryUsageStatsLoaded);
+ }
+
private void onLoadFinished() {
if (mBatteryUsageStats == null) {
return;
@@ -182,10 +211,33 @@ public class AppBatteryPreferenceController extends BasePreferenceController
}
}
+ private void refreshFeatureFlag(Context context) {
+ if (isWorkProfile(context)) {
+ try {
+ context = context.createPackageContextAsUser(
+ context.getPackageName(), 0, UserHandle.OWNER);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(TAG, "context.createPackageContextAsUser() fail: " + e);
+ }
+ }
+
+ final PowerUsageFeatureProvider powerUsageFeatureProvider =
+ FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
+ mIsChartGraphEnabled = powerUsageFeatureProvider.isChartGraphEnabled(context);
+ }
+
+ private boolean isWorkProfile(Context context) {
+ final UserManager userManager = context.getSystemService(UserManager.class);
+ return userManager.isManagedProfile() && !userManager.isSystemUser();
+ }
+
@VisibleForTesting
void updateBattery() {
mBatteryUsageStatsLoaded = true;
mPreference.setEnabled(mBatteryDiffEntriesLoaded);
+ if (mIsChartGraphEnabled) {
+ return;
+ }
if (isBatteryStatsAvailable()) {
final int percentOfMax = (int) mBatteryUtils.calculateBatteryPercent(
mUidBatteryConsumer.getConsumedPower(), mBatteryUsageStats.getConsumedPower(),
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index ca228e68218..3319e1b1492 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -157,7 +157,8 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
/** Launches battery details page for an individual battery consumer. */
public static void startBatteryDetailPage(Activity caller,
- InstrumentedPreferenceFragment fragment, BatteryEntry entry, String usagePercent) {
+ InstrumentedPreferenceFragment fragment, BatteryEntry entry, String usagePercent,
+ boolean isValidToShowSummary) {
final LaunchBatteryDetailPageArgs launchArgs = new LaunchBatteryDetailPageArgs();
// configure the launch argument.
launchArgs.mUsagePercent = usagePercent;
@@ -166,8 +167,8 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
launchArgs.mUid = entry.getUid();
launchArgs.mIconId = entry.iconId;
launchArgs.mConsumedPower = (int) entry.getConsumedPower();
- launchArgs.mForegroundTimeMs = entry.getTimeInForegroundMs();
- launchArgs.mBackgroundTimeMs = entry.getTimeInBackgroundMs();
+ launchArgs.mForegroundTimeMs = isValidToShowSummary ? entry.getTimeInForegroundMs() : 0;
+ launchArgs.mBackgroundTimeMs = isValidToShowSummary ? entry.getTimeInBackgroundMs() : 0;
launchArgs.mIsUserEntry = entry.isUserEntry();
startBatteryDetailPage(caller, fragment, launchArgs);
}
diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
index 1dc572d91af..a6269bf42ea 100644
--- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
@@ -188,7 +188,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro
PowerGaugePreference pgp = (PowerGaugePreference) preference;
BatteryEntry entry = pgp.getInfo();
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity,
- mFragment, entry, pgp.getPercent());
+ mFragment, entry, pgp.getPercent(), /*isValidToShowSummary=*/ true);
return true;
}
return false;
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
index 21159475a1a..bcca0f20b6f 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
@@ -39,6 +39,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.SettingsActivity;
+import com.android.settings.fuelgauge.BatteryDiffEntry;
import com.android.settings.fuelgauge.BatteryUtils;
import org.junit.Before;
@@ -76,6 +77,8 @@ public class AppBatteryPreferenceControllerTest {
private PackageManager mPackageManager;
@Mock
private LoaderManager mLoaderManager;
+ @Mock
+ private BatteryDiffEntry mBatteryDiffEntry;
private Context mContext;
private AppInfoDashboardFragment mFragment;
@@ -134,7 +137,7 @@ public class AppBatteryPreferenceControllerTest {
mController.updateBattery();
assertThat(mBatteryPreference.getSummary())
- .isEqualTo("No battery use for past 24 hours");
+ .isEqualTo("No battery use since last full charge");
}
@Test
@@ -147,6 +150,29 @@ public class AppBatteryPreferenceControllerTest {
mController.updateBattery();
+ assertThat(mBatteryPreference.getSummary()).isEqualTo("60% use since last full charge");
+ }
+
+ @Test
+ public void updateBatteryWithDiffEntry_noConsumePower_summaryNo() {
+ mController.displayPreference(mScreen);
+ mController.mIsChartGraphEnabled = true;
+
+ mController.updateBatteryWithDiffEntry();
+
+ assertThat(mBatteryPreference.getSummary()).isEqualTo("No battery use for past 24 hours");
+ }
+
+ @Test
+ public void updateBatteryWithDiffEntry_withConsumePower_summaryPercent() {
+ mController.displayPreference(mScreen);
+ mController.mIsChartGraphEnabled = true;
+ mBatteryDiffEntry.mConsumePower = 1;
+ mController.mBatteryDiffEntry = mBatteryDiffEntry;
+ when(mBatteryDiffEntry.getPercentOfTotal()).thenReturn(60.0);
+
+ mController.updateBatteryWithDiffEntry();
+
assertThat(mBatteryPreference.getSummary()).isEqualTo("60% use for past 24 hours");
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 014ce2921ff..b50e0832ec0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -611,7 +611,7 @@ public class AdvancedPowerUsageDetailTest {
@Test
public void testStartBatteryDetailPage_hasBasicData() {
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
- mBatteryEntry, USAGE_PERCENT);
+ mBatteryEntry, USAGE_PERCENT, /*isValidToShowSummary=*/ true);
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME))
@@ -622,12 +622,26 @@ public class AdvancedPowerUsageDetailTest {
.isEqualTo(USAGE_PERCENT);
}
+ @Test
+ public void testStartBatteryDetailPage_invalidToShowSummary_noFGBDData() {
+ AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
+ mBatteryEntry, USAGE_PERCENT, /*isValidToShowSummary=*/ false);
+
+ assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
+ assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME))
+ .isEqualTo(0);
+ assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME))
+ .isEqualTo(0);
+ assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
+ .isEqualTo(USAGE_PERCENT);
+ }
+
@Test
public void testStartBatteryDetailPage_NormalApp() {
when(mBatteryEntry.getDefaultPackageName()).thenReturn(PACKAGE_NAME[0]);
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
- mBatteryEntry, USAGE_PERCENT);
+ mBatteryEntry, USAGE_PERCENT, /*isValidToShowSummary=*/ true);
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo(
PACKAGE_NAME[0]);
@@ -638,7 +652,7 @@ public class AdvancedPowerUsageDetailTest {
when(mBatteryEntry.getDefaultPackageName()).thenReturn(null);
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
- mBatteryEntry, USAGE_PERCENT);
+ mBatteryEntry, USAGE_PERCENT, /*isValidToShowSummary=*/ true);
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_LABEL)).isEqualTo(APP_LABEL);
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_ICON_ID)).isEqualTo(ICON_ID);
@@ -651,7 +665,7 @@ public class AdvancedPowerUsageDetailTest {
doReturn(appUid).when(mBatteryEntry).getUid();
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
- mBatteryEntry, USAGE_PERCENT);
+ mBatteryEntry, USAGE_PERCENT, /*isValidToShowSummary=*/ true);
verify(mActivity).startActivityAsUser(any(Intent.class), eq(new UserHandle(10)));
}
@@ -663,7 +677,7 @@ public class AdvancedPowerUsageDetailTest {
final int currentUser = 20;
ShadowActivityManager.setCurrentUser(currentUser);
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
- mBatteryEntry, USAGE_PERCENT);
+ mBatteryEntry, USAGE_PERCENT, /*isValidToShowSummary=*/ true);
verify(mActivity).startActivityAsUser(any(Intent.class), eq(new UserHandle(currentUser)));
}