diff options
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.java | 198 |
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: |