4 * Copyright (c) 2010-2013 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Youngae Kang <youngae.kang@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
7 * Genie Kim <daejins.kim@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
27 #include <bundle_internal.h>
28 #include <eventsystem.h>
29 #include "location-log.h"
30 #include "location-setting.h"
32 static unsigned int g_event_req_id;
35 gint location_setting_get_key_val(keynode_t *key)
37 g_return_val_if_fail(key, -1);
39 switch (vconf_keynode_get_type(key)) {
41 val = vconf_keynode_get_int(key);
42 LOCATION_SECLOG("changed [%s]:[%d]", vconf_keynode_get_name(key), val);
45 LOCATION_LOGW("Unused type(%d)", vconf_keynode_get_type(key));
51 gint location_setting_get_int(const gchar *path)
53 g_return_val_if_fail(path, 0);
55 if (vconf_get_int(path, &val)) {
56 LOCATION_SECLOG("failed [%s]", path);
61 gboolean location_setting_get_bool(const gchar *path)
63 g_return_val_if_fail(path, FALSE);
65 if (vconf_get_bool(path, &val)) {
66 LOCATION_SECLOG("failed [%s]", path);
71 gchar *location_setting_get_string(const gchar *path)
73 g_return_val_if_fail(path, NULL);
74 return vconf_get_str(path);
77 static char *__convert_event_from_vconf(const char *vconf)
80 if (g_strcmp0(vconf, VCONFKEY_LOCATION_USE_MY_LOCATION) == 0) {
81 event = g_strdup(SYS_EVENT_LOCATION_ENABLE_STATE);
82 } else if (g_strcmp0(vconf, VCONFKEY_LOCATION_ENABLED) == 0) {
83 event = g_strdup(SYS_EVENT_GPS_ENABLE_STATE);
84 } else if (g_strcmp0(vconf, VCONFKEY_LOCATION_NETWORK_ENABLED) == 0) {
85 event = g_strdup(SYS_EVENT_NPS_ENABLE_STATE);
91 static char *__convert_key_from_event(const char *event)
94 if (g_strcmp0(event, SYS_EVENT_LOCATION_ENABLE_STATE) == 0) {
95 key = g_strdup(EVT_KEY_LOCATION_ENABLE_STATE);
96 } else if (g_strcmp0(event, SYS_EVENT_GPS_ENABLE_STATE) == 0) {
97 key = g_strdup(EVT_KEY_GPS_ENABLE_STATE);
98 } else if (g_strcmp0(event, SYS_EVENT_NPS_ENABLE_STATE) == 0) {
99 key = g_strdup(EVT_KEY_NPS_ENABLE_STATE);
104 static char *__convert_event_value(const int val)
108 value = g_strdup(EVT_VAL_GPS_ENABLED);
110 value = g_strdup(EVT_VAL_GPS_DISABLED);
115 gint location_setting_send_system_event(const char *path, const int val)
117 g_return_val_if_fail(path, -1);
125 event = __convert_event_from_vconf(path);
126 key = __convert_key_from_event(event);
127 value = __convert_event_value(val);
130 bundle_add_str(b, key, value);
131 ret = eventsystem_request_sending_system_event(event, b);
134 LOCATION_SECLOG("[%s: %s]", key, value);
142 static void __event_handler(const char *event_name, bundle *data, void *self)
144 const char *value = NULL;
146 if (g_strcmp0(event_name, SYS_EVENT_LOCATION_ENABLE_STATE) == 0) {
147 value = bundle_get_val(data, EVT_KEY_LOCATION_ENABLE_STATE);
148 } else if (g_strcmp0(event_name, SYS_EVENT_GPS_ENABLE_STATE) == 0) {
149 value = bundle_get_val(data, EVT_KEY_GPS_ENABLE_STATE);
150 } else if (g_strcmp0(event_name, SYS_EVENT_NPS_ENABLE_STATE) == 0) {
151 value = bundle_get_val(data, EVT_KEY_NPS_ENABLE_STATE);
154 LOCATION_SECLOG("[%s: %s]", event_name, value);
157 gint location_setting_add_notify(const gchar *path, SettingCB setting_cb, gpointer self)
159 g_return_val_if_fail(path, -1);
160 g_return_val_if_fail(self, -1);
162 const char *event_name = NULL;
163 event_name = __convert_event_from_vconf(path);
165 if (eventsystem_register_event(event_name,
167 (eventsystem_handler) __event_handler, NULL) != ES_R_OK) {
169 LOCATION_SECLOG("eventsystem_register_event failed");
173 if (vconf_notify_key_changed(path, setting_cb, self)) {
174 LOCATION_SECLOG("vconf notify add failed [%s]", path);
177 LOCATION_SECLOG("vconf notify added [%s]", path);
181 gint location_setting_ignore_notify(const gchar *path, SettingCB setting_cb)
183 g_return_val_if_fail(path, -1);
184 g_return_val_if_fail(setting_cb, -1);
186 if (eventsystem_unregister_event(g_event_req_id) != ES_R_OK) {
187 LOCATION_SECLOG("eventsystem_unregister_event failed");
191 if (vconf_ignore_key_changed(path, setting_cb)) {
192 LOCATION_SECLOG("vconf notify remove failed [%s]", path);
195 LOCATION_SECLOG("vconf notify removed [%s]", path);
199 gint location_state_add_notify(const gchar *path, SettingCB setting_cb, gpointer self)
201 g_return_val_if_fail(path, -1);
202 g_return_val_if_fail(self, -1);
204 if (vconf_notify_key_changed(path, setting_cb, self)) {
205 LOCATION_SECLOG("vconf notify add failed [%s]", path);
208 LOCATION_SECLOG("vconf notify added [%s]", path);
212 gint location_state_ignore_notify(const gchar *path, SettingCB setting_cb)
214 g_return_val_if_fail(path, -1);
215 g_return_val_if_fail(setting_cb, -1);
217 if (vconf_ignore_key_changed(path, setting_cb)) {
218 LOCATION_SECLOG("vconf notify remove failed [%s]", path);
221 LOCATION_SECLOG("vconf notify removed [%s]", path);