Merge "Add batterysipper type check in PowerUsageFeatureProvider"

This commit is contained in:
Lei Yu
2017-03-01 00:04:12 +00:00
committed by Android (Google) Code Review
8 changed files with 267 additions and 99 deletions

View File

@@ -71,9 +71,11 @@ public class PowerUsageAdvanced extends PowerUsageBase {
mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_GRAPH);
mUsageListGroup = (PreferenceGroup) findPreference(KEY_BATTERY_USAGE_LIST);
mPowerUsageFeatureProvider = FeatureFactory.getFactory(getContext())
.getPowerUsageFeatureProvider(getContext());
mPackageManager = getContext().getPackageManager();
final Context context = getContext();
mPowerUsageFeatureProvider = FeatureFactory.getFactory(context)
.getPowerUsageFeatureProvider(context);
mPackageManager = context.getPackageManager();
}
@Override
@@ -137,9 +139,9 @@ public class PowerUsageAdvanced extends PowerUsageBase {
return UsageType.USER;
} else if (drainType == DrainType.CELL) {
return UsageType.CELL;
} else if (uid == Process.SYSTEM_UID || uid == Process.ROOT_UID) {
} else if (mPowerUsageFeatureProvider.isTypeSystem(sipper)) {
return UsageType.SYSTEM;
} else if (mPowerUsageFeatureProvider.isTypeService(sipper.mPackages)) {
} else if (mPowerUsageFeatureProvider.isTypeService(sipper)) {
return UsageType.SERVICE;
} else {
return UsageType.APP;

View File

@@ -17,38 +17,44 @@
package com.android.settings.fuelgauge;
import android.content.Intent;
import com.android.internal.os.BatterySipper;
/**
* Feature Provider used in power usage
*/
public interface PowerUsageFeatureProvider {
/**
* Check whether location setting is enabled
*/
boolean isLocationSettingEnabled(String[] packages);
/**
* Check whether location setting is enabled
*/
boolean isLocationSettingEnabled(String[] packages);
/**
* Check whether additional battery info feature is enabled.
*/
boolean isAdditionalBatteryInfoEnabled();
/**
* Check whether additional battery info feature is enabled.
*/
boolean isAdditionalBatteryInfoEnabled();
/**
* Gets an {@link Intent} to show additional battery info.
*/
Intent getAdditionalBatteryInfoIntent();
/**
* Gets an {@link Intent} to show additional battery info.
*/
Intent getAdditionalBatteryInfoIntent();
/**
* Check whether advanced ui is enabled
*/
boolean isAdvancedUiEnabled();
/**
* Check whether advanced ui is enabled
*/
boolean isAdvancedUiEnabled();
/**
* Check whether it is type service
*/
boolean isTypeService(String[] packages);
/**
* Check whether it is type service
*/
boolean isTypeService(BatterySipper sipper);
/**
* Check whether the toggle for power accounting is enabled
*/
boolean isPowerAccountingToggleEnabled();
/**
* Check whether it is type system
*/
boolean isTypeSystem(BatterySipper sipper);
/**
* Check whether the toggle for power accounting is enabled
*/
boolean isPowerAccountingToggleEnabled();
}

View File

@@ -16,9 +16,40 @@
package com.android.settings.fuelgauge;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Process;
import com.android.internal.os.BatterySipper;
import com.android.internal.util.ArrayUtils;
public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider {
private static final String PACKAGE_CALENDAR_PROVIDER = "com.android.providers.calendar";
protected PackageManager mPackageManager;
public PowerUsageFeatureProviderImpl(Context context) {
mPackageManager = context.getPackageManager();
}
@Override
public boolean isTypeService(BatterySipper sipper) {
return false;
}
@Override
public boolean isTypeSystem(BatterySipper sipper) {
final int uid = sipper.uidObj == null ? -1 : sipper.getUid();
sipper.mPackages = mPackageManager.getPackagesForUid(uid);
// Classify all the sippers to type system if the range of uid is 0...FIRST_APPLICATION_UID
if (uid >= Process.ROOT_UID && uid < Process.FIRST_APPLICATION_UID) {
return true;
} else {
return ArrayUtils.contains(sipper.mPackages, PACKAGE_CALENDAR_PROVIDER);
}
}
@Override
public boolean isLocationSettingEnabled(String[] packages) {
return false;
@@ -39,11 +70,6 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider
return false;
}
@Override
public boolean isTypeService(String[] packages) {
return false;
}
@Override
public boolean isPowerAccountingToggleEnabled() {
return false;

View File

@@ -99,16 +99,17 @@ public class PowerUsageSummary extends PowerUsageBase {
@VisibleForTesting
boolean mShowAllApps = false;
@VisibleForTesting
Preference mScreenUsagePref;
@VisibleForTesting
Preference mScreenConsumptionPref;
@VisibleForTesting
Preference mCellularNetworkPref;
@VisibleForTesting
PowerUsageFeatureProvider mPowerFeatureProvider;
private LayoutPreference mBatteryLayoutPref;
private PreferenceGroup mAppListGroup;
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
@Override
@@ -121,6 +122,8 @@ public class PowerUsageSummary extends PowerUsageBase {
mScreenUsagePref = findPreference(KEY_SCREEN_USAGE);
mScreenConsumptionPref = findPreference(KEY_SCREEN_CONSUMPTION);
mCellularNetworkPref = findPreference(KEY_CELLULAR_NETWORK);
initFeatureProvider();
}
@Override
@@ -193,14 +196,11 @@ public class PowerUsageSummary extends PowerUsageBase {
menu.add(Menu.NONE, MENU_HIGH_POWER_APPS, Menu.NONE, R.string.high_power_apps);
PowerUsageFeatureProvider powerUsageFeatureProvider =
FeatureFactory.getFactory(getContext()).getPowerUsageFeatureProvider(getContext());
if (powerUsageFeatureProvider != null &&
powerUsageFeatureProvider.isAdditionalBatteryInfoEnabled()) {
if (mPowerFeatureProvider.isAdditionalBatteryInfoEnabled()) {
menu.add(Menu.NONE, MENU_ADDITIONAL_BATTERY_INFO,
Menu.NONE, R.string.additional_battery_info);
}
if (powerUsageFeatureProvider.isPowerAccountingToggleEnabled()) {
if (mPowerFeatureProvider.isPowerAccountingToggleEnabled()) {
menu.add(Menu.NONE, MENU_TOGGLE_APPS, Menu.NONE,
mShowAllApps ? R.string.hide_extra_apps : R.string.show_all_apps);
}
@@ -579,12 +579,12 @@ public class PowerUsageSummary extends PowerUsageBase {
@VisibleForTesting
boolean shouldHideSipper(BatterySipper sipper) {
final DrainType drainType = sipper.drainType;
final int uid = sipper.getUid();
return drainType == DrainType.IDLE || drainType == DrainType.CELL
|| drainType == DrainType.SCREEN || uid == Process.ROOT_UID
|| uid == Process.SYSTEM_UID
|| (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP;
|| drainType == DrainType.SCREEN
|| (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP
|| mPowerFeatureProvider.isTypeService(sipper)
|| mPowerFeatureProvider.isTypeSystem(sipper);
}
@VisibleForTesting
@@ -620,6 +620,13 @@ public class PowerUsageSummary extends PowerUsageBase {
mBatteryLayoutPref = layoutPreference;
}
@VisibleForTesting
void initFeatureProvider() {
final Context context = getContext();
mPowerFeatureProvider = FeatureFactory.getFactory(context)
.getPowerUsageFeatureProvider(context);
}
private static List<BatterySipper> getFakeStats() {
ArrayList<BatterySipper> stats = new ArrayList<>();
float use = 5;

View File

@@ -80,7 +80,7 @@ public class FeatureFactoryImpl extends FeatureFactory {
@Override
public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) {
if (mPowerUsageFeatureProvider == null) {
mPowerUsageFeatureProvider = new PowerUsageFeatureProviderImpl();
mPowerUsageFeatureProvider = new PowerUsageFeatureProviderImpl(context);
}
return mPowerUsageFeatureProvider;
}