From e45c24c29649b44c3a0127bb25ed0e8f37419798 Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Mon, 4 Apr 2016 15:15:20 +0200 Subject: [PATCH 01/16] key: Fix menu hw key name Change-Id: I56c15dcc536e5afb81e3c56f7501f64ceda70794 --- inc/conf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/conf.h b/inc/conf.h index 6d03591..9e1c758 100644 --- a/inc/conf.h +++ b/inc/conf.h @@ -227,7 +227,7 @@ /*========================== KEY CONFIG ======================================*/ #define KEY_HOME "XF86Home" -#define KEY_MENU "XF86Send" +#define KEY_MENU "XF86Menu" #define KEY_BACK "XF86Back" #define KEY_RETURN "Return" -- 2.7.4 From b33e86dcb9beca2c561da911e55d81caa666029e Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Mon, 4 Apr 2016 11:10:34 +0200 Subject: [PATCH 02/16] folder_panel: Fix entry on activate behavior Do not clear entry every time the activate callback is called. This bug cleared entry when someone was writing text to to it and meanwhile launched new app like keyboard settings and etc. Change-Id: If37d5296852186c463b4dac0b57e84e658408939 --- src/folder_panel.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/folder_panel.c b/src/folder_panel.c index 3f6aa73..f1e539e 100644 --- a/src/folder_panel.c +++ b/src/folder_panel.c @@ -705,8 +705,8 @@ static Evas_Object *__folder_panel_create_entry(Evas_Object *parent, const char elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL); elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE); - evas_object_smart_callback_add(entry,"changed", __folder_panel_entry_changed_cb, parent); - evas_object_smart_callback_add(entry, "clicked",__folder_panel_entry_clicked_cb, parent); + evas_object_smart_callback_add(entry, "changed", __folder_panel_entry_changed_cb, parent); + evas_object_smart_callback_add(entry, "clicked", __folder_panel_entry_clicked_cb, parent); elm_object_signal_callback_add(parent, SIGNAL_CLEAR_BTN_CLICKED, SIGNAL_SOURCE, __folder_panel_entry_clear_button_clicked_cb, entry); @@ -716,6 +716,7 @@ static Evas_Object *__folder_panel_create_entry(Evas_Object *parent, const char } else { elm_object_signal_emit(s_info.opened_folder_popup, SIGNAL_FOLDER_UNNAMED_TEXT_SHOW, SIGNAL_SOURCE); + elm_object_text_set(entry, ""); s_info.opened_folder_name_is_empty = true; } @@ -734,10 +735,8 @@ static void __folder_panel_entry_activated_cb(void *data, Evas_Object *obj, void return; } - if (!strcmp(folder->label, "")) { - elm_object_text_set(obj, ""); + if (!strcmp(folder->label, "")) s_info.opened_folder_name_is_empty = true; - } elm_object_signal_emit(s_info.opened_folder_popup, SIGNAL_FOLDER_UNNAMED_TEXT_HIDE, SIGNAL_SOURCE); -- 2.7.4 From 2b711e9e982c652f188ff8a23962a78a5f222a3f Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Tue, 5 Apr 2016 14:23:25 +0200 Subject: [PATCH 03/16] folder_panel: Entry keyboard done key fix Change-Id: I690b656ec2bf30d6fc1903469e00516cad9894d9 --- src/folder_panel.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/folder_panel.c b/src/folder_panel.c index f1e539e..25251f3 100644 --- a/src/folder_panel.c +++ b/src/folder_panel.c @@ -79,6 +79,7 @@ static void __folder_panel_entry_activated_cb(void *data, Evas_Object *obj, void static void __folder_panel_entry_deactivated_cb(void *data, Evas_Object *obj, void *ei); static void __folder_panel_entry_changed_cb(void *data, Evas_Object *obj, void *ei); static void __folder_panel_entry_clicked_cb(void *data, Evas_Object *obj, void *ei); +static void __folder_panel_entry_done_cb(void *data, Evas_Object *obj, void *ei); static void __folder_panel_entry_clear_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source); static void __folder_panel_item_add_to_folder_cb(void *data, Evas_Object *obj, const char *emission, const char *source); @@ -707,6 +708,8 @@ static Evas_Object *__folder_panel_create_entry(Evas_Object *parent, const char evas_object_smart_callback_add(entry, "changed", __folder_panel_entry_changed_cb, parent); evas_object_smart_callback_add(entry, "clicked", __folder_panel_entry_clicked_cb, parent); + evas_object_smart_callback_add(entry, "activated", __folder_panel_entry_done_cb, parent); + elm_object_signal_callback_add(parent, SIGNAL_CLEAR_BTN_CLICKED, SIGNAL_SOURCE, __folder_panel_entry_clear_button_clicked_cb, entry); @@ -798,6 +801,20 @@ static void __folder_panel_entry_clicked_cb(void *data, Evas_Object *obj, void * elm_entry_input_panel_show(obj); } +static void __folder_panel_entry_done_cb(void *data, Evas_Object *obj, void *ei) +{ + LOGI(""); + Evas_Object *entry = obj; + Evas_Object *folder_popup = data; + + if (!folder_popup || !entry) { + LOGE("Invalid data"); + return; + } + + elm_entry_input_panel_hide(entry); +} + static void __folder_panel_entry_clear_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) { LOGI(""); -- 2.7.4 From d10bb7a5099591094654b4cfad5a241c91bb7ca5 Mon Sep 17 00:00:00 2001 From: "juhee,park" Date: Mon, 4 Apr 2016 14:36:21 +0900 Subject: [PATCH 04/16] Fixed crash issue of animation. Repeatedly press the application button quickly. Crash will be occurs. Next button operation should to be executed after the end of the animation. Change-Id: I7575aa55112c5aa9df2dc8a47966ed4b304ff7c3 --- src/homescreen-efl.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index 43eaffb..8e9c5f6 100644 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -52,6 +52,7 @@ static struct { int root_height; homescreen_view_t view_type; bool is_bg_blurred; + Ecore_Animator* animator; } s_info = { .win = NULL, .bg = NULL, @@ -65,7 +66,8 @@ static struct { .root_width = 0, .root_height = 0, .view_type = HOMESCREEN_VIEW_HOME, - .is_bg_blurred = false + .is_bg_blurred = false, + .animator = NULL }; static bool mvc_badge_refresh_enable = true; @@ -737,12 +739,13 @@ static void __homescreen_efl_get_window_size(Evas_Object *win) static void __homescreen_efl_home_btn_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) { - homescreen_view_t view_t = home_screen_get_view_type(); - - if (view_t == HOMESCREEN_VIEW_HOME) { - home_screen_set_view_type(HOMESCREEN_VIEW_ALL_APPS); - } else if (view_t == HOMESCREEN_VIEW_ALL_APPS) { - home_screen_set_view_type(HOMESCREEN_VIEW_HOME); + if (s_info.animator == NULL) { + homescreen_view_t view_t = home_screen_get_view_type(); + if (view_t == HOMESCREEN_VIEW_HOME) { + home_screen_set_view_type(HOMESCREEN_VIEW_ALL_APPS); + } else if (view_t == HOMESCREEN_VIEW_ALL_APPS) { + home_screen_set_view_type(HOMESCREEN_VIEW_HOME); + } } } @@ -996,7 +999,7 @@ static void __homescreen_efl_show_all_apps(void) elm_object_signal_emit(s_info.layout, SIGNAL_BLOCK_EVENTS, SIGNAL_SOURCE); app_icon_set_click_ignore(true); - ecore_animator_timeline_add(APPS_SHOW_HIDE_ANIMATION_TIME, __homescreen_efl_show_all_apps_anim, NULL); + s_info.animator = ecore_animator_timeline_add(APPS_SHOW_HIDE_ANIMATION_TIME, __homescreen_efl_show_all_apps_anim, NULL); } static void __homescreen_efl_show_home_view(void) @@ -1008,7 +1011,7 @@ static void __homescreen_efl_show_home_view(void) elm_object_signal_emit(s_info.layout, SIGNAL_BLOCK_EVENTS, SIGNAL_SOURCE); app_icon_set_click_ignore(true); - ecore_animator_timeline_add(APPS_SHOW_HIDE_ANIMATION_TIME, __homescreen_efl_show_home_anim, NULL); + s_info.animator = ecore_animator_timeline_add(APPS_SHOW_HIDE_ANIMATION_TIME, __homescreen_efl_show_home_anim, NULL); } static bool __update_all_badges_count(Tree_node_t *parent, Tree_node_t *node, void *data) @@ -1231,6 +1234,7 @@ static Eina_Bool __homescreen_efl_show_all_apps_anim(void *data, double pos) elm_object_part_content_set(s_info.layout, PART_CONTENT, s_info.all_apps); all_apps_show(); elm_object_signal_emit(s_info.layout, SIGNAL_UNBLOCK_EVENTS, SIGNAL_SOURCE); + s_info.animator = NULL; return ECORE_CALLBACK_DONE; } @@ -1253,6 +1257,7 @@ static Eina_Bool __homescreen_efl_show_home_anim(void *data, double pos) } elm_object_signal_emit(s_info.layout, SIGNAL_UNBLOCK_EVENTS, SIGNAL_SOURCE); + s_info.animator = NULL; return ECORE_CALLBACK_DONE; } -- 2.7.4 From 124f52ef60fe11e3dd33fe8ae411974993cb9968 Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Thu, 7 Apr 2016 15:38:50 +0200 Subject: [PATCH 05/16] livebox_panel: Destroy livebox page fix Change-Id: I3f7886be55e579daa57848fd43b0bf463b362744 --- src/app_item.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app_item.c b/src/app_item.c index f23b007..4e43188 100644 --- a/src/app_item.c +++ b/src/app_item.c @@ -84,6 +84,8 @@ HAPI void app_item_free(app_item_t *item) free((void *)item->appid); free((void *)item->content_info); + evas_object_data_del(item->layout, KEY_ICON_DATA); + free(item); } -- 2.7.4 From bd3e489a860e98241e248813289c35c25931f6e6 Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Wed, 6 Apr 2016 13:58:46 +0200 Subject: [PATCH 06/16] app_grid: On longpress without move icon hang fix Change-Id: I5361f4428943fefaea0ba49bc1983664f26a29f4 --- src/app_grid.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/app_grid.c b/src/app_grid.c index f584a24..74bebbd 100644 --- a/src/app_grid.c +++ b/src/app_grid.c @@ -441,12 +441,16 @@ static Eina_Bool __app_grid_icon_move_cb_del(void *data) static Evas_Event_Flags __app_grid_icon_move_end(void *data, void *event_info) { Elm_Gesture_Momentum_Info *pos_info = event_info; - LOGD("Drag end at: x,y=<%d,%d>", pos_info->x2, pos_info->y2); - if(s_info.repositioned_icon != NULL) { - __app_grid_icon_drop(NULL, s_info.src_grid, pos_info->x2, - pos_info->y2, ELM_XDND_ACTION_UNKNOWN); + + if (pos_info != NULL) { + LOGD("Drag end at: x,y=<%d,%d>", pos_info->x2, pos_info->y2); + + __app_grid_icon_drop(NULL, s_info.src_grid, pos_info->x2, + pos_info->y2, ELM_XDND_ACTION_MOVE); + } + __app_grid_drag_done(NULL, NULL); } @@ -591,6 +595,11 @@ static void __app_grid_resize_cb(void *data, Evas *e, Evas_Object *obj, void *ei /*=========================== MOUSE HANDLERS =====================================================*/ static Eina_Bool __app_grid_mouse_up_cb(void *data, int type, void *event) { + LOGD(""); + + if (s_info.is_dnd_on) + __app_grid_icon_move_end(NULL, NULL); + home_screen_set_indice_state(INDICE_OFF); return ECORE_CALLBACK_RENEW; } -- 2.7.4 From a02a4fc324959c67d6bdac4df6b4307c6f5db18e Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Tue, 5 Apr 2016 10:17:12 +0200 Subject: [PATCH 07/16] app_icon: Show badge on icon inside folder Change-Id: Idebc3cdcac1073598720ca9894165742e2ab9d05 --- src/app_icon.c | 3 +++ src/homescreen-efl.c | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app_icon.c b/src/app_icon.c index e41e21c..6f5082f 100644 --- a/src/app_icon.c +++ b/src/app_icon.c @@ -113,6 +113,9 @@ HAPI Evas_Object *app_icon_create(Tree_node_t *tree_data, app_icon_type_t type) app_icon_set_label(icon_layout, item->label); + if (item->badge_count > 0) + app_icon_show_badge(icon_layout, item->badge_count); + evas_object_show(icon_image); } else if (type == APP_ICON_TYPE_FOLDER) { folder_icon_layout = elm_layout_add(parent); diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index 8e9c5f6..18c9bec 100644 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -1044,8 +1044,10 @@ static bool __homescreen_efl_update_icon_badge(Tree_node_t *parent, Tree_node_t folder_count_pending = false; } - if (folder_count_pending && node->data->type == APP_ITEM_ICON) + if (folder_count_pending && node->data->type == APP_ITEM_ICON) { + app_mgr_app_get_badge_count(node->data->appid, &node->data->badge_count); folder_badge_counter += node->data->badge_count; + } if (!folder_count_pending && app == node->data) return false; -- 2.7.4 From 191ceae7a228cb313110649ac46822bae440f8c6 Mon Sep 17 00:00:00 2001 From: "juhee,park" Date: Mon, 28 Mar 2016 12:17:45 +0900 Subject: [PATCH 08/16] Fixed uninstall issue Signed-off-by: juhee,park Change-Id: I846bdc9d949f38784dd92e772982c72d125550db --- inc/app_icon.h | 7 +++++++ inc/data_model.h | 8 ++++++++ src/app_icon.c | 10 ++++------ src/app_mgr.c | 15 +++++++++++++++ src/data_model.c | 28 ++++++++++++++++++++++++++++ 5 files changed, 62 insertions(+), 6 deletions(-) diff --git a/inc/app_icon.h b/inc/app_icon.h index a0d027e..e2e7694 100644 --- a/inc/app_icon.h +++ b/inc/app_icon.h @@ -158,4 +158,11 @@ void app_icon_set_label_black(Evas_Object *icon_layout); */ void app_icon_remove(Evas_Object *icon_layout); +/** + * @brief Removes application icon and data. + * @param icon_layout Pointer to app_icon layout. + */ +void app_icon_uninstall(void *data); + + #endif /* APP_ICON_H_ */ diff --git a/inc/data_model.h b/inc/data_model.h index 8b51916..3d51287 100644 --- a/inc/data_model.h +++ b/inc/data_model.h @@ -205,5 +205,13 @@ extern void data_model_update_item(Tree_node_t *node); extern void data_model_detach_from_folder(Tree_node_t *folder_node, Tree_node_t *node); +/** + * @brief Search node with package name. + * + * @param package name + * @return node or NULL + */ +Tree_node_t *data_model_search_package(const char* pkg_str); + #endif /* DATA_MODEL_H_ */ diff --git a/src/app_icon.c b/src/app_icon.c index 6f5082f..a35c840 100644 --- a/src/app_icon.c +++ b/src/app_icon.c @@ -56,8 +56,6 @@ static void __app_icon_check_cb(void *data, Evas_Object *obj, const char *emissi static void __app_icon_uncheck_cb(void *data, Evas_Object *obj, const char *emission, const char *source); static Evas_Object *__app_icon_load(Evas_Object *parent, const char *icon_path); static void __app_icon_uninstall_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source); - -static void __app_icon_uninstall(void *data); static void __app_icon_highlight_folder_icon_cb(void *data, Evas_Object *obj, const char *emission, const char *source); static void __app_icon_unhighlight_folder_icon_cb(void *data, Evas_Object *obj, const char *emission, const char *source); static void __app_icon_higlight_impossible_folder_icon_cb(void *data, Evas_Object *obj, const char *emission, const char *source); @@ -622,7 +620,7 @@ static void __app_icon_uninstall_button_clicked_cb(void *data, Evas_Object *obj, p_data->popup_confirm_text = strdup(_("IDS_ST_BUTTON_REMOVE_ABB2")); p_data->popup_cancel_text = strdup(_("IDS_CAM_SK_CANCEL")); p_data->orientation = ELM_POPUP_ORIENT_CENTER; - popup_show(p_data, __app_icon_uninstall, NULL, (void *) obj); + popup_show(p_data, app_icon_uninstall, NULL, (void *) obj); } else if (app_node->data->type == APP_ITEM_ICON) { snprintf(buf, sizeof(buf), _("IDS_HS_POP_PS_WILL_BE_UNINSTALLED"), app_node->data->label); p_data->type = POPUP_TWO_BUTTONS; @@ -631,14 +629,14 @@ static void __app_icon_uninstall_button_clicked_cb(void *data, Evas_Object *obj, p_data->popup_confirm_text = strdup(_("IDS_AT_BODY_UNINSTALL")); p_data->popup_cancel_text = strdup(_("IDS_CAM_SK_CANCEL")); p_data->orientation = ELM_POPUP_ORIENT_CENTER; - popup_show(p_data, __app_icon_uninstall, NULL, (void *) obj); + popup_show(p_data, app_icon_uninstall, NULL, (void *) obj); } else { - __app_icon_uninstall((void *) obj); + app_icon_uninstall((void *) obj); popup_data_free(p_data); } } -static void __app_icon_uninstall(void *data) +void app_icon_uninstall(void *data) { Tree_node_t *app_node = NULL; Evas_Object *icon = NULL; diff --git a/src/app_mgr.c b/src/app_mgr.c index 004d006..07cd317 100644 --- a/src/app_mgr.c +++ b/src/app_mgr.c @@ -248,7 +248,22 @@ static void __app_mgr_event_cb(const char *type, const char *package, } if (PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL == event_type && progress == 100) + { LOGI("%s", package); + Tree_node_t *it = data_model_search_package(package); + Tree_node_t *parent_folder = NULL; + + if (it != NULL) { + if (it->parent && it->parent->parent + && (it->parent->parent->data->type == APP_ITEM_FOLDER)) + parent_folder = it->parent->parent; + + app_icon_uninstall(it->data->layout); + + if (parent_folder != NULL) + app_icon_update_folder_icon(parent_folder); + } + } } static bool __app_info_cb(app_info_h ai, void *ud) diff --git a/src/data_model.c b/src/data_model.c index 34f284c..99bf127 100644 --- a/src/data_model.c +++ b/src/data_model.c @@ -36,6 +36,11 @@ static struct { .home = NULL, }; +typedef struct { + Tree_node_t *data; + char *search; +} search_package_t; + static bool __data_model_get_empty_page(Tree_node_t *nothing, Tree_node_t *page, void *data); static void __data_model_load_item(Tree_node_t *parent, Tree_node_t **item, db_item_t* db_item, Eina_List* apps_db); static void __data_model_free_subtree(Tree_node_t *root_node); @@ -53,6 +58,8 @@ static Eina_Inarray *__data_model_sort_children(const Tree_node_t *const root, static void __add_default_widget(widget_info_t *widget); static Eina_Bool __data_model_reattach_children(const void *container, void *node, void *fdata); +static bool __data_model_search_package_cb(Tree_node_t *parent, Tree_node_t *node, void *data); + HAPI Tree_node_t *data_model_get_data(void) { @@ -601,6 +608,27 @@ HAPI void data_model_sort(Eina_Compare_Cb sort_compare_function) } } +Tree_node_t *data_model_search_package(const char* pkg_str) +{ + search_package_t search; + search.data = NULL; + search.search = pkg_str; + + tree_in_depth_browse(s_info.all_apps, __data_model_search_package_cb, &search); + + return search.data; +} + +static bool __data_model_search_package_cb(Tree_node_t *parent, Tree_node_t *node, void *data) +{ + search_package_t *search_data = (search_package_t *)data; + + if (node->data->appid && strcmp(search_data->search, node->data->appid) == 0) + search_data->data = node; + + return true; +} + static bool __data_model_get_empty_page(Tree_node_t *nothing, Tree_node_t *page, void *data) { Tree_node_t **empty_page = (Tree_node_t **)data; -- 2.7.4 From a1558d56a5027beff6d82c9a380d310dcd148a4f Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Fri, 8 Apr 2016 10:03:27 +0200 Subject: [PATCH 09/16] homescreen_efl: Validate wallpaper file existence fix Change-Id: I6e93792408399aad4b866c30c4836dc1581fc16c --- src/homescreen-efl.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index 18c9bec..99e4e83 100644 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -432,12 +432,14 @@ static void __homescreen_efl_create_base_gui(void) s_info.bg = evas_object_image_filled_add(evas_object_evas_get(s_info.win)); ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &buf); - if (!buf || ret != SYSTEM_SETTINGS_ERROR_NONE) { + + if (!buf || ret != SYSTEM_SETTINGS_ERROR_NONE || !ecore_file_exists(buf) + || !ecore_file_can_read(buf)) evas_object_image_file_set(s_info.bg, bg_path, "bg"); - } else { + else evas_object_image_file_set(s_info.bg, buf, "bg"); - free(buf); - } + + free(buf); system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, __homescreen_efl_home_bg_changed_cb, NULL); -- 2.7.4 From b99398732010a3272ebe32a5ff3101e843cafecc Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Fri, 8 Apr 2016 11:16:37 +0200 Subject: [PATCH 10/16] homescreen_efl: Validate wallpaper file existence fix part2 Change-Id: I00fe48c1ecdc4c6211ce15b2903e9d096277b526 --- src/homescreen-efl.c | 11 ++++++++--- src/livebox_all_pages.c | 16 ++++++++++------ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index 99e4e83..834a96e 100644 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -1095,7 +1095,8 @@ static void __homescreen_efl_home_bg_changed_cb(system_settings_key_e key, void } ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &buf); - if (!buf || ret != SYSTEM_SETTINGS_ERROR_NONE) { + if (!buf || ret != SYSTEM_SETTINGS_ERROR_NONE || !ecore_file_exists(buf) + || !ecore_file_can_read(buf)) { LOGE("[FAILED][failed to get bg path]"); return; } @@ -1132,6 +1133,8 @@ static void __homescreen_efl_apply_home_bg_effect(bool is_on) const int size = COUNT_OF(kernel); const int half = size / 2; + int ret = -1; + if (!s_info.bg) { LOGE("[FAILED][bg=NULL]"); return; @@ -1140,8 +1143,10 @@ static void __homescreen_efl_apply_home_bg_effect(bool is_on) /*if is_on == false, then restore original image data*/ if (!is_on) { /*restore original data and return;*/ - system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &buf); - if (!buf) { + ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &buf); + if (!buf || ret != SYSTEM_SETTINGS_ERROR_NONE || !ecore_file_exists(buf) + || !ecore_file_can_read(buf)) { + LOGE("[FAILED][failed to get bg path]"); return; } diff --git a/src/livebox_all_pages.c b/src/livebox_all_pages.c index 68468bb..c8c8f86 100644 --- a/src/livebox_all_pages.c +++ b/src/livebox_all_pages.c @@ -439,7 +439,9 @@ static void __livebox_all_pages_add_page_clicked_cb(void *data, Evas_Object *obj static Evas_Object *__livebox_all_pages_create_bg(Evas_Object *parent) { LOGI(""); + Evas_Object *bg = NULL; + const char *bg_path = util_get_res_file_path(IMAGE_DIR"/default_bg.png"); char *buf = NULL; int ret = -1; @@ -456,13 +458,15 @@ static Evas_Object *__livebox_all_pages_create_bg(Evas_Object *parent) ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &buf); - if (ret != SYSTEM_SETTINGS_ERROR_NONE || !buf) { - LOGE("[FAILED][failed to get bg path]"); - evas_object_del(bg); - return NULL; - } + if (!buf || ret != SYSTEM_SETTINGS_ERROR_NONE || !ecore_file_exists(buf) + || !ecore_file_can_read(buf)) { + LOGE("[FAILED][failed to get bg path, use default]"); + + ret = elm_bg_file_set(bg, bg_path, NULL); + } else + ret = elm_bg_file_set(bg, buf, NULL); - if (!elm_bg_file_set(bg, buf, NULL)) { + if (!ret) { LOGE("[FAILED][failed to set bg]"); evas_object_del(bg); free(buf); -- 2.7.4 From c6a5ea2c9d46761b65ffd3fac5fdc7df616df426 Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Mon, 11 Apr 2016 10:31:27 +0200 Subject: [PATCH 11/16] app_icon: Do not show checkbox on folder icon On all apps choose view do not show folder checkbox. It is shown now only after at least one of the icons inside the folder is checked. Change-Id: Ia792c21d09dbc1d78838cb78d5400c30acdae331 --- inc/conf.h | 1 + inc/folder_panel.h | 8 +++++++- res/edje/icon.edc | 32 ++++++++++++++++++++++++++++++++ src/app_icon.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++----- src/folder_panel.c | 38 +++++++++++++++++++++++++++++++------- 5 files changed, 117 insertions(+), 13 deletions(-) diff --git a/inc/conf.h b/inc/conf.h index 9e1c758..2efe836 100644 --- a/inc/conf.h +++ b/inc/conf.h @@ -438,6 +438,7 @@ #define SIGNAL_UNINSTALL_BUTTON_CLICKED "uninstall_button,clicked" #define SIGNAL_CHECKBOX_SHOW_UNCHECKED "checkbox,show,unchecked" #define SIGNAL_CHECKBOX_SHOW_CHECKED "checkbox,show,checked" +#define SIGNAL_CHECKBOX_SHOW_DIMMED "checkbox,show,dimmed" #define SIGNAL_CHECKBOX_HIDE "checkbox,hide" #define SIGNAL_CHECKBOX_CHECKED "checkbox,checked" #define SIGNAL_CHECKBOX_UNCHECKED "checkbox,unchecked" diff --git a/inc/folder_panel.h b/inc/folder_panel.h index 8d7a3fc..ab8450a 100644 --- a/inc/folder_panel.h +++ b/inc/folder_panel.h @@ -28,6 +28,12 @@ typedef struct { Evas_Object *folder_scroller; } folder_data_t; +typedef enum { + FOLDER_PANEL_CHECKED_NONE = 0, + FOLDER_PANEL_CHECKED_ANY, + FOLDER_PANEL_CHECKED_ALL, +} folder_checked_t; + /** * @brief Initializes folder module */ @@ -91,7 +97,7 @@ extern bool folder_panel_is_folder_visible(void); /** * @brief Shows checkboxes on the folder icon. */ -extern bool folder_panel_set_content_checked(Tree_node_t *node); +extern folder_checked_t folder_panel_set_content_checked(Tree_node_t *node); /** * @brief Function returns pointer to data node of the opened folder diff --git a/res/edje/icon.edc b/res/edje/icon.edc index 85653e2..27e155c 100644 --- a/res/edje/icon.edc +++ b/res/edje/icon.edc @@ -275,6 +275,10 @@ collections { visible: 1; } description { + state: "dimmed" 0.0; + inherit: "blank" 0.0; + } + description { state: "checked" 0.0; inherit: "default" 0.0; //color_class: "ATO005"; @@ -306,6 +310,10 @@ collections { visible: 1; } description { + state: "dimmed" 0.0; + inherit: "blank" 0.0; + } + description { state: "checked" 0.0; inherit: "default" 0.0; color: 255 255 255 120; @@ -341,6 +349,10 @@ collections { color: 255 255 255 255; visible: 1; } + description { + state: "dimmed" 0.0; + inherit: "checked" 0.0; + } } part { //checkbox_click_area @@ -491,6 +503,16 @@ collections { after: "checkbox_area_visible"; } program { + name: "checkbox_show_dimmed"; + signal: SIGNAL_CHECKBOX_SHOW_DIMMED; + source: SIGNAL_SOURCE; + script { + set_int(checkbox_state, 1); + emit("checkbox,dimmed,show", SIGNAL_SOURCE); + } + after: "checkbox_area_visible"; + } + program { name: "checkbox_blank_show"; signal: "checkbox,blank,show"; source: SIGNAL_SOURCE; @@ -521,6 +543,16 @@ collections { transition: DECELERATE 0.20; } program { + name: "checkbox_dimmed_show"; + signal: "checkbox,dimmed,show"; + source: SIGNAL_SOURCE; + action: STATE_SET "dimmed" 0.0; + target: "icon_checkbox"; + target: "icon_checkbox_border"; + target: "icon_checkbox_bg"; + transition: DECELERATE 0.20; + } + program { name: "checkbox_clicked"; signal: "mouse,clicked,1"; source: "checkbox_click_area"; diff --git a/src/app_icon.c b/src/app_icon.c index a35c840..2c3bb41 100644 --- a/src/app_icon.c +++ b/src/app_icon.c @@ -279,6 +279,8 @@ HAPI void app_icon_set_click_ignore(bool ignore) HAPI bool app_icon_set_view_mode(Evas_Object *icon, homescreen_view_t view, bool in_folder) { + Tree_node_t *node = NULL; + switch (view) { case HOMESCREEN_VIEW_ALL_APPS: in_folder ? elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_BLACK_OFF, SIGNAL_SOURCE) : @@ -298,7 +300,13 @@ HAPI bool app_icon_set_view_mode(Evas_Object *icon, homescreen_view_t view, bool in_folder ? elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_BLACK_ON, SIGNAL_SOURCE) : elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_ON, SIGNAL_SOURCE); elm_object_signal_emit(icon, SIGNAL_UNINSTALL_BUTTON_HIDE, SIGNAL_SOURCE); - elm_object_signal_emit(icon, SIGNAL_CHECKBOX_SHOW_UNCHECKED, SIGNAL_SOURCE); + + node = evas_object_data_get(icon, KEY_ICON_DATA); + if (node && node->data->type != APP_ITEM_FOLDER) + elm_object_signal_emit(icon, SIGNAL_CHECKBOX_SHOW_UNCHECKED, SIGNAL_SOURCE); + else + elm_object_signal_emit(icon, SIGNAL_CHECKBOX_HIDE, SIGNAL_SOURCE); + app_icon_set_click_ignore(true); break; case HOMESCREEN_VIEW_HOME: @@ -514,6 +522,7 @@ static bool __app_icon_check_removeable_state(Evas_Object *icon) static void __app_icon_check_cb(void *data, Evas_Object *obj, const char *emission, const char *source) { + folder_checked_t check_info = FOLDER_PANEL_CHECKED_NONE; Tree_node_t *node = (Tree_node_t *)data; app_item_t *item = node->data; int count = -1; @@ -521,8 +530,22 @@ static void __app_icon_check_cb(void *data, Evas_Object *obj, const char *emissi if (item->type == APP_ITEM_ICON) { item->is_checked = true; - if (node->parent->parent->data->type == APP_ITEM_FOLDER && folder_panel_set_content_checked(node->parent->parent)) - elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_CHECKED, SIGNAL_SOURCE); + if (node->parent->parent->data->type == APP_ITEM_FOLDER) { + + check_info = folder_panel_set_content_checked(node->parent->parent); + + switch (check_info) { + case FOLDER_PANEL_CHECKED_NONE: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_HIDE, SIGNAL_SOURCE); + break; + case FOLDER_PANEL_CHECKED_ANY: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_DIMMED, SIGNAL_SOURCE); + break; + case FOLDER_PANEL_CHECKED_ALL: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_CHECKED, SIGNAL_SOURCE); + break; + } + } } else if (item->type == APP_ITEM_FOLDER) { data_model_check_all_apps(node, true); } @@ -556,14 +579,32 @@ static void __app_icon_check_cb(void *data, Evas_Object *obj, const char *emissi static void __app_icon_uncheck_cb(void *data, Evas_Object *obj, const char *emission, const char *source) { + folder_checked_t check_info = FOLDER_PANEL_CHECKED_NONE; + Tree_node_t *node = (Tree_node_t *)data; app_item_t *item = node->data; if (item->type == APP_ITEM_ICON) { item->is_checked = false; - if (node->parent->parent->data->type == APP_ITEM_FOLDER && !folder_panel_set_content_checked(node->parent->parent)) - elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_UNCHECKED, SIGNAL_SOURCE); + + if (node->parent->parent->data->type == APP_ITEM_FOLDER) { + + check_info = folder_panel_set_content_checked(node->parent->parent); + + switch (check_info) { + case FOLDER_PANEL_CHECKED_NONE: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_HIDE, SIGNAL_SOURCE); + break; + case FOLDER_PANEL_CHECKED_ANY: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_DIMMED, SIGNAL_SOURCE); + break; + case FOLDER_PANEL_CHECKED_ALL: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_CHECKED, SIGNAL_SOURCE); + break; + } + } } else if (item->type == APP_ITEM_FOLDER) { data_model_check_all_apps(node, false); + elm_object_signal_emit(item->layout, SIGNAL_CHECKBOX_HIDE, SIGNAL_SOURCE); } option_menu_update_on_item_selected(); } diff --git a/src/folder_panel.c b/src/folder_panel.c index 25251f3..40bd9af 100644 --- a/src/folder_panel.c +++ b/src/folder_panel.c @@ -55,6 +55,10 @@ static struct .opened_folder_entrychange_cb_ignore = true }; +typedef struct { + bool all_checked; + bool any_checked; +} check_info_s; static void __folder_panel_create_folder_window_layout_cb(void *data, Evas_Object *obj, const char *emission, const char *source); static void __folder_window_destroy_signal_cb(void *data, Evas_Object *obj, const char *emission, const char *source); @@ -202,11 +206,28 @@ HAPI bool folder_panel_is_folder_visible(void) return s_info.is_opened; } -HAPI bool folder_panel_set_content_checked(Tree_node_t *node) +HAPI folder_checked_t folder_panel_set_content_checked(Tree_node_t *node) { - bool all_checked = true; - tree_in_depth_browse(node, __folder_panel_get_checked_icons, &all_checked); - return all_checked; + LOGD(""); + check_info_s check_info = { + .all_checked = true, + .any_checked = false + }; + + tree_in_depth_browse(node, __folder_panel_get_checked_icons, &check_info); + + if (check_info.all_checked) { + LOGD("All items checked"); + return FOLDER_PANEL_CHECKED_ALL; + } + else if (check_info.any_checked) { + LOGD("Any item checked"); + return FOLDER_PANEL_CHECKED_ANY; + } + else { + LOGD("None items checked"); + return FOLDER_PANEL_CHECKED_NONE; + } } HAPI Tree_node_t *folder_panel_get_opened_folder_node(void) @@ -545,10 +566,13 @@ static bool __folder_panel_show_checkbox(Tree_node_t *parent, Tree_node_t *leaf, static bool __folder_panel_get_checked_icons(Tree_node_t *parent, Tree_node_t *leaf, void *data) { - if (leaf->data->type == APP_ITEM_ICON && !leaf->data->is_checked) { - *(bool *)data = false; - return false; + check_info_s *check_info = data; + + if (leaf->data->type == APP_ITEM_ICON) { + check_info->all_checked = check_info->all_checked && leaf->data->is_checked; + check_info->any_checked = check_info->any_checked || leaf->data->is_checked; } + return true; } -- 2.7.4 From 0dfa655acdec3a38810d74c44e0e06bd3ec771d9 Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Mon, 11 Apr 2016 15:08:46 +0200 Subject: [PATCH 12/16] res/edje: Match icon label to its parent layout Change-Id: I0db58faff4210ec5f17abf8a23fd1b5428b197b9 --- inc/conf.h | 6 +++--- res/edje/icon.edc | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/inc/conf.h b/inc/conf.h index 2efe836..50baf66 100644 --- a/inc/conf.h +++ b/inc/conf.h @@ -400,7 +400,7 @@ #define _ICON_NAME_X_MIN 6 #define _ICON_NAME_X_MAX 126 -#define _ICON_NAME_Y_MIN 101 +#define _ICON_NAME_Y_MIN 98 #define _ICON_NAME_Y_MAX 156 #define _ICON_NAME_EDIT_Y_MAX 144 @@ -518,7 +518,7 @@ #define _SEPARATOR_Y_MIN 62 #define _SEPARATOR_Y_MAX 64 -#define _CONTENT_Y_MIN 69 +#define _CONTENT_Y_MIN 53 #define _CONTENT_Y_MAX 569 #define _INDEX_Y_MIN 355 @@ -567,7 +567,7 @@ #define FOLDER_POPUP_X_REL 0.0441 #define FOLDER_GRID_W_REL 0.9 -#define FOLDER_GRID_H_REL 0.5 +#define FOLDER_GRID_H_REL 0.58 #define FOLDER_ITEM_MARGIN 0.04 #define FOLDER_LEFT_MARGIN 0.07 diff --git a/res/edje/icon.edc b/res/edje/icon.edc index 27e155c..8a07f77 100644 --- a/res/edje/icon.edc +++ b/res/edje/icon.edc @@ -126,7 +126,7 @@ collections { description { state: "default" 0.0; rel1{relative: ICON_NAME_X_MIN ICON_NAME_Y_MIN; to: "icon_bg";} - rel2{relative: ICON_NAME_X_MAX ICON_NAME_Y_MAX; to: "icon_bg";} + rel2{relative: ICON_NAME_X_MAX 1.0; to: "icon_bg";} color: 255 255 255 255; text { style: "icon_label"; @@ -137,7 +137,7 @@ collections { state: "edit" 0.0; inherit: "default" 0.0; rel1{relative: ICON_NAME_X_MIN ICON_NAME_Y_MIN; to: "icon_bg";} - rel2{relative: ICON_NAME_X_MAX 1.0; to: "icon_bg";} + rel2{relative: ICON_NAME_X_MAX ICON_NAME_Y_MAX; to: "icon_bg";} text { style: "icon_label_edit"; } -- 2.7.4 From d7731e540ba833a8b140a4bf7a5ca224c4cc898f Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Wed, 13 Apr 2016 12:15:34 +0200 Subject: [PATCH 13/16] add_widget: Bad memory allocation check fix Change-Id: I7f2496c8e8fc3e81167ac981312a1a017ff95a81 --- src/add_viewer/list_view.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/add_viewer/list_view.c b/src/add_viewer/list_view.c index b4df9a8..f86489e 100644 --- a/src/add_viewer/list_view.c +++ b/src/add_viewer/list_view.c @@ -405,6 +405,9 @@ static Evas_Object *__list_view_preview_box_create(Evas_Object *main_box, widget int *preview_type = calloc(1, sizeof(int)); if (!preview_type) { LOGE("Can not allocate memory for additional data"); + evas_object_del(preview_img); + evas_object_del(preview_layout); + return NULL; } *preview_type = preview->type; -- 2.7.4 From d7b9f77e7e59231fea11ec10fc79439dd4d038ff Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Tue, 12 Apr 2016 12:53:14 +0200 Subject: [PATCH 14/16] homescreen: Layout freeze fix Change-Id: I99a9a56150c831ef5b3c61539f89efc51bcc66c7 --- src/homescreen-efl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index 834a96e..984c1d4 100644 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -1239,7 +1239,7 @@ static Eina_Bool __homescreen_efl_show_all_apps_anim(void *data, double pos) evas_object_color_set(box, 255, 255, 255, pos*(double)255); - if (pos >= 1.0) { + if (pos >= 0.99) { elm_object_part_content_set(s_info.layout, PART_CONTENT, s_info.all_apps); all_apps_show(); elm_object_signal_emit(s_info.layout, SIGNAL_UNBLOCK_EVENTS, SIGNAL_SOURCE); @@ -1259,7 +1259,7 @@ static Eina_Bool __homescreen_efl_show_home_anim(void *data, double pos) evas_object_color_set(box, 255, 255, 255, (1.0 - pos * 2.0)*(double)255); - if (pos >= 1.0) { + if (pos >= 0.99) { if (s_info.layout && elm_object_part_content_get(s_info.layout, PART_CONTENT) == NULL && s_info.home) { elm_object_part_content_set(s_info.layout, PART_CONTENT, s_info.home); livebox_panel_set_content(s_info.layout); -- 2.7.4 From 4a9eb46abbe7491cb9042144bbb399d5f60b4b2c Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Thu, 14 Apr 2016 11:51:04 +0200 Subject: [PATCH 15/16] data_model: remove build warning Change-Id: Ie74d35a104e887efe36b1f895c0ec31671d46f40 --- src/data_model.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data_model.c b/src/data_model.c index 99bf127..190149c 100644 --- a/src/data_model.c +++ b/src/data_model.c @@ -612,7 +612,7 @@ Tree_node_t *data_model_search_package(const char* pkg_str) { search_package_t search; search.data = NULL; - search.search = pkg_str; + search.search = (char *)pkg_str; tree_in_depth_browse(s_info.all_apps, __data_model_search_package_cb, &search); -- 2.7.4 From f2f1ee6337bca7e4ab2ba9c051c5f660972eb9d3 Mon Sep 17 00:00:00 2001 From: Kamil Lipiszko Date: Wed, 13 Apr 2016 11:51:35 +0200 Subject: [PATCH 16/16] edje: Add ... to not matching icon label Change-Id: Ia020f0b3aff9c208615b2627df4f2f8127d70eac --- inc/conf.h | 4 ++-- res/edje/icon.edc | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/inc/conf.h b/inc/conf.h index 50baf66..cbd3a9b 100644 --- a/inc/conf.h +++ b/inc/conf.h @@ -519,7 +519,7 @@ #define _SEPARATOR_Y_MAX 64 #define _CONTENT_Y_MIN 53 -#define _CONTENT_Y_MAX 569 +#define _CONTENT_Y_MAX 635 #define _INDEX_Y_MIN 355 #define _INDEX_Y_MAX 421 @@ -567,7 +567,7 @@ #define FOLDER_POPUP_X_REL 0.0441 #define FOLDER_GRID_W_REL 0.9 -#define FOLDER_GRID_H_REL 0.58 +#define FOLDER_GRID_H_REL 0.6 #define FOLDER_ITEM_MARGIN 0.04 #define FOLDER_LEFT_MARGIN 0.07 diff --git a/res/edje/icon.edc b/res/edje/icon.edc index 8a07f77..6fbbde2 100644 --- a/res/edje/icon.edc +++ b/res/edje/icon.edc @@ -29,11 +29,11 @@ images { styles { style{ name: "icon_label"; - base: "font=Samsung Condensed:style=Regular align=center color=#FFFFFFFF font_size=28 wrap=mixed"; + base: "font=Samsung Condensed:style=Regular align=center color=#FFFFFFFF font_size=28 wrap=mixed ellipsis=1.0"; } style{ name: "icon_label_edit"; - base: "font=Samsung Condensed:style=Regular align=center color=#FFFFFFFF font_size=25 wrap=mixed"; + base: "font=Samsung Condensed:style=Regular align=center color=#FFFFFFFF font_size=25 wrap=mixed ellipsis=1.0"; } } @@ -137,7 +137,7 @@ collections { state: "edit" 0.0; inherit: "default" 0.0; rel1{relative: ICON_NAME_X_MIN ICON_NAME_Y_MIN; to: "icon_bg";} - rel2{relative: ICON_NAME_X_MAX ICON_NAME_Y_MAX; to: "icon_bg";} + rel2{relative: ICON_NAME_X_MAX 1.0; to: "icon_bg";} text { style: "icon_label_edit"; } -- 2.7.4