libaurum: apply smart pointer wider and extract impl out
[platform/core/uifw/aurum.git] / libaurum / src / Accessibility / AccessibleWatcher.cc
1
2 #include "AccessibleWatcher.h"
3
4 #ifdef TIZEN
5 #include "AtspiAccessibleWatcher.h"
6 #endif
7
8 #include "MockAccessibleWatcher.h"
9
10 #include <string.h>
11 #include <iostream>
12 #include <utility>
13 #include <algorithm>
14 #include <loguru.hpp>
15
16
17
18 AccessibleWatcher::~AccessibleWatcher()
19 {
20 }
21
22 /*
23 void AccessibleWatcher::printDbgInformation() const
24 {
25     LOG_SCOPE_F(INFO, "%d %d", mActivatedWindowList.size(),  mWindowSet.size());
26
27     for (auto iter = mActivatedWindowList.begin(); iter != mActivatedWindowList.end(); ++iter) {
28         LOG_F(INFO, "%p", *iter);
29     }
30         LOG_F(INFO, "-----------");
31
32     for (auto iter = mWindowSet.begin(); iter != mWindowSet.end(); ++iter) {
33         LOG_F(INFO, "%p", *iter);
34     }
35 }
36 */
37
38 const AccessibleWatcher *AccessibleWatcher::getInstance(AccessibleWatcher *watcherImpl)
39 {
40     printf("%s:%d / %s\n",__FILE__, __LINE__, __PRETTY_FUNCTION__);
41     static AccessibleWatcher *mInstance = nullptr;
42     if (watcherImpl) {
43         delete mInstance;
44         mInstance = watcherImpl;
45         return mInstance;
46     } else {
47         if (mInstance) return mInstance;
48         else {
49 #ifdef TIZEN
50             mInstance = new AtspiAccessibleWatcher();
51 #else
52             mInstance = new MockAccessibleWatcher();
53 #endif
54         }
55     }
56     printf("%s:%d / %s\n",__FILE__, __LINE__, __PRETTY_FUNCTION__);
57     return mInstance;
58 }
59
60 std::vector<std::shared_ptr<AccessibleApplication>> AccessibleWatcher::getActiveApplications(void) const
61 {
62     LOG_SCOPE_F(INFO, "getActiveApplications for this(%p)", this);
63
64     std::vector<std::shared_ptr<AccessibleApplication>> ret{};
65     auto apps = this->getApplications();
66     LOG_F(INFO, "apps size %d", apps.size());
67
68     apps.erase(std::remove_if(apps.begin(), apps.end(), [](auto app){
69         return !app->isActive();
70     }), apps.end());
71
72     LOG_F(INFO, "active apps size %d", apps.size());
73
74     return apps;
75 }