d1fad737105fd60d4e8622e3c564f3d482835935
[apps/home/settings.git] / setting-menuscreen / src / setting-menuscreen-password.c
1 /*
2  * setting
3  * Copyright (c) 2012 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 #include <setting-menuscreen-password.h>
18 #include <Ecore_X.h>
19
20 #define SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH 4
21 #define SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH 16
22 #define SETTING_PW_UG_PRIVACY_PASSWORD_MIN_LENGTH 4
23 #define SETTING_PW_UG_PRIVACY_PASSWORD_MAX_LENGTH 16
24
25
26
27 static int setting_menuscreen_password_create(void *cb);
28 static int setting_menuscreen_password_destroy(void *cb);
29 static int setting_menuscreen_password_update(void *cb);
30 static int setting_menuscreen_password_cleanup(void *cb);
31
32
33 setting_view setting_view_menuscreen_password = {
34         .create = setting_menuscreen_password_create,
35         .destroy = setting_menuscreen_password_destroy,
36         .update = setting_menuscreen_password_update,
37         .cleanup = setting_menuscreen_password_cleanup,
38 };
39 static Eina_Bool __focus_on_idler(void *data)
40 {
41         SETTING_TRACE_BEGIN;
42         /* error check */
43         retv_if(data == NULL, FALSE);
44
45         SettingMenuscreenUG *ad = (SettingMenuscreenUG *) data;
46         retv_if(ad->data_pwd == NULL, EINA_FALSE);
47         if (ad->data_pwd->isFocusFlag || (ad->data_pwd->eo_check != NULL))
48         {
49                 //no matter how many edifileds, it only need focus on 1st editfiled
50                 elm_object_focus_set(ad->data_pwd->eo_check, EINA_TRUE);
51         }
52
53         SETTING_TRACE_END;
54         return ECORE_CALLBACK_CANCEL;
55         //return EINA_FALSE;
56 }
57
58 static int setting_menuscreen_password_create(void *cb)
59 {
60         SETTING_TRACE_BEGIN;
61         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
62
63         SettingMenuscreenUG *ad = (SettingMenuscreenUG *) cb;
64         Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
65         elm_object_style_set(scroller, "dialogue");
66         if(scroller == NULL)
67                 return SETTING_RETURN_FAIL;
68
69         elm_genlist_clear(scroller);    /* first to clear list */
70         elm_genlist_homogeneous_set(scroller, EINA_TRUE);
71
72         ad->navi_it = setting_create_navi_bar_top_buttons(_("IDS_COM_BODY_AUTH_PASSWORD"),
73                                            _("IDS_COM_SK_CANCEL"),
74                                            _("IDS_COM_SK_DONE"), NULL,
75                                            setting_menuscreen_password_click_softkey_back_cb,
76                                            setting_menuscreen_password_click_softkey_done_cb,
77                                            NULL, ad, scroller, ad->navi_bar);
78         retv_if(!ad->navi_it, SETTING_RETURN_FAIL);
79         Evas_Object *done_btn = elm_object_item_part_content_get(ad->navi_it, "title_right_btn");
80         setting_disable_evas_object(done_btn);
81         setting_dim_evas_object(done_btn, TRUE);
82
83         Elm_Object_Item *item = NULL;;
84         item =elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
85                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
86         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
87
88         //---------------------------------------------------------------------
89         // draw password UG code
90         //---------------------------------------------------------------------
91         ad->data_pwd=
92                 setting_create_Gendial_field_entry(scroller,
93                                                    & (itc_1icon),
94                                                    NULL, ad,
95                                                    SWALLOW_Type_LAYOUT_ENTRY,
96                                                    NULL, NULL, 0,
97                                                    "IDS_COM_BODY_PASSWORD",
98                                                    NULL,
99                                                    setting_menuscreen_password_entry_change_cb,
100                                                    ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
101                                                    TRUE, TRUE,
102                                                    SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
103                                                    0, NULL, NULL);
104         elm_object_focus_set(ad->data_pwd->eo_check, EINA_TRUE);
105         ecore_idler_add(__focus_on_idler, ad);
106
107         setting_view_menuscreen_password.is_create = 1;
108         return SETTING_RETURN_SUCCESS;
109 }
110
111 static int setting_menuscreen_password_destroy(void *cb)
112 {
113         SETTING_TRACE_BEGIN;
114         /* error check */
115         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
116
117         SettingMenuscreenUG *ad = (SettingMenuscreenUG *) cb;
118         elm_naviframe_item_pop(ad->navi_bar);
119
120         setting_view_menuscreen_password.is_create = 0;
121         return SETTING_RETURN_SUCCESS;
122 }
123
124
125 static int setting_menuscreen_password_update(void *cb)
126 {
127         return SETTING_RETURN_SUCCESS;
128 }
129
130 static int setting_menuscreen_password_cleanup(void *cb)
131 {
132         SETTING_TRACE_BEGIN;
133         /* error check */
134         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
135         return setting_menuscreen_password_destroy(cb);
136 }
137
138 /* ***************************************************
139  *
140  *general func
141  *
142  ***************************************************/
143 static void
144 setting_menuscreen_password_click_softkey_back_cb(void *data, Evas_Object *obj,
145                                            void *event_info)
146 {
147         SETTING_TRACE_BEGIN;
148         /* error check */
149         setting_retm_if(data == NULL,
150                         "[Setting > Menuscreen] Data parameter is NULL");
151
152         SettingMenuscreenUG *ad = (SettingMenuscreenUG *) data;
153
154         /* Send destroy request */
155         setting_view_change(&setting_view_menuscreen_password, &setting_view_menuscreen_main, ad);
156         SETTING_TRACE_END;
157
158 }
159
160 static void
161 setting_menuscreen_password_click_softkey_done_cb(void *data, Evas_Object *obj,
162                                             void *event_info)
163 {
164         SETTING_TRACE_BEGIN;
165         /* error check */
166         retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
167
168         SettingMenuscreenUG *ad = (SettingMenuscreenUG *) data;
169         const char *entry_str = ad->data_pwd->sub_desc;
170         if (0 == safeStrCmp(entry_str, SETTING_PW_STR))
171         {
172                 // choose the value from radio button state.
173                 vconf_set_str( VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, ad->selected_theme);
174                 ug_destroy_me(ad->ug);
175         }
176         else
177         {
178                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_INCORRECT_PASSWORD"),NULL, 2, FALSE, FALSE);
179                 ad->data_pwd->sub_desc = NULL;
180                 elm_entry_entry_set(obj, ad->data_pwd->sub_desc);
181                 elm_entry_cursor_end_set(obj);
182                 elm_object_focus_set(ad->data_pwd->eo_check, EINA_TRUE);
183                 return;
184         }
185 }
186
187 static void setting_menuscreen_password_entry_change_cb (void *data, Evas_Object *obj, void *event_info)
188 {
189         retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
190         Setting_GenGroupItem_Data *list_item =
191             (Setting_GenGroupItem_Data *) data;
192         SettingMenuscreenUG *ad = (SettingMenuscreenUG *) list_item->userdata;
193         const char *entry_str = elm_entry_entry_get(obj);
194         /* SETTING_TRACE("entry_str:%s", entry_str); */
195         list_item->sub_desc = (char *)g_strdup(entry_str);
196
197         /* Evas_Object *eo_entry = NULL; */
198         bool isFoundEmptyEntry = FALSE;
199
200         do {
201                 if (ad->data_pwd) {
202                         entry_str = ad->data_pwd->sub_desc;
203                         if (NULL == entry_str || '\0' == entry_str[0]) {
204                                 isFoundEmptyEntry = TRUE;
205                                 break;
206                         }
207                 }
208
209         } while (0);
210
211         bool disableFlag = isFoundEmptyEntry;
212
213         Evas_Object *done_btn = elm_object_item_part_content_get(ad->navi_it, "title_right_btn");
214         if (disableFlag) {
215                 if (!evas_object_pass_events_get(done_btn)) {//it had not yet been disabled
216                         setting_disable_evas_object(done_btn);
217                         setting_dim_evas_object(done_btn, TRUE);
218                 }//else already disabled
219         } else {
220                 setting_enable_evas_object(done_btn);
221                 setting_undo_dim_evas_object(done_btn, TRUE);
222         }
223 }
224