From 499e700d2f8b6614b10758e51899639080c7d407 Mon Sep 17 00:00:00 2001 From: "juhee,park" Date: Wed, 22 Jun 2016 14:54:11 +0900 Subject: [PATCH 01/16] [TSAM-5149] Add privilege for wallpaper Change-Id: I0e5e1e848c62d7477ee1461d2f3fda535c591a44 Signed-off-by: juhee,park --- src/homescreen-efl.c | 20 +++++++++++--------- tizen-manifest.xml | 2 ++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index d5208f1..dfa1c00 100755 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -227,7 +227,6 @@ static void __homescreen_efl_get_window_size(Evas_Object *win) static void __homescreen_efl_set_wallpaper(void) { - const char *bg_path = util_get_res_file_path(IMAGE_DIR"/default_bg.png"); char *buf = NULL; int ret = -1; @@ -241,24 +240,27 @@ static void __homescreen_efl_set_wallpaper(void) elm_win_resize_object_add(main_info.win, main_info.main_layout); evas_object_show(main_info.main_layout); - } - - if (main_info.bg == NULL) { - main_info.bg = evas_object_image_filled_add(evas_object_evas_get(main_info.main_layout)); - system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, __homescreen_efl_home_bg_changed_cb, NULL); + } - evas_object_size_hint_min_set(main_info.bg, main_info.root_width, main_info.root_height); - elm_object_part_content_set(main_info.main_layout, "home_bg", main_info.bg); - evas_object_show(main_info.bg); + if (main_info.bg != NULL) { + evas_object_del(main_info.bg); + main_info.bg = NULL; } + main_info.bg = evas_object_image_filled_add(evas_object_evas_get(main_info.main_layout)); + evas_object_size_hint_min_set(main_info.bg, main_info.root_width, main_info.root_height); + elm_object_part_content_set(main_info.main_layout, "home_bg", main_info.bg); + evas_object_show(main_info.bg); + + const char *bg_path = util_get_res_file_path(IMAGE_DIR"/default_bg.png"); ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &buf); if (!buf || !ecore_file_can_read(buf) || ret != SYSTEM_SETTINGS_ERROR_NONE) { evas_object_image_file_set(main_info.bg, bg_path, "bg"); } else { evas_object_image_file_set(main_info.bg, buf, "bg"); } + if (buf) free(buf); } diff --git a/tizen-manifest.xml b/tizen-manifest.xml index c69c6d0..50551e4 100755 --- a/tizen-manifest.xml +++ b/tizen-manifest.xml @@ -16,5 +16,7 @@ http://tizen.org/privilege/notification http://tizen.org/privilege/packagemanager.info http://tizen.org/privilege/widget.viewer + http://tizen.org/privilege/mediastorage + http://tizen.org/privilege/externalstorage -- 2.7.4 From 9bb0a482bf1aab838a399a3395306a1f0464815c Mon Sep 17 00:00:00 2001 From: "gs86.lee" Date: Wed, 22 Jun 2016 15:27:08 +0900 Subject: [PATCH 02/16] Fix JIRA issue(TSAM-5210) : Frame of number unread email is cut when app display in the top of screen Change-Id: Ida77e1ea56b1b66ea338725161deba55e2911b84 --- res/edje/app_icon.edc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/edje/app_icon.edc b/res/edje/app_icon.edc index 19f4204..901dce1 100755 --- a/res/edje/app_icon.edc +++ b/res/edje/app_icon.edc @@ -169,8 +169,8 @@ collections { visible: 0; fixed: 1 1; color: 255 255 255 255; - rel1{relative: 0.95 -0.05; to: APPS_ICON_CONTENT;} - rel2{relative: 0.95 -0.05; to: APPS_ICON_CONTENT;} + rel1{relative: 0.95 0.0; to: APPS_ICON_CONTENT;} + rel2{relative: 0.95 0.0; to: APPS_ICON_CONTENT;} align: 1.0 0.0; text { -- 2.7.4 From 7872c8b4cfafc444a7f0aa89529a8adc7b5ed90c Mon Sep 17 00:00:00 2001 From: "juhee,park" Date: Wed, 22 Jun 2016 16:19:10 +0900 Subject: [PATCH 03/16] Fixed memory leak Change-Id: Icb986714136b9d820f2216b8dd875bf0e272c057 --- src/add_widget_viewer/add_widget_data.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/add_widget_viewer/add_widget_data.c b/src/add_widget_viewer/add_widget_data.c index 61a6dc0..7e93c84 100755 --- a/src/add_widget_viewer/add_widget_data.c +++ b/src/add_widget_viewer/add_widget_data.c @@ -89,6 +89,7 @@ static int __add_widget_data_widget_list_cb(const char *app_id, const char *widg if (!widget_preview_type) { LOGE("Can not allocate memory for list item preview type"); __add_widget_data_list_delete(); + __add_widget_data_free(widget); return WIDGET_ERROR_FAULT; } -- 2.7.4 From dfedba50ee448ac4e47b1e16fcee28bb18b5a4aa Mon Sep 17 00:00:00 2001 From: "juhee,park" Date: Thu, 23 Jun 2016 14:20:41 +0900 Subject: [PATCH 04/16] Send touch cancel event to widget when the scroller beginning to scroll Change-Id: I489ae434aa92b9e74a3b51d53bdb89a74b7a3a45 Signed-off-by: juhee,park --- src/add_widget_viewer/add_widget_viewer.c | 2 +- src/cluster_data.c | 2 +- src/cluster_db.c | 2 +- src/cluster_view.c | 13 ++++-- src/widget_viewer.c | 67 ++++++++++++++++++++++++++++++- 5 files changed, 79 insertions(+), 7 deletions(-) diff --git a/src/add_widget_viewer/add_widget_viewer.c b/src/add_widget_viewer/add_widget_viewer.c index bd2acc8..c5fa63e 100755 --- a/src/add_widget_viewer/add_widget_viewer.c +++ b/src/add_widget_viewer/add_widget_viewer.c @@ -579,6 +579,6 @@ static void __add_widget_viewer_preview_clicked_cb(void *data, Evas_Object *obj, cluster_view_set_state(VIEW_STATE_NORMAL); - cluster_data_insert_widget(widget_id, widget_id, type); + cluster_data_insert_widget(widget_id, NULL, type); free(widget_id); } diff --git a/src/cluster_data.c b/src/cluster_data.c index 1fba6fa..09eadaf 100755 --- a/src/cluster_data.c +++ b/src/cluster_data.c @@ -119,7 +119,7 @@ static void __cluster_data_insert_default_data(void) new_item->pos_y = 0; new_item->pos_x = 0; new_item->pkg_name = strdup("org.tizen.calendar.widget"); - new_item->content_info = strdup("org.tizen.calendar.widget"); + new_item->content_info = NULL; new_item->type = WIDGET_SIZE_TYPE_4x4; new_item->period = 0.0; new_item->allow_duplicate = 1; diff --git a/src/cluster_db.c b/src/cluster_db.c index cc0aa38..73246ec 100755 --- a/src/cluster_db.c +++ b/src/cluster_db.c @@ -141,7 +141,7 @@ bool cluster_db_get_list(Eina_List **cluster_list) str = (const char *) sqlite3_column_text(stmt, COL_PKG_NAME); item->pkg_name = (!str || !strlen(str)) ? NULL : strdup(str); str = (const char *) sqlite3_column_text(stmt, COL_CONTENT_INFO); - item->content_info = (!str || !strlen(str)) ? NULL : strdup(str); + item->content_info = (!str || !strlen(str) || strncmp(str, "(null)", strlen("(null)")) == 0 ) ? NULL : strdup(str); item->type = sqlite3_column_int(stmt, COL_TYPE); item->period = sqlite3_column_double(stmt, COL_PERIOD); item->allow_duplicate = sqlite3_column_int(stmt, COL_ALLOW_DUPLICATE); diff --git a/src/cluster_view.c b/src/cluster_view.c index cf379fa..738a8bd 100755 --- a/src/cluster_view.c +++ b/src/cluster_view.c @@ -143,7 +143,7 @@ static void __cluster_view_edit_move_anim_done(void *data); static Eina_Bool __cluster_view_scroll_timer_cb(void *data); -static void __cluster_view_scroll_anim_start_cb(void *data, Evas_Object *obj, void *event_info); +static void __cluster_view_scroll_drag_start_cb(void *data, Evas_Object *obj, void *event_info); static void __cluster_view_scroll_anim_stop_cb(void *data, Evas_Object *obj, void *event_info); static void __cluster_view_allpage_get_page_pos(int page_idx, int *w, int *h); static int __cluster_view_allpage_get_page_index(int x, int y); @@ -233,7 +233,7 @@ Evas_Object *__cluster_view_create_base_gui(Evas_Object *win) evas_object_event_callback_add(cluster_view_s.scroller, EVAS_CALLBACK_MOUSE_UP, __clsuter_view_scroller_up_cb, NULL); evas_object_smart_callback_add(cluster_view_s.scroller, "scroll,anim,stop", __cluster_view_scroll_anim_stop_cb, NULL); - evas_object_smart_callback_add(cluster_view_s.scroller, "scroll,anim,start", __cluster_view_scroll_anim_start_cb, NULL); + evas_object_smart_callback_add(cluster_view_s.scroller, "scroll,drag,start", __cluster_view_scroll_drag_start_cb, NULL); cluster_view_s.box = elm_box_add(cluster_view_s.scroller); elm_box_horizontal_set(cluster_view_s.box, EINA_TRUE); @@ -1463,9 +1463,16 @@ static Eina_Bool __cluster_view_scroller_long_press_time_cb(void *data) return ECORE_CALLBACK_CANCEL; } -static void __cluster_view_scroll_anim_start_cb(void *data, Evas_Object *obj, void *event_info) +static void __cluster_view_scroll_drag_start_cb(void *data, Evas_Object *obj, void *event_info) { cluster_view_s.is_srolling = true; + cluster_page_t *current_page = (cluster_page_t *)eina_list_nth(cluster_view_s.page_list, cluster_view_s.current_page); + Eina_List *find_list = NULL; + widget_data_t *item; + LOGD("Current Page : %d", cluster_view_s.current_page); + EINA_LIST_FOREACH(current_page->widget_list, find_list, item) { + widget_viewer_send_cancel_click_event(item); + } } static void __cluster_view_scroll_anim_stop_cb(void *data, Evas_Object *obj, void *event_info) diff --git a/src/widget_viewer.c b/src/widget_viewer.c index 018f62d..f6e2c98 100755 --- a/src/widget_viewer.c +++ b/src/widget_viewer.c @@ -32,6 +32,11 @@ static int count = 0; #endif static void __widget_viewer_delete_btn_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source); +static void __widget_viewer_created_cb(void *data, Evas_Object *obj, void *event_info); +static void __widget_viewer_faulted_cb(void *data, Evas_Object *obj, void *event_info); +static void __widget_viewer_update_cb(void *data, Evas_Object *obj, void *event_info); +static void __widget_viewer_extra_info_updated_cb(void *data, Evas_Object *obj, void *event_info); + void widget_viewer_init(Evas_Object *win) { widget_viewer_evas_init(win); @@ -46,6 +51,7 @@ void widget_viewer_add_widget(Evas_Object *parent, widget_data_t *item, int *wid { Evas_Object *widget_layout; + LOGD("pkg : %s , Content INfo : %s", item->pkg_name, item->content_info); widget_layout = elm_layout_add(parent); elm_layout_file_set(widget_layout, util_get_res_file_path(EDJE_DIR"/widget.edj"), GROUP_WIDGET_LY); evas_object_size_hint_weight_set(widget_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -61,13 +67,19 @@ void widget_viewer_add_widget(Evas_Object *parent, widget_data_t *item, int *wid #ifndef _TEST_ int w, h; - Evas_Object *widget = widget_viewer_evas_add_widget(widget_layout, item->pkg_name, NULL, item->period); + Evas_Object *widget = widget_viewer_evas_add_widget(widget_layout, item->pkg_name, item->content_info, item->period); evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); //Notify widget_size_type_e to widget application. widget_service_get_size(item->type, &w, &h); evas_object_resize(widget, w, h); + + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_CREATED, __widget_viewer_created_cb, item); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_FAULTED, __widget_viewer_faulted_cb, item); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_UPDATED, __widget_viewer_update_cb, item); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_EXTRA_INFO_UPDATED, __widget_viewer_extra_info_updated_cb, item); + #else // for TEST /* Evas_Object *widget = evas_object_rectangle_add(evas_object_evas_get(widget_layout)); evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -105,6 +117,7 @@ static void __widget_viewer_delete_btn_clicked_cb(void *data, Evas_Object *obj, void widget_viewer_send_cancel_click_event(widget_data_t *item) { + LOGD("Send to : %s", item->pkg_name); Evas_Object *widget_obj = NULL; widget_obj = elm_object_part_content_get(item->widget_layout, WIDGET_CONTENT); widget_viewer_evas_cancel_click_event(widget_obj); @@ -148,3 +161,55 @@ void widget_viewer_thumbnail_delete(widget_data_t *item) elm_object_part_content_set(item->widget_layout, WIDGET_CONTENT, item->widget_content); } } + +static void __widget_viewer_created_cb(void *data, Evas_Object *obj, void *event_info) +{ + widget_data_t *widget = (widget_data_t*) data; + LOGD("Pkg : %s ", widget->pkg_name); + const char *content_info = widget_viewer_evas_get_content_info(widget->widget_content); + if (content_info) { + if (widget->content_info) { + free(widget->content_info); + widget->content_info = NULL; + } + widget->content_info = strdup(content_info); + LOGD("content info :%s",widget->content_info); + cluster_data_update(widget); + } +} +static void __widget_viewer_faulted_cb(void *data, Evas_Object *obj, void *event_info) +{ + widget_data_t *widget = (widget_data_t*) data; + LOGD("Pkg : %s ", widget->pkg_name); +} +static void __widget_viewer_update_cb(void *data, Evas_Object *obj, void *event_info) +{ + widget_data_t *widget = (widget_data_t*) data; + LOGD("Pkg : %s ", widget->pkg_name); + const char *content_info = widget_viewer_evas_get_content_info(widget->widget_content); + if (content_info) { + if (widget->content_info) { + free(widget->content_info); + widget->content_info = NULL; + } + widget->content_info = strdup(content_info); + LOGD("content info :%s",widget->content_info); + cluster_data_update(widget); + } +} + +static void __widget_viewer_extra_info_updated_cb(void *data, Evas_Object *obj, void *event_info) +{ + widget_data_t *widget = (widget_data_t*) data; + LOGD("Pkg : %s ", widget->pkg_name); + const char *content_info = widget_viewer_evas_get_content_info(widget->widget_content); + if (content_info) { + if (widget->content_info) { + free(widget->content_info); + widget->content_info = NULL; + } + widget->content_info = strdup(content_info); + LOGD("content info :%s",widget->content_info); + cluster_data_update(widget); + } +} -- 2.7.4 From 3a641625cb326325732cdc46e9176e60fe43fbd6 Mon Sep 17 00:00:00 2001 From: YoungHun Cho Date: Thu, 23 Jun 2016 16:19:42 +0900 Subject: [PATCH 05/16] Add code to handle widget status Change-Id: I3f27bf896834efdd10518b07a8d1c18a95707d92 --- inc/widget_viewer.h | 3 ++ src/cluster_view.c | 19 +++++++ src/widget_viewer.c | 145 ++++++++++++++++++++++++++++++++-------------------- 3 files changed, 111 insertions(+), 56 deletions(-) diff --git a/inc/widget_viewer.h b/inc/widget_viewer.h index d33ede5..75d7876 100755 --- a/inc/widget_viewer.h +++ b/inc/widget_viewer.h @@ -31,4 +31,7 @@ void widget_viewer_send_cancel_click_event(widget_data_t *item); void widget_viewer_thumbnail_add(widget_data_t *item); void widget_viewer_thumbnail_delete(widget_data_t *item); +void widget_viewer_pause_widget(widget_data_t *widget_data); +void widget_viewer_resume_widget(widget_data_t *widget_data); + #endif /* __WIDGET_VIEWER_H__ */ diff --git a/src/cluster_view.c b/src/cluster_view.c index 738a8bd..b0f5698 100755 --- a/src/cluster_view.c +++ b/src/cluster_view.c @@ -403,6 +403,7 @@ bool cluster_view_set_state(view_state_t state) evas_object_event_callback_add(item->widget_content, EVAS_CALLBACK_MOUSE_UP, __clsuter_view_widget_up_cb, item); } widget_viewer_thumbnail_add(item); + widget_viewer_pause_widget(item); elm_object_signal_emit(item->widget_layout, SIGNAL_CLUSTER_EDIT_STATE, SIGNAL_SOURCE); } } @@ -432,6 +433,7 @@ bool cluster_view_set_state(view_state_t state) if (item->widget_layout) { elm_object_signal_emit(item->widget_layout, SIGNAL_DELETE_BUTTON_HIDE_ANI, SIGNAL_SOURCE); elm_object_signal_emit(item->widget_layout, SIGNAL_CLUSTER_NORMAL_STATE, SIGNAL_SOURCE); + widget_viewer_resume_widget(item); } } } else if (cluster_view_s.view_state == VIEW_STATE_ADD_VIEWER) { @@ -453,6 +455,14 @@ bool cluster_view_set_state(view_state_t state) } } + Eina_List *data_list = cluster_data_get_widget_list(); + widget_data_t *item = NULL; + EINA_LIST_FOREACH(data_list, find_list, item) { + if (item->widget_layout) { + widget_viewer_resume_widget(item); + } + } + if (cluster_view_s.current_page >= cluster_view_s.page_count) { cluster_view_s.current_page = CLUSTER_HOME_PAGE; } @@ -466,6 +476,15 @@ bool cluster_view_set_state(view_state_t state) page_indicator_hide(cluster_view_s.indicator); __cluster_view_create_all_page(); + + Eina_List *data_list = cluster_data_get_widget_list(); + Eina_List *find_list = NULL; + widget_data_t *item = NULL; + EINA_LIST_FOREACH(data_list, find_list, item) { + if (item->widget_layout) { + widget_viewer_pause_widget(item); + } + } } cluster_view_s.view_state = state; diff --git a/src/widget_viewer.c b/src/widget_viewer.c index f6e2c98..915c4c9 100755 --- a/src/widget_viewer.c +++ b/src/widget_viewer.c @@ -14,6 +14,7 @@ * limitations under the License. */ #include +#include #include "widget_viewer.h" #include "util.h" @@ -47,16 +48,16 @@ void widget_viewer_fini(void) widget_viewer_evas_fini(); } -void widget_viewer_add_widget(Evas_Object *parent, widget_data_t *item, int *widget_width, int *widget_height) +void widget_viewer_add_widget(Evas_Object *parent, widget_data_t *widget_data, int *widget_width, int *widget_height) { Evas_Object *widget_layout; - LOGD("pkg : %s , Content INfo : %s", item->pkg_name, item->content_info); + LOGD("pkg : %s , Content INfo : %s", widget_data->pkg_name, widget_data->content_info); widget_layout = elm_layout_add(parent); elm_layout_file_set(widget_layout, util_get_res_file_path(EDJE_DIR"/widget.edj"), GROUP_WIDGET_LY); evas_object_size_hint_weight_set(widget_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - widget_service_get_size(item->type, widget_width, widget_height); + widget_service_get_size(widget_data->type, widget_width, widget_height); Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(widget_layout)); evas_object_size_hint_min_set(rect, CLUSTER_W / 4, CLUSTER_H / 4); @@ -67,18 +68,18 @@ void widget_viewer_add_widget(Evas_Object *parent, widget_data_t *item, int *wid #ifndef _TEST_ int w, h; - Evas_Object *widget = widget_viewer_evas_add_widget(widget_layout, item->pkg_name, item->content_info, item->period); + Evas_Object *widget = widget_viewer_evas_add_widget(widget_layout, widget_data->pkg_name, widget_data->content_info, widget_data->period); evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); //Notify widget_size_type_e to widget application. - widget_service_get_size(item->type, &w, &h); + widget_service_get_size(widget_data->type, &w, &h); evas_object_resize(widget, w, h); - evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_CREATED, __widget_viewer_created_cb, item); - evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_FAULTED, __widget_viewer_faulted_cb, item); - evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_UPDATED, __widget_viewer_update_cb, item); - evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_EXTRA_INFO_UPDATED, __widget_viewer_extra_info_updated_cb, item); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_CREATED, __widget_viewer_created_cb, widget_data); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_FAULTED, __widget_viewer_faulted_cb, widget_data); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_UPDATED, __widget_viewer_update_cb, widget_data); + evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_EXTRA_INFO_UPDATED, __widget_viewer_extra_info_updated_cb, widget_data); #else // for TEST /* Evas_Object *widget = evas_object_rectangle_add(evas_object_evas_get(widget_layout)); @@ -88,7 +89,7 @@ void widget_viewer_add_widget(Evas_Object *parent, widget_data_t *item, int *wid evas_object_show(widget); */ char number[1000]; - snprintf(number, sizeof(number), "%s_%d", item->pkg_name, count++); + snprintf(number, sizeof(number), "%s_%d", widget_data->pkg_name, count++); Evas_Object *widget = elm_label_add(evas_object_evas_get(widget_layout)); elm_object_style_set(widget, "popup/default"); evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -100,40 +101,40 @@ void widget_viewer_add_widget(Evas_Object *parent, widget_data_t *item, int *wid Ecore_Timer *timer = ecore_timer_add(1, __widget_viewer_test_timer_cb, widget); #endif elm_object_part_content_set(widget_layout, WIDGET_CONTENT, widget); - elm_object_signal_callback_add(widget_layout, SIGNAL_DELETE_BUTTON_CLICKED, SIGNAL_SOURCE, __widget_viewer_delete_btn_clicked_cb, (void *)item); + elm_object_signal_callback_add(widget_layout, SIGNAL_DELETE_BUTTON_CLICKED, SIGNAL_SOURCE, __widget_viewer_delete_btn_clicked_cb, (void *)widget_data); evas_object_show(widget); evas_object_show(widget_layout); - item->widget_content = widget; - item->widget_layout = widget_layout; + widget_data->widget_content = widget; + widget_data->widget_layout = widget_layout; } static void __widget_viewer_delete_btn_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) { - widget_data_t *item = (widget_data_t *)data; - cluster_data_delete(item); + widget_data_t *widget_data = (widget_data_t *)data; + cluster_data_delete(widget_data); } -void widget_viewer_send_cancel_click_event(widget_data_t *item) +void widget_viewer_send_cancel_click_event(widget_data_t *widget_data) { - LOGD("Send to : %s", item->pkg_name); + LOGD("Send to : %s", widget_data->pkg_name); Evas_Object *widget_obj = NULL; - widget_obj = elm_object_part_content_get(item->widget_layout, WIDGET_CONTENT); + widget_obj = elm_object_part_content_get(widget_data->widget_layout, WIDGET_CONTENT); widget_viewer_evas_cancel_click_event(widget_obj); } -void widget_viewer_thumbnail_add(widget_data_t *item) +void widget_viewer_thumbnail_add(widget_data_t *widget_data) { Evas_Object *image = NULL; - image = evas_object_image_filled_add(evas_object_evas_get(item->widget_layout)); + image = evas_object_image_filled_add(evas_object_evas_get(widget_data->widget_layout)); if (!image) { LOGE("Could not create image proxy object"); return; } - if (!evas_object_image_source_set(image, item->widget_content)) { + if (!evas_object_image_source_set(image, widget_data->widget_content)) { evas_object_del(image); LOGE("Could not set proxy image source"); return; @@ -142,74 +143,106 @@ void widget_viewer_thumbnail_add(widget_data_t *item) evas_object_image_source_visible_set(image, EINA_FALSE); int gw, gh; - evas_object_geometry_get(item->widget_layout, NULL, NULL, &gw, &gh); + evas_object_geometry_get(widget_data->widget_layout, NULL, NULL, &gw, &gh); evas_object_image_fill_set(image, 0, 0, gw, gh); evas_object_show(image); - elm_object_part_content_set(item->widget_layout, WIDGET_THUMBNAIL, image); - elm_object_part_content_unset(item->widget_layout, WIDGET_CONTENT); + elm_object_part_content_set(widget_data->widget_layout, WIDGET_THUMBNAIL, image); + elm_object_part_content_unset(widget_data->widget_layout, WIDGET_CONTENT); } -void widget_viewer_thumbnail_delete(widget_data_t *item) +void widget_viewer_thumbnail_delete(widget_data_t *widget_data) { - if (item && item->widget_layout && item->widget_content) { + if (widget_data && widget_data->widget_layout && widget_data->widget_content) { Evas_Object *image = NULL; - image = elm_object_part_content_get(item->widget_layout, WIDGET_THUMBNAIL); + image = elm_object_part_content_get(widget_data->widget_layout, WIDGET_THUMBNAIL); evas_object_image_source_visible_set(image, EINA_TRUE); - elm_object_part_content_unset(item->widget_layout, WIDGET_THUMBNAIL); + elm_object_part_content_unset(widget_data->widget_layout, WIDGET_THUMBNAIL); evas_object_del(image); - elm_object_part_content_set(item->widget_layout, WIDGET_CONTENT, item->widget_content); + elm_object_part_content_set(widget_data->widget_layout, WIDGET_CONTENT, widget_data->widget_content); } } static void __widget_viewer_created_cb(void *data, Evas_Object *obj, void *event_info) { - widget_data_t *widget = (widget_data_t*) data; - LOGD("Pkg : %s ", widget->pkg_name); - const char *content_info = widget_viewer_evas_get_content_info(widget->widget_content); + widget_data_t *widget_data = (widget_data_t*) data; + LOGD("Pkg : %s ", widget_data->pkg_name); + const char *content_info = widget_viewer_evas_get_content_info(widget_data->widget_content); if (content_info) { - if (widget->content_info) { - free(widget->content_info); - widget->content_info = NULL; + if (widget_data->content_info) { + free(widget_data->content_info); + widget_data->content_info = NULL; } - widget->content_info = strdup(content_info); - LOGD("content info :%s",widget->content_info); - cluster_data_update(widget); + widget_data->content_info = strdup(content_info); + LOGD("content info :%s", widget_data->content_info); + cluster_data_update(widget_data); } } + static void __widget_viewer_faulted_cb(void *data, Evas_Object *obj, void *event_info) { widget_data_t *widget = (widget_data_t*) data; LOGD("Pkg : %s ", widget->pkg_name); } + static void __widget_viewer_update_cb(void *data, Evas_Object *obj, void *event_info) { - widget_data_t *widget = (widget_data_t*) data; - LOGD("Pkg : %s ", widget->pkg_name); - const char *content_info = widget_viewer_evas_get_content_info(widget->widget_content); + widget_data_t *widget_data = (widget_data_t*) data; + LOGD("Pkg : %s ", widget_data->pkg_name); + const char *content_info = widget_viewer_evas_get_content_info(widget_data->widget_content); if (content_info) { - if (widget->content_info) { - free(widget->content_info); - widget->content_info = NULL; + if (widget_data->content_info) { + free(widget_data->content_info); + widget_data->content_info = NULL; } - widget->content_info = strdup(content_info); - LOGD("content info :%s",widget->content_info); - cluster_data_update(widget); + widget_data->content_info = strdup(content_info); + LOGD("content info :%s", widget_data->content_info); + cluster_data_update(widget_data); } } static void __widget_viewer_extra_info_updated_cb(void *data, Evas_Object *obj, void *event_info) { - widget_data_t *widget = (widget_data_t*) data; - LOGD("Pkg : %s ", widget->pkg_name); - const char *content_info = widget_viewer_evas_get_content_info(widget->widget_content); + widget_data_t *widget_data = (widget_data_t*) data; + LOGD("Pkg : %s ", widget_data->pkg_name); + const char *content_info = widget_viewer_evas_get_content_info(widget_data->widget_content); if (content_info) { - if (widget->content_info) { - free(widget->content_info); - widget->content_info = NULL; + if (widget_data->content_info) { + free(widget_data->content_info); + widget_data->content_info = NULL; } - widget->content_info = strdup(content_info); - LOGD("content info :%s",widget->content_info); - cluster_data_update(widget); + widget_data->content_info = strdup(content_info); + LOGD("content info :%s", widget_data->content_info); + cluster_data_update(widget_data); + } +} + +void widget_viewer_pause_widget(widget_data_t *widget_data) +{ + int ret = WIDGET_ERROR_NONE; + + if (!widget_data) { + LOGE("widget_data is NULL"); + return; + } + + ret = widget_viewer_evas_pause_widget(widget_data->widget_content); + if (ret != WIDGET_ERROR_NONE) { + LOGE("Failed to pause widget(%d)", ret); + } +} + +void widget_viewer_resume_widget(widget_data_t *widget_data) +{ + int ret = WIDGET_ERROR_NONE; + + if (!widget_data) { + LOGE("widget_data is NULL"); + return; + } + + ret = widget_viewer_evas_resume_widget(widget_data->widget_content); + if (ret != WIDGET_ERROR_NONE) { + LOGE("Failed to resume widget(%d)", ret); } } -- 2.7.4 From 1394819854c2d1f5f708de1086ea93da6fe37bd6 Mon Sep 17 00:00:00 2001 From: "gs86.lee" Date: Mon, 27 Jun 2016 16:35:05 +0900 Subject: [PATCH 06/16] Print app control error log Change-Id: I271cd26fc02cf5904b02b78d1facfe23db7d34e5 --- src/homescreen-efl.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index dfa1c00..a58eebc 100755 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -123,21 +123,67 @@ static bool __homescreen_efl_app_create_cb(void *data) return true; } +static void _print_app_control_err_to_str(app_control_error_e err) +{ + char *err_str = NULL; + + switch(err) { + case APP_CONTROL_ERROR_INVALID_PARAMETER: + err_str = "APP_CONTROL_ERROR_INVALID_PARAMETER"; + break; + case APP_CONTROL_ERROR_OUT_OF_MEMORY: + err_str = "APP_CONTROL_ERROR_OUT_OF_MEMORY"; + break; + case APP_CONTROL_ERROR_APP_NOT_FOUND: + err_str = "APP_CONTROL_ERROR_APP_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_NOT_FOUND: + err_str = "APP_CONTROL_ERROR_KEY_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_REJECTED: + err_str = "APP_CONTROL_ERROR_KEY_REJECTED"; + break; + case APP_CONTROL_ERROR_INVALID_DATA_TYPE: + err_str = "APP_CONTROL_ERROR_INVALID_DATA_TYPE"; + break; + case APP_CONTROL_ERROR_LAUNCH_REJECTED: + err_str = "APP_CONTROL_ERROR_LAUNCH_REJECTED"; + break; + case APP_CONTROL_ERROR_PERMISSION_DENIED: + err_str = "APP_CONTROL_ERROR_PERMISSION_DENIED"; + break; + case APP_CONTROL_ERROR_LAUNCH_FAILED: + err_str = "APP_CONTROL_ERROR_LAUNCH_FAILED"; + break; + case APP_CONTROL_ERROR_TIMED_OUT: + err_str = "APP_CONTROL_ERROR_TIMED_OUT"; + break; + case APP_CONTROL_ERROR_IO_ERROR: + err_str = "APP_CONTROL_ERROR_IO_ERROR"; + break; + default: + LOGE("Unknown error(%d)", err); + return; + } + + LOGE("app_control error(%d) : %s", err, err_str); +} + #define APP_CONTROL_HOME_OP_KEY "__HOME_OP__" #define APP_CONTROL_HOME_OP_VAL_LAUNCH_BY_HOME_KEY "__LAUNCH_BY_HOME_KEY__" static void __homescreen_efl_app_control_cb(app_control_h app_control, void*data) { - int ret = 0; + app_control_error_e ret = 0; char *operation = NULL; if (!app_control) { - LOGE("appcontrol is NULL"); + LOGE("app_control is NULL"); return; } ret = app_control_get_operation(app_control, &operation); if (ret != APP_CONTROL_ERROR_NONE) { - LOGE("Failed to get operation"); + _print_app_control_err_to_str(ret); return; } @@ -145,7 +191,7 @@ static void __homescreen_efl_app_control_cb(app_control_h app_control, void*data char *value = NULL; ret = app_control_get_extra_data(app_control, APP_CONTROL_HOME_OP_KEY, &value); if (ret != APP_CONTROL_ERROR_NONE) { - LOGE("Failed to get extra data"); + _print_app_control_err_to_str(ret); free(operation); return; } -- 2.7.4 From e1053054ec384b0362a5db6ca04d486112078a5d Mon Sep 17 00:00:00 2001 From: "juhee,park" Date: Mon, 27 Jun 2016 17:32:23 +0900 Subject: [PATCH 07/16] Use elm_image_add instead of evas_object_image_filled_add. (BG is not same with preview of wallpaper setting). delete elm_ctxpopup_auto_hide_disabled_set. (Menu will be close when user touch outside of the menu) Change-Id: I991ea59aac921a0447d21d36c29d5ec713d70145 Signed-off-by: juhee,park --- src/homescreen-efl.c | 13 ++++++++----- src/menu.c | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index a58eebc..a66ba80 100755 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -294,19 +294,22 @@ static void __homescreen_efl_set_wallpaper(void) main_info.bg = NULL; } - main_info.bg = evas_object_image_filled_add(evas_object_evas_get(main_info.main_layout)); + main_info.bg = elm_image_add(main_info.main_layout); + elm_image_aspect_fixed_set(main_info.bg, EINA_TRUE); + elm_image_fill_outside_set(main_info.bg, EINA_TRUE); + elm_image_preload_disabled_set(main_info.bg, EINA_TRUE); evas_object_size_hint_min_set(main_info.bg, main_info.root_width, main_info.root_height); elm_object_part_content_set(main_info.main_layout, "home_bg", main_info.bg); - evas_object_show(main_info.bg); - const char *bg_path = util_get_res_file_path(IMAGE_DIR"/default_bg.png"); ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &buf); if (!buf || !ecore_file_can_read(buf) || ret != SYSTEM_SETTINGS_ERROR_NONE) { - evas_object_image_file_set(main_info.bg, bg_path, "bg"); + elm_image_file_set(main_info.bg, util_get_res_file_path(IMAGE_DIR"/default_bg.png"), "bg"); } else { - evas_object_image_file_set(main_info.bg, buf, "bg"); + elm_image_file_set(main_info.bg, buf, "bg"); } + evas_object_show(main_info.bg); + if (buf) free(buf); } diff --git a/src/menu.c b/src/menu.c index 436192b..2b2e6a1 100755 --- a/src/menu.c +++ b/src/menu.c @@ -58,7 +58,7 @@ void menu_show(Eina_Hash* hash_table) menu_info.menu = elm_ctxpopup_add(homescreen_efl_get_win()); elm_object_style_set(menu_info.menu, "more/default"); elm_ctxpopup_horizontal_set(menu_info.menu, EINA_FALSE); - elm_ctxpopup_auto_hide_disabled_set(menu_info.menu, EINA_TRUE); + //elm_ctxpopup_auto_hide_disabled_set(menu_info.menu, EINA_TRUE); elm_ctxpopup_direction_priority_set(menu_info.menu, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN); evas_object_smart_callback_add(menu_info.menu, "dismissed", __menu_dismissed_cb, NULL); -- 2.7.4 From 65e7d6f8afb2dcdb5d24eab3d577ed5ac13f5856 Mon Sep 17 00:00:00 2001 From: "juhee,park" Date: Wed, 29 Jun 2016 13:35:52 +0900 Subject: [PATCH 08/16] Change rel2.(EFL team recommendation). fixed memory leak. Signed-off-by: juhee,park Change-Id: I5e3ded43212814abe869f39568df34983faab31c --- res/edje/apps_view.edc | 2 +- res/edje/apps_view_bg.edc | 2 +- res/edje/home.edc | 2 +- res/edje/page_indicator_unit.edc | 2 +- src/apps_data.c | 1 + src/apps_view.c | 10 ++++++---- 6 files changed, 11 insertions(+), 8 deletions(-) diff --git a/res/edje/apps_view.edc b/res/edje/apps_view.edc index b5fbf22..be1b555 100755 --- a/res/edje/apps_view.edc +++ b/res/edje/apps_view.edc @@ -29,7 +29,7 @@ collections { state: "default" 0.0; align: 0 0; rel1.relative: 0.0 0.0; - rel2.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; } } part { name: APPS_VIEW_BG; diff --git a/res/edje/apps_view_bg.edc b/res/edje/apps_view_bg.edc index d2b1a38..b10826f 100755 --- a/res/edje/apps_view_bg.edc +++ b/res/edje/apps_view_bg.edc @@ -38,7 +38,7 @@ collections { state: "default" 0.0; align: 0.0 0.0; rel1.relative: 0.0 0.0; - rel2.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; visible: 1; } } diff --git a/res/edje/home.edc b/res/edje/home.edc index 16fdc93..d32bb06 100755 --- a/res/edje/home.edc +++ b/res/edje/home.edc @@ -27,7 +27,7 @@ collections { description { state: "default" 0.0; align: 0 0; rel1.relative: 0.0 0.0; - rel2.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; } } } diff --git a/res/edje/page_indicator_unit.edc b/res/edje/page_indicator_unit.edc index 41b07d6..02b4412 100755 --- a/res/edje/page_indicator_unit.edc +++ b/res/edje/page_indicator_unit.edc @@ -43,7 +43,7 @@ collections { state: "default" 0.0; align: 0 0; rel1.relative: 0.0 0.0; - rel2.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; } } part { diff --git a/src/apps_data.c b/src/apps_data.c index bf2ccad..1847fc0 100755 --- a/src/apps_data.c +++ b/src/apps_data.c @@ -181,6 +181,7 @@ void apps_data_uninstall(const char *package) } } apps_data_delete_list(find_result); + eina_list_free(find_result); } app_data_t *apps_data_add_folder(void) diff --git a/src/apps_view.c b/src/apps_view.c index fbe7c33..21398e9 100755 --- a/src/apps_view.c +++ b/src/apps_view.c @@ -843,6 +843,8 @@ static void __apps_view_icon_check_changed_cb(void *data, Evas_Object *obj, cons break; } } + eina_list_free(list); + if (blank) { elm_object_signal_emit(apps_view_s.opened_folder->app_layout, SIGNAL_UNCHECK_CHECK_BOX, SIGNAL_SOURCE); } else { @@ -876,6 +878,8 @@ static void __apps_view_icon_check_changed_cb(void *data, Evas_Object *obj, cons break; } } + eina_list_free(list); + if (all_check) { elm_object_signal_emit(apps_view_s.opened_folder->app_layout, SIGNAL_CHECK_CHECK_BOX, SIGNAL_SOURCE); } else { @@ -1199,7 +1203,7 @@ static void __apps_view_close_folder_popup_done(void) Eina_List *find_list; EINA_LIST_FOREACH(list, find_list, item) { if (item != NULL && item->parent_db_id == apps_view_s.opened_folder->db_id && item->app_layout) { - evas_object_del(item->app_layout); + apps_view_delete_icon(item); } } evas_object_del(apps_view_s.folder_popup_ly); @@ -1677,10 +1681,8 @@ static void __apps_view_edit_drop_icon(void *data) __apps_view__set_icon_label_style(item, VIEW_STATE_EDIT); if (apps_view_s.candidate_folder) { - Eina_List *folder_list = NULL; int folder_item_count = 0; - apps_data_get_folder_item_list(&folder_list, apps_view_s.candidate_folder); - folder_item_count = eina_list_count(folder_list); + folder_item_count = apps_data_get_folder_item_count(apps_view_s.candidate_folder); if (folder_item_count >= APPS_FOLDER_MAX_ITEM) { char str[1024]; snprintf(str, sizeof(str), _("IDS_HS_TPOP_MAXIMUM_NUMBER_OF_APPLICATIONS_IN_FOLDER_HPD_REACHED"), APPS_FOLDER_MAX_ITEM); -- 2.7.4 From a0459f0be1ca21479452bcde3e218dbe640bc2a8 Mon Sep 17 00:00:00 2001 From: "gs86.lee" Date: Fri, 1 Jul 2016 07:10:43 +0900 Subject: [PATCH 09/16] Remove scroller move log Change-Id: I74162031ed47fa06fcdcd0f23336196d8124f3c4 --- src/apps_view.c | 3 --- src/cluster_view.c | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/apps_view.c b/src/apps_view.c index 21398e9..3c30856 100755 --- a/src/apps_view.c +++ b/src/apps_view.c @@ -1426,8 +1426,6 @@ static void __apps_view_scroller_move_cb(void *data, Evas *e, Evas_Object *obj, if (!apps_mouse_info.pressed || apps_mouse_info.pressed_obj != obj) return ; - LOGD("MOVE: (%d,%d)", ev->cur.output.x, ev->cur.output.y); - apps_mouse_info.move_x = ev->cur.output.x; apps_mouse_info.move_y = ev->cur.output.y; @@ -1519,7 +1517,6 @@ static void __apps_view_icon_up_cb(void *data, Evas *e, Evas_Object *obj, void * static void __apps_view_icon_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { Evas_Event_Mouse_Move* ev = event_info; - LOGD("MOVE: (%d,%d)", ev->cur.output.x, ev->cur.output.y); if (!apps_mouse_info.pressed) return ; diff --git a/src/cluster_view.c b/src/cluster_view.c index b0f5698..df3f800 100755 --- a/src/cluster_view.c +++ b/src/cluster_view.c @@ -1205,7 +1205,6 @@ static void __clsuter_view_widget_up_cb(void *data, Evas *e, Evas_Object *obj, v static void __clsuter_view_widget_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { Evas_Event_Mouse_Move* ev = event_info; - LOGD("MOVE: (%d,%d)", ev->cur.output.x, ev->cur.output.y); if (!cluster_mouse_info.pressed) return ; @@ -1451,8 +1450,6 @@ static void __clsuter_view_scroller_move_cb(void *data, Evas *e, Evas_Object *ob if (!cluster_mouse_info.pressed || cluster_mouse_info.pressed_obj != obj) return ; - LOGD("MOVE: (%d,%d)", ev->cur.output.x, ev->cur.output.y); - cluster_mouse_info.move_x = ev->cur.output.x; cluster_mouse_info.move_y = ev->cur.output.y; -- 2.7.4 From c842098b3d4b418b5751936bc3f1400ab2d33478 Mon Sep 17 00:00:00 2001 From: "juhee,park" Date: Tue, 5 Jul 2016 13:09:02 +0900 Subject: [PATCH 10/16] Show badge count on Folder Signed-off-by: juhee,park Change-Id: Iad206553255132123c384637cd47c625b85a7c20 --- src/apps_view.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/src/apps_view.c b/src/apps_view.c index 3c30856..0b73a28 100755 --- a/src/apps_view.c +++ b/src/apps_view.c @@ -131,6 +131,7 @@ static Eina_Bool __apps_view_hide_folder_anim(void *data, double pos); static void __apps_view_hide_folder_cb(void *data, Evas_Object *obj, const char *emission, const char *source); static void __apps_view_badge_update_cb(unsigned int action, const char *app_id, unsigned int count, void *user_data); static void __apps_view_badge_update_icon(app_data_t *item); +static void __apps_view_badge_update_folder(app_data_t *item); static void __apps_view_badge_update_count(app_data_t *item); static void __apps_view_plus_icon_clicked(void *data, Evas_Object *obj, const char *emission, const char *source); @@ -1304,7 +1305,7 @@ static void __apps_view_badge_update_cb(unsigned int action, const char *app_id, return; } EINA_LIST_FOREACH(data_list, find_list, item) { - if (strcmp(app_id, item->app_id) == 0) { + if (item->app_id && strcmp(app_id, item->app_id) == 0) { __apps_view_badge_update_count(item); } } @@ -1324,10 +1325,12 @@ static void __apps_view_badge_update_count(app_data_t *item) if (result != BADGE_ERROR_NONE) { LOGE("badge_get_display error %d", result); item->badge_count = 0; + __apps_view_badge_update_icon(item); return; } if (!to_be_displayed) { item->badge_count = 0; + __apps_view_badge_update_icon(item); return; } @@ -1343,18 +1346,53 @@ static void __apps_view_badge_update_count(app_data_t *item) static void __apps_view_badge_update_icon(app_data_t *item) { char number_str[STR_MAX]; - if (item->badge_count == 0) { - elm_object_signal_emit(item->app_layout, SIGNAL_BADGE_HIDE, SIGNAL_SOURCE); - return; - } - if (item->badge_count > MAX_BADGE_DISPLAY_COUNT) { snprintf(number_str, sizeof(number_str), "%d+", MAX_BADGE_DISPLAY_COUNT); } else { snprintf(number_str, sizeof(number_str), "%d", item->badge_count); } - elm_layout_text_set(item->app_layout, APPS_ICON_BADGE_TEXT, number_str); - elm_object_signal_emit(item->app_layout, SIGNAL_BADGE_SHOW, SIGNAL_SOURCE); + if (item->app_layout) { + if (item->badge_count <= 0) { + elm_object_signal_emit(item->app_layout, SIGNAL_BADGE_HIDE, SIGNAL_SOURCE); + } else { + elm_layout_text_set(item->app_layout, APPS_ICON_BADGE_TEXT, number_str); + elm_object_signal_emit(item->app_layout, SIGNAL_BADGE_SHOW, SIGNAL_SOURCE); + } + } + if (item->parent_db_id != APPS_ROOT ) + __apps_view_badge_update_folder(item); +} + +static void __apps_view_badge_update_folder(app_data_t *item) +{ + Eina_List *find_list = NULL; + app_data_t *find_item = NULL; + app_data_t *folder_item = NULL; + Eina_List *apps_list = apps_data_get_list(); + int badge_count = 0; + char number_str[STR_MAX]; + + EINA_LIST_FOREACH(apps_list, find_list, find_item) { + if (find_item->db_id == item->parent_db_id) + folder_item = find_item; + if (find_item->parent_db_id == item->parent_db_id) + badge_count += find_item->badge_count; + } + if (badge_count > MAX_BADGE_DISPLAY_COUNT) { + snprintf(number_str, sizeof(number_str), "%d+", MAX_BADGE_DISPLAY_COUNT); + } else { + snprintf(number_str, sizeof(number_str), "%d", badge_count); + } + + if (folder_item->app_layout) { + if (badge_count <= 0) { + elm_object_signal_emit(folder_item->app_layout, SIGNAL_BADGE_HIDE, SIGNAL_SOURCE); + } else { + elm_layout_text_set(folder_item->app_layout, APPS_ICON_BADGE_TEXT, number_str); + elm_object_signal_emit(folder_item->app_layout, SIGNAL_BADGE_SHOW, SIGNAL_SOURCE); + } + } + } static void __apps_view_plus_icon_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) -- 2.7.4 From 45560bcee8c51e2f702378fe17d99436fee80f1d Mon Sep 17 00:00:00 2001 From: cskim Date: Mon, 11 Jul 2016 09:58:14 +0900 Subject: [PATCH 11/16] Fix folder badge update issue [TSAM-6224] Change-Id: I2c0ad532f6f8f6608d5875b7ba93b634ff8f88dd --- src/apps_view.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/apps_view.c b/src/apps_view.c index 0b73a28..e0a7a8a 100755 --- a/src/apps_view.c +++ b/src/apps_view.c @@ -131,7 +131,7 @@ static Eina_Bool __apps_view_hide_folder_anim(void *data, double pos); static void __apps_view_hide_folder_cb(void *data, Evas_Object *obj, const char *emission, const char *source); static void __apps_view_badge_update_cb(unsigned int action, const char *app_id, unsigned int count, void *user_data); static void __apps_view_badge_update_icon(app_data_t *item); -static void __apps_view_badge_update_folder(app_data_t *item); +static void __apps_view_badge_update_folder(int parent_db_id); static void __apps_view_badge_update_count(app_data_t *item); static void __apps_view_plus_icon_clicked(void *data, Evas_Object *obj, const char *emission, const char *source); @@ -1073,6 +1073,8 @@ void apps_view_update_folder_icon(app_data_t* item) elm_object_signal_emit(item->folder_layout, folder_item_count_string, SIGNAL_SOURCE); evas_object_show(item->folder_layout); eina_list_free(folder_list); + + __apps_view_badge_update_folder(item->db_id); } static void __apps_view_create_menu(void) @@ -1360,10 +1362,10 @@ static void __apps_view_badge_update_icon(app_data_t *item) } } if (item->parent_db_id != APPS_ROOT ) - __apps_view_badge_update_folder(item); + __apps_view_badge_update_folder(item->parent_db_id); } -static void __apps_view_badge_update_folder(app_data_t *item) +static void __apps_view_badge_update_folder(int parent_db_id) { Eina_List *find_list = NULL; app_data_t *find_item = NULL; @@ -1372,10 +1374,14 @@ static void __apps_view_badge_update_folder(app_data_t *item) int badge_count = 0; char number_str[STR_MAX]; + if (parent_db_id == APPS_ROOT) { + return; + } + EINA_LIST_FOREACH(apps_list, find_list, find_item) { - if (find_item->db_id == item->parent_db_id) + if (find_item->db_id == parent_db_id) folder_item = find_item; - if (find_item->parent_db_id == item->parent_db_id) + if (find_item->parent_db_id == parent_db_id) badge_count += find_item->badge_count; } if (badge_count > MAX_BADGE_DISPLAY_COUNT) { -- 2.7.4 From e09b4cc4c02e40ccc5c1d315d37f7dd16ea7c940 Mon Sep 17 00:00:00 2001 From: "juhee,park" Date: Mon, 11 Jul 2016 15:15:21 +0900 Subject: [PATCH 12/16] [TSAM-6337]Set locale language - widget_service_get_name Signed-off-by: juhee,park Change-Id: I4352dcdbe889381ffd55452ab47b9c00c823fc66 --- inc/cluster_view.h | 2 ++ src/add_widget_viewer/add_widget_data.c | 19 ++++++++++++++++++- src/cluster_view.c | 7 +++++++ src/homescreen-efl.c | 2 ++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/inc/cluster_view.h b/inc/cluster_view.h index df518e1..a67b538 100755 --- a/inc/cluster_view.h +++ b/inc/cluster_view.h @@ -22,6 +22,7 @@ #include "cluster_data.h" #include "cluster_page.h" #include "view.h" +#include "homescreen-efl.h" Evas_Object *cluster_view_create(Evas_Object *parent); void cluster_view_init(void); @@ -35,6 +36,7 @@ void cluster_view_hide_anim(double pos); void cluster_view_hw_menu_key(void); bool cluster_view_hw_home_key(void); bool cluster_view_hw_back_key(void); +void cluster_view_lang_changed(homescreen_view_t view_type); view_state_t cluster_view_get_state(void); bool cluster_view_set_state(view_state_t state); void cluster_view_delete_widget(widget_data_t *item); diff --git a/src/add_widget_viewer/add_widget_data.c b/src/add_widget_viewer/add_widget_data.c index 7e93c84..3ed599e 100755 --- a/src/add_widget_viewer/add_widget_data.c +++ b/src/add_widget_viewer/add_widget_data.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "add_widget_viewer/add_widget_data.h" #include "util.h" @@ -69,6 +70,7 @@ static int __add_widget_data_widget_list_cb(const char *app_id, const char *widg int *type = NULL; int types_count = 0; + char *lang = NULL; int ret = WIDGET_ERROR_NONE; ret = widget_service_get_supported_size_types(widget_id, &types_count, &type); @@ -108,10 +110,25 @@ static int __add_widget_data_widget_list_cb(const char *app_id, const char *widg widget->size_types_count = types_count; widget->app_id = strdup(app_id); widget->widget_id = strdup(widget_id); - widget->label = widget_service_get_name(widget->widget_id, NULL); + + ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &lang); + if (ret != SYSTEM_SETTINGS_ERROR_NONE) { + LOGE("SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE : fail"); + lang = NULL; + } + eina_str_tolower(&lang); + + Eina_Strbuf *lang_buf = eina_strbuf_new(); + eina_strbuf_append_printf(lang_buf, "%s", lang); + eina_strbuf_replace_all(lang_buf, "_", "-"); + + widget->label = widget_service_get_name(widget->widget_id, eina_strbuf_string_get(lang_buf)); if (!widget->label || strlen(widget->label) == 0) widget->label = strdup(widget_id); + if (lang) free(lang); + if (lang_buf) eina_strbuf_free(lang_buf); + add_widget_data_s.data_list = eina_list_sorted_insert(add_widget_data_s.data_list, __add_widget_data_widget_compare_cb, widget); diff --git a/src/cluster_view.c b/src/cluster_view.c index df3f800..e4b0b9a 100755 --- a/src/cluster_view.c +++ b/src/cluster_view.c @@ -368,6 +368,13 @@ bool cluster_view_hw_back_key(void) return true; } +void cluster_view_lang_changed(homescreen_view_t view_type) +{ + if (view_type == HOMESCREEN_VIEW_HOME) { + cluster_view_set_state(VIEW_STATE_NORMAL); + } +} + view_state_t cluster_view_get_state(void) { return cluster_view_s.view_state; diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index a66ba80..40c4252 100755 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -28,6 +28,7 @@ #include "view.h" #include "menu.h" #include "popup.h" +#include "add_widget_viewer/add_widget_viewer.h" static struct { Evas_Object *win; @@ -75,6 +76,7 @@ static void __homescreen_efl_lang_changed_cb(app_event_info_h event_info, void * { LOGD("called"); menu_hide(); + cluster_view_lang_changed(main_info.view_type); apps_view_lang_changed(main_info.view_type); } -- 2.7.4 From 575484773cf54a6cca2f512864080a71dca18dc0 Mon Sep 17 00:00:00 2001 From: YoungHun Cho Date: Sun, 17 Jul 2016 14:58:21 +0900 Subject: [PATCH 13/16] index bar issue Change-Id: I7265783db9d2b16d2acd64fe9c8739d5ecc05b58 Signed-off-by: YoungHun Cho --- src/add_widget_viewer/add_widget_viewer.c | 65 +++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/src/add_widget_viewer/add_widget_viewer.c b/src/add_widget_viewer/add_widget_viewer.c index c5fa63e..728c0e7 100755 --- a/src/add_widget_viewer/add_widget_viewer.c +++ b/src/add_widget_viewer/add_widget_viewer.c @@ -46,6 +46,8 @@ static struct { .index = NULL }; +static const char *IDX_STR = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + static void __add_widget_viewer_win_del_cb(void *data, Evas_Object* obj, void* event_info); static Elm_Theme *__add_widget_viewer_create_theme(void); static Evas_Object *__add_widget_viewer_create_conformant(void); @@ -54,6 +56,7 @@ static Evas_Object *__add_widget_viewer_create_naviframe(); static Evas_Object *__add_widget_viewer_create_content(Evas_Object *naviframe, Evas_Object *genlist); static Evas_Object *__add_widget_viewer_create_index(Evas_Object *layout); +static void __add_widget_viewer_index_changed_cb(void *data, Evas_Object *obj, void *event_info); static void __add_widget_viewer_index_cb(void *data, Evas_Object *obj, void *event_info); static int __add_widget_viewer_compare_index_cb(const void *data1, const void *data2); static Evas_Object *__add_widget_viewer_create_list(Evas_Object *content); @@ -233,26 +236,55 @@ static Evas_Object *__add_widget_viewer_create_content(Evas_Object *naviframe, E static Evas_Object *__add_widget_viewer_create_index(Evas_Object *layout) { Evas_Object *index; - const char *idx_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - char ch[2] = {0, }; index = elm_index_add(layout); elm_index_autohide_disabled_set(index, EINA_TRUE); elm_index_omit_enabled_set(index, EINA_TRUE); - elm_index_item_append(index, "#", NULL, NULL); + elm_index_item_append(index, "#", __add_widget_viewer_index_cb, IDX_STR); int i; - for (i = 0; i < strlen(idx_str); ++i) { - ch[0] = idx_str[i]; + for (i = 1; i < strlen(IDX_STR); ++i) { + char ch[2]; + ch[0] = IDX_STR[i]; ch[1] = '\0'; - elm_index_item_append(index, ch, __add_widget_viewer_index_cb, &ch[0]); + elm_index_item_append(index, ch, __add_widget_viewer_index_cb, (IDX_STR+i)); } elm_index_level_go(index, 0); + evas_object_smart_callback_add(index, "changed", __add_widget_viewer_index_changed_cb, NULL); + return index; } +static void __add_widget_viewer_index_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + char *idx_str = (char*)elm_object_item_data_get(event_info); + Eina_List *widget_list = NULL; + add_widget_data_t *widget = NULL; + + widget_list = add_widget_data_get_widget_list(); + if (!widget_list) { + LOGE("Can not get widget list"); + return; + } + + if(idx_str[0] == '#') { + widget = eina_list_data_get(widget_list); + } + + if(!widget) { + widget = eina_list_search_unsorted(widget_list, __add_widget_viewer_compare_index_cb, idx_str); + } + + if (!widget) { + LOGD("Can not find widget"); + return; + } + + elm_genlist_item_bring_in(widget->genlist_item, ELM_GENLIST_ITEM_SCROLLTO_TOP); +} + static void __add_widget_viewer_index_cb(void *data, Evas_Object *obj, void *event_info) { char *idx_str = (char *)data; @@ -265,14 +297,25 @@ static void __add_widget_viewer_index_cb(void *data, Evas_Object *obj, void *eve return; } - widget = eina_list_search_unsorted(widget_list, __add_widget_viewer_compare_index_cb, idx_str); + if(idx_str[0] == '#') { + widget = eina_list_data_get(widget_list); + } + + while(!widget && idx_str[0] != '\0') { + widget = eina_list_search_unsorted(widget_list, __add_widget_viewer_compare_index_cb, idx_str); + idx_str += 1; + } + + if(!widget) { + widget = eina_list_last_data_get(widget_list); + } + if (!widget) { LOGE("Can not find widget"); return; } elm_genlist_item_bring_in(widget->genlist_item, ELM_GENLIST_ITEM_SCROLLTO_TOP); - } static int __add_widget_viewer_compare_index_cb(const void *data1, const void *data2) @@ -281,12 +324,12 @@ static int __add_widget_viewer_compare_index_cb(const void *data1, const void *d char *idx_str = (char *)data2; char c1 = 0; - char c2 = 0; + char c2 = 0; c1 = tolower(idx_str[0]); - c2 = tolower(w->widget_id[0]); + c2 = tolower(w->label[0]); - LOGD("Compare: %c == %c in %s, %s", c1, c2, idx_str, w->widget_id); + LOGD("Compare: %c == %c in %s, %s", c1, c2, idx_str, w->label); if (c1 < c2) return -1; if (c1 > c2) return 1; -- 2.7.4 From 87332b5f24da202bb155ba66ed512e85317ba38b Mon Sep 17 00:00:00 2001 From: YoungHun Cho Date: Wed, 20 Jul 2016 18:21:40 +0900 Subject: [PATCH 14/16] [TSAM-6398] app launching time issue Change-Id: I753206fdff3848b125ac48d43175542162779860 Signed-off-by: YoungHun Cho --- src/apps_view.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/apps_view.c b/src/apps_view.c index e0a7a8a..b58d625 100755 --- a/src/apps_view.c +++ b/src/apps_view.c @@ -704,7 +704,6 @@ static void __apps_view_folder_fill_apps(void) static void __apps_view_icon_clicked_cb(app_data_t *item) { app_control_h app_control_handle = NULL; - feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_TAP); if (item->is_folder) { LOGD("%d(%s) folder clicked", item->db_id, item->label_str); @@ -738,6 +737,8 @@ static void __apps_view_icon_clicked_cb(app_data_t *item) } app_control_destroy(app_control_handle); } + + feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_TAP); } static void __apps_view_icon_uninstall_btn_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) -- 2.7.4 From be4442c487cd593cd72bc6cd9b841e67e13b235a Mon Sep 17 00:00:00 2001 From: YoungHun Cho Date: Wed, 27 Jul 2016 15:42:48 +0900 Subject: [PATCH 15/16] change the rotate logic of pageindicator unit Change-Id: Id66c6606f0554af4c9a4b0f4e36932861ab5d12e Signed-off-by: YoungHun Cho --- inc/edc_conf.h | 2 ++ res/edje/page_indicator_unit.edc | 6 ++++ src/page_indicator.c | 66 +++++++++++++++++++++++++++------------- 3 files changed, 53 insertions(+), 21 deletions(-) diff --git a/inc/edc_conf.h b/inc/edc_conf.h index f6b75cc..0a8d55b 100755 --- a/inc/edc_conf.h +++ b/inc/edc_conf.h @@ -170,4 +170,6 @@ #define ADD_WIDGET_VIEWER_PREVIEW_ICON "add_widget_viewer_preview_ICON" #define SIGNAL_PREVIEW_CLICKED "preview_clicked" +#define SIGNAL_PAGE_INDICATOR_CLICKED "page_indicator_clicked" + #endif /* __EDC_CONF_H__ */ diff --git a/res/edje/page_indicator_unit.edc b/res/edje/page_indicator_unit.edc index 02b4412..c3248e8 100755 --- a/res/edje/page_indicator_unit.edc +++ b/res/edje/page_indicator_unit.edc @@ -103,6 +103,12 @@ collections { set_state(PART:"unit", "custom", 0.0); } } + program { + name: "unit,clicked"; + signal: "mouse,clicked,1"; + source: "unit"; + action: SIGNAL_EMIT SIGNAL_PAGE_INDICATOR_CLICKED SIGNAL_SOURCE; + } } } } \ No newline at end of file diff --git a/src/page_indicator.c b/src/page_indicator.c index 802327e..22acf60 100755 --- a/src/page_indicator.c +++ b/src/page_indicator.c @@ -24,6 +24,7 @@ static void __page_indicator_scroll_cb(void *data, Evas_Object *obj, void *event static void __page_indicator_scroll_anim_stop_cb(void *data, Evas_Object *obj, void *event_info); static void __page_indicator_set_current_page(page_indicator_t *page_indicator); static void __page_indicator_unit_rotate(Evas_Object *unit, double angle, double alpha); +static void __page_indicator_unit_clicked(void *data, Evas_Object *obj, const char *emission, const char *source); page_indicator_t * page_indictor_create(Evas_Object *scroller) { @@ -71,6 +72,8 @@ page_indicator_t * page_indictor_create(Evas_Object *scroller) evas_object_resize(rect, PAGE_INDICATOR_UNIT, PAGE_INDICATOR_UNIT); evas_object_show(rect); elm_object_part_content_set(page_indicator->unit[i], SIZE_SETTER, rect); + + elm_object_signal_callback_add(page_indicator->unit[i], SIGNAL_PAGE_INDICATOR_CLICKED, SIGNAL_SOURCE, __page_indicator_unit_clicked, page_indicator); } return page_indicator; @@ -130,33 +133,41 @@ void page_indicator_set_current_page(page_indicator_t *page_indicator, int page_ static void __page_indicator_scroll_cb(void *data, Evas_Object *obj, void *event_info) { + int i = 0; int x = 0; - int current_x = 0; - double angle = 0.0; - double color = 0.0; - int next_page = -1; + int from_x = 0, to_x = 0; + int from_page = 0; + int to_page = 0; + double from_page_angle = 0.0; + double to_page_angle = 0.0; page_indicator_t *page_indicator = (page_indicator_t*) data; - if (!page_indicator) { - LOGE("Invalid page_indicator"); - return; - } - elm_scroller_region_get(obj, &x, NULL, NULL, NULL); - current_x = page_indicator->current_page * page_indicator->w; - angle = (double)(x - current_x) / page_indicator->w * 90.0; - if (angle > 90.0) { - angle = (double)(x - page_indicator->w * page_indicator->page_count) / page_indicator->w * 90.0; - next_page = page_indicator->page_count - 1; - } else { - next_page = page_indicator->current_page + (angle > 0 ? 1 : -1); - next_page %= page_indicator->page_count; - } + elm_scroller_region_get(obj, &x, NULL, NULL, NULL); + from_page = x / page_indicator->w; + to_page = (from_page + 1) % page_indicator->page_count; + + from_x = x; + to_x = (from_x + page_indicator->w) % (page_indicator->w * page_indicator->page_count); + + to_page_angle = (double)(to_x - (to_page * page_indicator->w)) * 90.0 / page_indicator->w; + from_page_angle = (to_page_angle + 90) - 180; + + for (i=0; i < page_indicator->page_count; i++) { + double angle = 0.0; + double color = 0.0; + if (i == from_page) { + angle = from_page_angle; + } else if (i == to_page) { + angle = to_page_angle; + } else { + angle = 0.0; + } - color = fabs(angle) * 2; + color = fabs(angle) * 2 + 75.0; - __page_indicator_unit_rotate(page_indicator->unit[page_indicator->current_page], 90 + angle, 255.0 - color); - __page_indicator_unit_rotate(page_indicator->unit[next_page], (angle < 0 ? 360 + angle : angle), 75.0 + color); + __page_indicator_unit_rotate(page_indicator->unit[i], angle, color); + } } static void __page_indicator_scroll_anim_stop_cb(void *data, Evas_Object *obj, void *event_info) @@ -226,3 +237,16 @@ void page_indicator_hide(page_indicator_t *page_indicator) evas_object_hide(page_indicator->box); } +static void __page_indicator_unit_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + page_indicator_t *page_indicator = (page_indicator_t*) data; + Evas_Object *unit = obj; + int i; + for (i = 0; i < page_indicator->page_count && i < PAGE_INDICATOR_MAX_PAGE_COUNT; i++) { + if (unit == page_indicator->unit[i]) { + elm_scroller_page_bring_in(page_indicator->scroller, i, 0); + break; + } + } +} + -- 2.7.4 From 557cae32906657cac4079348d1f35dfecd59e7a5 Mon Sep 17 00:00:00 2001 From: junkyu han Date: Thu, 28 Jul 2016 15:58:00 +0900 Subject: [PATCH 16/16] Make page_indicator create page more than 7 Change-Id: Ieec40a91e44338e835507258ea1e3741095943ce --- inc/edc_conf.h | 14 ++- inc/page_indicator.h | 2 + res/edje/page_indicator_unit.edc | 157 +++++++++++++++++++++++++++-- res/images/page_indicator_center.png | Bin 0 -> 427 bytes src/page_indicator.c | 187 ++++++++++++++++++++++++++--------- 5 files changed, 296 insertions(+), 64 deletions(-) create mode 100755 res/images/page_indicator_center.png diff --git a/inc/edc_conf.h b/inc/edc_conf.h index 0a8d55b..bc14893 100755 --- a/inc/edc_conf.h +++ b/inc/edc_conf.h @@ -41,6 +41,7 @@ // cluster #define SIZE_SETTER "size_setter" +#define CENTER_UNIT_TEXT "center_unit_text" #define CLUSTER_BOX "cluster_box" #define CLUSTER_BG "cluster_bg" #define CLUSTER_ADD_PAGE "cluster_add_page" @@ -53,9 +54,11 @@ #define SIGNAL_CLUSTER_PICKUP_STATE "cluster_pickup_state" #define GROUP_PAGE_INDICATOR_UNIT "page_indicator_unit" -#define SIGNAL_PAGE_IDICATOR_ROTATION_CHANGE "rotation,changed" -#define SIGNAL_PAGE_IDICATOR_DEFAULT "default,set" -#define SIGNAL_PAGE_IDICATOR_CURRENT "current,set" +#define GROUP_PAGE_INDICATOR_UNIT_CENTER "page_indicator_unit_center" +#define SIGNAL_PAGE_INDICATOR_ROTATION_CHANGE "rotation,changed" +#define SIGNAL_PAGE_INDICATOR_DEFAULT "default,set" +#define SIGNAL_PAGE_INDICATOR_CURRENT "current,set" +#define SIGNAL_PAGE_INDICATOR_UNIT_CLICKED "page_indicator_unit_clicked" #define GROUP_CLUSTER_PAGE_LY "cluster_page_ly" #define GROUP_CLUSTER_ALLPAGE_LY "cluster_allpage_ly" @@ -73,6 +76,9 @@ #define SIGNAL_ALLPAGE_DRAG_BG_SHOW "allpage_drag_bg_show" #define SIGNAL_ALLPAGE_DRAG_BG_HIDE "allpage_drag_bg_hide" +#define PAGE_INDICATOR_UNIT_BUTTON "unit_button" +#define PAGE_INDICATOR_UNIT_INDICATING_PAGE "page_indicator_unit_indicating_page" + // apps view #define GROUP_APPS_LY "apps_ly" #define APPS_VIEW_BG "apps_view_bg" @@ -170,6 +176,4 @@ #define ADD_WIDGET_VIEWER_PREVIEW_ICON "add_widget_viewer_preview_ICON" #define SIGNAL_PREVIEW_CLICKED "preview_clicked" -#define SIGNAL_PAGE_INDICATOR_CLICKED "page_indicator_clicked" - #endif /* __EDC_CONF_H__ */ diff --git a/inc/page_indicator.h b/inc/page_indicator.h index bbfe4ed..70a09ce 100755 --- a/inc/page_indicator.h +++ b/inc/page_indicator.h @@ -21,6 +21,8 @@ #include #define PAGE_INDICATOR_MAX_PAGE_COUNT 7 +#define PAGE_INDICATOR_CENTER_PAGE_INDEX 3 + typedef struct { Evas_Object *scroller; diff --git a/res/edje/page_indicator_unit.edc b/res/edje/page_indicator_unit.edc index c3248e8..c0fe3e2 100755 --- a/res/edje/page_indicator_unit.edc +++ b/res/edje/page_indicator_unit.edc @@ -15,6 +15,12 @@ */ #include "../../inc/edc_conf.h" +styles { + style { + name: "page_indicator_style"; + base: "font=TIZEN:style=BOLD font_size=20 align=center color=#5D5D5D wrap=mixed"; + } +} collections { group { @@ -37,7 +43,8 @@ collections { } } parts { - part { name: SIZE_SETTER; + part { + name: SIZE_SETTER; type: SWALLOW; description { state: "default" 0.0; @@ -49,10 +56,10 @@ collections { part { name: "unit"; type: IMAGE; - description { state: "default" 0.0; color: 255 255 255 75; + fixed: 1 1; rel1{relative: 0.0 0.0; to:SIZE_SETTER;} rel2{relative: 1.0 1.0; to:SIZE_SETTER;} image { @@ -74,12 +81,24 @@ collections { } } } + part { + name: "over2"; + type: RECT; + repeat_events: 1; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + rel1{relative: 0.0 0.0; to:SIZE_SETTER;} + rel2{relative: 1.0 1.0; to:SIZE_SETTER;} + color: 0 0 0 0; + } + } } programs { program { name: "indice_set_default"; - signal: SIGNAL_PAGE_IDICATOR_DEFAULT; + signal: SIGNAL_PAGE_INDICATOR_DEFAULT; source: SIGNAL_SOURCE; action: STATE_SET "default" 0.0; target: "unit"; @@ -87,14 +106,14 @@ collections { program { name: "indice_set_current"; - signal: SIGNAL_PAGE_IDICATOR_CURRENT; + signal: SIGNAL_PAGE_INDICATOR_CURRENT; source: SIGNAL_SOURCE; action: STATE_SET "current" 0.0; target: "unit"; } program { name: "rotation,changed"; - signal: SIGNAL_PAGE_IDICATOR_ROTATION_CHANGE; + signal: SIGNAL_PAGE_INDICATOR_ROTATION_CHANGE; source: SIGNAL_SOURCE; script { custom_state(PART:"unit", "default", 0.0); @@ -104,11 +123,129 @@ collections { } } program { - name: "unit,clicked"; + name: "button_click"; signal: "mouse,clicked,1"; - source: "unit"; - action: SIGNAL_EMIT SIGNAL_PAGE_INDICATOR_CLICKED SIGNAL_SOURCE; + source: "over2"; + action: SIGNAL_EMIT SIGNAL_PAGE_INDICATOR_UNIT_CLICKED SIGNAL_SOURCE; } + } // programs + } + group { + name: GROUP_PAGE_INDICATOR_UNIT_CENTER; + data { + item: "focus_highlight" "on"; + } + images { + image: "page_indicator_center.png" COMP; } - } -} \ No newline at end of file + script { + public alpha; + + public message(Msg_Type:type, id, ...) { + if (type == MSG_FLOAT_SET) + { + set_float(alpha, getfarg(3)); + send_message(type, id, getfarg(3)); + } + } + } + parts { + part { + name: SIZE_SETTER; + type: SWALLOW; + description { + state: "default" 0.0; + align: 0 0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "unit"; + type: IMAGE; + description { + state: "default" 0.0; + color: 255 255 255 75; + rel1{relative: 0.0 0.0; to:SIZE_SETTER;} + rel2{relative: 1.0 1.0; to:SIZE_SETTER;} + image { + normal: "page_indicator_center.png"; + } + map { + on: 1; + perspective_on: 1; + smooth: 1; + alpha: 1; + } + } + description { + state: "current" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + image { + normal: "page_indicator_center.png"; + } + } + } + part { + name: "over2"; + type: RECT; + repeat_events: 1; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: CENTER_UNIT_TEXT; + type: TEXTBLOCK; + repeat_events: 1; + description { + state: "default" 0.0; + rel1{relative: 0.0 0.0; to: "unit";} + rel2{relative: 1.0 1.0; to: "unit";} + text { + style: "page_indicator_style"; + align: 0.5 0.5; + } + visible: 1; + } + } + } + programs { + program + { + name: "indice_set_default"; + signal: SIGNAL_PAGE_INDICATOR_DEFAULT; + source: SIGNAL_SOURCE; + action: STATE_SET "default" 0.0; + target: "unit"; + } + program + { + name: "indice_set_current"; + signal: SIGNAL_PAGE_INDICATOR_CURRENT; + source: SIGNAL_SOURCE; + action: STATE_SET "current" 0.0; + target: "unit"; + } + program { + name: "rotation,changed"; + signal: SIGNAL_PAGE_INDICATOR_ROTATION_CHANGE; + source: SIGNAL_SOURCE; + script { + custom_state(PART:"unit", "default", 0.0); + set_state_val(PART:"unit", STATE_COLOR, 255, 255, 255, round(get_float(alpha))); + set_state(PART:"unit", "custom", 0.0); + } + } + program { + name: "button_click"; + signal: "mouse,clicked,1"; + source: "over2"; + action: SIGNAL_EMIT SIGNAL_PAGE_INDICATOR_UNIT_CLICKED SIGNAL_SOURCE; + } + } // programs + }// group +} diff --git a/res/images/page_indicator_center.png b/res/images/page_indicator_center.png new file mode 100755 index 0000000000000000000000000000000000000000..3ad7d3d5d7f7c983c476d292800c66642392f276 GIT binary patch literal 427 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf>Hwb**Z=?j1DQbb_wU~j_OD;R zfFf`J6oi0RuU;i2BtY12-@XMho;`a8R0a|G_U#*l0VJP1c>-ZWWWRs^4%ExX#|Pvt zUcC6-yLYc&zXmD*ax*eAwr$(?;>C;2n>Rmy{(SZ7)uN)JKye^=`SK-%VPj(hWB}DK z?)bS0$g(I2@&h`b?bnCI?|Mv0Ea%guZwp*JCUfMj_P3nt-%p*sQ7lRdxusazIdd;KfCTdx2(@d%8G=RK)e3a1}aiAi(0#t7zmjVdhN7|Mihs z;eJn6#oReAmdX&e`<2Dl6HEsL+q+7$tjuPfQq?@}@mI#SYhI_@box = elm_box_add(homescreen_efl_get_win()); if (!page_indicator->box) { - LOGE("page_index->box==NULL"); + LOGE("page_index->box == NULL"); free(page_indicator); return NULL; } @@ -63,7 +64,7 @@ page_indicator_t * page_indictor_create(Evas_Object *scroller) page_indicator->unit[i] = elm_layout_add(homescreen_efl_get_win()); elm_layout_file_set(page_indicator->unit[i], edj_path, GROUP_PAGE_INDICATOR_UNIT); evas_object_size_hint_weight_set(page_indicator->unit[i], EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_resize(page_indicator->unit[i], PAGE_INDICATOR_UNIT, PAGE_INDICATOR_UNIT); + elm_object_signal_callback_add(page_indicator->unit[i], SIGNAL_PAGE_INDICATOR_UNIT_CLICKED, SIGNAL_SOURCE, __page_indicator_unit_clicked_cb, page_indicator); Evas_Object *rect = evas_object_rectangle_add(homescreen_efl_get_win()); evas_object_color_set(rect, 255, 255, 255, 0); @@ -72,8 +73,6 @@ page_indicator_t * page_indictor_create(Evas_Object *scroller) evas_object_resize(rect, PAGE_INDICATOR_UNIT, PAGE_INDICATOR_UNIT); evas_object_show(rect); elm_object_part_content_set(page_indicator->unit[i], SIZE_SETTER, rect); - - elm_object_signal_callback_add(page_indicator->unit[i], SIGNAL_PAGE_INDICATOR_CLICKED, SIGNAL_SOURCE, __page_indicator_unit_clicked, page_indicator); } return page_indicator; @@ -87,19 +86,43 @@ void page_indicator_set_page_count(page_indicator_t *page_indicator, int count) } int i; - int width = count * PAGE_INDICATOR_UNIT + (PAGE_INDICATOR_GAP * (count-1)); + int width = 0; + char edj_path[PATH_MAX] = {0, }; + + snprintf(edj_path, sizeof(edj_path), "%s", util_get_res_file_path(EDJE_DIR"/page_indicator_unit.edj")); + + if (count < PAGE_INDICATOR_MAX_PAGE_COUNT) { + width = count * PAGE_INDICATOR_UNIT + (PAGE_INDICATOR_GAP * (count-1)); + } + else { + width = PAGE_INDICATOR_MAX_PAGE_COUNT * PAGE_INDICATOR_UNIT + (PAGE_INDICATOR_GAP * (PAGE_INDICATOR_MAX_PAGE_COUNT - 1)); + } if (page_indicator->page_count == count) { return ; } elm_box_unpack_all(page_indicator->box); - for (i = 0 ; i < PAGE_INDICATOR_MAX_PAGE_COUNT; i++) { - if (i < count) { + LOGD("page count: %d", count); + + if (count > PAGE_INDICATOR_MAX_PAGE_COUNT) { + for (i = 0 ; i < PAGE_INDICATOR_MAX_PAGE_COUNT; i++) { + if (i == PAGE_INDICATOR_CENTER_PAGE_INDEX) { + elm_layout_file_set(page_indicator->unit[i], edj_path, GROUP_PAGE_INDICATOR_UNIT_CENTER); + } elm_box_pack_end(page_indicator->box, page_indicator->unit[i]); evas_object_show(page_indicator->unit[i]); - } else { - evas_object_move(page_indicator->unit[i], 0, -100); } - + } else { + for (i = 0 ; i < PAGE_INDICATOR_MAX_PAGE_COUNT; i++) { + if (i < count) { + if (i == PAGE_INDICATOR_CENTER_PAGE_INDEX) { + elm_layout_file_set(page_indicator->unit[i], edj_path, GROUP_PAGE_INDICATOR_UNIT); + } + elm_box_pack_end(page_indicator->box, page_indicator->unit[i]); + evas_object_show(page_indicator->unit[i]); + } else { + evas_object_move(page_indicator->unit[i], 0, -100); + } + } } page_indicator->x = (WINDOW_W - width) / 2; @@ -108,6 +131,8 @@ void page_indicator_set_page_count(page_indicator_t *page_indicator, int count) evas_object_resize(page_indicator->box, width, PAGE_INDICATOR_H); evas_object_move(page_indicator->box, page_indicator->x, page_indicator->y); + + __page_indicator_set_current_page(page_indicator); } void page_indicator_scroller_resize(page_indicator_t *page_indicator, int width, int height) @@ -124,48 +149,84 @@ void page_indicator_set_current_page(page_indicator_t *page_indicator, int page_ return ; } - LOGD("Set Current :%d, old : %d", page_number, page_indicator->current_page); - page_indicator->current_page = page_number; __page_indicator_set_current_page(page_indicator); } +static int __page_indicator_get_indicator_unit(int page_count, int page) +{ + int indicator = 0; + LOGD("Page count : %d, page index: %d", page_count, page); + + if (page_count > PAGE_INDICATOR_MAX_PAGE_COUNT) { + int center_left = PAGE_INDICATOR_CENTER_PAGE_INDEX; + int center_right = page_count - 1 - PAGE_INDICATOR_CENTER_PAGE_INDEX; + + if (page < center_left) { + indicator = page; + } + else if (page >= center_left && page <= center_right) { + indicator = PAGE_INDICATOR_CENTER_PAGE_INDEX; + } + else { + indicator = page - center_right + PAGE_INDICATOR_CENTER_PAGE_INDEX; + } + } + else { + indicator = page; + } + + return indicator; +} + static void __page_indicator_scroll_cb(void *data, Evas_Object *obj, void *event_info) { int i = 0; int x = 0; - int from_x = 0, to_x = 0; - int from_page = 0; - int to_page = 0; - double from_page_angle = 0.0; - double to_page_angle = 0.0; + int max_unit_count = 0; + double cur_unit_angle = 0.0; + double next_unit_angle = 0.0; + int cur_indicator_unit = -1; + int next_indicator_unit = -1; + int cur_page = 0, next_page = 0; + int cur_x = 0, next_x = 0; page_indicator_t *page_indicator = (page_indicator_t*) data; + if (!page_indicator) { + LOGE("Invalid page_indicator"); + return; + } elm_scroller_region_get(obj, &x, NULL, NULL, NULL); - from_page = x / page_indicator->w; - to_page = (from_page + 1) % page_indicator->page_count; - from_x = x; - to_x = (from_x + page_indicator->w) % (page_indicator->w * page_indicator->page_count); + cur_page = x / page_indicator->w; + next_page = (cur_page + 1) % page_indicator->page_count; - to_page_angle = (double)(to_x - (to_page * page_indicator->w)) * 90.0 / page_indicator->w; - from_page_angle = (to_page_angle + 90) - 180; + cur_indicator_unit = __page_indicator_get_indicator_unit(page_indicator->page_count, cur_page); + next_indicator_unit = __page_indicator_get_indicator_unit(page_indicator->page_count, next_page); - for (i=0; i < page_indicator->page_count; i++) { + cur_x = x; + next_x = (cur_x + page_indicator->w) % (page_indicator->w * page_indicator->page_count); + + next_unit_angle = (double)(next_x - next_page * page_indicator->w) / page_indicator->w * 90.0; + cur_unit_angle = (next_unit_angle + 90) - 180; + + max_unit_count = page_indicator->page_count < PAGE_INDICATOR_MAX_PAGE_COUNT ? page_indicator->page_count : PAGE_INDICATOR_MAX_PAGE_COUNT; + for (i = 0; i < max_unit_count; i++) + { double angle = 0.0; double color = 0.0; - if (i == from_page) { - angle = from_page_angle; - } else if (i == to_page) { - angle = to_page_angle; + + if (i == cur_indicator_unit) { + angle = cur_unit_angle; + } else if (i == next_indicator_unit) { + angle = next_unit_angle; } else { angle = 0.0; } color = fabs(angle) * 2 + 75.0; - __page_indicator_unit_rotate(page_indicator->unit[i], angle, color); } } @@ -188,16 +249,57 @@ static void __page_indicator_scroll_anim_stop_cb(void *data, Evas_Object *obj, v static void __page_indicator_set_current_page(page_indicator_t *page_indicator) { int i; - for (i = 0; i < page_indicator->page_count && i < PAGE_INDICATOR_MAX_PAGE_COUNT; i++) { + int cur_indicator_unit = 0; + char cur_page_num[1024]; + + cur_indicator_unit = __page_indicator_get_indicator_unit(page_indicator->page_count, page_indicator->current_page); + + for (i = 0; i < PAGE_INDICATOR_MAX_PAGE_COUNT; i++) + { Evas_Object *edje = NULL; edje = elm_layout_edje_get(page_indicator->unit[i]); - if (i == page_indicator->current_page) { - edje_object_signal_emit(edje, SIGNAL_PAGE_IDICATOR_CURRENT, SIGNAL_SOURCE); + snprintf(cur_page_num, sizeof(cur_page_num), "%d", page_indicator->current_page + 1); + LOGD("Current page is %s, set the number to the page indicator", cur_page_num); + + if (i == cur_indicator_unit) { + edje_object_signal_emit(edje, SIGNAL_PAGE_INDICATOR_CURRENT, SIGNAL_SOURCE); } - //else if { } // i == center_circle else { - edje_object_signal_emit(edje, SIGNAL_PAGE_IDICATOR_DEFAULT, SIGNAL_SOURCE); + edje_object_signal_emit(edje, SIGNAL_PAGE_INDICATOR_DEFAULT, SIGNAL_SOURCE); + } + + if (edje_object_part_text_set(elm_layout_edje_get(page_indicator->unit[PAGE_INDICATOR_CENTER_PAGE_INDEX]), CENTER_UNIT_TEXT, cur_page_num) == EINA_FALSE) { + LOGE("Failed to set text on the page indicator"); + } + } +} + +static void __page_indicator_unit_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + unsigned int clicked_indicator_unit = 0; + Evas_Object *page_indicator_unit = NULL; + page_indicator_t *page_indicator = data; + Evas_Object *unit = obj; + int i; + + for (i = 0; i < page_indicator->page_count && i < PAGE_INDICATOR_MAX_PAGE_COUNT; i++) { + if (unit == page_indicator->unit[i]) { + clicked_indicator_unit = i; + break; + } + } + LOGD("UNIT CLICKED : %dth", clicked_indicator_unit); + + if (page_indicator->page_count > PAGE_INDICATOR_MAX_PAGE_COUNT) { + if (clicked_indicator_unit < PAGE_INDICATOR_CENTER_PAGE_INDEX) { + elm_scroller_page_bring_in(page_indicator->scroller, clicked_indicator_unit, 0); + } else if (clicked_indicator_unit == PAGE_INDICATOR_CENTER_PAGE_INDEX) { + elm_scroller_page_bring_in(page_indicator->scroller, page_indicator->page_count / 2, 0); + } else { + elm_scroller_page_bring_in(page_indicator->scroller, (page_indicator->page_count - PAGE_INDICATOR_MAX_PAGE_COUNT + clicked_indicator_unit), 0); } + } else { + elm_scroller_page_bring_in(page_indicator->scroller, clicked_indicator_unit, 0); } } @@ -222,7 +324,7 @@ static void __page_indicator_unit_rotate(Evas_Object *unit, double angle, double msg->val[1] = alpha; edje_object_message_send(edje, EDJE_MESSAGE_FLOAT_SET, 1, msg); - edje_object_signal_emit(edje, SIGNAL_PAGE_IDICATOR_ROTATION_CHANGE, SIGNAL_SOURCE); + edje_object_signal_emit(edje, SIGNAL_PAGE_INDICATOR_ROTATION_CHANGE, SIGNAL_SOURCE); free(msg); } @@ -237,16 +339,3 @@ void page_indicator_hide(page_indicator_t *page_indicator) evas_object_hide(page_indicator->box); } -static void __page_indicator_unit_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - page_indicator_t *page_indicator = (page_indicator_t*) data; - Evas_Object *unit = obj; - int i; - for (i = 0; i < page_indicator->page_count && i < PAGE_INDICATOR_MAX_PAGE_COUNT; i++) { - if (unit == page_indicator->unit[i]) { - elm_scroller_page_bring_in(page_indicator->scroller, i, 0); - break; - } - } -} - -- 2.7.4