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