summaryrefslogtreecommitdiff
path: root/Settings/src/com/android/tv/settings/device/eco/EnergyModesHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'Settings/src/com/android/tv/settings/device/eco/EnergyModesHelper.java')
-rw-r--r--Settings/src/com/android/tv/settings/device/eco/EnergyModesHelper.java88
1 files changed, 69 insertions, 19 deletions
diff --git a/Settings/src/com/android/tv/settings/device/eco/EnergyModesHelper.java b/Settings/src/com/android/tv/settings/device/eco/EnergyModesHelper.java
index e8ce5efd2..7e00afc92 100644
--- a/Settings/src/com/android/tv/settings/device/eco/EnergyModesHelper.java
+++ b/Settings/src/com/android/tv/settings/device/eco/EnergyModesHelper.java
@@ -29,6 +29,7 @@ import android.content.res.Resources;
import android.os.PowerManager;
import android.os.PowerManager.LowPowerStandbyPolicy;
import android.provider.DeviceConfig;
+import android.text.TextUtils;
import android.util.ArraySet;
import com.android.tv.settings.R;
@@ -44,6 +45,7 @@ import java.util.Set;
public final class EnergyModesHelper {
public static final String NAMESPACE_LOW_POWER_STANDBY = "low_power_standby";
public static final String KEY_ENABLE_POLICY = "enable_policy";
+ private static final String LIST_ITEM_BULLET = "\u2022 ";
private final Context mContext;
@@ -85,6 +87,20 @@ public final class EnergyModesHelper {
@ArrayRes
public final int vendorAllowedFeaturesRes;
+ /**
+ * Base mode from which all allowed reasons, allowed features, and exempt packages
+ * will be inherited.
+ */
+ @Nullable
+ public final EnergyMode baseMode;
+
+ /**
+ * ResId of String added to the top of the feature list shown in the UI to indicate
+ * accumulated features from the base mode (eg. "All essential features").
+ */
+ @StringRes
+ public final int baseModeFeaturesRes;
+
public EnergyMode(@StringRes int identifierRes, boolean ecoHighlighted,
boolean enableLowPowerStandby, @BoolRes int enabledRes, @StringRes int titleRes,
@StringRes int subtitleRes, int colorRes, @DrawableRes int iconRes,
@@ -92,7 +108,8 @@ public final class EnergyModesHelper {
@DrawableRes int ecoHintIconRes, @ArrayRes int baseExemptPackagesRes,
@ArrayRes int vendorExemptPackagesRes, @IntegerRes int baseAllowedReasonsRes,
@IntegerRes int vendorAllowedReasonsRes, @ArrayRes int baseAllowedFeaturesRes,
- @ArrayRes int vendorAllowedFeaturesRes) {
+ @ArrayRes int vendorAllowedFeaturesRes, @Nullable EnergyMode baseMode,
+ @StringRes int baseModeFeaturesRes) {
this.ecoHighlighted = ecoHighlighted;
this.enableLowPowerStandby = enableLowPowerStandby;
this.enabledRes = enabledRes;
@@ -111,13 +128,15 @@ public final class EnergyModesHelper {
this.vendorAllowedReasonsRes = vendorAllowedReasonsRes;
this.baseAllowedFeaturesRes = baseAllowedFeaturesRes;
this.vendorAllowedFeaturesRes = vendorAllowedFeaturesRes;
+ this.baseMode = baseMode;
+ this.baseModeFeaturesRes = baseModeFeaturesRes;
}
}
public static EnergyMode MODE_LOW_ENERGY = new EnergyMode(
R.string.energy_mode_low_identifier,
- true,
- true,
+ /* ecoHighlighted= */ true,
+ /* enableLowPowerStandby= */ true,
R.bool.energy_mode_low_enabled,
R.string.energy_mode_low_title,
R.string.energy_mode_low_subtitle,
@@ -132,12 +151,13 @@ public final class EnergyModesHelper {
R.integer.energy_mode_low_baseAllowedReasons,
R.integer.energy_mode_low_vendorAllowedReasons,
R.array.energy_mode_low_baseAllowedFeatures,
- R.array.energy_mode_low_vendorAllowedFeatures);
+ R.array.energy_mode_low_vendorAllowedFeatures,
+ /* baseMode= */ null, /* baseModeFeaturesRes= */ 0);
public static EnergyMode MODE_MODERATE_ENERGY = new EnergyMode(
R.string.energy_mode_moderate_identifier,
- false,
- true,
+ /* ecoHighlighted= */ false,
+ /* enableLowPowerStandby= */ true,
R.bool.energy_mode_moderate_enabled,
R.string.energy_mode_moderate_title,
R.string.energy_mode_moderate_subtitle,
@@ -146,18 +166,20 @@ public final class EnergyModesHelper {
R.string.energy_mode_moderate_info,
R.array.energy_mode_moderate_features,
R.string.energy_mode_moderate_eco_hint,
- 0,
+ /* ecoHintIconRes= */ 0,
R.array.energy_mode_moderate_baseExemptPackages,
R.array.energy_mode_moderate_vendorExemptPackages,
R.integer.energy_mode_moderate_baseAllowedReasons,
R.integer.energy_mode_moderate_vendorAllowedReasons,
R.array.energy_mode_moderate_baseAllowedFeatures,
- R.array.energy_mode_moderate_vendorAllowedFeatures);
+ R.array.energy_mode_moderate_vendorAllowedFeatures,
+ MODE_LOW_ENERGY,
+ R.string.energy_mode_moderate_all_low_features);
public static EnergyMode MODE_HIGH_ENERGY = new EnergyMode(
R.string.energy_mode_high_identifier,
- false,
- true,
+ /* ecoHighlighted= */ false,
+ /* enableLowPowerStandby= */ true,
R.bool.energy_mode_high_enabled,
R.string.energy_mode_high_title,
R.string.energy_mode_high_subtitle,
@@ -172,7 +194,9 @@ public final class EnergyModesHelper {
R.integer.energy_mode_high_baseAllowedReasons,
R.integer.energy_mode_high_vendorAllowedReasons,
R.array.energy_mode_high_baseAllowedFeatures,
- R.array.energy_mode_high_vendorAllowedFeatures);
+ R.array.energy_mode_high_vendorAllowedFeatures,
+ MODE_MODERATE_ENERGY,
+ R.string.energy_mode_moderate_all_moderate_features);
public static EnergyMode MODE_UNRESTRICTED = new EnergyMode(
R.string.energy_mode_unrestricted_identifier,
@@ -187,7 +211,8 @@ public final class EnergyModesHelper {
R.array.energy_mode_high_features,
R.string.energy_mode_high_eco_hint,
R.drawable.ic_bolt,
- 0, 0, 0, 0, 0, 0);
+ 0, 0, 0, 0, 0, 0, null,
+ R.string.energy_mode_moderate_all_moderate_features);
public static EnergyMode[] ENERGY_MODES = new EnergyMode[] {
MODE_LOW_ENERGY, MODE_MODERATE_ENERGY, MODE_HIGH_ENERGY, MODE_UNRESTRICTED };
@@ -209,7 +234,7 @@ public final class EnergyModesHelper {
private boolean areEnergyModesEnabled() {
boolean enableEnergyModes = mContext.getResources().getBoolean(R.bool.enable_energy_modes);
boolean customPoliciesEnabled = DeviceConfig.getBoolean(NAMESPACE_LOW_POWER_STANDBY,
- KEY_ENABLE_POLICY, false);
+ KEY_ENABLE_POLICY, true);
return enableEnergyModes && customPoliciesEnabled && isLowPowerStandbySupported(mContext);
}
@@ -301,7 +326,7 @@ public final class EnergyModesHelper {
return summary.toString();
}
- /** Returns the list of features */
+ /** Returns the list of features formatted for display in the Settings UI */
@Nullable
public String getFeaturesList(EnergyMode mode) {
String[] features = mContext.getResources().getStringArray(mode.featuresRes);
@@ -310,8 +335,18 @@ public final class EnergyModesHelper {
}
StringBuilder featureList = new StringBuilder();
+
+ if (mode.baseModeFeaturesRes != 0) {
+ final String baseModeFeatures = mContext.getString(mode.baseModeFeaturesRes);
+ if (!TextUtils.isEmpty(baseModeFeatures)) {
+ featureList.append(LIST_ITEM_BULLET);
+ featureList.append(baseModeFeatures);
+ featureList.append("\n");
+ }
+ }
+
for (int i = 0; i < features.length; i++) {
- featureList.append("\u2022 ");
+ featureList.append(LIST_ITEM_BULLET);
featureList.append(features[i]);
if (i < features.length - 1) {
featureList.append("\n");
@@ -347,18 +382,28 @@ public final class EnergyModesHelper {
}
@NonNull
- private Set<String> getExemptPackages(EnergyMode mode) {
+ private Set<String> getExemptPackages(@NonNull EnergyMode mode) {
final String identifier = mContext.getString(mode.identifierRes);
final Set<String> exemptPackages = combineStringArrays(mode.baseExemptPackagesRes,
"policy_" + identifier + "_exempt_packages", mode.vendorExemptPackagesRes);
+
+ if (mode.baseMode != null) {
+ exemptPackages.addAll(getExemptPackages(mode.baseMode));
+ }
+
return exemptPackages;
}
@NonNull
- Set<String> getAllowedFeatures(EnergyMode mode) {
+ Set<String> getAllowedFeatures(@NonNull EnergyMode mode) {
final String identifier = mContext.getString(mode.identifierRes);
final Set<String> allowedFeatures = combineStringArrays(mode.baseAllowedFeaturesRes,
"policy_" + identifier + "_allowed_features", mode.vendorAllowedFeaturesRes);
+
+ if (mode.baseMode != null) {
+ allowedFeatures.addAll(getAllowedFeatures(mode.baseMode));
+ }
+
return allowedFeatures;
}
@@ -377,7 +422,7 @@ public final class EnergyModesHelper {
return result;
}
- private int getAllowedReasons(EnergyMode mode) {
+ private int getAllowedReasons(@NonNull EnergyMode mode) {
final Resources resources = mContext.getResources();
final String identifier = mContext.getString(mode.identifierRes);
@@ -385,9 +430,14 @@ public final class EnergyModesHelper {
final int deviceConfigAllowedReasonOverride = DeviceConfig.getInt(
NAMESPACE_LOW_POWER_STANDBY, "policy_" + identifier + "_allowed_reasons", -1);
final int vendorAllowedReasons = resources.getInteger(mode.vendorAllowedReasonsRes);
- final int allowedReasons = ((deviceConfigAllowedReasonOverride != -1
+ int allowedReasons = ((deviceConfigAllowedReasonOverride != -1
? deviceConfigAllowedReasonOverride
: baseAllowedReasons) | vendorAllowedReasons);
+
+ if (mode.baseMode != null) {
+ allowedReasons |= getAllowedReasons(mode.baseMode);
+ }
+
return allowedReasons;
}