/* * Open Service Platform * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd * * Licensed under the Flora License, Version 1.1 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://floralicense.org/license/ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "libug-setting-location-efl.h" #include "libug-setting-location-efl-log.h" #include "libug-setting-location-efl-mypos.h" static char *mypos_menu[] = { N_("IDS_LBS_BODY_LATITUDE"), N_("IDS_LBS_BODY_LONGITUDE"), N_("IDS_LBS_BODY_ALTITUDE"), N_("IDS_LBS_BODY_SPEED") }; #define LOCATION_MYPOS_MENU_LAT 0 #define LOCATION_MYPOS_MENU_LONG 1 #define LOCATION_MYPOS_MENU_ALT 2 #define LOCATION_MYPOS_MENU_SPEED 3 static void _loc_ug_position_updated_cb(double latitude, double longitude, double altitude, time_t timestamp, void *user_data) { struct ug_data *ugd = (struct ug_data *)user_data; ugd->latitude = latitude; ugd->longitude = longitude; ugd->altitude = altitude; elm_genlist_item_update(ugd->gi_lat); elm_genlist_item_update(ugd->gi_long); elm_genlist_item_update(ugd->gi_alt); } static void _loc_ug_velocity_updated_cb(double speed, double direction, double climb, time_t timestamp, void *user_data) { struct ug_data *ugd = (struct ug_data *)user_data; ugd->speed = speed; elm_genlist_item_update(ugd->gi_speed); } static void setting_location_mypos_free_itc(Elm_Genlist_Item_Class *itc) { if (itc) { elm_genlist_item_class_free(itc); } } static void setting_location_mypos_back_cb(void *data, Evas_Object * obj, void *event_info) { LOC_LOG("setting_location_mypos_back_cb"); struct ug_data *ugd = (struct ug_data *)data; location_manager_stop(ugd->loc); location_manager_destroy(ugd->loc); setting_location_mypos_free_itc(ugd->itc_lat); setting_location_mypos_free_itc(ugd->itc_long); setting_location_mypos_free_itc(ugd->itc_alt); setting_location_mypos_free_itc(ugd->itc_speed); elm_genlist_select_mode_set(ugd->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT); elm_naviframe_item_pop(ugd->naviframe); } static char *_setting_location_mypos_gl_lat_text_get(void *data, Evas_Object * obj, const char *part) { struct ug_data *ugd = (struct ug_data *)data; char tmp[16]; if (ugd->latitude > 0) { snprintf(tmp, sizeof(tmp) - 1, "N%lf", ugd->latitude); } else if (ugd->latitude < 0) { ugd->latitude = -(ugd->latitude); snprintf(tmp, sizeof(tmp) - 1, "S%lf", ugd->latitude); } else { snprintf(tmp, sizeof(tmp) - 1, "%lf", ugd->latitude); } if (strcmp("elm.text.1", part) == 0) { return strdup(tmp); } else if (strcmp("elm.text.2", part) == 0) { return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_LAT])); } return NULL; } static char *_setting_location_mypos_gl_long_text_get(void *data, Evas_Object * obj, const char *part) { struct ug_data *ugd = (struct ug_data *)data; char tmp[16]; if (ugd->longitude > 0) { snprintf(tmp, sizeof(tmp) - 1, "E%lf", ugd->longitude); } else if (ugd->longitude < 0) { ugd->longitude = -(ugd->longitude); snprintf(tmp, sizeof(tmp) - 1, "W%lf", ugd->longitude); } else { snprintf(tmp, sizeof(tmp) - 1, "%lf", ugd->longitude); } if (strcmp("elm.text.1", part) == 0) { return strdup(tmp); } else if (strcmp("elm.text.2", part) == 0) { return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_LONG])); } return NULL; } static char *_setting_location_mypos_gl_alt_text_get(void *data, Evas_Object * obj, const char *part) { struct ug_data *ugd = (struct ug_data *)data; char tmp[16]; int altitude; altitude = ugd->altitude * 10 / 10; snprintf(tmp, sizeof(tmp) - 1, "%d m", altitude); if (strcmp("elm.text.1", part) == 0) { return strdup(tmp); } else if (strcmp("elm.text.2", part) == 0) { return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_ALT])); } return NULL; } static char *_setting_location_mypos_gl_speed_text_get(void *data, Evas_Object * obj, const char *part) { struct ug_data *ugd = (struct ug_data *)data; char tmp[16]; int speed; speed = ugd->speed * 10 / 10; snprintf(tmp, sizeof(tmp) - 1, "%d km/h", speed); if (strcmp("elm.text.1", part) == 0) { return strdup(tmp); } else if (strcmp("elm.text.2", part) == 0) { return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_SPEED])); } return NULL; } Evas_Object *setting_location_mypos_create_gl(Evas_Object * parent, void *data) { struct ug_data *ugd = (struct ug_data *)data; Evas_Object *genlist; Elm_Object_Item *item; genlist = elm_genlist_add(parent); elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); ugd->itc_lat = elm_genlist_item_class_new(); ugd->itc_lat->item_style = "dialogue/2text.2"; ugd->itc_lat->func.text_get = _setting_location_mypos_gl_lat_text_get; ugd->itc_lat->func.content_get = NULL; ugd->itc_lat->func.state_get = NULL; ugd->itc_lat->func.del = NULL; ugd->gi_lat = elm_genlist_item_append(genlist, ugd->itc_lat, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); ugd->itc_long = elm_genlist_item_class_new(); ugd->itc_long->item_style = "dialogue/2text.2"; ugd->itc_long->func.text_get = _setting_location_mypos_gl_long_text_get; ugd->itc_long->func.content_get = NULL; ugd->itc_long->func.state_get = NULL; ugd->itc_long->func.del = NULL; ugd->gi_long = elm_genlist_item_append(genlist, ugd->itc_long, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); ugd->itc_alt = elm_genlist_item_class_new(); ugd->itc_alt->item_style = "dialogue/2text.2"; ugd->itc_alt->func.text_get = _setting_location_mypos_gl_alt_text_get; ugd->itc_alt->func.content_get = NULL; ugd->itc_alt->func.state_get = NULL; ugd->itc_alt->func.del = NULL; ugd->gi_alt = elm_genlist_item_append(genlist, ugd->itc_alt, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); ugd->itc_speed = elm_genlist_item_class_new(); ugd->itc_speed->item_style = "dialogue/2text.2"; ugd->itc_speed->func.text_get = _setting_location_mypos_gl_speed_text_get; ugd->itc_speed->func.content_get = NULL; ugd->itc_speed->func.state_get = NULL; ugd->itc_speed->func.del = NULL; ugd->gi_speed = elm_genlist_item_append(genlist, ugd->itc_speed, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_NONE); evas_object_show(genlist); return genlist; } int setting_location_position_start(void *data) { struct ug_data *ugd = (struct ug_data *)data; if (location_manager_create(LOCATIONS_METHOD_HYBRID, &ugd->loc) != LOCATIONS_ERROR_NONE) { LOC_LOG("location_manager_create is failed"); return -1; } location_manager_set_position_updated_cb(ugd->loc, _loc_ug_position_updated_cb, 1, (void *)ugd); location_manager_set_velocity_updated_cb(ugd->loc, _loc_ug_velocity_updated_cb, 1, (void *)ugd); if (location_manager_start(ugd->loc) != LOCATIONS_ERROR_NONE) { LOC_LOG("location_manager_start is failed"); return -1; } return 0; } void setting_location_mypos_init(void *data) { struct ug_data *ugd = (struct ug_data *)data; ugd->loc = NULL; ugd->latitude = 0.0; ugd->longitude = 0.0; ugd->altitude = 0.0; ugd->speed = 0.0; } int setting_location_mypos_view(void *data) { LOC_LOG("setting_location_mypos_view"); struct ug_data *ugd = (struct ug_data *)data; Evas_Object *genlist; Evas_Object *l_button; setting_location_mypos_init(ugd); if (setting_location_position_start(ugd) == -1) { LOC_LOG("Position start is failed\n"); return -1; } l_button = elm_button_add(ugd->naviframe); evas_object_smart_callback_add(l_button, "clicked", setting_location_mypos_back_cb, ugd); genlist = setting_location_mypos_create_gl(ugd->naviframe, ugd); elm_naviframe_item_push(ugd->naviframe, _("IDS_LBS_BODY_MY_POSITION"), l_button, NULL, genlist, NULL); elm_object_style_set(l_button, "naviframe/back_btn/default"); return 0; }