Make App info page support new battery entry
- Add new battery entry to app info battery preference, support both legacy and new args, controlled by P/H - Add a method to check is work profile app or not, use owner context to query correct context for feature provider - Add string for new args Bug: 178197718 Test: make RunSettingsRoboTests Change-Id: Ic93142a0c5e2851917cb3e224340a6e3e81fd801
This commit is contained in:
@@ -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(),
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user