[W-clock-viewer] Launch the default watch instead of creating clock 98/123098/1
authormoon87.park <moon87.park@samsung.com>
Tue, 4 Apr 2017 11:12:14 +0000 (20:12 +0900)
committermoon87.park <moon87.park@samsung.com>
Tue, 4 Apr 2017 11:12:14 +0000 (20:12 +0900)
Change-Id: Icebe24cc319eb74932af1468bdace36cc797af66

clock-viewer/include/clock-viewer-widget.h
clock-viewer/org.tizen.w-clock-viewer.xml.in
clock-viewer/src/clock-viewer-widget.c
clock-viewer/src/clock-viewer.c

index 3ad1eaa5bf6b634a7b41d1ffe0e7a29a99b8e4b5..49a9170891f3050247f4ca879981aca9e74f0a83 100644 (file)
@@ -29,6 +29,10 @@ extern void clock_viewer_widget_fini(void *data);
 extern void clock_viewer_widget_pause(void);
 extern void clock_viewer_widget_resume(void);
 
+extern void clock_viewer_default_widget_init(void *data, Evas_Object *parent, char *clock_name);
+extern void clock_viewer_default_widget_fini(void *data);
+
+
 extern void clock_viewer_widget_update_position(void);
 
 extern void clock_viewer_widget_register_render_event(Evas_Smart_Cb func, void *data);
index 68e023a70fa733dc8026a1302d66ff9240c81140..6c9fc50c98288d79936408369f4ffa6fedd8d506 100644 (file)
@@ -11,5 +11,7 @@
                <privilege>http://tizen.org/privilege/setting</privilege>
                <privilege>http://tizen.org/privilege/power</privilege>
                <privilege>http://tizen.org/privilege/display</privilege>
+               <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+               <privilege>http://tizen.org/privilege/appmanager.kill</privilege>
        </privileges>
 </manifest>
index 311df201cadb60ca003bdd4225f0f83b06574ff2..fd443386180e646c2075ba2314ee5d8d2fb3a4b4 100644 (file)
@@ -27,6 +27,7 @@
 
 #define EDJ_APP EDJEDIR"/clock-viewer.edj"
 #define MAX_VIEW_STATE 8
+#define CLOCK_PACKAGE_NAME "org.tizen.idle-clock-digital"
 
 static struct _widget_info
 {
@@ -72,6 +73,8 @@ static void _watch_added_cb(void *data, Evas_Object *obj, void *event_info)
        }
        */
 
+       _DBG("watch added");
+
        if (s_widget_info.layout) {
                old_watch = elm_object_content_unset(s_widget_info.layout);
                if (old_watch && old_watch != new_watch) {
@@ -98,6 +101,58 @@ static void _watch_removed_cb(void *data, Evas_Object *obj, void *event_info)
         evas_object_del(clock);
 }
 
+void clock_viewer_default_widget_init(void *data, Evas_Object *parent, char *clock_name)
+{
+       app_control_h watch_control = NULL;
+
+       if (s_widget_info.is_widget_init) {
+               _DBG("widget already initialized");
+               return;
+       }
+
+       if (!s_widget_info.layout) {
+               s_widget_info.layout = clock_viewer_util_winset_create_layout(parent, EDJ_APP, "layout_manual_clock_position");
+               if (!s_widget_info.layout) {
+                       _ERR("Failed to create clock layout");
+                       return;
+               }
+               elm_win_resize_object_add(parent, s_widget_info.layout);
+       } else {
+               _DBG("widget clock layout is already created");
+       }
+
+       s_widget_info.is_widget_init = 1;
+       s_widget_info.win = parent;
+
+       evas_object_smart_callback_add(parent, WATCH_SMART_SIGNAL_ADDED, _watch_added_cb, NULL);
+       evas_object_smart_callback_add(parent, WATCH_SMART_SIGNAL_REMOVED, _watch_removed_cb, NULL);
+
+       watch_manager_get_app_control(CLOCK_PACKAGE_NAME, &watch_control);
+       app_control_send_launch_request(watch_control, NULL, NULL);
+       app_control_destroy(watch_control);
+}
+
+void clock_viewer_default_widget_fini(void *data)
+{
+       if (s_widget_info.is_widget_init) {
+               watch_manager_send_terminate(s_widget_info.widget);
+               evas_object_smart_callback_del(s_widget_info.win, WATCH_SMART_SIGNAL_ADDED, _watch_added_cb);
+               evas_object_smart_callback_del(s_widget_info.win, WATCH_SMART_SIGNAL_REMOVED, _watch_removed_cb);
+
+               s_widget_info.is_widget_init = 0;
+       }
+
+       if (s_widget_info.widget) {
+               evas_object_del(s_widget_info.widget);
+               s_widget_info.widget = NULL;
+       }
+
+       if (s_widget_info.layout) {
+               evas_object_del(s_widget_info.layout);
+               s_widget_info.layout = NULL;
+       }
+       s_widget_info.win = NULL;
+}
 
 HAPI void clock_viewer_widget_init(void *data, Evas_Object *win, char *pkgname, int resource_id)
 {
@@ -121,8 +176,6 @@ HAPI void clock_viewer_widget_init(void *data, Evas_Object *win, char *pkgname,
 
        s_widget_info.is_widget_init = 1;
 
-       watch_manager_init(win);
-
        watch_manager_set_resource_id(resource_id);
 
        evas_object_smart_callback_add(win, WATCH_SMART_SIGNAL_ADDED, _watch_added_cb, data);
@@ -141,7 +194,6 @@ HAPI void clock_viewer_widget_fini(void *data)
                evas_object_smart_callback_del(s_widget_info.win, WATCH_SMART_SIGNAL_ADDED, _watch_added_cb);
                evas_object_smart_callback_del(s_widget_info.win, WATCH_SMART_SIGNAL_REMOVED, _watch_removed_cb);
 
-               watch_manager_fini();
                s_widget_info.is_widget_init = 0;
        }
 
index c9e9d01cd4e59dacfad7c4c25cb5b4f730dfc22b..282887064d3e5962595f71a468781e740061fbdb 100644 (file)
@@ -20,6 +20,7 @@
 #include <Ecore.h>
 #include <Ecore_Evas.h>
 #include <efl_util.h>
+#include <watch_control.h>
 
 #include "clock-viewer.h"
 #include "clock-viewer-window.h"
@@ -52,6 +53,7 @@ static struct _info {
 
        clock_viewer_ambient_type ambient_type;
        char *clock_pkgname;
+       int resource_id;
 
        /* clockend condition check list */
        int is_drawdone;
@@ -66,6 +68,7 @@ static struct _info {
 
        .is_render_added = 0,
        .is_clock_resumed = 0,
+       .resource_id = 0,
 
        .home_clock_visibitity = 0,
        .clock_visibitity = 0,
@@ -86,7 +89,7 @@ static void _clock_viewer_set_current_clock(clock_viewer_s *clock_viewer);
 
 static Eina_Bool __clock_viewer_clockend_timer_cb(void *data)
 {
-       clock_viewer_s *clock_viewer = data;
+       clock_viewer_s *clock_viewer = (clock_viewer_s *)data;
        char *clock_signal[1] = { "clockend" };
        _WARN("clock end <<");
        clock_viewer_util_dbus_broadcast_signal(data, DEVICED_PATH, DEVICED_INTERFACE, "HomeScreen", "s", &clock_signal[0]);
@@ -360,7 +363,7 @@ static void _clock_viewer_set_current_clock(clock_viewer_s *clock_viewer)
        }
 
        if (s_info.clock_pkgname) {
-               if (!strcmp(s_info.clock_pkgname, pkgname)) {
+               if (!strcmp(s_info.clock_pkgname, pkgname) && s_info.resource_id) {
                        _WARN("same pkgname(%s), skip!", pkgname);
                        free(pkgname);
                        return;
@@ -379,17 +382,18 @@ static void _clock_viewer_set_current_clock(clock_viewer_s *clock_viewer)
        }
 
        /* unload old clock */
-       clock_viewer_default_clock_fini(clock_viewer);
-       clock_viewer_widget_fini(clock_viewer);
+       if (s_info.ambient_type == CLOCK_VIEWER_AMBIENT_TYPE_MANUAL)
+               clock_viewer_widget_fini(clock_viewer);
 
        /* load new clock */
        if (ambient_type == CLOCK_VIEWER_AMBIENT_TYPE_MANUAL) {
                clock_viewer_widget_init(clock_viewer, clock_viewer->window, pkgname, resource_id);
                clock_viewer->current_type = CLOCK_VIEWER_TYPE_WIDGET;
+               s_info.resource_id = resource_id;
        } else {
                _DBG("CLOCK_VIEWER_AMBIENT_TYPE_ANALOG");
-               clock_viewer_default_clock_init(clock_viewer, clock_viewer->window, ambient_type);
                clock_viewer->current_type = CLOCK_VIEWER_TYPE_DEFAULT_CLOCK;
+               s_info.resource_id = 0;
        }
 
        s_info.is_clock_resumed = 0;
@@ -446,12 +450,13 @@ HAPI void clock_viewer_create(clock_viewer_s *clock_viewer)
 
        elm_win_screen_size_get(clock_viewer->window, NULL, NULL, &clock_viewer->win_width, &clock_viewer->win_height);
        evas_object_hide(clock_viewer->window);
-
+       watch_manager_init(clock_viewer->window);
        _clock_viewer_set_current_clock(clock_viewer);
 }
 
 HAPI void clock_viewer_destroy(clock_viewer_s *clock_viewer)
 {
+       watch_manager_fini();
        _clock_viewer_unregister_event(clock_viewer);
 }
 
@@ -494,19 +499,15 @@ HAPI void clock_viewer_show(clock_viewer_s *clock_viewer, int is_hide_launch)
                /* [LCDOFF Flow 1] widget or mc resume */
                if (!s_info.is_clock_resumed) {
                        if (clock_viewer->current_type == CLOCK_VIEWER_TYPE_DEFAULT_CLOCK) {
-                               clock_viewer_default_clock_resume(clock_viewer);
+                               clock_viewer_default_widget_init(clock_viewer, win, s_info.clock_pkgname);
                        } else if (clock_viewer->current_type == CLOCK_VIEWER_TYPE_WIDGET) {
                                clock_viewer_widget_resume();
                        }
 
                        s_info.is_clock_resumed = 1;
                } else {
-                       /* only widget is working with render event */
-                       if (clock_viewer->current_type != CLOCK_VIEWER_TYPE_WIDGET) {
-                               /* temporary move to set visible so we can receive render pre/post */
-                               evas_object_move(win, clock_viewer->win_width - 1, clock_viewer->win_height - 1);
-                               evas_object_show(win);
-                       }
+                       evas_object_move(win, clock_viewer->win_width - 1, clock_viewer->win_height - 1);
+                       evas_object_show(win);
                }
 
                /* [LCDOFF Flow 2] manual render */
@@ -528,11 +529,8 @@ HAPI void clock_viewer_show(clock_viewer_s *clock_viewer, int is_hide_launch)
                        evas_object_resize(win, clock_viewer->win_width, clock_viewer->win_height);
                        evas_object_show(win);
                } else {
-                       if (clock_viewer->current_type != CLOCK_VIEWER_TYPE_WIDGET) {
-                               /* temporary move to set visible so we can receive render pre/post  */
-                               evas_object_move(win, clock_viewer->win_width - 1, clock_viewer->win_height - 1);
-                               evas_object_show(win);
-                       }
+                       evas_object_move(win, clock_viewer->win_width - 1, clock_viewer->win_height - 1);
+                       evas_object_show(win);
                }
 
                /* Raise up the Clock Viewer Window  */
@@ -572,7 +570,7 @@ HAPI void clock_viewer_hide(clock_viewer_s *clock_viewer)
 
                if (s_info.is_clock_resumed) {
                        if (clock_viewer->current_type == CLOCK_VIEWER_TYPE_DEFAULT_CLOCK) {
-                               clock_viewer_default_clock_pause(clock_viewer);
+                               clock_viewer_default_widget_fini(clock_viewer);
                        } else if (clock_viewer->current_type == CLOCK_VIEWER_TYPE_WIDGET) {
                                clock_viewer_widget_pause();
                        }