2 * Tizen ODE application
4 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
6 * Contact: SeolHeui Kim <s414.kim@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
24 int launchpad_main(int argc, char *argv[]);
25 int standalone_main(int argc, char *argv[]);
29 int (*main)(int argc, char* argv[]);
33 .main = launchpad_main
37 .main = standalone_main
41 static Evas_Object* create_mainview(appdata_s* ad)
43 Evas_Object* base_layout = NULL;
44 Evas_Object* navi_bar = NULL;
46 base_layout = dpm_encryption_create_layout(ad->conform, NULL, NULL);
48 navi_bar = dpm_encryption_create_navigation(base_layout);
49 elm_naviframe_prev_btn_auto_pushed_set(navi_bar, EINA_TRUE);
50 ad->navi_bar = navi_bar;
52 switch (ad->view_type) {
54 dpm_encryption_create_view(ad);
57 dpm_decryption_create_view(ad);
60 dpm_encryption_sd_card_create_view(ad);
63 dpm_decryption_sd_card_create_view(ad);
69 static void win_delete_request_cb(void* data, Evas_Object* obj, void* event_info)
74 static Eina_Bool _home_key_cb(void *data, int type, void *event)
76 Evas_Event_Key_Down *ev = event;
77 if (!strcmp(ev->keyname, "XF86Home"))
82 static int create_base_gui(appdata_s* ad)
84 dlog_print(DLOG_DEBUG, LOG_TAG, "### create base gui start ###");
85 char* res_path = NULL;
86 char edj_path[PATH_MAX], icon_check_path[PATH_MAX], icon_bar_path[PATH_MAX] = "\0";
88 /* get EDJ & icon path */
89 res_path = app_get_resource_path();
90 if (res_path == NULL) {
91 dlog_print(DLOG_ERROR, LOG_TAG, "failed get resource path");
95 snprintf(edj_path, PATH_MAX, "%s%s", res_path, "org.tizen.ode.edj");
96 ad->edj_path = strdup(edj_path);
97 snprintf(icon_check_path, PATH_MAX, "%s%s", res_path, "images/icon_encrypt_check.png");
98 ad->icon_check_path = strdup(icon_check_path);
99 snprintf(icon_bar_path, PATH_MAX, "%s%s", res_path, "images/icon_encrypt_bar.png");
100 ad->icon_bar_path = strdup(icon_bar_path);
104 ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
105 elm_win_conformant_set(ad->win, EINA_TRUE);
106 elm_win_autodel_set(ad->win, EINA_TRUE);
107 evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);
110 ad->conform = elm_conformant_add(ad->win);
111 evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
112 elm_win_resize_object_add(ad->win, ad->conform);
113 evas_object_show(ad->conform);
116 elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
117 elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_TRANSPARENT);
119 ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _home_key_cb, NULL);
121 ad->base = create_mainview(ad);
122 elm_object_content_set(ad->conform, ad->base);
123 evas_object_show(ad->win);
128 static bool app_create(void* data)
133 static void app_control(app_control_h app_control, void* data)
135 /* Handle the launch request. */
136 appdata_s* ad = (appdata_s*)data;
138 char *viewtype = NULL;
140 ret = app_control_get_extra_data(app_control, "viewtype", &viewtype);
141 if (ret != APP_CONTROL_ERROR_NONE) {
142 dlog_print(DLOG_ERROR, LOG_TAG, "failed to get viewtype");
146 dlog_print(DLOG_DEBUG, LOG_TAG, "viewtype is %s", viewtype);
147 if (!strcmp(viewtype, "ENCRYPT_DEVICE"))
148 ad->view_type = ENCRYPT_DEVICE;
149 else if (!strcmp(viewtype, "DECRYPT_DEVICE"))
150 ad->view_type = DECRYPT_DEVICE;
151 else if (!strcmp(viewtype, "ENCRYPT_SD_CARD"))
152 ad->view_type = ENCRYPT_SD_CARD;
153 else if (!strcmp(viewtype, "DECRYPT_SD_CARD"))
154 ad->view_type = DECRYPT_SD_CARD;
160 elm_app_base_scale_set(1.8);
162 if (create_base_gui(ad) != 0) {
163 dlog_print(DLOG_ERROR, LOG_TAG, "### create base gui fail ###");
168 static void app_pause(void* data)
170 /* Take necessary actions when application becomes invisible. */
173 static void app_resume(void* data)
175 /* Take necessary actions when application becomes visible. */
176 dlog_print(DLOG_DEBUG, LOG_TAG, "### app_resume ###");
179 static void app_terminate(void* data)
181 /* unregister vconf notify callback */
183 appdata_s* ad = (appdata_s*)data;
185 switch (ad->view_type) {
187 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, locktype_status_changed_cb);
189 dlog_print(DLOG_ERROR, LOG_TAG, "Failed to unregister lockscreen type callback");
190 /* unregister runtime info callback */
191 ret = runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_CHARGER_CONNECTED);
193 dlog_print(DLOG_ERROR, LOG_TAG, "Failed to unregister runtime info callback");
194 /* unregister battery percent callback */
195 ret = device_remove_callback(DEVICE_CALLBACK_BATTERY_CAPACITY, battery_changed_cb);
197 dlog_print(DLOG_ERROR, LOG_TAG, "Failed to unregister battery capacity callback");
200 /* unregister runtime info callback */
201 ret = runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_CHARGER_CONNECTED);
203 dlog_print(DLOG_ERROR, LOG_TAG, "Failed to unregister runtime info callback");
204 /* unregister battery percent callback */
205 ret = device_remove_callback(DEVICE_CALLBACK_BATTERY_CAPACITY, battery_changed_cb);
207 dlog_print(DLOG_ERROR, LOG_TAG, "Failed to unregister battery capacity callback");
209 case ENCRYPT_SD_CARD:
210 ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, sdcard_status_changed_cb);
212 dlog_print(DLOG_ERROR, LOG_TAG, "Failed to unregister sdcard callback");
217 static void ui_app_lang_changed(app_event_info_h event_info, void* user_data)
219 /* APP_EVENT_LANGUAGE_CHANGED */
222 system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
223 elm_language_set(locale);
229 static void ui_app_orient_changed(app_event_info_h event_info, void* user_data)
231 /*APP_EVENT_DEVICE_ORIENTATION_CHANGED */
235 static void ui_app_region_changed(app_event_info_h event_info, void* user_data)
237 /*APP_EVENT_REGION_FORMAT_CHANGED */
240 static void ui_app_low_battery(app_event_info_h event_info, void* user_data)
242 /*APP_EVENT_LOW_BATTERY */
245 static void ui_app_low_memory(app_event_info_h event_info, void* user_data)
247 /*APP_EVENT_LOW_MEMORY */
250 int launchpad_main(int argc, char* argv[])
252 appdata_s ad = {0, };
255 ui_app_lifecycle_callback_s event_callback = { 0, };
256 app_event_handler_h handlers[5] = { NULL, };
258 event_callback.create = app_create;
259 event_callback.terminate = app_terminate;
260 event_callback.pause = app_pause;
261 event_callback.resume = app_resume;
262 event_callback.app_control = app_control;
264 ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, &ad);
265 ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, &ad);
266 ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, &ad);
267 ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &ad);
268 ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, &ad);
269 ui_app_remove_event_handler(handlers[APP_EVENT_LOW_MEMORY]);
271 ret = ui_app_main(argc, argv, &event_callback, &ad);
272 if (ret != APP_ERROR_NONE)
273 dlog_print(DLOG_ERROR, LOG_TAG, "ui_app_main is failed. err = %d", ret);
278 int standalone_main(int argc, char *argv[])
280 setenv("HOME", "/root", 1);
283 fprintf(stderr, "Other arguments is needed\n");
287 elm_init(argc, argv);
288 ui_app_lang_changed(NULL, NULL);
289 create_base_window();
291 if (!strncmp(argv[1], "progress", sizeof("progress"))) {
293 fprintf(stderr, "Other arguments is needed\n");
296 create_progress_view(argv[2], argv[3]);
304 int main(int argc, char* argv[])
306 char *name = strrchr(argv[0], '/');
309 name = name ? name + 1 : argv[0];
311 for (i = 0; i < sizeof(submains) / sizeof(struct submain); i++) {
312 if (strcmp(name, submains[i].name) == 0) {
313 return submains[i].main(argc, argv);