10 UiObject::UiObject() : UiObject(nullptr, nullptr, nullptr) {}
14 if (mWaiter) delete mWaiter;
17 UiObject::UiObject(const UiDevice *device, const UiSelector *selector,
18 const AccessibleNode *node)
22 mWaiter(new Waiter{this, this})
24 // tood interface to interact with input interface
25 // mInputImple = mDevice->getInputInterface();
28 UiObject::UiObject(const UiObject &src)
29 : mDevice(src.mDevice),
30 mSelector(src.mSelector),
36 UiObject::UiObject(UiObject &&src)
37 : mDevice(src.mDevice),
38 mSelector(src.mSelector),
42 src.mDevice = nullptr;
43 src.mSelector = nullptr;
45 src.mWaiter = nullptr;
48 bool UiObject::hasObject(const UiSelector *selector) const
50 AccessibleNode *node =
51 Comparer::findObject(mDevice, selector, getAccessibleNode());
52 if (node != nullptr) {
53 // todo : what is this node.recycle()
59 std::unique_ptr<UiObject> UiObject::findObject(const UiSelector *selector) const
61 AccessibleNode *node =
62 Comparer::findObject(mDevice, selector, getAccessibleNode());
64 return std::make_unique<UiObject>(mDevice, selector, node);
66 return std::unique_ptr<UiObject>{nullptr};
69 std::vector<std::unique_ptr<UiObject>> UiObject::findObjects(
70 const UiSelector *selector) const
72 return std::vector<std::unique_ptr<UiObject>>{};
75 bool UiObject::waitFor(
76 const std::function<bool(const ISearchable *)> condition) const
78 return mWaiter->waitFor(condition);
81 std::unique_ptr<UiObject> UiObject::waitFor(
82 const std::function<std::unique_ptr<UiObject>(const ISearchable *)>
85 return mWaiter->waitFor(condition);
88 bool UiObject::waitFor(
89 const std::function<bool(const UiObject *)> condition) const
92 return mWaiter->waitFor(condition);
95 UiObject *UiObject::getParent() const
97 AccessibleNode *node = getAccessibleNode()->getParent();
98 if (!node) return nullptr;
99 return new UiObject(mDevice, mSelector, node);
102 int UiObject::getChildCount() const
104 return getAccessibleNode()->getChildCount();
107 std::vector<std::unique_ptr<UiObject>> UiObject::getChildren() const
109 return findObjects(Sel::depth(1).get());
112 std::string UiObject::getContentDescription() const
114 return getAccessibleNode()->getDesc();
117 std::string UiObject::getApplicationPackage() const
119 return getAccessibleNode()->getPkg();
122 std::string UiObject::getResourceName() const
124 return getAccessibleNode()->getRes();
127 std::string UiObject::getText() const
129 return getAccessibleNode()->getText();
132 void UiObject::setText(std::string &text)
134 getAccessibleNode()->setValue(text);
137 bool UiObject::isCheckable() const
139 return getAccessibleNode()->isCheckable();
142 bool UiObject::isChecked() const
144 return getAccessibleNode()->isChecked();
147 bool UiObject::isClickable() const
149 return getAccessibleNode()->isClickable();
152 bool UiObject::isEnabled() const
154 return getAccessibleNode()->isEnabled();
157 bool UiObject::isFocusable() const
159 return getAccessibleNode()->isFocusable();
162 bool UiObject::isFocused() const
164 return getAccessibleNode()->isFocused();
167 bool UiObject::isLongClickable() const
169 return getAccessibleNode()->isLongClickable();
172 bool UiObject::isScrollable() const
174 return getAccessibleNode()->isScrollable();
177 bool UiObject::isSelectable() const
179 return getAccessibleNode()->isSelectable();
182 bool UiObject::isSelected() const
184 return getAccessibleNode()->isSelected();
187 void UiObject::refresh() const
192 void UiObject::click() const
194 LOG_SCOPE_F(INFO, "click on obj %p", this);
196 const Rect<int> rect = mNode->getBoundingBox();
197 std::cout << rect.mTopLeft.x << ", " << rect.mTopLeft.y << std::endl;
198 const Point2D<int> midPoint = rect.midPoint();
199 const_cast<UiDevice *>(mDevice)->click(midPoint.x, midPoint.y);
200 // todo click implementation
203 const AccessibleNode *UiObject::getAccessibleNode() const
205 if (mNode == nullptr) throw;
207 // TODO : wait for animation and refresh current node
208 // mDevice->waitForIdle();