summaryrefslogtreecommitdiff
path: root/Settings/src/com/android/tv/settings/device/display/daydream/EnergySaverFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'Settings/src/com/android/tv/settings/device/display/daydream/EnergySaverFragment.java')
-rw-r--r--Settings/src/com/android/tv/settings/device/display/daydream/EnergySaverFragment.java198
1 files changed, 100 insertions, 98 deletions
diff --git a/Settings/src/com/android/tv/settings/device/display/daydream/EnergySaverFragment.java b/Settings/src/com/android/tv/settings/device/display/daydream/EnergySaverFragment.java
index 5d71c57a8..7bc732de6 100644
--- a/Settings/src/com/android/tv/settings/device/display/daydream/EnergySaverFragment.java
+++ b/Settings/src/com/android/tv/settings/device/display/daydream/EnergySaverFragment.java
@@ -32,7 +32,6 @@ import androidx.annotation.Keep;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
-import com.android.settingslib.RestrictedSwitchPreference;
import com.android.tv.settings.R;
import com.android.tv.settings.RestrictedPreferenceAdapter;
import com.android.tv.settings.SettingsPreferenceFragment;
@@ -46,39 +45,32 @@ public class EnergySaverFragment extends SettingsPreferenceFragment implements
Preference.OnPreferenceChangeListener {
private static final String TAG = "EnergySaverFragment";
private static final String KEY_SLEEP_TIME = "sleepTime";
- private static final String KEY_ALLOW_TURN_SCREEN_OFF = "allowTurnScreenOff";
- private static final int DEFAULT_SLEEP_TIME_MS = (int) (24 * DateUtils.HOUR_IN_MILLIS);
- private static final int WARNING_THRESHOLD_SLEEP_TIME_MS = (int) (4 * DateUtils.HOUR_IN_MILLIS);
- private RestrictedSwitchPreference mAllowTurnScreenOffWithWakeLockPref;
+ private static final String KEY_ATTENTIVE_TIME = "attentiveTime";
+ private static final int DEFAULT_SLEEP_TIME_MS = (int) (20 * DateUtils.MINUTE_IN_MILLIS);
+ private static final int DEFAULT_ATTENTIVE_TIME_MS = (int) (4 * DateUtils.HOUR_IN_MILLIS);
+ private static final int WARNING_THRESHOLD_SLEEP_TIME_MS =
+ (int) (20 * DateUtils.MINUTE_IN_MILLIS);
+ private static final int WARNING_THRESHOLD_ATTENTIVE_TIME_MS =
+ (int) (4 * DateUtils.HOUR_IN_MILLIS);
private ListPreference mSleepTimePref;
+ private ListPreference mAttentiveTimePref;
private RestrictedPreferenceAdapter<ListPreference> mRestrictedSleepTime;
+ private RestrictedPreferenceAdapter<ListPreference> mRestrictedAttentiveTime;
@Override
public void onCreatePreferences(Bundle bundle, String s) {
setPreferencesFromResource(R.xml.energy_saver, null);
- mAllowTurnScreenOffWithWakeLockPref = findPreference(KEY_ALLOW_TURN_SCREEN_OFF);
- mAllowTurnScreenOffWithWakeLockPref.setOnPreferenceChangeListener(this);
- mAllowTurnScreenOffWithWakeLockPref.setVisible(showStandbyTimeout());
- UserManager userManager = UserManager.get(getContext());
- if (userManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT)
- && !mAllowTurnScreenOffWithWakeLockPref.isDisabledByAdmin()) {
- mAllowTurnScreenOffWithWakeLockPref.setEnabled(false);
- }
-
- updateAllowTurnScreenOffWithWakeLockPref();
mSleepTimePref = findPreference(KEY_SLEEP_TIME);
- if (allowTurnOffWithWakeLock()) {
- int validatedAttentiveSleepTime = getValidatedTimeout(getAttentiveSleepTime());
- mSleepTimePref.setValue(String.valueOf(validatedAttentiveSleepTime));
- if (getAttentiveSleepTime() != validatedAttentiveSleepTime) {
- setAttentiveSleepTime(validatedAttentiveSleepTime);
- }
- } else {
- int validatedSleepTime = getValidatedTimeout(getSleepTime());
- mSleepTimePref.setValue(String.valueOf(validatedSleepTime));
- if (getSleepTime() != validatedSleepTime) {
- setSleepTime(validatedSleepTime);
- }
+ mAttentiveTimePref = findPreference(KEY_ATTENTIVE_TIME);
+ int validatedAttentiveSleepTime = getValidatedTimeout(getAttentiveSleepTime(), false);
+ mAttentiveTimePref.setValue(String.valueOf(validatedAttentiveSleepTime));
+ if (getAttentiveSleepTime() != validatedAttentiveSleepTime) {
+ setAttentiveSleepTime(validatedAttentiveSleepTime);
+ }
+ int validatedSleepTime = getValidatedTimeout(getSleepTime(), true);
+ mSleepTimePref.setValue(String.valueOf(validatedSleepTime));
+ if (getSleepTime() != validatedSleepTime) {
+ setSleepTime(validatedSleepTime);
}
mSleepTimePref.setOnPreferenceChangeListener(this);
mSleepTimePref.setOnPreferenceClickListener(
@@ -87,45 +79,22 @@ public class EnergySaverFragment extends SettingsPreferenceFragment implements
return false;
});
+ mAttentiveTimePref.setOnPreferenceChangeListener(this);
+
mRestrictedSleepTime = RestrictedPreferenceAdapter.adapt(
mSleepTimePref, UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT);
+ mRestrictedAttentiveTime = RestrictedPreferenceAdapter.adapt(
+ mAttentiveTimePref, UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT);
+ if (!showStandbyTimeout()) {
+ mAttentiveTimePref.setVisible(false);
+ mRestrictedAttentiveTime.updatePreference();
+ }
}
private boolean showStandbyTimeout() {
return getResources().getBoolean(R.bool.config_show_standby_timeout);
}
- private boolean allowTurnOffWithWakeLock() {
- return showStandbyTimeout() && mAllowTurnScreenOffWithWakeLockPref.isChecked();
- }
-
- private void updateAllowTurnScreenOffWithWakeLockPref() {
- if (!mAllowTurnScreenOffWithWakeLockPref.isVisible()) {
- return;
- }
-
- UserManager userManager = UserManager.get(getContext());
- boolean canChangeEnabled = !userManager
- .hasUserRestriction(UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT);
-
- if (getSleepTime() == -1) {
- mAllowTurnScreenOffWithWakeLockPref.setChecked(false);
- if (canChangeEnabled) {
- mAllowTurnScreenOffWithWakeLockPref.setEnabled(false);
- }
- } else if (getAttentiveSleepTime() == -1) {
- mAllowTurnScreenOffWithWakeLockPref.setChecked(false);
- if (canChangeEnabled) {
- mAllowTurnScreenOffWithWakeLockPref.setEnabled(true);
- }
- } else {
- mAllowTurnScreenOffWithWakeLockPref.setChecked(true);
- if (canChangeEnabled) {
- mAllowTurnScreenOffWithWakeLockPref.setEnabled(true);
- }
- }
- }
-
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
switch (preference.getKey()) {
@@ -134,44 +103,85 @@ public class EnergySaverFragment extends SettingsPreferenceFragment implements
if (getSleepTimeEntryId(newSleepTime) != -1) {
logEntrySelected(getSleepTimeEntryId(newSleepTime));
}
- if (showStandbyTimeout()
- && (newSleepTime > WARNING_THRESHOLD_SLEEP_TIME_MS || newSleepTime == -1)) {
- // Some regions require a warning to be presented.
+ if (showStandbyTimeout() && isTimeLargerThan(
+ newSleepTime, getAttentiveSleepTime())) {
new AlertDialog.Builder(getContext())
- .setTitle(R.string.device_energy_saver_confirmation_title)
- .setMessage(getConfirmationDialogDescription(newSleepTime))
- .setPositiveButton(R.string.settings_confirm,
- (dialog, which) -> confirmNewSleepTime(newSleepTime))
- .setNegativeButton(R.string.settings_cancel,
- (dialog, which) -> dialog.dismiss())
+ .setMessage(R.string.device_energy_saver_validation_sleep)
+ .setPositiveButton(
+ R.string.settings_ok, (dialog, which) -> dialog.dismiss())
.create()
.show();
return false;
+ } else if (newSleepTime > WARNING_THRESHOLD_SLEEP_TIME_MS || newSleepTime == -1) {
+ // Some regions require a warning to be presented.
+ showConfirmChangeSettingDialog(false, newSleepTime);
+ return false;
} else {
- updateTimeOut(allowTurnOffWithWakeLock(), newSleepTime);
+ confirmNewSleepTime(newSleepTime);
return true;
}
- case KEY_ALLOW_TURN_SCREEN_OFF:
- updateTimeOut((boolean) newValue, Integer.parseInt(mSleepTimePref.getValue()));
+ case KEY_ATTENTIVE_TIME:
+ final int attentiveTime = Integer.parseInt((String) newValue);
+ if (isTimeLargerThan(getSleepTime(), attentiveTime)) {
+ new AlertDialog.Builder(getContext())
+ .setMessage(R.string.device_energy_saver_validation_attentive)
+ .setPositiveButton(
+ R.string.settings_ok, (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ return false;
+ } else if (attentiveTime > WARNING_THRESHOLD_ATTENTIVE_TIME_MS
+ || attentiveTime == -1) {
+ showConfirmChangeSettingDialog(true, attentiveTime);
+ return false;
+ }
+ confirmAttentiveSleepTime(attentiveTime);
return true;
default:
return false;
}
}
- private void updateTimeOut(boolean allowTurnScreenOffWithWakeLock, int value) {
- if (allowTurnScreenOffWithWakeLock) {
- setSleepTime(value);
- if (showStandbyTimeout()) {
- setAttentiveSleepTime(value);
- }
- } else {
- setSleepTime(value);
- if (showStandbyTimeout()) {
- setAttentiveSleepTime(-1);
+ private boolean isTimeLargerThan(int x, int y) {
+ if (x == -1 && y == -1) {
+ return false;
+ }
+ if (x == -1) {
+ return true;
+ }
+ if (y == -1) {
+ return false;
+ }
+ return x > y;
+ }
+
+ private void showConfirmChangeSettingDialog(boolean isAttentiveTimer, int newTime) {
+ new AlertDialog.Builder(getContext())
+ .setTitle(R.string.device_energy_saver_confirmation_title)
+ .setMessage(R.string.device_energy_saver_confirmation_message)
+ .setPositiveButton(R.string.settings_confirm,
+ (dialog, which) -> {
+ if (isAttentiveTimer) {
+ confirmAttentiveSleepTime(newTime);
+ } else {
+ confirmNewSleepTime(newTime);
+ }
+ })
+ .setNegativeButton(R.string.settings_cancel,
+ (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+ private void confirmAttentiveSleepTime(int attentiveTime) {
+ if (mAttentiveTimePref != null) {
+ mAttentiveTimePref.setValue(String.valueOf(attentiveTime));
+ setAttentiveSleepTime(attentiveTime);
+ mRestrictedAttentiveTime.updatePreference();
+ if (getCallbackFragment() instanceof TwoPanelSettingsFragment) {
+ ((TwoPanelSettingsFragment) getCallbackFragment()).refocusPreference(this);
}
}
- updateAllowTurnScreenOffWithWakeLockPref();
}
private int getSleepTime() {
@@ -195,12 +205,16 @@ public class EnergySaverFragment extends SettingsPreferenceFragment implements
// The SLEEP_TIMEOUT and ATTENTIVE_TIMEOUT could be defined in overlay by OEMs. We validate the
// value to make sure that we select from the predefined options. If the value from overlay is
// not one of the predefined options, we round it to the closest predefined value, except -1.
- private int getValidatedTimeout(int purposedTimeout) {
- int validatedTimeout = DEFAULT_SLEEP_TIME_MS;
+ private int getValidatedTimeout(int purposedTimeout, boolean isSleepTimeout) {
+ int validatedTimeout = isSleepTimeout ? DEFAULT_SLEEP_TIME_MS : DEFAULT_ATTENTIVE_TIME_MS;
if (purposedTimeout < 0) {
return -1;
+
}
- String[] optionsString = getResources().getStringArray(R.array.screen_off_timeout_values);
+ String[] optionsString = isSleepTimeout
+ ? getResources().getStringArray(R.array.device_energy_saver_sleep_timeout_values)
+ : getResources().getStringArray(
+ R.array.device_energy_saver_attentive_timeout_values);
// Find the value from the predefined values that is closest to the proposed value except -1
int diff = Integer.MAX_VALUE;
for (String option : optionsString) {
@@ -215,21 +229,9 @@ public class EnergySaverFragment extends SettingsPreferenceFragment implements
return validatedTimeout;
}
- private String getConfirmationDialogDescription(int newSleepTime) {
- String sleepTimeText = null;
- String[] optionsValues = getResources().getStringArray(R.array.screen_off_timeout_values);
- String[] optionsStrings = getResources().getStringArray(R.array.screen_off_timeout_entries);
- for (int i = 0; i < optionsValues.length; i++) {
- if (newSleepTime == Integer.parseInt(optionsValues[i])) {
- sleepTimeText = optionsStrings[i];
- }
- }
- return getString(R.string.device_energy_saver_confirmation_text, sleepTimeText);
- }
-
private void confirmNewSleepTime(int newSleepTime) {
if (mSleepTimePref != null) {
- updateTimeOut(allowTurnOffWithWakeLock(), newSleepTime);
+ setSleepTime(newSleepTime);
mSleepTimePref.setValue(String.valueOf(newSleepTime));
mRestrictedSleepTime.updatePreference();
if (getCallbackFragment() instanceof TwoPanelSettingsFragment) {
@@ -241,7 +243,7 @@ public class EnergySaverFragment extends SettingsPreferenceFragment implements
// TODO(b/158783050): update logging for new options 4H, 8H, 24H.
// Map @array/screen_off_timeout_entries to defined log enum
private int getSleepTimeEntryId(int sleepTimeValue) {
- switch(sleepTimeValue) {
+ switch (sleepTimeValue) {
case -1:
return TvSettingsEnums.SYSTEM_ENERGYSAVER_START_DELAY_NEVER;
case 900000: