#include <stdlib.h>
+#include <stdbool.h>
#include <bundle.h>
#include <bundle_internal.h>
#define STR_MAX_BUF 128
#define LOG_TAG "CAPI_WIDGET_APPLICATION"
#define K_REASON "__WC_K_REASON__"
+#define APP_TYPE_WIDGET "widgetapp"
+#define STATUS_FOREGROUND "fg"
+#define STATUS_BACKGROUND "bg"
typedef enum _widget_obj_state_e {
WC_READY = 0,
static widget_class_h class_provider;
static int exit_called;
static char *package_id;
+static bool fg_signal;
static void _widget_core_set_appcore_event_cb(void);
static void _widget_core_unset_appcore_event_cb(void);
return ret->data;
}
+static gint __comp_by_state(gconstpointer a, gconstpointer b)
+{
+ widget_context_s *wc = (widget_context_s *)a;
+
+ if (wc->state == (widget_obj_state_e)GPOINTER_TO_INT(b))
+ return 0;
+
+ return -1;
+}
+
+static widget_context_s *__find_context_by_state(widget_obj_state_e state)
+{
+ GList *ret;
+ GList *contexts = _widget_app_get_contexts();
+
+ ret = g_list_find_custom(contexts, GINT_TO_POINTER((int)state), __comp_by_state);
+ if (ret == NULL)
+ return NULL;
+
+ return ret->data;
+}
+
static gint __comp_by_win(gconstpointer a, gconstpointer b)
{
int win = GPOINTER_TO_INT(b);
if (send_update) {
ret = __send_update_status(handle->classid, wc->id,
WIDGET_INSTANCE_EVENT_RESUME, NULL);
+ if (!fg_signal) {
+ _D("Send fg signal to resourceD");
+ aul_send_app_status_change_signal(getpid(),
+ appid,
+ package_id,
+ STATUS_FOREGROUND,
+ APP_TYPE_WIDGET);
+ fg_signal = true;
+ }
} else {
ret = 0;
}
if (send_update) {
ret = __send_update_status(handle->classid, wc->id,
WIDGET_INSTANCE_EVENT_PAUSE, NULL);
+ wc = __find_context_by_state(WC_RUNNING);
+ if (!wc && fg_signal) {
+ _D("Send bg signal to resourceD");
+ aul_send_app_status_change_signal(getpid(),
+ appid,
+ package_id,
+ STATUS_BACKGROUND,
+ APP_TYPE_WIDGET);
+ fg_signal = false;
+ }
} else {
ret = 0;
}