2 * Copyright (c) 2011-2013 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <location_preference.h>
18 #include <location-map-service.h>
21 #include <locations_private.h>
23 #define LOCATION_PREFERENCE_NULL_ARG_CHECK(arg) \
24 LOCATIONS_CHECK_CONDITION((arg != NULL), LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER")
26 #define LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service) *((LocationMapObject**)service)
29 * Internal Implementation
32 static int __convert_error_code(int code)
34 int ret = LOCATION_PREFERENCE_ERROR_NONE;
35 char* msg = "LOCATION_PREFERENCE_ERROR_NONE";
38 case LOCATION_ERROR_NONE:
39 ret = LOCATION_PREFERENCE_ERROR_NONE;
40 msg = "LOCATION_PREFERENCE_ERROR_NONE";
42 case LOCATION_ERROR_NETWORK_NOT_CONNECTED:
43 ret = LOCATION_PREFERENCE_ERROR_NETWORK_FAILED;
44 msg = "LOCATION_PREFERENCE_ERROR_NETWORK_FAILED";
46 case LOCATION_ERROR_PARAMETER:
47 ret = LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER;
48 msg = "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER";
50 case LOCATION_ERROR_NOT_AVAILABLE:
51 msg = "LOCATION_PREFERENCE_ERROR_RESULT_NOT_FOUND";
52 ret = LOCATION_PREFERENCE_ERROR_RESULT_NOT_FOUND;
54 LOCATIONS_LOGE("%s(0x%08x)", msg, ret);
60 * Public Implementation
62 EXPORT_API int location_preference_foreach_available_property_keys(location_service_h service, location_preference_available_property_key_cb callback, void* user_data)
64 LocationMapObject* object = NULL;
69 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
70 LOCATION_PREFERENCE_NULL_ARG_CHECK(callback);
72 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
73 ret = location_map_get_provider_capability_key(object, MAP_SERVICE_PREF_PROPERTY, &keys);
74 if(ret != LOCATION_ERROR_NONE)
76 return __convert_error_code(ret);
82 if(!callback(key, user_data))
87 return LOCATION_PREFERENCE_ERROR_NONE;
91 EXPORT_API int location_preference_foreach_available_property_values(location_service_h service, const char* key, location_preference_available_property_value_cb callback, void* user_data)
93 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
94 LOCATION_PREFERENCE_NULL_ARG_CHECK(key);
95 LOCATION_PREFERENCE_NULL_ARG_CHECK(callback);
96 return LOCATION_PREFERENCE_ERROR_RESULT_NOT_FOUND;
99 EXPORT_API int location_preference_foreach_available_languages(location_service_h service, location_preference_available_language_cb callback, void* user_data)
101 LocationMapObject* object = NULL;
106 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
107 LOCATION_PREFERENCE_NULL_ARG_CHECK(callback);
109 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
110 ret = location_map_get_provider_capability_key(object, MAP_SERVICE_PREF_LANGUAGE, &keys);
111 if(ret != LOCATION_ERROR_NONE)
113 return __convert_error_code(ret);
119 if(!callback(key, user_data))
124 return LOCATION_PREFERENCE_ERROR_NONE;
128 EXPORT_API int location_preference_foreach_available_country_codes(location_service_h service, location_preference_available_country_code_cb callback, void* user_data)
130 LocationMapObject* object = NULL;
135 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
136 LOCATION_PREFERENCE_NULL_ARG_CHECK(callback);
138 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
139 ret = location_map_get_provider_capability_key(object, MAP_SERVICE_PREF_COUNTRY, &keys);
140 if(ret != LOCATION_ERROR_NONE)
142 return __convert_error_code(ret);
148 if(!callback(key, user_data))
154 return LOCATION_PREFERENCE_ERROR_NONE;
157 EXPORT_API int location_preference_foreach_properties(location_service_h service, location_preference_property_cb callback, void* user_data)
159 LocationMapPref* pref = NULL;
160 LocationMapObject* object = NULL;
165 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
166 LOCATION_PREFERENCE_NULL_ARG_CHECK(callback);
168 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
169 pref = location_map_get_service_pref(object);
170 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
172 keys = location_map_pref_get_property_key(pref);
175 value = (char*)location_map_pref_get_property(pref, key);
176 if(!callback(key, value, user_data))
181 location_map_pref_free(pref);
182 return LOCATION_PREFERENCE_ERROR_NONE;
185 EXPORT_API int location_preference_set(location_service_h service, const char* key, const char* value)
187 LocationMapPref* pref = NULL;
188 LocationMapObject* object = NULL;
190 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
191 LOCATION_PREFERENCE_NULL_ARG_CHECK(key);
192 LOCATION_PREFERENCE_NULL_ARG_CHECK(value);
194 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
195 pref = location_map_get_service_pref(object);
196 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
198 location_map_pref_set_property(pref, (gconstpointer)key, (gconstpointer)value);
199 location_map_set_service_pref(object, pref);
200 location_map_pref_free(pref);
202 return LOCATION_PREFERENCE_ERROR_NONE;
205 EXPORT_API int location_preference_get(location_service_h service, const char* key, char** value)
207 LocationMapPref* pref = NULL;
208 LocationMapObject* object = NULL;
211 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
212 LOCATION_PREFERENCE_NULL_ARG_CHECK(key);
213 LOCATION_PREFERENCE_NULL_ARG_CHECK(value);
215 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
216 pref = location_map_get_service_pref(object);
217 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
219 ret = (char*)location_map_pref_get_property(pref, (gconstpointer)key);
222 *value = strdup(ret);
223 location_map_pref_free(pref);
228 location_map_pref_free(pref);
229 LOCATIONS_PRINT_ERROR_CODE(LOCATION_PREFERENCE_ERROR_INVALID_KEY, "LOCATION_PREFERENCE_ERROR_INVALID_KEY");
232 return LOCATION_PREFERENCE_ERROR_NONE;
235 EXPORT_API int location_preference_set_provider(location_service_h service, char* provider)
237 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
238 LOCATION_PREFERENCE_NULL_ARG_CHECK(provider);
240 LocationMapObject *object = NULL;
241 LocationMapPref *pref = NULL;
242 gboolean ret = FALSE;
244 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
245 pref = location_map_get_service_pref(object);
246 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
248 ret = location_map_pref_set_provider_name(pref, provider);
250 location_map_pref_free(pref);
251 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_KEY, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
253 ret = location_map_set_service_pref(object, pref);
255 location_map_pref_free(pref);
256 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_KEY, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
259 location_map_pref_free(pref);
260 return LOCATION_PREFERENCE_ERROR_NONE;
263 EXPORT_API int location_preference_get_provider(location_service_h service, char** provider)
265 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
266 LOCATION_PREFERENCE_NULL_ARG_CHECK(provider);
268 LocationMapObject *object = NULL;
269 LocationMapPref *pref = NULL;
270 gchar* current_provider = NULL;
272 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
273 pref = location_map_get_service_pref(object);
274 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
276 current_provider = location_map_pref_get_provider_name(pref);
277 if (!current_provider) {
278 location_map_pref_free(pref);
279 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_KEY, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
282 *provider = g_strdup (current_provider);
283 location_map_pref_free(pref);
285 return LOCATION_PREFERENCE_ERROR_NONE;
288 EXPORT_API int location_preference_get_default_provider(location_service_h service, char** provider)
290 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
291 LOCATION_PREFERENCE_NULL_ARG_CHECK(provider);
293 LocationMapObject *object = NULL;
294 gchar *current_provider = NULL;
295 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
296 current_provider = location_map_get_default_provider(object);
297 LOCATIONS_CHECK_CONDITION(current_provider != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
299 *provider = g_strdup(current_provider);
300 g_free(current_provider);
302 return LOCATION_PREFERENCE_ERROR_NONE;
305 EXPORT_API int location_preference_foreach_supported_provider(location_service_h service, location_preference_supported_provider_cb callback , void *user_data)
307 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
308 LOCATION_PREFERENCE_NULL_ARG_CHECK(callback);
310 LocationMapObject *object = NULL;
311 GList *providers = NULL;
312 gchar *provider = NULL;
314 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
315 providers = location_map_get_supported_providers(object);
316 LOCATIONS_CHECK_CONDITION(providers != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
318 provider = providers->data;
319 if(!callback(provider, user_data))
321 providers = providers->next;
324 return LOCATION_PREFERENCE_ERROR_NONE;
327 EXPORT_API int location_preference_get_provider_name(location_service_h service, char** provider)
329 LocationMapPref* pref = NULL;
330 LocationMapObject* object = NULL;
333 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
334 LOCATION_PREFERENCE_NULL_ARG_CHECK(provider);
336 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
337 pref = location_map_get_service_pref(object);
338 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
340 ret = location_map_pref_get_provider_name(pref);
342 *provider = strdup(ret);
346 location_map_pref_free(pref);
347 return LOCATION_PREFERENCE_ERROR_NONE;
350 EXPORT_API int location_preference_get_distance_unit(location_service_h service, location_preference_distance_unit_e* unit)
352 LocationMapPref* pref = NULL;
353 LocationMapObject* object = NULL;
356 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
357 LOCATION_PREFERENCE_NULL_ARG_CHECK(unit);
359 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
360 pref = location_map_get_service_pref(object);
361 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
363 ret = location_map_pref_get_distance_unit(pref);
368 *unit = LOCATION_PREFERENCE_DISTANCE_UNIT_FT;
371 *unit = LOCATION_PREFERENCE_DISTANCE_UNIT_KM;
374 *unit = LOCATION_PREFERENCE_DISTANCE_UNIT_YD;
378 *unit = LOCATION_PREFERENCE_DISTANCE_UNIT_MI;
380 *unit = LOCATION_PREFERENCE_DISTANCE_UNIT_M;
383 location_map_pref_free(pref);
384 return LOCATION_PREFERENCE_ERROR_NONE;
388 location_map_pref_free(pref);
389 LOCATIONS_PRINT_ERROR_CODE(LOCATION_PREFERENCE_ERROR_RESULT_NOT_FOUND, "LOCATION_PREFERENCE_ERROR_RESULT_NOT_FOUND");
393 EXPORT_API int location_preference_set_distance_unit(location_service_h service, location_preference_distance_unit_e unit)
395 LocationMapPref* pref = NULL;
396 LocationMapObject* object = NULL;
397 char* distance = NULL;
399 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
401 case LOCATION_PREFERENCE_DISTANCE_UNIT_FT :
404 case LOCATION_PREFERENCE_DISTANCE_UNIT_KM :
407 case LOCATION_PREFERENCE_DISTANCE_UNIT_YD :
410 case LOCATION_PREFERENCE_DISTANCE_UNIT_MI :
413 case LOCATION_PREFERENCE_DISTANCE_UNIT_M :
417 LOCATIONS_PRINT_ERROR_CODE(LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
420 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
421 pref = location_map_get_service_pref(object);
422 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
424 location_map_pref_set_distance_unit(pref, distance);
425 location_map_set_service_pref(object, pref);
426 location_map_pref_free(pref);
428 return LOCATION_PREFERENCE_ERROR_NONE;
431 EXPORT_API int location_preference_get_language(location_service_h service, char** language)
433 LocationMapPref* pref = NULL;
434 LocationMapObject* object = NULL;
437 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
438 LOCATION_PREFERENCE_NULL_ARG_CHECK(language);
440 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
441 pref = location_map_get_service_pref(object);
442 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
444 ret = location_map_pref_get_language(pref);
446 *language = strdup(ret);
450 location_map_pref_free(pref);
451 return LOCATION_PREFERENCE_ERROR_NONE;
454 EXPORT_API int location_preference_set_language(location_service_h service, const char* language)
456 LocationMapPref* pref = NULL;
457 LocationMapObject* object = NULL;
459 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
460 LOCATION_PREFERENCE_NULL_ARG_CHECK(language);
462 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
463 pref = location_map_get_service_pref(object);
464 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
466 location_map_pref_set_language(pref, language);
467 location_map_set_service_pref(object, pref);
468 location_map_pref_free(pref);
470 return LOCATION_PREFERENCE_ERROR_NONE;
474 EXPORT_API int location_preference_get_country_code(location_service_h service, char** country_code)
476 LocationMapPref* pref = NULL;
477 LocationMapObject* object = NULL;
480 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
481 LOCATION_PREFERENCE_NULL_ARG_CHECK(country_code);
483 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
484 pref = location_map_get_service_pref(object);
485 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
487 ret = location_map_pref_get_country(pref);
489 *country_code = strdup(ret);
491 *country_code = NULL;
493 location_map_pref_free(pref);
494 return LOCATION_PREFERENCE_ERROR_NONE;
497 EXPORT_API int location_preference_set_country_code(location_service_h service, const char* country_code)
499 LocationMapPref* pref = NULL;
500 LocationMapObject* object = NULL;
502 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
503 LOCATION_PREFERENCE_NULL_ARG_CHECK(country_code);
505 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
506 pref = location_map_get_service_pref(object);
507 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
509 location_map_pref_set_country(pref, country_code);
510 location_map_set_service_pref(object, pref);
511 location_map_pref_free(pref);
513 return LOCATION_PREFERENCE_ERROR_NONE;
516 EXPORT_API int location_preference_set_maps_key (location_service_h service, const char* maps_key)
518 LocationMapPref* pref = NULL;
519 LocationMapObject* object = NULL;
521 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
522 LOCATION_PREFERENCE_NULL_ARG_CHECK(maps_key);
524 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
525 pref = location_map_get_service_pref(object);
526 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
528 location_map_pref_set_maps_key(pref, maps_key);
529 location_map_set_service_pref(object, pref);
530 location_map_pref_free(pref);
532 return LOCATION_PREFERENCE_ERROR_NONE;
535 EXPORT_API int location_preference_get_maps_key (location_service_h service, char** maps_key)
537 LocationMapPref* pref = NULL;
538 LocationMapObject* object = NULL;
541 LOCATION_PREFERENCE_NULL_ARG_CHECK(service);
542 LOCATION_PREFERENCE_NULL_ARG_CHECK(maps_key);
544 object = LOCATION_PREFERENCE_GET_LOCATION_OBJECT(service);
545 pref = location_map_get_service_pref(object);
546 LOCATIONS_CHECK_CONDITION(pref != NULL, LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER, "LOCATION_PREFERENCE_ERROR_INVALID_PARAMETER");
548 ret = location_map_pref_get_maps_key(pref);
550 *maps_key = strdup(ret);
554 location_map_pref_free(pref);
555 return LOCATION_PREFERENCE_ERROR_NONE;