54d6e712dafd87b81e2d7c913cbe5b68bea02d01
[apps/home/settings.git] / setting-applications / src / setting-applications-defaultapp.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <setting-applications-defaultapp.h>
23 #include <dbus/dbus.h>
24 #include <dbus/dbus-glib-lowlevel.h>
25
26
27 static int setting_applications_defaultapp_create(void *cb);
28 static int setting_applications_defaultapp_destroy(void *cb);
29 static int setting_applications_defaultapp_update(void *cb);
30 static int setting_applications_defaultapp_cleanup(void *cb);
31
32 static void setting_applications_defaultapp_click_softkey_cancel_cb(void *data, Evas_Object *obj, void *event_info);
33 static void setting_applications_defaultapp_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj, void *event_info);
34
35 static gboolean setting_applications_create_homescreen_setting_ug(void *data);
36
37 setting_view setting_view_applications_defaultapp = {
38         .create = setting_applications_defaultapp_create,
39         .destroy = setting_applications_defaultapp_destroy,
40         .update = setting_applications_defaultapp_update,
41         .cleanup = setting_applications_defaultapp_cleanup,
42 };
43 /* ***************************************************
44  *
45  *basic func
46  *
47  ***************************************************/
48 static void _indicator_free(char *str)
49 {
50         free(str);
51 }
52
53 void construct_defaultapp(void *data, Evas_Object *genlist)
54 {
55         SETTING_TRACE_BEGIN;
56         ret_if(data == NULL);
57         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
58
59         ad->data_home =
60             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
61                                              setting_applications_defaultapp_mouse_up_Gendial_list_cb,
62                                              ad, SWALLOW_Type_INVALID, NULL,
63                                              NULL, 0, "Home",
64                                              "Tizen home", NULL);
65         if (ad->data_home) {
66                 ad->data_home->userdata = ad;
67                 ad->data_home->group_style = SETTING_GROUP_STYLE_TOP;
68                 __BACK_POINTER_SET(ad->data_home);
69         } else {
70                 SETTING_TRACE_ERROR("ad->data_home is NULL");
71         }
72
73
74         ad->data_message =
75             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
76                                              setting_applications_defaultapp_mouse_up_Gendial_list_cb,
77                                              ad, SWALLOW_Type_INVALID, NULL,
78                                              NULL, 0, "Messages",
79                                              "Messages", NULL);
80         if (ad->data_message) {
81                 ad->data_message->userdata = ad;
82                 ad->data_message->group_style = SETTING_GROUP_STYLE_TOP;
83                 __BACK_POINTER_SET(ad->data_message);
84         } else {
85                 SETTING_TRACE_ERROR("ad->data_message is NULL");
86         }
87
88
89 }
90
91 void destruct_defaultapp(void *data)
92 {
93         SETTING_TRACE_BEGIN;
94         ret_if(data == NULL);
95 #if 0
96         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
97         if (ad->popup) {
98                 evas_object_del(ad->popup);
99                 ad->popup = NULL;
100         }
101 #endif
102 }
103
104 static int setting_applications_defaultapp_create(void *cb)
105 {
106         SETTING_TRACE_BEGIN;
107         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
108
109         SettingApplicationsUG *ad = (SettingApplicationsUG *) cb;
110         Evas_Object *genlist = elm_genlist_add(ad->win_main_layout);
111         retvm_if(genlist == NULL, SETTING_RETURN_FAIL, "Cannot set scroller object as contento of layout");
112         /*elm_object_style_set(genlist, "dialogue"); */
113         elm_genlist_realization_mode_set(genlist, EINA_TRUE);
114         elm_genlist_clear(genlist);     /* first to clear list */
115
116         setting_push_layout_navi_bar("Default Applications",
117                                      _("IDS_ST_BUTTON_BACK"), NULL, NULL,
118                                      setting_applications_defaultapp_click_softkey_cancel_cb,
119                                      NULL,
120                                      NULL, ad, genlist, ad->navi_bar, NULL);
121
122         /*ad->genlist = genlist; */
123         evas_object_smart_callback_add(genlist, "realized", __gl_realized_cb, ad);
124
125         construct_defaultapp(ad, genlist);/*------- */
126
127
128         setting_view_applications_defaultapp.is_create = 1;
129         return SETTING_RETURN_SUCCESS;
130 }
131
132 static int setting_applications_defaultapp_destroy(void *cb)
133 {
134         SETTING_TRACE_BEGIN;
135
136         /* error check */
137         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
138         retv_if(!(setting_view_applications_defaultapp.is_create), SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
139
140         destruct_defaultapp(cb);/*------- */
141
142         SettingApplicationsUG *ad = (SettingApplicationsUG *) cb;
143
144         setting_view_applications_defaultapp.is_create = 0;
145         elm_naviframe_item_pop(ad->navi_bar);
146
147         return SETTING_RETURN_SUCCESS;
148 }
149
150 static int setting_applications_defaultapp_update(void *cb)
151 {
152         SETTING_TRACE_BEGIN;
153         return SETTING_RETURN_SUCCESS;
154
155 }
156
157 static int setting_applications_defaultapp_cleanup(void *cb)
158 {
159         SETTING_TRACE_BEGIN;
160         /* error check */
161         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
162         setting_applications_defaultapp_destroy(cb);
163
164         return SETTING_RETURN_SUCCESS;
165 }
166
167 /* ***************************************************
168  *
169  *general func
170  *
171  ***************************************************/
172
173 /* ***************************************************
174  *
175  *call back func
176  *
177  ***************************************************/
178
179 static void
180 setting_applications_defaultapp_click_softkey_cancel_cb(void *data,
181                                                         Evas_Object *obj,
182                                                         void *event_info)
183 {
184         SETTING_TRACE_BEGIN;
185         /* error check */
186         retm_if(data == NULL, "Data parameter is NULL");
187         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
188
189         setting_view_change(&setting_view_applications_defaultapp,
190                             &setting_view_applications_main, ad);
191 }
192
193 void setting_applications_defaultapp_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj, void *event_info)
194 {
195         SETTING_TRACE_BEGIN;
196         /* error check */
197         setting_retm_if(data == NULL, "Data parameter is NULL");
198
199         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
200         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
201         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
202         elm_genlist_item_selected_set(item, 0);
203         Setting_GenGroupItem_Data *list_item =
204             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
205
206         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
207         /*SETTING_TRACE("chk_status[%d]", list_item->chk_status); */
208         if (!strcmp(_(list_item->keyStr), "Home")) {
209                 SETTING_TRACE("click Home and run UG");
210                 setting_applications_create_homescreen_setting_ug(ad);
211         } else if (!strcmp(_(list_item->keyStr), "Messages")) {
212                 SETTING_TRACE("click Home and run Message logic - do nothing now.");
213         }
214 }
215
216 static void setting_applications_destroy_homescreen_setting_ug_cb(ui_gadget_h ug, void *priv)
217 {
218         SETTING_TRACE_BEGIN;
219         ret_if(priv == NULL);
220         SettingApplicationsUG *ad = (SettingApplicationsUG *) priv;
221         if (ug) {
222                 setting_ug_destroy(ug);
223                 ad->ug_homescreen = NULL;
224         }
225         elm_genlist_realized_items_update(ad->genlist);
226 }
227
228 static gboolean setting_applications_create_homescreen_setting_ug(void *data)
229 {
230         SETTING_TRACE_BEGIN;
231         /* error check */
232         retv_if(data == NULL, FALSE);
233
234         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;     /* ad is point to data */
235
236         if (ad->ug_homescreen) {
237                 SETTING_TRACE("Font UG is already loaded.");
238                 return FALSE;
239         }
240         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
241
242         if (!cbs) {
243                 return FALSE;
244         }
245         cbs->layout_cb = setting_applications_layout_ug_cb;
246         cbs->result_cb = NULL;
247         cbs->destroy_cb = setting_applications_destroy_homescreen_setting_ug_cb;
248         cbs->priv = (void *)ad;
249
250         elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
251
252         ad->ug_homescreen = setting_ug_create(ad->ug, "setting-homescreen-efl", UG_MODE_FULLVIEW, NULL, cbs);
253         if (NULL == ad->ug_homescreen) {        /* error handling */
254                 SETTING_TRACE_ERROR("NULL == ad->ug_homescreen");
255                 evas_object_show(ad->ly_main);
256         }
257         FREE(cbs);
258
259         return TRUE;
260 }
261
262