Add new battery entry into AppInfo page launch variable

- Insert uid as launch variable
 - Add new launch type into AppInfo page

Bug: 178197718
Test: make RunSettingsRoboTests
Change-Id: I8c68bebd02491dbbc1516bbebc14254ed06940f6
This commit is contained in:
Wesley.CW Wang
2021-05-20 00:01:49 +08:00
parent 31389702ad
commit 92feb9e8fc
4 changed files with 75 additions and 7 deletions

View File

@@ -18,6 +18,7 @@ package com.android.settings.applications.appinfo;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.os.AsyncTask;
import android.os.BatteryUsageStats; import android.os.BatteryUsageStats;
import android.os.Bundle; import android.os.Bundle;
import android.os.UidBatteryConsumer; import android.os.UidBatteryConsumer;
@@ -34,6 +35,8 @@ import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail; import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
import com.android.settings.fuelgauge.BatteryChartPreferenceController;
import com.android.settings.fuelgauge.BatteryDiffEntry;
import com.android.settings.fuelgauge.BatteryEntry; import com.android.settings.fuelgauge.BatteryEntry;
import com.android.settings.fuelgauge.BatteryUsageStatsLoader; import com.android.settings.fuelgauge.BatteryUsageStatsLoader;
import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.BatteryUtils;
@@ -63,13 +66,18 @@ public class AppBatteryPreferenceController extends BasePreferenceController
private final AppInfoDashboardFragment mParent; private final AppInfoDashboardFragment mParent;
private String mBatteryPercent; private String mBatteryPercent;
private final String mPackageName; private final String mPackageName;
private final int mUid;
private BatteryDiffEntry mBatteryDiffEntry;
private boolean mBatteryUsageStatsLoaded = false;
private boolean mBatteryDiffEntriesLoaded = false;
public AppBatteryPreferenceController(Context context, AppInfoDashboardFragment parent, public AppBatteryPreferenceController(Context context, AppInfoDashboardFragment parent,
String packageName, Lifecycle lifecycle) { String packageName, int uid, Lifecycle lifecycle) {
super(context, KEY_BATTERY); super(context, KEY_BATTERY);
mParent = parent; mParent = parent;
mBatteryUtils = BatteryUtils.getInstance(mContext); mBatteryUtils = BatteryUtils.getInstance(mContext);
mPackageName = packageName; mPackageName = packageName;
mUid = uid;
if (lifecycle != null) { if (lifecycle != null) {
lifecycle.addObserver(this); lifecycle.addObserver(this);
} }
@@ -87,6 +95,7 @@ public class AppBatteryPreferenceController extends BasePreferenceController
super.displayPreference(screen); super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey()); mPreference = screen.findPreference(getPreferenceKey());
mPreference.setEnabled(false); mPreference.setEnabled(false);
loadBatteryDiffEntries();
} }
@Override @Override
@@ -94,6 +103,17 @@ public class AppBatteryPreferenceController extends BasePreferenceController
if (!KEY_BATTERY.equals(preference.getKey())) { if (!KEY_BATTERY.equals(preference.getKey())) {
return false; return false;
} }
if (mBatteryDiffEntry != null) {
AdvancedPowerUsageDetail.startBatteryDetailPage(
mParent.getActivity(),
mParent,
mBatteryDiffEntry,
mBatteryPercent,
/*isValidToShowSummary=*/ true,
/*slotInformation=*/ null);
return true;
}
if (isBatteryStatsAvailable()) { if (isBatteryStatsAvailable()) {
final UserManager userManager = final UserManager userManager =
(UserManager) mContext.getSystemService(Context.USER_SERVICE); (UserManager) mContext.getSystemService(Context.USER_SERVICE);
@@ -121,6 +141,31 @@ public class AppBatteryPreferenceController extends BasePreferenceController
AppInfoDashboardFragment.LOADER_BATTERY_USAGE_STATS); AppInfoDashboardFragment.LOADER_BATTERY_USAGE_STATS);
} }
private void loadBatteryDiffEntries() {
new AsyncTask<Void, Void, BatteryDiffEntry>() {
@Override
protected BatteryDiffEntry doInBackground(Void... unused) {
final List<BatteryDiffEntry> batteryDiffEntries =
BatteryChartPreferenceController.getBatteryLast24HrUsageData(mContext);
if (batteryDiffEntries != null) {
for (BatteryDiffEntry batteryDiffEntry : batteryDiffEntries) {
if (batteryDiffEntry.mBatteryHistEntry.mUid == mUid) {
return batteryDiffEntry;
}
}
}
return null;
}
@Override
protected void onPostExecute(BatteryDiffEntry batteryDiffEntry) {
mBatteryDiffEntry = batteryDiffEntry;
mBatteryDiffEntriesLoaded = true;
mPreference.setEnabled(mBatteryUsageStatsLoaded);
}
}.execute();
}
private void onLoadFinished() { private void onLoadFinished() {
if (mBatteryUsageStats == null) { if (mBatteryUsageStats == null) {
return; return;
@@ -138,7 +183,8 @@ public class AppBatteryPreferenceController extends BasePreferenceController
@VisibleForTesting @VisibleForTesting
void updateBattery() { void updateBattery() {
mPreference.setEnabled(true); mBatteryUsageStatsLoaded = true;
mPreference.setEnabled(mBatteryDiffEntriesLoaded);
if (isBatteryStatsAvailable()) { if (isBatteryStatsAvailable()) {
final int percentOfMax = (int) mBatteryUtils.calculateBatteryPercent( final int percentOfMax = (int) mBatteryUtils.calculateBatteryPercent(
mUidBatteryConsumer.getConsumedPower(), mBatteryUsageStats.getConsumedPower(), mUidBatteryConsumer.getConsumedPower(), mBatteryUsageStats.getConsumedPower(),

View File

@@ -111,6 +111,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
private PackageInfo mPackageInfo; private PackageInfo mPackageInfo;
private int mUserId; private int mUserId;
private String mPackageName; private String mPackageName;
private int mUid;
private DevicePolicyManager mDpm; private DevicePolicyManager mDpm;
private UserManager mUserManager; private UserManager mUserManager;
@@ -297,7 +298,8 @@ public class AppInfoDashboardFragment extends DashboardFragment
(SettingsActivity) getActivity(), this, lifecycle, packageName, mState, (SettingsActivity) getActivity(), this, lifecycle, packageName, mState,
REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN); REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
controllers.add(mAppButtonsPreferenceController); controllers.add(mAppButtonsPreferenceController);
controllers.add(new AppBatteryPreferenceController(context, this, packageName, lifecycle)); controllers.add(new AppBatteryPreferenceController(
context, this, packageName, getUid(), lifecycle));
controllers.add(new AppMemoryPreferenceController(context, this, lifecycle)); controllers.add(new AppMemoryPreferenceController(context, this, lifecycle));
controllers.add(new DefaultHomeShortcutPreferenceController(context, packageName)); controllers.add(new DefaultHomeShortcutPreferenceController(context, packageName));
controllers.add(new DefaultBrowserShortcutPreferenceController(context, packageName)); controllers.add(new DefaultBrowserShortcutPreferenceController(context, packageName));
@@ -568,7 +570,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
final Bundle args = getArguments(); final Bundle args = getArguments();
mPackageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null; mPackageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null;
if (mPackageName == null) { if (mPackageName == null) {
final Intent intent = (args == null) ? final Intent intent = args == null ?
getActivity().getIntent() : (Intent) args.getParcelable("intent"); getActivity().getIntent() : (Intent) args.getParcelable("intent");
if (intent != null) { if (intent != null) {
mPackageName = intent.getData().getSchemeSpecificPart(); mPackageName = intent.getData().getSchemeSpecificPart();
@@ -577,6 +579,22 @@ public class AppInfoDashboardFragment extends DashboardFragment
return mPackageName; return mPackageName;
} }
private int getUid() {
if (mUid > 0) {
return mUid;
}
final Bundle args = getArguments();
mUid = (args != null) ? args.getInt(ARG_PACKAGE_UID) : -1;
if (mUid <= 0) {
final Intent intent = args == null
? getActivity().getIntent() : (Intent) args.getParcelable("intent");
if (intent != null && intent.getExtras() != null) {
mUid = intent.getIntExtra("uId", -1);
}
}
return mUid;
}
@VisibleForTesting @VisibleForTesting
void retrieveAppEntry() { void retrieveAppEntry() {
final Activity activity = getActivity(); final Activity activity = getActivity();

View File

@@ -50,8 +50,8 @@ import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil;
import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.FooterPreference;
import java.util.Arrays;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -638,7 +638,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
return true; return true;
} }
static List<BatteryDiffEntry> getBatteryLast24HrUsageData(Context context) { public static List<BatteryDiffEntry> getBatteryLast24HrUsageData(Context context) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
FeatureFactory.getFactory(context) FeatureFactory.getFactory(context)

View File

@@ -96,7 +96,11 @@ public class AppBatteryPreferenceControllerTest {
when(mOtherUidBatteryConsumer.getUid()).thenReturn(OTHER_UID); when(mOtherUidBatteryConsumer.getUid()).thenReturn(OTHER_UID);
mController = spy(new AppBatteryPreferenceController( mController = spy(new AppBatteryPreferenceController(
RuntimeEnvironment.application, mFragment, "package1", null /* lifecycle */)); RuntimeEnvironment.application,
mFragment,
"package1" /* packageName */,
0 /* uId */,
null /* lifecycle */));
mController.mBatteryUtils = mBatteryUtils; mController.mBatteryUtils = mBatteryUtils;
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mBatteryPreference); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mBatteryPreference);
} }