Merge "Add batterysipper type check in PowerUsageFeatureProvider"
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user