tizen 2.3.1 release
[framework/web/wearable/wrt-plugins-tizen.git] / src / TimeUtil / TimeUtil.cpp
1 //
2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19 * @file        TimeUtil.cpp
20 */
21
22 #include <string>
23 #include <vconf.h>
24
25 #include "TimeUtil.h"
26
27 namespace DeviceAPI {
28 namespace Time {
29
30 namespace {
31 static void changedTimeCallback(keynode_t* node, void* user_data) {
32     LOGD("entered KeyName: %s", vconf_keynode_get_name(node));
33     MultiCallbackUserData* callback = NULL;
34
35     if (user_data && !strcmp(vconf_keynode_get_name(node), VCONFKEY_SYSTEM_TIME_CHANGED)) {
36         LOGD("Time changed");
37         ((TimeUtil*)user_data)->changeDefaultTimezone();
38     }
39 }
40 }//private namespace
41
42 TimeUtil::TimeUtil()
43 {
44     LOGD("Enter");
45     bRegisteredDateTimeChanged = false;
46     m_timezoneChangeCallback = NULL;
47     m_timeChangeCallback = NULL;
48
49     TimeUtilTools util;
50     m_timezone = util.getDefaultTimezone();
51
52     if (vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, changedTimeCallback, (void*)this) == 0) {
53         LOGD("Success to register changedDateTimeCallback");
54         bRegisteredDateTimeChanged = true;
55     }
56 }
57
58 TimeUtil::~TimeUtil()
59 {
60     LOGD("Enter");
61     unsetTimeZoneChangeListener();
62
63     if (bRegisteredDateTimeChanged) {
64         vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, changedTimeCallback);
65         bRegisteredDateTimeChanged = false;
66     }
67 }
68
69 TZDatePtr TimeUtil::getCurrentDateTime()
70 {
71     TZDatePtr tz = TZDatePtr(new (std::nothrow) TZDate());
72     return tz;
73 }
74
75 std::string TimeUtil::getLocalTimezone()
76 {
77     return TimeUtilTools::getLocalTimeZone();
78
79 }
80 std::vector<std::string> TimeUtil::getAvailableTimezones()
81 {
82     std::vector<std::string> vec = TimeUtilTools::getTimezonesArray();
83     return vec;
84 }
85 std::string TimeUtil::getDateFormat(bool shortformat)
86 {
87     return TimeUtilTools::getDateFormat(shortformat);
88 }
89 std::string TimeUtil::getTimeFormat()
90 {
91     return TimeUtilTools::getTimeFormat();
92 }
93 bool TimeUtil::isLeapYear(long year)
94 {
95     return TimeUtilTools::isLeapyear(year);
96 }
97
98 void TimeUtil::changeDefaultTimezone()
99 {
100     LOGD("Enter");
101
102     std::string s_result;
103     TimeUtilTools util;
104     std::string defaultTimezone = util.getDefaultTimezone();
105
106     if (m_timezone != defaultTimezone) {
107         m_timezone = defaultTimezone;
108         UnicodeString *timezoneId = util.toUnicodeString(defaultTimezone);
109         if (timezoneId) {
110             TimeZone* zone = TimeZone::createTimeZone(*timezoneId);
111             if (zone) {
112                 TimeZone::setDefault(*zone);
113                 delete zone;
114             }
115             delete timezoneId;
116         }
117         if (m_timezoneChangeCallback) {
118             LOGD("Timezone changed");
119             m_timezoneChangeCallback->invokeCallback("onsuccess");
120         }
121     }
122     if (m_timeChangeCallback) {
123         LOGD("Time changed");
124         m_timeChangeCallback->invokeCallback("onsuccess");
125     }
126 }
127
128 void TimeUtil::setDateTimeChangeListener(MultiCallbackUserData* callback)
129 {
130     LOGD("Enter");
131     m_timeChangeCallback = callback;
132 }
133
134 void TimeUtil::unsetDateTimeChangeListener()
135 {
136     LOGD("Enter");
137
138     if (m_timeChangeCallback) {
139         delete m_timeChangeCallback;
140     }
141     m_timeChangeCallback = NULL;
142 }
143
144 void TimeUtil::setTimeZoneChangeListener(MultiCallbackUserData* callback)
145 {
146     LOGD("Enter");
147     m_timezoneChangeCallback = callback;
148 }
149
150 void TimeUtil::unsetTimeZoneChangeListener()
151 {
152     LOGD("Enter");
153
154     if (m_timezoneChangeCallback) {
155         delete m_timezoneChangeCallback;
156     }
157     m_timezoneChangeCallback = NULL;
158 }
159
160 } // Time
161 } // DeviceAPI