2 * Open Service Platform
3 * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd
5 * Licensed under the Flora License, Version 1.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
9 * http://floralicense.org/license/
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.
18 #include "libug-setting-location-efl.h"
19 #include "libug-setting-location-efl-log.h"
20 #include "libug-setting-location-efl-mypos.h"
22 static char *mypos_menu[] = {
23 N_("IDS_LBS_BODY_LATITUDE"),
24 N_("IDS_LBS_BODY_LONGITUDE"),
25 N_("IDS_LBS_BODY_ALTITUDE"),
26 N_("IDS_LBS_BODY_SPEED")
29 #define LOCATION_MYPOS_MENU_LAT 0
30 #define LOCATION_MYPOS_MENU_LONG 1
31 #define LOCATION_MYPOS_MENU_ALT 2
32 #define LOCATION_MYPOS_MENU_SPEED 3
34 static void _loc_ug_position_updated_cb(double latitude, double longitude, double altitude, time_t timestamp, void *user_data)
36 struct ug_data *ugd = (struct ug_data *)user_data;
37 ugd->latitude = latitude;
38 ugd->longitude = longitude;
39 ugd->altitude = altitude;
40 elm_genlist_item_update(ugd->gi_lat);
41 elm_genlist_item_update(ugd->gi_long);
42 elm_genlist_item_update(ugd->gi_alt);
45 static void _loc_ug_velocity_updated_cb(double speed, double direction, double climb, time_t timestamp, void *user_data)
47 struct ug_data *ugd = (struct ug_data *)user_data;
49 elm_genlist_item_update(ugd->gi_speed);
52 static void setting_location_mypos_free_itc(Elm_Genlist_Item_Class *itc)
55 elm_genlist_item_class_free(itc);
59 static void setting_location_mypos_back_cb(void *data, Evas_Object * obj, void *event_info)
61 LOC_LOG("setting_location_mypos_back_cb");
62 struct ug_data *ugd = (struct ug_data *)data;
64 location_manager_stop(ugd->loc);
65 location_manager_destroy(ugd->loc);
67 setting_location_mypos_free_itc(ugd->itc_lat);
68 setting_location_mypos_free_itc(ugd->itc_long);
69 setting_location_mypos_free_itc(ugd->itc_alt);
70 setting_location_mypos_free_itc(ugd->itc_speed);
72 elm_genlist_select_mode_set(ugd->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
74 elm_naviframe_item_pop(ugd->naviframe);
77 static char *_setting_location_mypos_gl_lat_text_get(void *data, Evas_Object * obj, const char *part)
79 struct ug_data *ugd = (struct ug_data *)data;
82 if (ugd->latitude > 0) {
83 snprintf(tmp, sizeof(tmp) - 1, "N%lf", ugd->latitude);
84 } else if (ugd->latitude < 0) {
85 ugd->latitude = -(ugd->latitude);
86 snprintf(tmp, sizeof(tmp) - 1, "S%lf", ugd->latitude);
88 snprintf(tmp, sizeof(tmp) - 1, "%lf", ugd->latitude);
91 if (strcmp("elm.text.1", part) == 0) {
93 } else if (strcmp("elm.text.2", part) == 0) {
94 return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_LAT]));
99 static char *_setting_location_mypos_gl_long_text_get(void *data, Evas_Object * obj, const char *part)
101 struct ug_data *ugd = (struct ug_data *)data;
104 if (ugd->longitude > 0) {
105 snprintf(tmp, sizeof(tmp) - 1, "E%lf", ugd->longitude);
106 } else if (ugd->longitude < 0) {
107 ugd->longitude = -(ugd->longitude);
108 snprintf(tmp, sizeof(tmp) - 1, "W%lf", ugd->longitude);
110 snprintf(tmp, sizeof(tmp) - 1, "%lf", ugd->longitude);
113 if (strcmp("elm.text.1", part) == 0) {
115 } else if (strcmp("elm.text.2", part) == 0) {
116 return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_LONG]));
121 static char *_setting_location_mypos_gl_alt_text_get(void *data, Evas_Object * obj, const char *part)
123 struct ug_data *ugd = (struct ug_data *)data;
128 altitude = ugd->altitude * 10 / 10;
129 snprintf(tmp, sizeof(tmp) - 1, "%d m", altitude);
131 if (strcmp("elm.text.1", part) == 0) {
133 } else if (strcmp("elm.text.2", part) == 0) {
134 return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_ALT]));
139 static char *_setting_location_mypos_gl_speed_text_get(void *data, Evas_Object * obj, const char *part)
141 struct ug_data *ugd = (struct ug_data *)data;
146 speed = ugd->speed * 10 / 10;
147 snprintf(tmp, sizeof(tmp) - 1, "%d km/h", speed);
149 if (strcmp("elm.text.1", part) == 0) {
151 } else if (strcmp("elm.text.2", part) == 0) {
152 return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_SPEED]));
157 Evas_Object *setting_location_mypos_create_gl(Evas_Object * parent, void *data)
159 struct ug_data *ugd = (struct ug_data *)data;
161 Evas_Object *genlist;
162 Elm_Object_Item *item;
164 genlist = elm_genlist_add(parent);
165 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
167 ugd->itc_lat = elm_genlist_item_class_new();
168 ugd->itc_lat->item_style = "dialogue/2text.2";
169 ugd->itc_lat->func.text_get = _setting_location_mypos_gl_lat_text_get;
170 ugd->itc_lat->func.content_get = NULL;
171 ugd->itc_lat->func.state_get = NULL;
172 ugd->itc_lat->func.del = NULL;
174 ugd->gi_lat = elm_genlist_item_append(genlist, ugd->itc_lat, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
176 ugd->itc_long = elm_genlist_item_class_new();
177 ugd->itc_long->item_style = "dialogue/2text.2";
178 ugd->itc_long->func.text_get = _setting_location_mypos_gl_long_text_get;
179 ugd->itc_long->func.content_get = NULL;
180 ugd->itc_long->func.state_get = NULL;
181 ugd->itc_long->func.del = NULL;
183 ugd->gi_long = elm_genlist_item_append(genlist, ugd->itc_long, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
185 ugd->itc_alt = elm_genlist_item_class_new();
186 ugd->itc_alt->item_style = "dialogue/2text.2";
187 ugd->itc_alt->func.text_get = _setting_location_mypos_gl_alt_text_get;
188 ugd->itc_alt->func.content_get = NULL;
189 ugd->itc_alt->func.state_get = NULL;
190 ugd->itc_alt->func.del = NULL;
192 ugd->gi_alt = elm_genlist_item_append(genlist, ugd->itc_alt, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
194 ugd->itc_speed = elm_genlist_item_class_new();
195 ugd->itc_speed->item_style = "dialogue/2text.2";
196 ugd->itc_speed->func.text_get = _setting_location_mypos_gl_speed_text_get;
197 ugd->itc_speed->func.content_get = NULL;
198 ugd->itc_speed->func.state_get = NULL;
199 ugd->itc_speed->func.del = NULL;
201 ugd->gi_speed = elm_genlist_item_append(genlist, ugd->itc_speed, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
203 elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_NONE);
204 evas_object_show(genlist);
209 int setting_location_position_start(void *data)
211 struct ug_data *ugd = (struct ug_data *)data;
213 if (location_manager_create(LOCATIONS_METHOD_HYBRID, &ugd->loc) != LOCATIONS_ERROR_NONE) {
214 LOC_LOG("location_manager_create is failed");
218 location_manager_set_position_updated_cb(ugd->loc, _loc_ug_position_updated_cb, 1, (void *)ugd);
219 location_manager_set_velocity_updated_cb(ugd->loc, _loc_ug_velocity_updated_cb, 1, (void *)ugd);
221 if (location_manager_start(ugd->loc) != LOCATIONS_ERROR_NONE) {
222 LOC_LOG("location_manager_start is failed");
230 void setting_location_mypos_init(void *data)
232 struct ug_data *ugd = (struct ug_data *)data;
236 ugd->longitude = 0.0;
241 int setting_location_mypos_view(void *data)
243 LOC_LOG("setting_location_mypos_view");
244 struct ug_data *ugd = (struct ug_data *)data;
246 Evas_Object *genlist;
247 Evas_Object *l_button;
249 setting_location_mypos_init(ugd);
251 if (setting_location_position_start(ugd) == -1) {
252 LOC_LOG("Position start is failed\n");
256 l_button = elm_button_add(ugd->naviframe);
257 evas_object_smart_callback_add(l_button, "clicked", setting_location_mypos_back_cb, ugd);
259 genlist = setting_location_mypos_create_gl(ugd->naviframe, ugd);
261 elm_naviframe_item_push(ugd->naviframe, _("IDS_LBS_BODY_MY_POSITION"), l_button, NULL, genlist, NULL);
263 elm_object_style_set(l_button, "naviframe/back_btn/default");