1 #include "wakeup_policy_default.h"
2 #include "wakeup_policy_impl.h"
10 #define LOG_TAG "WakeupPolicyDefault"
13 namespace multiassistant
18 CWakeupPolicyDefault::CWakeupPolicyDefault()
22 CWakeupPolicyDefault::CWakeupPolicyDefault(IPolicyEventObserver *observer)
23 : CWakeupPolicy(observer)
27 CWakeupPolicyDefault::~CWakeupPolicyDefault()
30 ecore_timer_del(mTimer);
35 void CWakeupPolicyDefault::set_assistant_priority(string appid, int priority)
39 info.priority = priority;
41 LOGD("Setting assistant priority : %s %d", appid.c_str(), priority);
42 mPriorityInfos.push_back(info);
45 void CWakeupPolicyDefault::set_delay(float seconds)
47 LOGD("Setting delay : %f", seconds);
48 mDelaySeconds = seconds;
51 static Eina_Bool timer_func(void *data)
55 CWakeupPolicyDefault *policy = static_cast<CWakeupPolicyDefault*>(data);
56 policy->timer_expired();
58 return ECORE_CALLBACK_CANCEL;
61 void CWakeupPolicyDefault::wakeup_candidate(mas_wakeup_event_info wakeup_info)
63 mWakeupInfos.push_back(wakeup_info);
64 if (nullptr == mTimer) {
65 ecore_thread_main_loop_begin();
66 mTimer = ecore_timer_add(mDelaySeconds, timer_func, this);
67 ecore_thread_main_loop_end();
71 void CWakeupPolicyDefault::timer_expired()
74 if (0 == mWakeupInfos.size()) return;
76 mas_wakeup_event_info selected = mWakeupInfos.front();
77 int selected_priority = -1;
78 for (const auto &wakeup : mWakeupInfos) {
79 for (const auto &info : mPriorityInfos) {
80 if (0 == info.appid.compare(wakeup.wakeup_appid)) {
81 if (info.priority > selected_priority || -1 == selected_priority) {
82 LOGD("Wakeup with higher priority found : %s, %d",
83 info.appid.c_str(), info.priority);
85 selected_priority = info.priority;
90 if (mImpl) mImpl->wakeup(selected);
94 LOGD("Now deleting timer");
95 ecore_timer_del(mTimer);