#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
{
}
*/
+ _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) {
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)
{
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);
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;
}
#include <Ecore.h>
#include <Ecore_Evas.h>
#include <efl_util.h>
+#include <watch_control.h>
#include "clock-viewer.h"
#include "clock-viewer-window.h"
clock_viewer_ambient_type ambient_type;
char *clock_pkgname;
+ int resource_id;
/* clockend condition check list */
int is_drawdone;
.is_render_added = 0,
.is_clock_resumed = 0,
+ .resource_id = 0,
.home_clock_visibitity = 0,
.clock_visibitity = 0,
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]);
}
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;
}
/* 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;
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);
}
/* [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 */
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 */
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();
}