#define POWER_METHOD "reboot"
#define POWER_OPERATION_OFF "poweroff"
+/* Overheat Timer*/
+#define OVERHEAT_BUS_NAME "org.tizen.system.popup"
+#define OVERHEAT_OBJECT_PATH "/Org/Tizen/System/Popup"
+#define OVERHEAT_INTERFACE_NAME OVERHEAT_BUS_NAME
+#define OVERHEAT_PATH OVERHEAT_OBJECT_PATH"/Overheat"
+#define OVERHEAT_INTERFACE OVERHEAT_INTERFACE_NAME".Overheat"
+#define SIGNAL_OVERHEAT_TIME "TimeUpdate"
+
#define OVERTEMP_TIMEOUT 30
static int overtemp_timer = OVERTEMP_TIMEOUT;
+static Evas_Object *timer_label;
static const struct popup_ops overheat_ops;
static const struct popup_ops overheat_poweroff_warning_ops;
static void overheat_poweroff(const struct popup_ops *ops);
static int overheat_launch(bundle *b, const struct popup_ops *ops);
static void overheat_poweroff_warning_terminate(const struct popup_ops *ops);
+static int add_dbus_signal_handler(const struct popup_ops *ops);
+static void remove_dbus_signal_handler(void);
static __attribute__ ((constructor)) void overheat_register_popup(void);
+static E_DBus_Signal_Handler *overheat_sig_handler = NULL;
static char *items[] = {
"IDS_IDLE_HEADER_PHONE_OVERHEATING_ABB",
load_simple_popup(b, &overheat_poweroff_warning_ops);
}
-static Eina_Bool
-progressbar_timer_cb(void *data)
+static void update_overtemp_time(void *data, DBusMessage *msg)
{
- struct object_ops *obj = data;
- Evas_Object *progressbar = evas_object_data_get(obj->popup, "progressbar");
- double value = 0.0;
-
- value = elm_progressbar_value_get(progressbar);
- if (value == 1.0) {
- evas_object_data_del(obj->popup, "timer");
- overheat_poweroff(obj->ops);
- return ECORE_CALLBACK_CANCEL;
- }
- value = value + 0.01;
- elm_progressbar_value_set(progressbar, value);
-
- return ECORE_CALLBACK_RENEW;
-}
-
-static void
-progressbar_popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- Ecore_Timer *timer = data;
+ DBusError err;
+ int time = 0;
+ int ret;
- ecore_timer_del(timer);
-}
+ ret = dbus_message_is_signal(msg, OVERHEAT_INTERFACE, SIGNAL_OVERHEAT_TIME);
+ if (!ret) {
+ _E("No overheat SIG");
+ return;
+ }
-static Eina_Bool update_overtemp_time(Evas_Object *label)
-{
- overtemp_timer--;
-
- if (overtemp_timer < 0) {
- overtemp_timer = OVERTEMP_TIMEOUT;
- return ECORE_CALLBACK_CANCEL;
- } else {
- elm_object_text_set(label, gl_text_get(2));
- return ECORE_CALLBACK_RENEW;
+ dbus_error_init(&err);
+ if (dbus_message_get_args(msg, &err,
+ DBUS_TYPE_INT32, &time,
+ DBUS_TYPE_INVALID) == 0) {
+ dbus_error_free(&err);
+ return;
}
+ dbus_error_free(&err);
+
+ overtemp_timer = time;
+ elm_object_text_set(timer_label, gl_text_get(2));
+ if (!overtemp_timer)
+ remove_dbus_signal_handler();
}
static void unregister_handlers(const struct popup_ops *ops)
return 0;
}
+static int add_dbus_signal_handler(const struct popup_ops *ops)
+{
+ E_DBus_Connection *conn;
+
+ conn = get_dbus_connection();
+ if (!conn) {
+ _E("Failed to get dbus connection");
+ return -ENOMEM;
+ }
+
+ overheat_sig_handler = e_dbus_signal_handler_add(
+ conn, NULL,
+ OVERHEAT_PATH,
+ OVERHEAT_INTERFACE,
+ SIGNAL_OVERHEAT_TIME,
+ update_overtemp_time,
+ (void *)ops);
+ if (!overheat_sig_handler) {
+ _E("Failed to add signal handler");
+ return -ENOMEM;
+ }
+
+ return 0;
+}
+
+static void remove_dbus_signal_handler(void)
+{
+ E_DBus_Connection *conn;
+
+ if (!overheat_sig_handler) {
+ _E("No available sig handler for overheat");
+ return;
+ }
+
+ conn = get_dbus_connection();
+ if (!conn) {
+ overheat_sig_handler = NULL;
+ _E("No Dbus connection for overheat sig");
+ return;
+ }
+
+ e_dbus_signal_handler_del(conn, overheat_sig_handler);
+ overheat_sig_handler = NULL;
+}
+
static int overheat_launch(bundle *b, const struct popup_ops *ops)
{
+ int ret;
+
register_handlers(ops);
+
+ ret = add_dbus_signal_handler(ops);
+ if (ret < 0)
+ _E("Failed to add dbus handler(%d)", ret);
+
return 0;
}
static void overheat_terminate(const struct popup_ops *ops)
{
unregister_handlers(ops);
+ remove_dbus_signal_handler();
}
static void overheat_poweroff_warning_terminate(const struct popup_ops *ops)
Evas_Object *btn;
Evas_Object *progressbar;
Evas_Object *scroller1, *scroller2;
- Evas_Object *label1, *label2;
+ Evas_Object *label1;
Evas_Object *win;
- Ecore_Timer *timer;
struct object_ops *obj;
int ret;
evas_object_show(label1);
elm_object_content_set(scroller1, label1);
- label2 = elm_label_add(scroller2);
- elm_object_style_set(label2, "popup/default");
- elm_label_line_wrap_set(label2, ELM_WRAP_MIXED);
- elm_object_text_set(label2, gl_text_get(2));
+ timer_label = elm_label_add(scroller2);
+ elm_object_style_set(timer_label, "popup/default");
+ elm_label_line_wrap_set(timer_label, ELM_WRAP_MIXED);
+ elm_object_text_set(timer_label, gl_text_get(2));
- /* set timer */
- if (!ecore_timer_add(1, (Ecore_Task_Cb)update_overtemp_time, label2)) {
- _E("Fail to set timer");
- return -EINVAL;
- }
-
- evas_object_size_hint_weight_set(label2, EVAS_HINT_EXPAND, 0.0);
- evas_object_size_hint_align_set(label2, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(label2);
- elm_object_content_set(scroller2, label2);
+ evas_object_size_hint_weight_set(timer_label, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(timer_label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(timer_label);
+ elm_object_content_set(scroller2, timer_label);
/* progressbar */
progressbar = elm_progressbar_add(layout);
evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_progressbar_pulse(progressbar, EINA_TRUE);
elm_object_part_content_set(layout, "processing", progressbar);
- timer = ecore_timer_add(0.3, progressbar_timer_cb, obj);
-
evas_object_data_set(popup, "progressbar", progressbar);
- evas_object_data_set(popup, "timer", timer);
- evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, progressbar_popup_del_cb, timer);
elm_object_content_set(popup, layout);
evas_object_show(popup);