• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "mouse_input.h"
17 #include "multimode_manager.h"
18 #include "wukong_define.h"
19 #include "report.h"
20 
21 namespace OHOS {
22 namespace WuKong {
23 namespace {
24 const int ONEHUNDRED = 100;
25 const int MOUSE_RIGHT_PERCENT = 20;
26 const int MOUSE_MID_PERCENT = 10;
27 }  // namespace
MouseInput()28 MouseInput::MouseInput() : InputAction()
29 {
30     std::shared_ptr<MultimodeInputMsg> multimodeInputMsg = std::make_shared<MultimodeInputMsg>();
31     multimodeInputMsg->inputType_ = INPUTTYPE_MOUSEINPUT;
32     inputedMsgObject_ = multimodeInputMsg;
33 }
34 
~MouseInput()35 MouseInput::~MouseInput()
36 {
37 }
38 
RandomInput()39 ErrCode MouseInput::RandomInput()
40 {
41     int32_t screenWidth = -1;
42     int32_t screenHeight = -1;
43     int mouseType;
44     // get the size of screen
45     ErrCode result = WuKongUtil::GetInstance()->GetScreenSize(screenWidth, screenHeight);
46     if (result != OHOS::ERR_OK) {
47         return result;
48     }
49     // generate random point on the screen
50     int xClickPosition = rand() % screenWidth;
51     int yClickPosition = rand() % screenHeight;
52     // distrbute type accord to percentage
53     int randomInt = rand() % ONEHUNDRED;
54     if (randomInt < MOUSE_MID_PERCENT) {
55         mouseType = MMI::PointerEvent::MOUSE_BUTTON_MIDDLE;
56     } else if (randomInt < (MOUSE_RIGHT_PERCENT + MOUSE_MID_PERCENT)) {
57         mouseType = MMI::PointerEvent::MOUSE_BUTTON_RIGHT;
58     } else {
59         mouseType = MMI::PointerEvent::MOUSE_BUTTON_LEFT;
60     }
61     INFO_LOG_STR("Mouse: (%d, %d) Mouse Type: (%s)", xClickPosition, yClickPosition,
62                  MouseTypeToString(mouseType).c_str());
63     auto multiinput = MultimodeManager::GetInstance();
64     result =
65         multiinput->PointerInput(xClickPosition, yClickPosition, mouseType, MMI::PointerEvent::POINTER_ACTION_DOWN);
66     if (result != OHOS::ERR_OK) {
67         return result;
68     }
69     result = multiinput->PointerInput(xClickPosition, yClickPosition, mouseType, MMI::PointerEvent::POINTER_ACTION_UP);
70     if (result != OHOS::ERR_OK) {
71         return result;
72     }
73     Report::GetInstance()->SyncInputInfo(inputedMsgObject_);
74     return result;
75 }
76 
GetInputInfo()77 ErrCode MouseInput::GetInputInfo()
78 {
79     return OHOS::ERR_OK;
80 }
81 
MouseTypeToString(int mousetype)82 std::string MouseInput::MouseTypeToString(int mousetype)
83 {
84     switch (mousetype) {
85         case MMI::PointerEvent::MOUSE_BUTTON_MIDDLE:
86             return "MOUSE_MIDDLE";
87             break;
88         case MMI::PointerEvent::MOUSE_BUTTON_RIGHT:
89             return "MOUSE_RIGHT";
90             break;
91         case MMI::PointerEvent::MOUSE_BUTTON_LEFT:
92             return "MOUSE_LEFT";
93             break;
94         default:
95             return "BUTTON_NONE";
96             break;
97     }
98 }
99 }  // namespace WuKong
100 }  // namespace OHOS
101