Commit 4ab4bd0c authored by James Cook's avatar James Cook Committed by Commit Bot

chromeos: Always show timezone autodetect method menu in settings

When the user manually selects a timezone we keep showing the
autodetect method menu, but disable it. This makes the UI shift around
less than the old approach, which was to hide the menu.

If the user chooses a custom timezone the menu is disabled and it
shows the default (IP address) label. This means the label may switch
from the WiFi option to the IP address option if the user toggles
back and forth between the "Set automatically" and "Choose from list"
radio buttoms. Our PM Jesse is OK with this.

If policy disables automatic timezones the menu is disabled and the
label is 'Automatic time zone detection is disabled'.

Before:
- automatic: https://screenshot.googleplex.com/TsyNYwjg0HS
- manual: https://screenshot.googleplex.com/1eTPHgBqOwF
- policy: https://screenshot.googleplex.com/9ZWzTHaawra

After:
- automatic doesn't change
- manual: https://screenshot.googleplex.com/4bf2aG4FwJt
- policy: https://screenshot.googleplex.com/KqPh3q7pwQT

Bug: 997118
Test: updated browser_tests
Change-Id: Ieb5f3d4df887082e981518bddd895ecd8bbf5fd2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1769234Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: James Cook <jamescook@chromium.org>
Cr-Commit-Position: refs/heads/master@{#691760}
parent cf1c693e
......@@ -36,7 +36,7 @@
<settings-dropdown-menu id="timeZoneResolveMethodDropdown"
pref="{{prefs.generated.resolve_timezone_by_geolocation_method_short}}"
label="$i18n{selectTimeZoneResolveMethod}"
hidden="[[!prefs.generated.resolve_timezone_by_geolocation_on_off.value]]"
disabled="[[!prefs.generated.resolve_timezone_by_geolocation_on_off.value]]"
menu-options="[[getTimeZoneResolveMethodsList_(
prefs.generated.resolve_timezone_by_geolocation_method_short)]]">
</settings-dropdown-menu>
......
......@@ -27,22 +27,26 @@ Polymer({
*/
getTimeZoneResolveMethodsList_: function() {
const result = [];
const pref =
this.getPref('generated.resolve_timezone_by_geolocation_method_short');
// Make sure current value is in the list, even if it is not
// user-selectable.
if (this.getPref('generated.resolve_timezone_by_geolocation_method_short')
.value == settings.TimeZoneAutoDetectMethod.DISABLED) {
result.push({
value: settings.TimeZoneAutoDetectMethod.DISABLED,
name: loadTimeData.getString('setTimeZoneAutomaticallyDisabled')
});
if (pref.value == settings.TimeZoneAutoDetectMethod.DISABLED) {
// If disabled by policy, show the 'Automatic timezone disabled' label.
// Otherwise, just show the default string, since the control will be
// disabled as well.
const label = pref.controlledBy ?
loadTimeData.getString('setTimeZoneAutomaticallyDisabled') :
loadTimeData.getString('setTimeZoneAutomaticallyIpOnlyDefault');
result.push(
{value: settings.TimeZoneAutoDetectMethod.DISABLED, name: label});
}
result.push({
value: settings.TimeZoneAutoDetectMethod.IP_ONLY,
name: loadTimeData.getString('setTimeZoneAutomaticallyIpOnlyDefault')
});
if (this.getPref('generated.resolve_timezone_by_geolocation_method_short')
.value ==
if (pref.value ==
settings.TimeZoneAutoDetectMethod.SEND_WIFI_ACCESS_POINTS) {
result.push({
value: settings.TimeZoneAutoDetectMethod.SEND_WIFI_ACCESS_POINTS,
......
......@@ -265,12 +265,14 @@ suite('settings-date-time-page', function() {
test('auto-detect on', function(done) {
const prefs = getFakePrefs();
dateTime = initializeDateTime(prefs, false);
const resolveMethodDropdown = dateTime.$$('#timeZoneResolveMethodDropdown');
setTimeout(function() {
checkDateTimePageReadyCalled();
assertFalse(getTimeZonesCalled);
verifyAutoDetectSetting(true, false);
assertFalse(resolveMethodDropdown.disabled);
verifyTimeZonesPopulated(false);
clickDisableAutoDetect(dateTime);
......@@ -279,6 +281,7 @@ suite('settings-date-time-page', function() {
setTimeout(function() {
verifyAutoDetectSetting(false, false);
assertTrue(resolveMethodDropdown.disabled);
assertTrue(getTimeZonesCalled);
verifyTimeZonesPopulated(true);
......@@ -288,6 +291,8 @@ suite('settings-date-time-page', function() {
test('auto-detect off', function(done) {
dateTime = initializeDateTime(getFakePrefs(), false);
const resolveMethodDropdown = dateTime.$$('#timeZoneResolveMethodDropdown');
setTimeout(function() {
dateTime.set(
'prefs.generated.resolve_timezone_by_geolocation_on_off.value',
......@@ -302,6 +307,7 @@ suite('settings-date-time-page', function() {
assertTrue(getTimeZonesCalled);
verifyAutoDetectSetting(false, false);
assertTrue(resolveMethodDropdown.disabled);
verifyTimeZonesPopulated(true);
clickEnableAutoDetect(dateTime);
......@@ -309,6 +315,7 @@ suite('settings-date-time-page', function() {
setTimeout(function() {
verifyAutoDetectSetting(true);
assertFalse(resolveMethodDropdown.disabled);
done();
});
});
......@@ -316,12 +323,14 @@ suite('settings-date-time-page', function() {
test('auto-detect forced on', function(done) {
const prefs = getFakePrefs();
dateTime = initializeDateTime(prefs, true, true);
const resolveMethodDropdown = dateTime.$$('#timeZoneResolveMethodDropdown');
setTimeout(function() {
checkDateTimePageReadyCalled();
assertFalse(getTimeZonesCalled);
verifyAutoDetectSetting(true, true);
assertFalse(resolveMethodDropdown.disabled);
verifyTimeZonesPopulated(false);
// Cannot disable auto-detect.
......@@ -330,6 +339,7 @@ suite('settings-date-time-page', function() {
setTimeout(function() {
verifyAutoDetectSetting(true, true);
assertFalse(resolveMethodDropdown.disabled);
assertFalse(getTimeZonesCalled);
// Update the policy: force auto-detect off.
......@@ -337,6 +347,7 @@ suite('settings-date-time-page', function() {
});
setTimeout(function() {
verifyAutoDetectSetting(false, true);
assertTrue(resolveMethodDropdown.disabled);
assertTrue(getTimeZonesCalled);
verifyTimeZonesPopulated(true);
......@@ -347,12 +358,14 @@ suite('settings-date-time-page', function() {
test('auto-detect forced off', function(done) {
const prefs = getFakePrefs();
dateTime = initializeDateTime(prefs, true, false);
const resolveMethodDropdown = dateTime.$$('#timeZoneResolveMethodDropdown');
setTimeout(function() {
checkDateTimePageReadyCalled();
assertTrue(getTimeZonesCalled);
verifyAutoDetectSetting(false, true);
assertTrue(resolveMethodDropdown.disabled);
verifyTimeZonesPopulated(true);
// Remove the policy so user's preference takes effect.
......@@ -361,6 +374,7 @@ suite('settings-date-time-page', function() {
setTimeout(function() {
verifyAutoDetectSetting(true, false);
assertFalse(resolveMethodDropdown.disabled);
// User can disable auto-detect.
clickDisableAutoDetect(dateTime);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment