bool valid() override;
void set_assistant_priority(string appid, int priority);
- void set_delay(float seconds);
void wakeup_candidate(mas_wakeup_event_info wakeup_info) override;
void select_candidate(mas_wakeup_event_info wakeup_info) override;
void timer_expired();
+
+ void set_delay(float seconds);
+ float get_delay();
+
+ void set_timer(Ecore_Timer* timer);
+ Ecore_Timer* get_timer();
+
private:
typedef struct {
string appid;
mDelaySeconds = seconds;
}
+float CWakeupPolicyDefault::get_delay()
+{
+ return mDelaySeconds;
+}
+
+void CWakeupPolicyDefault::set_timer(Ecore_Timer* timer)
+{
+ mTimer = timer;
+}
+
+Ecore_Timer* CWakeupPolicyDefault::get_timer()
+{
+ return mTimer;
+}
+
static Eina_Bool timer_func(void *data)
{
LOGD("[ENTER]");
if (data) {
CWakeupPolicyDefault *policy = static_cast<CWakeupPolicyDefault*>(data);
policy->timer_expired();
+ policy->set_timer(nullptr);
}
return ECORE_CALLBACK_CANCEL;
}
{
mWakeupInfos.push_back(wakeup_info);
if (nullptr == mTimer) {
- LOGD("Begin Ecore Thread Main Loop");
- ecore_thread_main_loop_begin();
- mTimer = ecore_timer_add(mDelaySeconds, timer_func, this);
- LOGD("End Ecore Thread Main Loop");
- ecore_thread_main_loop_end();
+ ecore_main_loop_thread_safe_call_async([](void* data) {
+ CWakeupPolicyDefault* policy = static_cast<CWakeupPolicyDefault*>(data);
+ if (!policy) return;
+
+ Ecore_Timer* timer = ecore_timer_add(policy->get_delay(), timer_func, data);
+ policy->set_timer(timer);
+ }, this);
}
}