Fix log not printed bug and add more log messages
[platform/core/uifw/multi-assistant-service.git] / plugins / wakeup-manager / src / wakeup_policy_default.cpp
1 #include "wakeup_policy_default.h"
2 #include "wakeup_policy_impl.h"
3 #include "wakeup_manager_main.h"
4
5 #include <vector>
6
7 #include <Eina.h>
8 #include <dlog.h>
9
10 namespace multiassistant
11 {
12 namespace wakeup
13 {
14
15 CWakeupPolicyDefault::CWakeupPolicyDefault(IPolicyEventObserver *observer)
16         : CWakeupPolicy(observer)
17 {
18 }
19
20 CWakeupPolicyDefault::~CWakeupPolicyDefault()
21 {
22         if (mTimer) {
23                 ecore_timer_del(mTimer);
24                 mTimer = nullptr;
25         }
26 }
27
28 bool CWakeupPolicyDefault::valid()
29 {
30         return true;
31 }
32
33 void CWakeupPolicyDefault::set_assistant_priority(string appid, int priority)
34 {
35         PRIORITY_INFO info;
36         info.appid = appid;
37         info.priority = priority;
38
39         MWR_LOGD("Setting assistant priority : %s %d", appid.c_str(), priority);
40         mPriorityInfos.push_back(info);
41 }
42
43 void CWakeupPolicyDefault::set_delay(float seconds)
44 {
45         MWR_LOGD("Setting delay : %f", seconds);
46         mDelaySeconds = seconds;
47 }
48
49 float CWakeupPolicyDefault::get_delay()
50 {
51         return mDelaySeconds;
52 }
53
54 void CWakeupPolicyDefault::set_timer(Ecore_Timer* timer)
55 {
56         mTimer = timer;
57 }
58
59 Ecore_Timer* CWakeupPolicyDefault::get_timer()
60 {
61         return mTimer;
62 }
63
64 static Eina_Bool timer_func(void *data)
65 {
66         MWR_LOGD("[ENTER]");
67         if (data) {
68                 CWakeupPolicyDefault *policy = static_cast<CWakeupPolicyDefault*>(data);
69                 policy->timer_expired();
70                 policy->set_timer(nullptr);
71         }
72         return ECORE_CALLBACK_CANCEL;
73 }
74
75 void CWakeupPolicyDefault::wakeup_candidate(mas_wakeup_event_info wakeup_info)
76 {
77         MWR_LOGI("[ENTER]");
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);
82                         if (!policy) return;
83
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);
87                 }, this);
88         }
89 }
90
91 void CWakeupPolicyDefault::select_candidate(mas_wakeup_event_info wakeup_info)
92 {
93         MWR_LOGE("Default wakeup policy does not support selecting candidate");
94 }
95
96 void CWakeupPolicyDefault::timer_expired()
97 {
98         MWR_LOGD("[ENTER]");
99         if (0 == mWakeupInfos.size()) return;
100
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);
109                                         selected = wakeup;
110                                         selected_priority = info.priority;
111                                 }
112                         }
113                 }
114         }
115         if (mImpl) mImpl->wakeup(selected);
116         mWakeupInfos.clear();
117
118         if (mTimer) {
119                 MWR_LOGD("Now deleting timer");
120                 ecore_timer_del(mTimer);
121                 mTimer = nullptr;
122         }
123 }
124
125 } // wakeup
126 } // multiassistant