Release Tizen2.0 beta
[framework/location/libslp-location.git] / location / manager / location.c
index 29c6612..ee7f67a 100644 (file)
 #include "location-hybrid.h"
 #include "location-gps.h"
 #include "location-wps.h"
-#include "location-ips.h"
 #include "location-cps.h"
-#include "location-sps.h"
 #include "location-position.h"
 #include "map-service.h"
 #include "module-internal.h"
 #include "location-common-util.h"
 
-extern LocationObject *g_map_service;
-
 EXPORT_API
 int location_init (void)
 {
        LOCATION_LOGD("location_init");
        g_type_init ();
+
+#if !GLIB_CHECK_VERSION (2, 31, 0)
        if (!g_thread_supported()) g_thread_init (NULL);
+#endif
        dbus_g_thread_init ();
        if( FALSE == module_init() )
                return LOCATION_ERROR_NOT_AVAILABLE;
@@ -62,24 +61,21 @@ location_new (LocationMethod method)
 {
        LocationObject *self = NULL;
 
-       if (!g_map_service)
-               g_map_service = g_object_new (MAP_TYPE_SERVICE, NULL);
-
        switch (method) {
-       case LOCATION_METHOD_HYBRID:
-               self = g_object_new (LOCATION_TYPE_HYBRID, NULL);
-               break;
-       case LOCATION_METHOD_GPS:
-               self = g_object_new (LOCATION_TYPE_GPS, NULL);
-               break;
-       case LOCATION_METHOD_WPS:
-               self = g_object_new (LOCATION_TYPE_WPS, NULL);
-               break;
-       case LOCATION_METHOD_SPS:
-               self = g_object_new (LOCATION_TYPE_SPS, NULL);
-               break;
-       default:
-               break;
+               case LOCATION_METHOD_HYBRID:
+                       self = g_object_new (LOCATION_TYPE_HYBRID, NULL);
+                       break;
+               case LOCATION_METHOD_GPS:
+                       self = g_object_new (LOCATION_TYPE_GPS, NULL);
+                       break;
+               case LOCATION_METHOD_WPS:
+                       self = g_object_new (LOCATION_TYPE_WPS, NULL);
+                       break;
+               case LOCATION_METHOD_CPS:
+                       self = g_object_new (LOCATION_TYPE_CPS, NULL);
+                       break;
+               default:
+                       break;
        }
        return self;
 }
@@ -89,11 +85,6 @@ location_free (LocationObject *obj)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
 
-       if (g_map_service) {
-               g_object_unref (g_map_service);
-               g_map_service = NULL;
-       }
-
        g_object_unref (obj);
        return LOCATION_ERROR_NONE;
 }
@@ -102,6 +93,11 @@ EXPORT_API int
 location_start (LocationObject *obj)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (G_OBJECT_TYPE(obj) != MAP_TYPE_SERVICE, LOCATION_ERROR_PARAMETER);
+       if (FALSE == location_application_enabled()) {
+               LOCATION_LOGD("Application dose not have permission");
+               return LOCATION_ERROR_NOT_ALLOWED;
+       }
        return location_ielement_start (LOCATION_IELEMENT(obj));
 }
 
@@ -109,6 +105,7 @@ EXPORT_API int
 location_stop (LocationObject *obj)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (G_OBJECT_TYPE(obj) != MAP_TYPE_SERVICE, LOCATION_ERROR_PARAMETER);
        return location_ielement_stop (LOCATION_IELEMENT(obj));
 }
 
@@ -119,7 +116,7 @@ location_is_supported_method(LocationMethod method)
 
        switch(method) {
        case LOCATION_METHOD_HYBRID:
-               if(module_is_supported("gps") || module_is_supported("wps") || module_is_supported("sps"))
+               if(module_is_supported("gps") || module_is_supported("wps"))
                        is_supported = TRUE;
                break;
        case LOCATION_METHOD_GPS:
@@ -128,11 +125,9 @@ location_is_supported_method(LocationMethod method)
        case LOCATION_METHOD_WPS:
                is_supported = module_is_supported("wps");
                break;
-       case LOCATION_METHOD_SPS:
-               is_supported = module_is_supported("sps");
+       case LOCATION_METHOD_CPS:
+               is_supported = module_is_supported("cps");
                break;
-       case LOCATION_METHOD_CPS:       /* deprecated */
-       case LOCATION_METHOD_IPS:       /* deprecated */
        default:
                break;
        }
@@ -144,8 +139,9 @@ EXPORT_API gboolean
 location_is_enabled_gps(LocationObject *obj)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (G_OBJECT_TYPE(obj) != MAP_TYPE_SERVICE, LOCATION_ERROR_PARAMETER);
 
-       return (gboolean) location_setting_get_int(GPS_ENABLED);
+       return (gboolean) location_setting_get_int(VCONFKEY_LOCATION_ENABLED);
 }
 
 EXPORT_API int
@@ -154,6 +150,7 @@ location_get_position (LocationObject *obj,
        LocationAccuracy **accuracy)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (G_OBJECT_TYPE(obj) != MAP_TYPE_SERVICE, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
        return location_ielement_get_position (LOCATION_IELEMENT(obj), position, accuracy);
@@ -165,22 +162,17 @@ location_get_last_position (LocationObject *obj,
        LocationAccuracy **accuracy)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (G_OBJECT_TYPE(obj) != MAP_TYPE_SERVICE, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
        return location_ielement_get_last_position (LOCATION_IELEMENT(obj), position, accuracy);
 }
 
 EXPORT_API int
-location_get_last_known_position (LocationObject *obj, LocationMethod method,
-       LocationLastPosition *last_position)
-{
-       return LOCATION_ERROR_NOT_SUPPORTED;
-}
-
-EXPORT_API int
 location_get_satellite (LocationObject *obj, LocationSatellite **satellite)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (G_OBJECT_TYPE(obj) != MAP_TYPE_SERVICE, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (satellite, LOCATION_ERROR_PARAMETER);
 
        return location_ielement_get_satellite (LOCATION_IELEMENT(obj), satellite);
@@ -190,6 +182,7 @@ EXPORT_API int
 location_get_last_satellite (LocationObject *obj, LocationSatellite **satellite)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (G_OBJECT_TYPE(obj) != MAP_TYPE_SERVICE, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (satellite, LOCATION_ERROR_PARAMETER);
 
        return location_ielement_get_last_satellite (LOCATION_IELEMENT(obj), satellite);
@@ -201,6 +194,7 @@ location_get_velocity (LocationObject *obj,
        LocationAccuracy **accuracy)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (G_OBJECT_TYPE(obj) != MAP_TYPE_SERVICE, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (velocity, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
 
@@ -213,6 +207,7 @@ location_get_last_velocity (LocationObject *obj,
        LocationAccuracy **accuracy)
 {
        g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (G_OBJECT_TYPE(obj) != MAP_TYPE_SERVICE, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (velocity, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);