10 UiObject::UiObject() : UiObject(nullptr, nullptr, nullptr) {}
14 if (mWaiter) delete mWaiter;
17 UiObject::UiObject(const UiDevice *device, const std::shared_ptr<UiSelector> selector,
18 const AccessibleNode *node)
21 mNode(std::unique_ptr<AccessibleNode>(const_cast<AccessibleNode*>(node))),
22 mWaiter(new Waiter{this, this})
26 UiObject::UiObject(const UiDevice *device, const std::shared_ptr<UiSelector> selector,
27 std::unique_ptr<AccessibleNode> node)
30 mNode(std::move(node)),
31 mWaiter(new Waiter{this, this})
35 // UiObject::UiObject(const UiObject &src)
36 // : mDevice(src.mDevice),
37 // mSelector(src.mSelector),
39 // mWaiter{src.mWaiter},
40 // mNode_src(std::move(src.mNode_src))
45 UiObject::UiObject(UiObject &&src)
46 : mDevice(src.mDevice),
47 mSelector(std::move(src.mSelector)),
48 mNode(std::move(src.mNode)),
51 src.mDevice = nullptr;
52 src.mSelector = nullptr;
54 src.mWaiter = nullptr;
57 std::shared_ptr<UiSelector> UiObject::getSelector()
59 return this->mSelector;
62 bool UiObject::hasObject(const std::shared_ptr<UiSelector> selector) const
64 std::unique_ptr<AccessibleNode> node =
65 Comparer::findObject(mDevice, selector, getAccessibleNode());
66 if (node != nullptr) {
67 // todo : what is this node.recycle()
73 std::unique_ptr<UiObject> UiObject::findObject(const std::shared_ptr<UiSelector> selector) const
75 std::unique_ptr<AccessibleNode> node =
76 Comparer::findObject(mDevice, selector, getAccessibleNode());
78 return std::make_unique<UiObject>(mDevice, selector, std::move(node));
80 return std::unique_ptr<UiObject>{nullptr};
83 std::vector<std::unique_ptr<UiObject>> UiObject::findObjects(
84 const std::shared_ptr<UiSelector> selector) const
86 return std::vector<std::unique_ptr<UiObject>>{};
89 bool UiObject::waitFor(
90 const std::function<bool(const ISearchable *)> condition) const
92 return mWaiter->waitFor(condition);
95 std::unique_ptr<UiObject> UiObject::waitFor(
96 const std::function<std::unique_ptr<UiObject>(const ISearchable *)>
99 return mWaiter->waitFor(condition);
102 bool UiObject::waitFor(
103 const std::function<bool(const UiObject *)> condition) const
106 return mWaiter->waitFor(condition);
109 UiObject *UiObject::getParent() const
111 std::unique_ptr<AccessibleNode> node = getAccessibleNode()->getParent();
112 if (!node) return nullptr;
113 return new UiObject(mDevice, mSelector, std::move(node));
116 int UiObject::getChildCount() const
118 return getAccessibleNode()->getChildCount();
121 std::vector<std::unique_ptr<UiObject>> UiObject::getChildren() const
123 return findObjects(Sel::depth(1));
126 std::string UiObject::getContentDescription() const
128 return getAccessibleNode()->getDesc();
131 std::string UiObject::getApplicationPackage() const
133 return getAccessibleNode()->getPkg();
136 std::string UiObject::getResourceName() const
138 return getAccessibleNode()->getRes();
141 std::string UiObject::getText() const
143 return getAccessibleNode()->getText();
146 void UiObject::setText(std::string text)
148 getAccessibleNode()->setValue(text);
151 bool UiObject::isCheckable() const
153 return getAccessibleNode()->isCheckable();
156 bool UiObject::isChecked() const
158 return getAccessibleNode()->isChecked();
161 bool UiObject::isClickable() const
163 return getAccessibleNode()->isClickable();
166 bool UiObject::isEnabled() const
168 return getAccessibleNode()->isEnabled();
171 bool UiObject::isFocusable() const
173 return getAccessibleNode()->isFocusable();
176 bool UiObject::isFocused() const
178 return getAccessibleNode()->isFocused();
181 bool UiObject::isLongClickable() const
183 return getAccessibleNode()->isLongClickable();
186 bool UiObject::isScrollable() const
188 return getAccessibleNode()->isScrollable();
191 bool UiObject::isSelectable() const
193 return getAccessibleNode()->isSelectable();
196 bool UiObject::isSelected() const
198 return getAccessibleNode()->isSelected();
201 bool UiObject::isVisible() const
203 return getAccessibleNode()->isVisible();
206 bool UiObject::isShowing() const
208 return getAccessibleNode()->isShowing();
211 bool UiObject::isActive() const
213 return getAccessibleNode()->isActive();
216 void UiObject::refresh() const
221 const Rect<int> UiObject::getBoundingBox() const
224 return mNode->getBoundingBox();
227 void UiObject::click() const
229 LOG_SCOPE_F(INFO, "click on obj %p", this);
231 const Rect<int> rect = mNode->getBoundingBox();
232 std::cout << rect.mTopLeft.x << ", " << rect.mTopLeft.y << std::endl;
233 const Point2D<int> midPoint = rect.midPoint();
234 const_cast<UiDevice *>(mDevice)->click(midPoint.x, midPoint.y);
237 void UiObject::longClick(const unsigned int intv) const
239 LOG_SCOPE_F(INFO, "click on obj %p", this);
241 const Rect<int> rect = mNode->getBoundingBox();
242 std::cout << rect.mTopLeft.x << ", " << rect.mTopLeft.y << std::endl;
243 const Point2D<int> midPoint = rect.midPoint();
244 const_cast<UiDevice *>(mDevice)->click(midPoint.x, midPoint.y, intv);
247 bool UiObject::DoAtspiActivate() const
249 return mNode->doAction("activate");
253 const AccessibleNode *UiObject::getAccessibleNode() const
255 if (mNode == nullptr) throw;
257 // TODO : wait for animation and refresh current node
258 // mDevice->waitForIdle();