1886da342Sopenharmony_ci/*
2886da342Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3886da342Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4886da342Sopenharmony_ci * you may not use this file except in compliance with the License.
5886da342Sopenharmony_ci * You may obtain a copy of the License at
6886da342Sopenharmony_ci *
7886da342Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8886da342Sopenharmony_ci *
9886da342Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10886da342Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11886da342Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12886da342Sopenharmony_ci * See the License for the specific language governing permissions and
13886da342Sopenharmony_ci * limitations under the License.
14886da342Sopenharmony_ci */
15886da342Sopenharmony_ci
16886da342Sopenharmony_ci#ifndef UI_CONTROLLER_H
17886da342Sopenharmony_ci#define UI_CONTROLLER_H
18886da342Sopenharmony_ci
19886da342Sopenharmony_ci#include <list>
20886da342Sopenharmony_ci#include <string>
21886da342Sopenharmony_ci#include <sstream>
22886da342Sopenharmony_ci#include <memory>
23886da342Sopenharmony_ci#include <mutex>
24886da342Sopenharmony_ci#include <functional>
25886da342Sopenharmony_ci#include "json.hpp"
26886da342Sopenharmony_ci#include "ui_action.h"
27886da342Sopenharmony_ci#include "select_strategy.h"
28886da342Sopenharmony_ci
29886da342Sopenharmony_cinamespace OHOS::uitest {
30886da342Sopenharmony_ci    struct UiEventSourceInfo {
31886da342Sopenharmony_ci        std::string bundleName;
32886da342Sopenharmony_ci        std::string text;
33886da342Sopenharmony_ci        std::string type;
34886da342Sopenharmony_ci    };
35886da342Sopenharmony_ci
36886da342Sopenharmony_ci    class UiEventListener {
37886da342Sopenharmony_ci    public:
38886da342Sopenharmony_ci        UiEventListener() = default;
39886da342Sopenharmony_ci        virtual ~UiEventListener() = default;
40886da342Sopenharmony_ci        virtual void OnEvent(const std::string &event, const UiEventSourceInfo &source) {};
41886da342Sopenharmony_ci    };
42886da342Sopenharmony_ci
43886da342Sopenharmony_ci    class UiController {
44886da342Sopenharmony_ci    public:
45886da342Sopenharmony_ci        UiController() {};
46886da342Sopenharmony_ci
47886da342Sopenharmony_ci        virtual ~UiController() = default;
48886da342Sopenharmony_ci
49886da342Sopenharmony_ci        virtual bool Initialize(ApiCallErr &error)
50886da342Sopenharmony_ci        {
51886da342Sopenharmony_ci            return true;
52886da342Sopenharmony_ci        };
53886da342Sopenharmony_ci
54886da342Sopenharmony_ci        virtual void GetUiWindows(std::vector<Window> &out){};
55886da342Sopenharmony_ci
56886da342Sopenharmony_ci        virtual bool GetWidgetsInWindow(const Window &winInfo, unique_ptr<ElementNodeIterator> &elementIterator)
57886da342Sopenharmony_ci        {
58886da342Sopenharmony_ci            return false;
59886da342Sopenharmony_ci        };
60886da342Sopenharmony_ci
61886da342Sopenharmony_ci        virtual bool WaitForUiSteady(uint32_t idleThresholdMs, uint32_t timeoutSec) const
62886da342Sopenharmony_ci        {
63886da342Sopenharmony_ci            return false;
64886da342Sopenharmony_ci        };
65886da342Sopenharmony_ci
66886da342Sopenharmony_ci        virtual void InjectTouchEventSequence(const PointerMatrix& events) const {};
67886da342Sopenharmony_ci
68886da342Sopenharmony_ci        virtual void InjectKeyEventSequence(const std::vector<KeyEvent>& events) const {};
69886da342Sopenharmony_ci
70886da342Sopenharmony_ci        virtual void InjectMouseEventSequence(const vector<MouseEvent>& events) const {};
71886da342Sopenharmony_ci
72886da342Sopenharmony_ci        virtual void PutTextToClipboard(std::string_view text) const {};
73886da342Sopenharmony_ci
74886da342Sopenharmony_ci        virtual bool TakeScreenCap(int32_t fd, std::stringstream &errReceiver, Rect rect) const
75886da342Sopenharmony_ci        {
76886da342Sopenharmony_ci            return false;
77886da342Sopenharmony_ci        };
78886da342Sopenharmony_ci
79886da342Sopenharmony_ci        virtual bool GetCharKeyCode(char ch, int32_t& code, int32_t& ctrlCode) const
80886da342Sopenharmony_ci        {
81886da342Sopenharmony_ci            return false;
82886da342Sopenharmony_ci        };
83886da342Sopenharmony_ci
84886da342Sopenharmony_ci        virtual void SetDisplayRotation(DisplayRotation rotation) const {};
85886da342Sopenharmony_ci
86886da342Sopenharmony_ci        virtual DisplayRotation GetDisplayRotation() const
87886da342Sopenharmony_ci        {
88886da342Sopenharmony_ci            return ROTATION_0;
89886da342Sopenharmony_ci        };
90886da342Sopenharmony_ci
91886da342Sopenharmony_ci        virtual void SetDisplayRotationEnabled(bool enabled) const {};
92886da342Sopenharmony_ci
93886da342Sopenharmony_ci        virtual Point GetDisplaySize() const
94886da342Sopenharmony_ci        {
95886da342Sopenharmony_ci            return Point(0, 0);
96886da342Sopenharmony_ci        };
97886da342Sopenharmony_ci
98886da342Sopenharmony_ci        virtual Point GetDisplayDensity() const
99886da342Sopenharmony_ci        {
100886da342Sopenharmony_ci            return Point(0, 0);
101886da342Sopenharmony_ci        };
102886da342Sopenharmony_ci
103886da342Sopenharmony_ci        virtual bool IsScreenOn() const
104886da342Sopenharmony_ci        {
105886da342Sopenharmony_ci            return true;
106886da342Sopenharmony_ci        };
107886da342Sopenharmony_ci
108886da342Sopenharmony_ci        /**
109886da342Sopenharmony_ci         * Tells if this controller is effective for current UI.
110886da342Sopenharmony_ci         * */
111886da342Sopenharmony_ci        virtual bool IsWorkable() const = 0;
112886da342Sopenharmony_ci
113886da342Sopenharmony_ci        virtual void RegisterUiEventListener(std::shared_ptr<UiEventListener> listener) const {};
114886da342Sopenharmony_ci
115886da342Sopenharmony_ci        virtual void GetHidumperInfo(std::string windowId, char **buf, size_t &len) {};
116886da342Sopenharmony_ci    };
117886da342Sopenharmony_ci}
118886da342Sopenharmony_ci
119886da342Sopenharmony_ci#endif