1 #include "wakeup_policy_default.h"
2 #include "wakeup_policy_impl.h"
3 #include "wakeup_manager_main.h"
10 namespace multiassistant
15 CWakeupPolicyDefault::CWakeupPolicyDefault(IPolicyEventObserver *observer)
16 : CWakeupPolicy(observer)
20 CWakeupPolicyDefault::~CWakeupPolicyDefault()
23 ecore_timer_del(mTimer);
28 bool CWakeupPolicyDefault::valid()
33 void CWakeupPolicyDefault::set_assistant_priority(string appid, int priority)
37 info.priority = priority;
39 MWR_LOGD("Setting assistant priority : %s %d", appid.c_str(), priority);
40 mPriorityInfos.push_back(info);
43 void CWakeupPolicyDefault::set_delay(float seconds)
45 MWR_LOGD("Setting delay : %f", seconds);
46 mDelaySeconds = seconds;
49 float CWakeupPolicyDefault::get_delay()
54 void CWakeupPolicyDefault::set_timer(Ecore_Timer* timer)
59 Ecore_Timer* CWakeupPolicyDefault::get_timer()
64 static Eina_Bool timer_func(void *data)
68 CWakeupPolicyDefault *policy = static_cast<CWakeupPolicyDefault*>(data);
69 policy->timer_expired();
70 policy->set_timer(nullptr);
72 return ECORE_CALLBACK_CANCEL;
75 void CWakeupPolicyDefault::wakeup_candidate(mas_wakeup_event_info wakeup_info)
78 mWakeupInfos.push_back(wakeup_info);
79 if (nullptr == mTimer) {
80 ecore_main_loop_thread_safe_call_async([](void* data) {
81 CWakeupPolicyDefault* policy = static_cast<CWakeupPolicyDefault*>(data);
84 Ecore_Timer* timer = ecore_timer_add(policy->get_delay(), timer_func, data);
85 MWR_LOGI("Adding timer : %f", policy->get_delay());
86 policy->set_timer(timer);
91 void CWakeupPolicyDefault::select_candidate(mas_wakeup_event_info wakeup_info)
93 MWR_LOGE("Default wakeup policy does not support selecting candidate");
96 void CWakeupPolicyDefault::timer_expired()
99 if (0 == mWakeupInfos.size()) return;
101 mas_wakeup_event_info selected = mWakeupInfos.front();
102 int selected_priority = -1;
103 for (const auto &wakeup : mWakeupInfos) {
104 for (const auto &info : mPriorityInfos) {
105 if (0 == info.appid.compare(wakeup.wakeup_appid)) {
106 if (info.priority > selected_priority || -1 == selected_priority) {
107 MWR_LOGD("Wakeup with higher priority found : %s, %d",
108 info.appid.c_str(), info.priority);
110 selected_priority = info.priority;
115 if (mImpl) mImpl->wakeup(selected);
116 mWakeupInfos.clear();
119 MWR_LOGD("Now deleting timer");
120 ecore_timer_del(mTimer);