Tizen 2.0 Release
[platform/core/location/ug-setting-location-efl.git] / libug-setting-location-efl-mypos.c
1 /*
2  * Open Service Platform
3  * Copyright (c) 2012-2013  Samsung Electronics Co., Ltd
4  *
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
8  *
9  *    http://floralicense.org/license/
10  *
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.
16  */
17
18 #include "libug-setting-location-efl.h"
19 #include "libug-setting-location-efl-log.h"
20 #include "libug-setting-location-efl-mypos.h"
21
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")
27 };
28
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
33
34 static void _loc_ug_position_updated_cb(double latitude, double longitude, double altitude, time_t timestamp, void *user_data)
35 {
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);
43 }
44
45 static void _loc_ug_velocity_updated_cb(double speed, double direction, double climb, time_t timestamp, void *user_data)
46 {
47         struct ug_data *ugd = (struct ug_data *)user_data;
48         ugd->speed = speed;
49         elm_genlist_item_update(ugd->gi_speed);
50 }
51
52 static void setting_location_mypos_free_itc(Elm_Genlist_Item_Class *itc)
53 {
54         if (itc) {
55                 elm_genlist_item_class_free(itc);
56         }
57 }
58
59 static void setting_location_mypos_back_cb(void *data, Evas_Object * obj, void *event_info)
60 {
61         LOC_LOG("setting_location_mypos_back_cb");
62         struct ug_data *ugd = (struct ug_data *)data;
63
64         location_manager_stop(ugd->loc);
65         location_manager_destroy(ugd->loc);
66
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);
71
72         elm_genlist_select_mode_set(ugd->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
73
74         elm_naviframe_item_pop(ugd->naviframe);
75 }
76
77 static char *_setting_location_mypos_gl_lat_text_get(void *data, Evas_Object * obj, const char *part)
78 {
79         struct ug_data *ugd = (struct ug_data *)data;
80
81         char tmp[16];
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);
87         } else {
88                 snprintf(tmp, sizeof(tmp) - 1, "%lf", ugd->latitude);
89         }
90
91         if (strcmp("elm.text.1", part) == 0) {
92                 return strdup(tmp);
93         } else if (strcmp("elm.text.2", part) == 0) {
94                 return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_LAT]));
95         }
96         return NULL;
97 }
98
99 static char *_setting_location_mypos_gl_long_text_get(void *data, Evas_Object * obj, const char *part)
100 {
101         struct ug_data *ugd = (struct ug_data *)data;
102
103         char tmp[16];
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);
109         } else {
110                 snprintf(tmp, sizeof(tmp) - 1, "%lf", ugd->longitude);
111         }
112
113         if (strcmp("elm.text.1", part) == 0) {
114                 return strdup(tmp);
115         } else if (strcmp("elm.text.2", part) == 0) {
116                 return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_LONG]));
117         }
118         return NULL;
119 }
120
121 static char *_setting_location_mypos_gl_alt_text_get(void *data, Evas_Object * obj, const char *part)
122 {
123         struct ug_data *ugd = (struct ug_data *)data;
124
125         char tmp[16];
126         int altitude;
127
128         altitude = ugd->altitude * 10 / 10;
129         snprintf(tmp, sizeof(tmp) - 1, "%d m", altitude);
130
131         if (strcmp("elm.text.1", part) == 0) {
132                 return strdup(tmp);
133         } else if (strcmp("elm.text.2", part) == 0) {
134                 return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_ALT]));
135         }
136         return NULL;
137 }
138
139 static char *_setting_location_mypos_gl_speed_text_get(void *data, Evas_Object * obj, const char *part)
140 {
141         struct ug_data *ugd = (struct ug_data *)data;
142
143         char tmp[16];
144         int speed;
145
146         speed = ugd->speed * 10 / 10;
147         snprintf(tmp, sizeof(tmp) - 1, "%d km/h", speed);
148
149         if (strcmp("elm.text.1", part) == 0) {
150                 return strdup(tmp);
151         } else if (strcmp("elm.text.2", part) == 0) {
152                 return strdup(_(mypos_menu[LOCATION_MYPOS_MENU_SPEED]));
153         }
154         return NULL;
155 }
156
157 Evas_Object *setting_location_mypos_create_gl(Evas_Object * parent, void *data)
158 {
159         struct ug_data *ugd = (struct ug_data *)data;
160
161         Evas_Object *genlist;
162         Elm_Object_Item *item;
163
164         genlist = elm_genlist_add(parent);
165         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
166
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;
173
174         ugd->gi_lat = elm_genlist_item_append(genlist, ugd->itc_lat, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
175
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;
182
183         ugd->gi_long = elm_genlist_item_append(genlist, ugd->itc_long, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
184
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;
191
192         ugd->gi_alt = elm_genlist_item_append(genlist, ugd->itc_alt, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
193
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;
200
201         ugd->gi_speed = elm_genlist_item_append(genlist, ugd->itc_speed, (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
202
203         elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_NONE);
204         evas_object_show(genlist);
205
206         return genlist;
207 }
208
209 int setting_location_position_start(void *data)
210 {
211         struct ug_data *ugd = (struct ug_data *)data;
212
213         if (location_manager_create(LOCATIONS_METHOD_HYBRID, &ugd->loc) != LOCATIONS_ERROR_NONE) {
214                 LOC_LOG("location_manager_create is failed");
215                 return -1;
216         }
217
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);
220
221         if (location_manager_start(ugd->loc) != LOCATIONS_ERROR_NONE) {
222                 LOC_LOG("location_manager_start is failed");
223                 return -1;
224         }
225
226         return 0;
227
228 }
229
230 void setting_location_mypos_init(void *data)
231 {
232         struct ug_data *ugd = (struct ug_data *)data;
233
234         ugd->loc = NULL;
235         ugd->latitude = 0.0;
236         ugd->longitude = 0.0;
237         ugd->altitude = 0.0;
238         ugd->speed = 0.0;
239 }
240
241 int setting_location_mypos_view(void *data)
242 {
243         LOC_LOG("setting_location_mypos_view");
244         struct ug_data *ugd = (struct ug_data *)data;
245
246         Evas_Object *genlist;
247         Evas_Object *l_button;
248
249         setting_location_mypos_init(ugd);
250
251         if (setting_location_position_start(ugd) == -1) {
252                 LOC_LOG("Position start is failed\n");
253                 return -1;
254         }
255
256         l_button = elm_button_add(ugd->naviframe);
257         evas_object_smart_callback_add(l_button, "clicked", setting_location_mypos_back_cb, ugd);
258
259         genlist = setting_location_mypos_create_gl(ugd->naviframe, ugd);
260
261         elm_naviframe_item_push(ugd->naviframe, _("IDS_LBS_BODY_MY_POSITION"), l_button, NULL, genlist, NULL);
262
263         elm_object_style_set(l_button, "naviframe/back_btn/default");
264
265         return 0;
266 }