2 * Copyright (c) 2013, Intel Corporation.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
10 var clockTimer = null;
11 var timeChanged = false;
12 var dateChanged = false;
13 var timezoneChanged = false;
14 var automaticTime = false;
15 var automaticTimezone = false;
17 function datetimePanelInit() {
19 /* Display Settings Panel */
20 $('#page_datetime').on('pageshow', function() {
24 $('#toggle_timeupdates').change(function() {
25 if ($('#toggle_timeupdates').val() === 'auto') {
26 settings.datetime.setTimeUpdates("auto", function() {
29 timeUpdatesToggle('manual');
31 showMsg('Error', 'Cannot set time updates to automatic: ' + e);
34 settings.datetime.setTimeUpdates("manual", function() {
37 timeUpdatesToggle('auto');
39 showMsg('Error', 'Cannot set time updates to manual: ' + e);
44 $('#input_time').on('change', function(event, data) {
45 console.log('input_time changed');
46 if (automaticTime) return;
48 var re = /^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;
49 if (this.value === '' || !this.value.match(re)) {
51 showMsg('Error', 'Invalid time format (hh:mm:ss): ' + this.value);
59 $('#input_date').on('change', function(event, data) {
60 console.log('input_date changed');
61 if (automaticTime) return;
63 var re = /^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$/;
64 if (this.value === '' || !this.value.match(re)) {
66 showMsg('Error', 'Invalid date format (yyyy-mm-dd): ' + this.value);
74 $('#toggle_timezoneupdates').change(function() {
75 if ($('#toggle_timezoneupdates').val() === 'auto') {
76 settings.datetime.setTimezoneUpdates("auto", function() {
78 automaticTimezone = true;
80 timezoneUpdatesToggle('manual');
82 showMsg('Error', 'Cannot set timezone updates to automatic: ' + e);
85 settings.datetime.setTimezoneUpdates("manual", function() {
87 automaticTimezone = false;
89 timezoneUpdatesToggle('auto');
91 showMsg('Error', 'Cannot set time zone updates to manual: ' + e);
96 $('#select_timezone').on('change', function(event, data) {
97 console.log('select_timezone changed');
98 if (automaticTimezone) return;
100 /* ignore change due to getLocalTimezone() */
101 if (data === false) return;
103 timezoneChanged = true;
104 var timezone = this.value;
105 console.log('time zone show option');
106 datetimeShowOption();
109 $('#button_datetime_apply').on('click', function(event, data) {
110 if (timeChanged || dateChanged) {
116 if (timezoneChanged) {
117 timezoneChanged = false;
118 updateSystemTimezone();
121 datetimeHideOption();
124 $('#button_datetime_cancel').on('click', function(event, data) {
125 datetimePageReload();
128 $('#page_datetime_button_back').on('click', function() {
133 function datetimePageReload() {
137 timezoneChanged = false;
139 datetimeHideOption();
141 settings.datetime.isTimeAuto(function(isAuto) {
142 automaticTime = isAuto;
144 timeUpdatesToggle('auto');
146 timeUpdatesToggle('manual');
152 settings.datetime.isTimezoneAuto(function(isAuto) {
153 automaticTimezone = isAuto;
155 timezoneUpdatesToggle('auto');
157 timezoneUpdatesToggle('manual');
163 current = new Date();
164 console.log('Local datetime is ' + current.toISOString());
166 timeStr = datetimeGetStr(current.getHours()) + ':';
167 timeStr += datetimeGetStr(current.getMinutes()) + ':';
168 timeStr += datetimeGetStr(current.getSeconds());
169 $('#input_time').val(timeStr);
171 dateStr = datetimeGetStr(current.getFullYear()) + '-';
172 dateStr += datetimeGetStr(current.getMonth()) + '-';
173 dateStr += datetimeGetStr(current.getDate());
174 $('#input_date').val(dateStr);
176 datetimeStartTimer();
179 var alltimezones = tizen.time.getAvailableTimezones();
180 console.log('Local timezone: ' + tizen.time.getLocalTimezone());
181 if (alltimezones.length > 0) {
182 $('#select_timezone').empty();
183 for (var i = 0; i < alltimezones.length; i++) {
184 $('#select_timezone').append(new Option(alltimezones[i], alltimezones[i]));
187 $('#select_timezone').val(tizen.time.getLocalTimezone()).trigger('change', false);
191 function datetimeShowOption() {
192 $('#button_datetime_apply').show();
193 $('#button_datetime_cancel').show();
196 function datetimeHideOption() {
197 $('#button_datetime_apply').hide();
198 $('#button_datetime_cancel').hide();
201 function datetimeStartTimer() {
203 clockTimer = setInterval(dateTimeUpdateClock, 1000);
206 function datetimeStopTimer() {
208 clearInterval(clockTimer);
212 function dateTimeUpdateClock() {
213 var current = new Date();
215 var timeStr = datetimeGetStr(current.getHours()) + ':';
216 timeStr += datetimeGetStr(current.getMinutes()) + ':';
217 timeStr += datetimeGetStr(current.getSeconds());
219 var dateStr = datetimeGetStr(current.getFullYear()) + '-';
220 dateStr += datetimeGetStr(current.getMonth()) + '-';
221 dateStr += datetimeGetStr(current.getDate());
223 if (!timeChanged && !$("#input_time").is(":focus")) {
224 $('#input_time').val(timeStr);
227 if (!dateChanged && !$("#input_date").is(":focus")) {
228 $('#input_date').val(dateStr);
232 function updateSystemTime() {
233 var time = $('#input_date').val() + ' ' + $('#input_time').val();
235 if (time.split(":").length - 1 == 1) {
236 /* this is a bug where seconds are not set after date picker is launched */
240 /* settings daemon expects number of seconds since midnight Jan 1, 1970 */
241 var year = Number(time.split(" ")[0].split('-')[0]);
242 var month = Number(time.split(" ")[0].split('-')[1]);
243 var day = time.split(" ")[0].split('-')[2];
244 var hour = Number(time.split(" ")[1].split(':')[0]);
245 var minute = Number(time.split(" ")[1].split(':')[1]);
246 var second = Number(time.split(" ")[1].split(':')[2]);
247 var date = new Date(year, month, day, hour, minute, second, 0);
248 var epoch_time = date.getTime() / 1000;
250 settings.datetime.setTime(epoch_time, function() {
251 console.log('System time is set to: ' + date + ' or ' + epoch_time + ' seconds since 1/1/1970');
252 datetimePageReload();
254 showMsg('Error', 'Cannot set system time: ' + e);
255 datetimePageReload();
259 function updateSystemTimezone() {
260 var value = $('#select_timezone').val();
261 settings.datetime.setTimezone(value, function() {
262 console.log('System timezone is set to: ' + value);
264 showMsg('Error', 'Cannot set system timezone: ' + e);
268 function datetimeGetStr(value) {
269 if (0 < value && value < 10) {
276 function timeUpdatesToggle(value) {
277 if (value !== 'auto' && value !== 'manual') return;
279 if (value === 'auto') {
280 $('#input_time').attr('readonly', true);
281 $('#input_date').attr('readonly', true);
283 $('#input_time').attr('readonly', false);
284 $('#input_date').attr('readonly', false);
286 setTimeout(function() {
287 $('#toggle_timeupdates').val(value).slider('refresh');
291 function timezoneUpdatesToggle(value) {
292 if (value !== 'auto' && value !== 'manual') return;
294 if (value === 'auto') {
295 $('#select_timezone').selectmenu('disable');
297 $('#select_timezone').selectmenu('enable');
299 setTimeout(function() {
300 $('#toggle_timezoneupdates').val(value).slider('refresh');