#include <Ecore_Wl2.h>
#include <gio/gio.h>
#include <aul_watch_control.h>
+#include <device/display.h>
+#include <device/callback.h>
#include "watch_control_private.h"
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_start(bool force_resume);
static void __manual_render_stop(void);
+static bool __lcd_is_off(void)
+{
+ int ret = 0;
+ display_state_e state = DISPLAY_STATE_NORMAL;
+
+ ret = device_display_get_state(&state);
+ if (ret < 0 || state == DISPLAY_STATE_SCREEN_OFF)
+ return true;
+ return false;
+}
+
static bool __watch_is_visible(void)
{
Evas_Object *image;
static gboolean __manual_render_timeout_cb(gpointer data)
{
_W("Manual render timeout expired");
- watch_manager_pause();
__manual_render_stop();
__manual_render.timer = 0;
return G_SOURCE_REMOVE;
}
-static gboolean __pause_timeout_cb(gpointer data)
+static gboolean __manual_render_pause_timeout_cb(gpointer data)
{
- if (elm_win_iconified_get(__win))
- watch_manager_pause();
+ int lcdoff = __lcd_is_off();
+
+ _W("Manual render pause timer is expired, lcdoff %d", lcdoff);
+ if (lcdoff)
+ watch_manager_notify_paused_status_of_viewer();
+ __manual_render.pause_timer = 0;
return G_SOURCE_REMOVE;
}
+static void __manual_render_set_pause_timer(void)
+{
+ if (__manual_render.pause_timer)
+ return;
+
+ __manual_render.pause_timer = g_timeout_add(200,
+ __manual_render_pause_timeout_cb, NULL);
+}
+
+static void __manual_render_unset_pause_timer(void)
+{
+ if (!__manual_render.pause_timer)
+ return;
+
+ g_source_remove(__manual_render.pause_timer);
+ __manual_render.pause_timer = 0;
+}
+
static void __manual_render_unset_timer(void)
{
if (!__manual_render.timer)
static void __manual_render_set_timer(void)
{
if (__manual_render.timer)
- __manual_render_unset_timer();
+ return;
- __manual_render.timer = g_timeout_add(200, __manual_render_timeout_cb,
- NULL);
+ __manual_render.timer = g_timeout_add(200,
+ __manual_render_timeout_cb, NULL);
}
-static void __manual_render_start(void)
+static void __manual_render_start(bool force_resume)
{
if (!__watch_is_visible()) {
_W("Watch is not visible. Skip manual render");
}
elm_win_norender_push(__win);
- watch_manager_notify_resumed_status_of_viewer();
+ __change_viewer_visibility(AUL_SCREEN_STATUS_PRE_RESUME, false);
watch_manager_resume();
+ __manual_render_unset_timer();
__manual_render_set_timer();
__manual_render.started = true;
+
+ if (force_resume) {
+ watch_manager_notify_resumed_status_of_viewer();
+ if (__lcd_is_off()) {
+ _W("Pause timer is started");
+ __manual_render_unset_pause_timer();
+ __manual_render_set_pause_timer();
+ }
+ }
}
static void __manual_render_stop(void)
static void __aul_watch_control_cb(bundle *b, void *user_data)
{
bool v = __watch_is_visible();
- bool i = elm_win_iconified_get(__win);
if (!v)
return;
- __manual_render_start();
- if (i) {
- _D("Watch AppControl obj visibility[%d] win visibility[%d]", v, !i);
- if (__manual_render.pause_timer)
- g_source_remove(__manual_render.pause_timer);
-
- __manual_render.pause_timer = g_timeout_add(200, __pause_timeout_cb,
- NULL);
- }
+ __manual_render_start(true);
}
-static gboolean __delay_resume_cb(gpointer data)
+static gboolean __force_resume_cb(gpointer data)
{
watch_manager_resume();
return G_SOURCE_REMOVE;
if (!v)
return;
- __manual_render_start();
- g_idle_add(__delay_resume_cb, NULL);
+ __manual_render_start(true);
+ g_idle_add(__force_resume_cb, NULL);
}
static Eina_Bool __window_on_pre_visibility(void *data, int type, void *event)
return ECORE_CALLBACK_RENEW;
if (ev && ev->type == ECORE_WL2_WINDOW_VISIBILITY_TYPE_PRE_UNOBSCURED) {
- __manual_render_start();
+ __manual_render_start(false);
LOGD("[__WINDOW_PRE_VISIBILITY_CHANGE__] win_id(%d)", ev->win);
}
return ECORE_CALLBACK_RENEW;
}
-
static int __manual_render_init(void)
{
int ret;