From 67f75a79184374379cc1c1a5cb0b54828d4d3ac7 Mon Sep 17 00:00:00 2001 From: Semun Lee Date: Tue, 22 Aug 2017 12:30:42 +0900 Subject: [PATCH 01/16] Refine toolkit remove logic Change-Id: I43d5be327d3f9ebc19ad19a84b7687b5e365265d Signed-off-by: Semun Lee --- watch-control/src/control.c | 9 ++++--- widget_viewer_evas/src/widget_viewer_evas.c | 38 +++++++++++++++++++---------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/watch-control/src/control.c b/watch-control/src/control.c index 4a12577..da3eeb0 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -414,6 +414,10 @@ API int watch_manager_set_resource_id(int resource_id) _E("Fail screen_connector_toolkit_evas_add_by_rid"); return -1; } + + if (__rid_toolkit) + screen_connector_toolkit_evas_remove(__rid_toolkit); + __rid_toolkit = handle; if (__watch_appid) { @@ -902,7 +906,6 @@ static int __launch_signal_handler(const char *endpoint, char *viewer = NULL; char *pid_str = NULL; screen_connector_toolkit_evas_ops ops; - bool exist; bundle_get_str(envelope, AUL_K_WIDGET_VIEWER, &viewer); if (viewer == NULL) @@ -920,9 +923,7 @@ static int __launch_signal_handler(const char *endpoint, _D("cur appid(%s), new appid(%s), pid(%s)", __watch_appid, appid, pid_str); - exist = screen_connector_toolkit_is_exist(appid, - SCREEN_CONNECTOR_SCREEEN_TYPE_WATCH); - if (exist) + if (__toolkit) screen_connector_toolkit_evas_remove(__toolkit); ops.added_cb = __screen_connector_toolkit_evas_added_cb; diff --git a/widget_viewer_evas/src/widget_viewer_evas.c b/widget_viewer_evas/src/widget_viewer_evas.c index 4a84519..1072ad7 100644 --- a/widget_viewer_evas/src/widget_viewer_evas.c +++ b/widget_viewer_evas/src/widget_viewer_evas.c @@ -523,7 +523,6 @@ static int __restart_terminated_widget(const char *widget_id) struct widget_info *widget_instance_info; int w, h; int target_pid = 0; - screen_connector_toolkit_evas_h toolkit_h; g_hash_table_iter_init(&iter, s_info.widget_table); while (g_hash_table_iter_next(&iter, &key, &value)) { @@ -552,10 +551,16 @@ static int __restart_terminated_widget(const char *widget_id) ops.removed_cb = __screen_connector_toolkit_evas_removed_cb; ops.updated_cb = __screen_connector_toolkit_evas_updated_cb; - toolkit_h = screen_connector_toolkit_evas_add(&ops, widget_instance_info->instance_id, - SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, widget_instance_info); - if (toolkit_h != NULL) - widget_instance_info->toolkit_h = toolkit_h; + if (widget_instance_info->toolkit_h) { + screen_connector_toolkit_evas_remove(widget_instance_info->toolkit_h); + widget_instance_info->toolkit_h = NULL; + } + + widget_instance_info->toolkit_h = screen_connector_toolkit_evas_add(&ops, + widget_instance_info->instance_id, + SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, + widget_instance_info); + widget_instance_info->pid = widget_instance_launch(widget_instance_info->instance_id, widget_instance_info->content_info, w, h); widget_instance_info->restart = false; } @@ -953,7 +958,6 @@ static void resize_cb(void *data, Evas *e, Evas_Object *layout, void *event_info widget_size_type_e size_type; screen_connector_toolkit_evas_ops ops; struct pending_item *item; - screen_connector_toolkit_evas_h toolkit_h; evas_object_geometry_get(layout, &x, &y, &w, &h); if (info->pid == 0) { @@ -983,10 +987,15 @@ static void resize_cb(void *data, Evas *e, Evas_Object *layout, void *event_info ops.added_cb = __screen_connector_toolkit_evas_added_cb; ops.removed_cb = __screen_connector_toolkit_evas_removed_cb; ops.updated_cb = __screen_connector_toolkit_evas_updated_cb; - toolkit_h = screen_connector_toolkit_evas_add(&ops, info->instance_id, SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, info); - if (toolkit_h != NULL) - info->toolkit_h = toolkit_h; + if (info->toolkit_h) { + screen_connector_toolkit_evas_remove(info->toolkit_h); + info->toolkit_h = NULL; + } + + info->toolkit_h = screen_connector_toolkit_evas_add(&ops, info->instance_id, SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, info); + + LOGW("launch a widget instance: %s", info->instance_id); info->pid = widget_instance_launch(info->instance_id, info->content_info, w, h); if (info->pid < 0) { struct widget_evas_event_info event_info; @@ -1647,7 +1656,6 @@ EAPI void widget_viewer_evas_activate_faulted_widget(Evas_Object *widget) { struct widget_info *info; screen_connector_toolkit_evas_ops ops; - screen_connector_toolkit_evas_h toolkit_h; if (!is_widget_feature_enabled()) { set_last_result(WIDGET_ERROR_NOT_SUPPORTED); @@ -1692,9 +1700,13 @@ EAPI void widget_viewer_evas_activate_faulted_widget(Evas_Object *widget) ops.added_cb = __screen_connector_toolkit_evas_added_cb; ops.removed_cb = __screen_connector_toolkit_evas_removed_cb; ops.updated_cb = __screen_connector_toolkit_evas_updated_cb; - toolkit_h = screen_connector_toolkit_evas_add(&ops, info->instance_id, SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, info); - if (toolkit_h) - info->toolkit_h = toolkit_h; + + if (info->toolkit_h) { + screen_connector_toolkit_evas_remove(info->toolkit_h); + info->toolkit_h = NULL; + } + + info->toolkit_h = screen_connector_toolkit_evas_add(&ops, info->instance_id, SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, info); info->is_faulted = false; info->pid = widget_instance_launch(info->instance_id, info->content_info, w, h); if (info->pid < 0) { -- 2.7.4 From 2d2aeb5b153693f96b0a4df3ccf0ca8310a39654 Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Mon, 21 Aug 2017 22:30:31 +0900 Subject: [PATCH 02/16] Call pre resume tick for bind watch Change-Id: I9ba8b8afb24a5e6dc07e153bf3b3bdeca9cc585c Signed-off-by: Hyunho Kang --- watch-control/src/control.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/watch-control/src/control.c b/watch-control/src/control.c index da3eeb0..c93e73b 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -158,7 +158,12 @@ static void __manual_render_start(void) Evas *cur_image = evas_object_data_get(__win, "tbm,watch"); if (__is_bound) { - LOGW("watch is bound cannot manual render"); + LOGW("watch is bound cannot manual render just call tick"); + __change_viewer_visibility(AUL_SCREEN_STATUS_PRE_RESUME, false); + if (cur_image) + screen_connector_toolkit_evas_send_visibility(cur_image, + VISIBILITY_TYPE_UNOBSCURED); + return; } @@ -167,9 +172,8 @@ static void __manual_render_start(void) return; } - __change_viewer_visibility(AUL_SCREEN_STATUS_PRE_RESUME, false); ecore_evas_manual_render_set(ee, EINA_TRUE); - + __change_viewer_visibility(AUL_SCREEN_STATUS_PRE_RESUME, false); if (cur_image) screen_connector_toolkit_evas_send_visibility(cur_image, VISIBILITY_TYPE_UNOBSCURED); -- 2.7.4 From fdfda5db6830df3c7b365ae48863cf7a91e44ae4 Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Tue, 22 Aug 2017 22:35:18 +0900 Subject: [PATCH 03/16] Set default watch when sdk try to launch current watch Change-Id: I2f5bf956256023ecf58cce0f37897cd157311119 Signed-off-by: Hyunho Kang --- widget_viewer_sdk/src/main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/widget_viewer_sdk/src/main.c b/widget_viewer_sdk/src/main.c index a1a17d6..270a030 100644 --- a/widget_viewer_sdk/src/main.c +++ b/widget_viewer_sdk/src/main.c @@ -55,6 +55,7 @@ int errno; #define SDK_DEBUG "DEBUG" #define SDK_VALGRIND "VALGRIND" #define LAZY_LOADER "__LAZY_LOADER__" +#define DEFAULT_WATCH "org.tizen.idle-clock-digital" typedef struct _widget_info { char *widget_id; @@ -729,6 +730,7 @@ static void _app_control(app_control_h service, void *data) char **widget_id_arr; char *operation = NULL; int i; + char *cur_watch = NULL; app_control_get_extra_data(service, WIDGET_APPID, &widget_id); if (widget_id) { @@ -741,6 +743,14 @@ static void _app_control(app_control_h service, void *data) } if (app_type != NULL && strcmp(app_type, "watchapp") == 0) { + + cur_watch = vconf_get_str(VCONFKEY_WMS_CLOCKS_SET_IDLE); + if (cur_watch != NULL && widget_id != NULL + && strcmp(cur_watch, widget_id) == 0) { + vconf_set_str(VCONFKEY_WMS_CLOCKS_SET_IDLE, + DEFAULT_WATCH); + } + evas_object_resize(s_info.win, s_info.w, s_info.h); watch_manager_init(s_info.win); evas_object_smart_callback_add(s_info.win, WATCH_SMART_SIGNAL_ADDED, __watch_added, NULL); -- 2.7.4 From dfaad462ffe11064b0c66b9196045a1d9d130e53 Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Wed, 23 Aug 2017 20:06:05 +0900 Subject: [PATCH 04/16] Set rid handle null when toolkit destroyed Change-Id: I89e5b6b3967878a63002e45ab7dd2a4e1bf66d78 Signed-off-by: Hyunho Kang --- watch-control/src/control.c | 1 + 1 file changed, 1 insertion(+) diff --git a/watch-control/src/control.c b/watch-control/src/control.c index c93e73b..cd15248 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -387,6 +387,7 @@ static void __screen_connector_toolkit_evas_removed_cb(const char *appid, const if (cur_image == image) { evas_object_data_set(__win, "tbm,watch", NULL); __toolkit = NULL; + __rid_toolkit = NULL; __is_bound = false; } } -- 2.7.4 From 41a3ae2f8eb925b8e5b529eeb789e8582ddce53d Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Thu, 24 Aug 2017 10:04:16 +0900 Subject: [PATCH 05/16] Fix toolkit resource leak Change-Id: Id68e04a54570854167b7b359dc199f069d5f9830 Signed-off-by: Hyunho Kang --- watch-control/src/control.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/watch-control/src/control.c b/watch-control/src/control.c index cd15248..26be150 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -386,6 +386,10 @@ static void __screen_connector_toolkit_evas_removed_cb(const char *appid, const cur_image = evas_object_data_get(__win, "tbm,watch"); if (cur_image == image) { evas_object_data_set(__win, "tbm,watch", NULL); + if (__toolkit) + screen_connector_toolkit_evas_remove(__toolkit); + if (__rid_toolkit) + screen_connector_toolkit_evas_remove(__rid_toolkit); __toolkit = NULL; __rid_toolkit = NULL; __is_bound = false; @@ -435,6 +439,7 @@ API int watch_manager_set_resource_id(int resource_id) if (ret != AUL_R_OK) { _E("Fail to get appid of %d", resource_id); screen_connector_toolkit_evas_remove(handle); + __rid_toolkit = NULL; return -1; } _D("appid(%s), rid(%d)", __watch_appid, resource_id); -- 2.7.4 From a0063ba8c5f17db2a7d19c2e1f15c60611db229c Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Thu, 24 Aug 2017 16:53:15 +0900 Subject: [PATCH 06/16] Remove old default watch declaration Change-Id: Ifc386224043c2dbdbb1c6bf844217b8bb99f62e4 Signed-off-by: Hyunho Kang --- widget_viewer_sdk/src/main.c | 1 - 1 file changed, 1 deletion(-) diff --git a/widget_viewer_sdk/src/main.c b/widget_viewer_sdk/src/main.c index 270a030..3804fb7 100644 --- a/widget_viewer_sdk/src/main.c +++ b/widget_viewer_sdk/src/main.c @@ -42,7 +42,6 @@ int errno; #define ERR_BUFFER_SIZE 1024 #define WATCH_CATEGORY "http://tizen.org/category/wearable_clock" -#define DEFAULT_WATCH "org.tizen.digitalclock" #define LAZY_WATCH_TIME 3.0f #define CR 13 #define LF 10 -- 2.7.4 From 9479ef88ec83738986fb9a3a36bfc1af972a8c38 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 28 Aug 2017 08:16:27 +0900 Subject: [PATCH 07/16] Fix setting watch control The type of the bundle data can be an array. Change-Id: I9ea154e5f1b26ab0d4b667ef21bff856d5e78951 Signed-off-by: Hwankyu Jhun --- widget_viewer_sdk/src/main.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/widget_viewer_sdk/src/main.c b/widget_viewer_sdk/src/main.c index 3804fb7..ba6af3e 100644 --- a/widget_viewer_sdk/src/main.c +++ b/widget_viewer_sdk/src/main.c @@ -655,10 +655,26 @@ static void _run_widget(char *widget_id, app_control_h service, char *lazy_loade } } +static void __copy_bundle(bundle *src_b, bundle *dst_b, const char *key) +{ + const char **str_arr; + char *str = NULL; + int len = 0; + + if (bundle_get_type(src_b, key) == BUNDLE_TYPE_STR_ARRAY) { + str_arr = bundle_get_str_array(src_b, key, &len); + if (str_arr) + bundle_add_str_array(dst_b, key, str_arr, len); + } else { + bundle_get_str(src_b, key, &str); + if (str) + bundle_add_str(dst_b, key, str); + } +} + static void __set_bundle_for_watchapp(bundle *app_control_b, bundle *b) { char *sdk_util = NULL; - char *sdk_util_arg = NULL; char *value = NULL; char buf[32]; @@ -701,16 +717,12 @@ static void __set_bundle_for_watchapp(bundle *app_control_b, bundle *b) bundle_get_str(app_control_b, AUL_K_SDK, &sdk_util); if (sdk_util != NULL) { bundle_add_str(b, AUL_K_SDK, sdk_util); - if (strcmp(sdk_util, SDK_VALGRIND) == 0) { - bundle_get_str(app_control_b, DLP_K_VALGRIND_ARG, &sdk_util_arg); - if (sdk_util_arg) - bundle_add_str(b, DLP_K_VALGRIND_ARG, sdk_util_arg); - } else if (strcmp(sdk_util, SDK_DEBUG) == 0) { - bundle_get_str(app_control_b, DLP_K_DEBUG_ARG, &sdk_util_arg); - if (sdk_util_arg) - bundle_add_str(b, DLP_K_DEBUG_ARG, sdk_util_arg); - } - DbgPrint("util %s arg %s", sdk_util, sdk_util_arg); + if (strcmp(sdk_util, SDK_VALGRIND) == 0) + __copy_bundle(app_control_b, b, DLP_K_VALGRIND_ARG); + else if (strcmp(sdk_util, SDK_DEBUG) == 0) + __copy_bundle(app_control_b, b, DLP_K_DEBUG_ARG); + + DbgPrint("util %s", sdk_util); } } -- 2.7.4 From 01f24eaea325535f16831bb2d8a3da4559fdb89c Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Fri, 25 Aug 2017 20:40:22 +0900 Subject: [PATCH 08/16] Exit sdk viewer when system use same watch Change-Id: I0979c259fbfae9a1cac2bf5a54a21eb3077703bb Signed-off-by: Hyunho Kang --- widget_viewer_sdk/src/main.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/widget_viewer_sdk/src/main.c b/widget_viewer_sdk/src/main.c index ba6af3e..9052897 100644 --- a/widget_viewer_sdk/src/main.c +++ b/widget_viewer_sdk/src/main.c @@ -101,6 +101,9 @@ static struct info { #define LONG_PRESS 1.0f #define CONF_FNAME "/etc/widget_viewer_sdk.conf" +static char *__watch_appid; +static Evas_Object *__clock; + static void back_key_cb(void *data, Evas_Object *obj, void *event_info) { ui_app_exit(); @@ -261,12 +264,12 @@ static void layout_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info static void __watch_added(void *data, Evas_Object *obj, void *event_info) { LOGD("watch added"); - Evas_Object *clock = (Evas_Object *)event_info; + __clock = (Evas_Object *)event_info; evas_object_resize(s_info.win, s_info.w, s_info.h); - evas_object_resize(clock, s_info.w, s_info.h); + evas_object_resize(__clock, s_info.w, s_info.h); - evas_object_show(clock); + evas_object_show(__clock); evas_object_show(s_info.win); } @@ -275,6 +278,18 @@ static void __watch_removed(void *data, Evas_Object *obj, void *event_info) LOGD("watch removed"); } +void __clock_vconf_cb(keynode_t *node, void *data) +{ + char *cur_watch = vconf_get_str(VCONFKEY_WMS_CLOCKS_SET_IDLE); + + LOGD("watch now %s, changed %s", __watch_appid, cur_watch); + if (cur_watch != NULL && __watch_appid != NULL + && strcmp(cur_watch, __watch_appid) == 0) { + ui_app_exit(); + LOGW("same watch displayed on the other viewer EXIT"); + } +} + static bool app_create(void *data) { @@ -357,6 +372,7 @@ static bool app_create(void *data) eext_object_event_callback_add(s_info.win, EEXT_CALLBACK_BACK, back_key_cb, NULL); evas_object_show(s_info.win); + vconf_notify_key_changed(VCONFKEY_WMS_CLOCKS_SET_IDLE, __clock_vconf_cb, NULL); return true; } @@ -756,10 +772,15 @@ static void _app_control(app_control_h service, void *data) if (app_type != NULL && strcmp(app_type, "watchapp") == 0) { cur_watch = vconf_get_str(VCONFKEY_WMS_CLOCKS_SET_IDLE); - if (cur_watch != NULL && widget_id != NULL - && strcmp(cur_watch, widget_id) == 0) { - vconf_set_str(VCONFKEY_WMS_CLOCKS_SET_IDLE, - DEFAULT_WATCH); + if (widget_id != NULL) { + if (cur_watch != NULL && + strcmp(cur_watch, widget_id) == 0) { + vconf_set_str(VCONFKEY_WMS_CLOCKS_SET_IDLE, + DEFAULT_WATCH); + } + if (__watch_appid) + free(__watch_appid); + __watch_appid = strdup(widget_id); } evas_object_resize(s_info.win, s_info.w, s_info.h); -- 2.7.4 From a3357f1f6bc869db5bb36f94bb7ccc90c1769a94 Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Thu, 31 Aug 2017 19:23:02 +0900 Subject: [PATCH 09/16] Handling fault retry launch fail Change-Id: I630203327585991dd025ae900610db190c9048a0 Signed-off-by: Hyunho Kang --- widget_viewer_evas/src/widget_viewer_evas.c | 1 + 1 file changed, 1 insertion(+) diff --git a/widget_viewer_evas/src/widget_viewer_evas.c b/widget_viewer_evas/src/widget_viewer_evas.c index 1072ad7..f09903a 100644 --- a/widget_viewer_evas/src/widget_viewer_evas.c +++ b/widget_viewer_evas/src/widget_viewer_evas.c @@ -1716,6 +1716,7 @@ EAPI void widget_viewer_evas_activate_faulted_widget(Evas_Object *widget) event_info.event = WIDGET_EVENT_CREATED; smart_callback_call(info->layout, WIDGET_SMART_SIGNAL_WIDGET_CREATE_ABORTED, &event_info); + __display_overlay_text(info); return; } -- 2.7.4 From 1029304c80bf7f09dc2e44338ab34d4fd896860c Mon Sep 17 00:00:00 2001 From: Jaeho Lee Date: Sun, 3 Sep 2017 17:38:38 +0900 Subject: [PATCH 10/16] Fix black screen issue - The buffer for watch should be released after the new watch app was added Change-Id: Ie54e863cab495e672731fa3550eeb98237818a22 Signed-off-by: Junghoon Park --- watch-control/src/control.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/watch-control/src/control.c b/watch-control/src/control.c index 26be150..cb0e3fc 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -65,6 +65,7 @@ static int __default_width; static int __default_height; static screen_connector_toolkit_evas_h __toolkit; static screen_connector_toolkit_evas_h __rid_toolkit; +static screen_connector_toolkit_evas_h __tmp_toolkit; static Evas_Object *__win; static char *__watch_appid; @@ -394,6 +395,11 @@ static void __screen_connector_toolkit_evas_removed_cb(const char *appid, const __rid_toolkit = NULL; __is_bound = false; } + + if (__tmp_toolkit) { + screen_connector_toolkit_evas_remove(__tmp_toolkit); + __tmp_toolkit = NULL; + } } static void __screen_connector_toolkit_evas_updated_cb( @@ -916,6 +922,7 @@ static int __launch_signal_handler(const char *endpoint, char *viewer = NULL; char *pid_str = NULL; screen_connector_toolkit_evas_ops ops; + bool exist; bundle_get_str(envelope, AUL_K_WIDGET_VIEWER, &viewer); if (viewer == NULL) @@ -933,8 +940,15 @@ static int __launch_signal_handler(const char *endpoint, _D("cur appid(%s), new appid(%s), pid(%s)", __watch_appid, appid, pid_str); - if (__toolkit) + exist = screen_connector_toolkit_is_exist(appid, + SCREEN_CONNECTOR_SCREEEN_TYPE_WATCH); + + if (exist) { screen_connector_toolkit_evas_remove(__toolkit); + } else { + __tmp_toolkit = __toolkit; + _D("Old toolkit %p", __tmp_toolkit); + } ops.added_cb = __screen_connector_toolkit_evas_added_cb; ops.removed_cb = __screen_connector_toolkit_evas_removed_cb; -- 2.7.4 From d98aea8e70bbf4912b0c83ec2fd4a03e5230b886 Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Tue, 22 Aug 2017 14:46:57 +0900 Subject: [PATCH 11/16] Add add by rid buffer event ON/OFF APIs - watch_manager_enable_buffer_update - watch_manager_disable_buffer_update Change-Id: Ibab8221b16277832881426a6ec5834c2843f3552 Signed-off-by: Hyunho Kang --- watch-control/include/watch_control.h | 2 + watch-control/src/control.c | 77 +++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/watch-control/include/watch_control.h b/watch-control/include/watch_control.h index 735a2dc..7e680db 100644 --- a/watch-control/include/watch_control.h +++ b/watch-control/include/watch_control.h @@ -40,6 +40,8 @@ extern int watch_manager_fini(); extern int watch_manager_get_app_control(const char *app_id, app_control_h *app_control); extern int watch_manager_send_terminate(Evas_Object *watch); extern int watch_policy_set_size_hint(watch_policy_size_hint hint); +extern int watch_manager_enable_buffer_update(void); +extern int watch_manager_disable_buffer_update(void); extern int watch_manager_set_resource_id(int resource_id); extern int watch_manager_get_resource_id(Evas_Object *watch, int *resource_id); extern int watch_manager_add_dead_signal_listener(watch_dead_signal_cb cb, void *data); diff --git a/watch-control/src/control.c b/watch-control/src/control.c index cb0e3fc..1e5ec98 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -414,6 +414,74 @@ static void __screen_connector_toolkit_evas_updated_cb( LOGI("updated"); } +API int watch_manager_enable_buffer_update(void) +{ + int ret; + + if (__rid_toolkit == NULL && __toolkit == NULL) { + _E("cannot find toolkit"); + return -1; + } + + if (__rid_toolkit) { + ret = screen_connector_toolkit_evas_set_changed_event_filter( + __rid_toolkit, + SCREEN_CONNECTOR_EVAS_CHANGED_EVENT_FILTER_NONE); + if (ret != 0) { + _E("fail to set filter"); + return ret; + } + + } + + if (__toolkit) { + ret = screen_connector_toolkit_evas_set_changed_event_filter( + __toolkit, + SCREEN_CONNECTOR_EVAS_CHANGED_EVENT_FILTER_NONE); + if (ret != 0) { + _E("fail to set filter"); + return ret; + } + + } + + return 0; +} + +API int watch_manager_disable_buffer_update(void) +{ + int ret; + + if (__rid_toolkit == NULL && __toolkit == NULL) { + _E("cannot find toolkit"); + return -1; + } + + if (__rid_toolkit) { + ret = screen_connector_toolkit_evas_set_changed_event_filter( + __rid_toolkit, + SCREEN_CONNECTOR_EVAS_CHANGED_EVENT_FILTER_ALL); + if (ret != 0) { + _E("fail to set filter"); + return ret; + } + + } + + if (__toolkit) { + ret = screen_connector_toolkit_evas_set_changed_event_filter( + __toolkit, + SCREEN_CONNECTOR_EVAS_CHANGED_EVENT_FILTER_ALL); + if (ret != 0) { + _E("fail to set filter"); + return ret; + } + + } + + return 0; +} + API int watch_manager_set_resource_id(int resource_id) { screen_connector_toolkit_evas_ops ops; @@ -448,6 +516,15 @@ API int watch_manager_set_resource_id(int resource_id) __rid_toolkit = NULL; return -1; } + + /* + * Disable all buffer event for add by rid toolkit + * Buffer event should be enabled with watch_manager_enable_resource_id + */ + screen_connector_toolkit_evas_set_changed_event_filter( + __rid_toolkit, + SCREEN_CONNECTOR_EVAS_CHANGED_EVENT_FILTER_ALL); + _D("appid(%s), rid(%d)", __watch_appid, resource_id); return 0; -- 2.7.4 From 6d4373f90803555625e4e268316590bc204e3a3f Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Tue, 29 Aug 2017 14:40:33 +0900 Subject: [PATCH 12/16] Remove rid viewer default filter It's viewer application's role. Change-Id: If5f2da20adb78865506fdd02b85be3085c6042e7 Signed-off-by: Hyunho Kang --- watch-control/src/control.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/watch-control/src/control.c b/watch-control/src/control.c index 1e5ec98..d78c422 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -516,15 +516,6 @@ API int watch_manager_set_resource_id(int resource_id) __rid_toolkit = NULL; return -1; } - - /* - * Disable all buffer event for add by rid toolkit - * Buffer event should be enabled with watch_manager_enable_resource_id - */ - screen_connector_toolkit_evas_set_changed_event_filter( - __rid_toolkit, - SCREEN_CONNECTOR_EVAS_CHANGED_EVENT_FILTER_ALL); - _D("appid(%s), rid(%d)", __watch_appid, resource_id); return 0; -- 2.7.4 From 9a04e9c1953ab9ad404a3276f67b2aa323eb0ef9 Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Mon, 4 Sep 2017 10:20:15 +0900 Subject: [PATCH 13/16] Set manual render with norender_push/pop Change-Id: I82ba4ef52f6ee36457bac7035ccf8d95b9cd9e0d Signed-off-by: Hyunho Kang --- watch-control/src/control.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/watch-control/src/control.c b/watch-control/src/control.c index d78c422..e5261d5 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -154,10 +154,14 @@ static void __win_resized(void *data, Evas *e, Evas_Object *obj, void *event_inf static void __manual_render_start(void) { - Evas *evas = evas_object_evas_get(__win); - Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas); - Evas *cur_image = evas_object_data_get(__win, "tbm,watch"); + Evas_Object *cur_image; + + if (__win == NULL) { + _E("Window is NULL"); + return; + } + cur_image = evas_object_data_get(__win, "tbm,watch"); if (__is_bound) { LOGW("watch is bound cannot manual render just call tick"); __change_viewer_visibility(AUL_SCREEN_STATUS_PRE_RESUME, false); @@ -173,7 +177,7 @@ static void __manual_render_start(void) return; } - ecore_evas_manual_render_set(ee, EINA_TRUE); + elm_win_norender_push(__win); __change_viewer_visibility(AUL_SCREEN_STATUS_PRE_RESUME, false); if (cur_image) screen_connector_toolkit_evas_send_visibility(cur_image, @@ -184,13 +188,13 @@ static void __manual_render_start(void) static void __manual_render_finish(void) { - Evas *evas = evas_object_evas_get(__win); - Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas); visibility_type auto_visibility; - evas = evas_object_evas_get(__win); - ee = ecore_evas_ecore_evas_get(evas); - ecore_evas_manual_render_set(ee, EINA_FALSE); + if (__win == NULL) { + _E("Window is NULL"); + return; + } + elm_win_norender_pop(__win); LOGI("set manual false"); if (__toolkit) { -- 2.7.4 From 8cb4f88dbd970ddd53803a8c39dfb8240d237240 Mon Sep 17 00:00:00 2001 From: Semun Lee Date: Tue, 5 Sep 2017 22:32:56 +0900 Subject: [PATCH 14/16] Add timeout handler for manual render set Change-Id: I5ad867301ed87b40db268f87c669e3976689efbd Signed-off-by: Semun Lee --- watch-control/src/control.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/watch-control/src/control.c b/watch-control/src/control.c index e5261d5..f0d3892 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -74,6 +74,7 @@ static int __is_dead_signal_connected; static aul_app_com_connection_h __conn_dead_signal; static unsigned int __watch_rid; static bool __manual_render; +static guint __manual_render_timer; static bool __iconified = false; static bool __is_bound = false; static int __viewer_visibility = AUL_SCREEN_STATUS_RESUME; @@ -94,6 +95,8 @@ static aul_app_com_connection_h __conn_launch_signal; static int __listen_launch_signal(void); static void __ignore_launch_signal(void); static void __set_viewer_appid(void); +static void __manual_render_start(void); +static void __manual_render_finish(void); static void __process_pending_status(int status, unsigned int surf) { @@ -152,6 +155,14 @@ static void __win_resized(void *data, Evas *e, Evas_Object *obj, void *event_inf __default_height = h; } +static gboolean __manual_render_timeout(gpointer user_data) +{ + LOGW("manual render timeout expired"); + __manual_render_finish(); + __manual_render_timer = 0; + return G_SOURCE_REMOVE; +} + static void __manual_render_start(void) { Evas_Object *cur_image; @@ -183,6 +194,8 @@ static void __manual_render_start(void) screen_connector_toolkit_evas_send_visibility(cur_image, VISIBILITY_TYPE_UNOBSCURED); __manual_render = true; + + __manual_render_timer = g_timeout_add(100, __manual_render_timeout, NULL); LOGI("Manual render start"); } @@ -210,6 +223,10 @@ static void __manual_render_finish(void) } __manual_render = false; + if (__manual_render_timer > 0) { + g_source_remove(__manual_render_timer); + __manual_render_timer = 0; + } } static Eina_Bool __iconify_state_changed(void *data, int type, void *event) -- 2.7.4 From cd21fbf6523659f897401a0ad6449474b51021ed Mon Sep 17 00:00:00 2001 From: "taeyoon0.lee" Date: Fri, 8 Sep 2017 17:44:01 +0900 Subject: [PATCH 15/16] Added WIDGET_INSTANCE_EVENT_CREATE_ABORTED Change-Id: Ie1580b292f9a275be8456991383b63ccd2b0764b --- .../internal/widget_view/widget_view_impl.cpp | 21 +++++++++++++++------ .../internal/widget_view/widget_view_impl.h | 1 + 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp index 1b69ef0..a89d00e 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp @@ -200,7 +200,8 @@ WidgetView::WidgetView() mRetryState( false ), mPermanentDelete( false ), mWatcherHandle( NULL ), - mRemoteSurface( NULL ) + mRemoteSurface( NULL ), + mAborted( false ) { } @@ -222,7 +223,8 @@ WidgetView::WidgetView( const std::string& widgetId, const std::string& contentI mRetryState( false ), mPermanentDelete( false ), mWatcherHandle( NULL ), - mRemoteSurface( NULL ) + mRemoteSurface( NULL ), + mAborted( false ) { } @@ -350,7 +352,7 @@ void WidgetView::SetLoadingTextVisible( bool visible ) if( visible ) { - mLoadingText.SetProperty( Toolkit::TextLabel::Property::TEXT, + mLoadingText.SetProperty( Toolkit::TextLabel::Property::TEXT, ( mLoadingTextString.empty() )? GET_LOCALE_TEXT( "IDS_ST_POP_LOADING_ING" ) : mLoadingTextString ); } mLoadingText.SetVisible( visible ); @@ -384,7 +386,7 @@ bool WidgetView::IsRetryTextVisible() void WidgetView::ActivateFaultedWidget() { - if( mPid < 0 ) + if( mPid < 0 || mAborted ) { // Enable preview and loading text ShowRetryState( false ); @@ -392,7 +394,8 @@ void WidgetView::ActivateFaultedWidget() // launch widget again mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidth, mHeight ); - if( mPid < 0) + + if( mPid < 0 || mAborted ) { DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() ); @@ -410,7 +413,7 @@ void WidgetView::ActivateFaultedWidget() ops.updated_cb = OnBufferUpdated; ops.removed_cb = OnSurfaceRemoved; ops.added_cb = OnBufferAdded; - mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)mInstanceId.c_str(), SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, this); + mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)mInstanceId.c_str(), SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, this); DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid ); } @@ -533,6 +536,12 @@ void WidgetView::SendWidgetEvent( int event ) RemoveWidgetImage(); break; } + case WIDGET_INSTANCE_EVENT_CREATE_ABORTED: + { + mAborted = true; + mWidgetCreationAbortedSignal.Emit( handle ); + break; + } default: { break; diff --git a/widget_viewer_dali/internal/widget_view/widget_view_impl.h b/widget_viewer_dali/internal/widget_view/widget_view_impl.h index 8783aa2..b7aa0ca 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.h +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.h @@ -289,6 +289,7 @@ private: bool mPermanentDelete; screen_connector_toolkit_h mWatcherHandle; tizen_remote_surface* mRemoteSurface; + bool mAborted; Dali::Property::Map mWidgetImagePropertyMap; -- 2.7.4 From a4108cc6e2aa8f132625c21e58db4f249e5c9d9f Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Fri, 8 Sep 2017 15:09:00 +0900 Subject: [PATCH 16/16] Check watch pkgid in sdk viewer when watch changed Change-Id: I97e54e9c1b818018ab63c9642f54e475822dfc92 Signed-off-by: Hyunho Kang --- widget_viewer_sdk/src/main.c | 45 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/widget_viewer_sdk/src/main.c b/widget_viewer_sdk/src/main.c index 9052897..d6ad83f 100644 --- a/widget_viewer_sdk/src/main.c +++ b/widget_viewer_sdk/src/main.c @@ -101,7 +101,7 @@ static struct info { #define LONG_PRESS 1.0f #define CONF_FNAME "/etc/widget_viewer_sdk.conf" -static char *__watch_appid; +static char *__watch_pkgid; static Evas_Object *__clock; static void back_key_cb(void *data, Evas_Object *obj, void *event_info) @@ -282,9 +282,10 @@ void __clock_vconf_cb(keynode_t *node, void *data) { char *cur_watch = vconf_get_str(VCONFKEY_WMS_CLOCKS_SET_IDLE); - LOGD("watch now %s, changed %s", __watch_appid, cur_watch); - if (cur_watch != NULL && __watch_appid != NULL - && strcmp(cur_watch, __watch_appid) == 0) { + LOGD("watch sdk [%s], home [%s]", + __watch_pkgid, cur_watch); + if (cur_watch != NULL && __watch_pkgid != NULL + && strcmp(cur_watch, __watch_pkgid) == 0) { ui_app_exit(); LOGW("same watch displayed on the other viewer EXIT"); } @@ -742,6 +743,29 @@ static void __set_bundle_for_watchapp(bundle *app_control_b, bundle *b) } } +static char *__get_pkgid_by_appid(char *appid) +{ + pkgmgrinfo_appinfo_h handle; + int ret; + char *pkgid = NULL; + char *ret_pkgid = NULL; + + ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle); + if (ret != PMINFO_R_OK) + return NULL; + + ret = pkgmgrinfo_appinfo_get_pkgid(handle, &pkgid); + if (ret != PMINFO_R_OK) { + pkgmgrinfo_appinfo_destroy_appinfo(handle); + return NULL; + } + + ret_pkgid = strdup(pkgid); + pkgmgrinfo_appinfo_destroy_appinfo(handle); + + return ret_pkgid; +} + static void _app_control(app_control_h service, void *data) { char *widget_id = NULL; @@ -773,14 +797,17 @@ static void _app_control(app_control_h service, void *data) cur_watch = vconf_get_str(VCONFKEY_WMS_CLOCKS_SET_IDLE); if (widget_id != NULL) { - if (cur_watch != NULL && - strcmp(cur_watch, widget_id) == 0) { + if (__watch_pkgid) { + free(__watch_pkgid); + __watch_pkgid = NULL; + } + __watch_pkgid = __get_pkgid_by_appid(widget_id); + + if (cur_watch != NULL && __watch_pkgid != NULL && + strcmp(cur_watch, __watch_pkgid) == 0) { vconf_set_str(VCONFKEY_WMS_CLOCKS_SET_IDLE, DEFAULT_WATCH); } - if (__watch_appid) - free(__watch_appid); - __watch_appid = strdup(widget_id); } evas_object_resize(s_info.win, s_info.w, s_info.h); -- 2.7.4