1a69a01cdSopenharmony_ci/*
2a69a01cdSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3a69a01cdSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4a69a01cdSopenharmony_ci * you may not use this file except in compliance with the License.
5a69a01cdSopenharmony_ci * You may obtain a copy of the License at
6a69a01cdSopenharmony_ci *
7a69a01cdSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8a69a01cdSopenharmony_ci *
9a69a01cdSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10a69a01cdSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11a69a01cdSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12a69a01cdSopenharmony_ci * See the License for the specific language governing permissions and
13a69a01cdSopenharmony_ci * limitations under the License.
14a69a01cdSopenharmony_ci */
15a69a01cdSopenharmony_ci
16a69a01cdSopenharmony_ci#include "swap_input.h"
17a69a01cdSopenharmony_ci
18a69a01cdSopenharmony_ci#include "input_manager.h"
19a69a01cdSopenharmony_ci#include "multimode_manager.h"
20a69a01cdSopenharmony_ci#include "wukong_define.h"
21a69a01cdSopenharmony_ci#include "report.h"
22a69a01cdSopenharmony_cinamespace OHOS {
23a69a01cdSopenharmony_cinamespace WuKong {
24a69a01cdSopenharmony_ciSwapInput::SwapInput() : InputAction()
25a69a01cdSopenharmony_ci{
26a69a01cdSopenharmony_ci    std::shared_ptr<MultimodeInputMsg> multimodeInputMsg = std::make_shared<MultimodeInputMsg>();
27a69a01cdSopenharmony_ci    multimodeInputMsg->inputType_ = INPUTTYPE_SWAPINPUT;
28a69a01cdSopenharmony_ci    inputedMsgObject_ = multimodeInputMsg;
29a69a01cdSopenharmony_ci}
30a69a01cdSopenharmony_ci
31a69a01cdSopenharmony_ciSwapInput::~SwapInput()
32a69a01cdSopenharmony_ci{
33a69a01cdSopenharmony_ci}
34a69a01cdSopenharmony_ci
35a69a01cdSopenharmony_ciErrCode SwapInput::OrderInput(const std::shared_ptr<SpcialTestObject>& specialTestObject)
36a69a01cdSopenharmony_ci{
37a69a01cdSopenharmony_ci    ErrCode result;
38a69a01cdSopenharmony_ci    static bool isBack = true;
39a69a01cdSopenharmony_ci    SwapParam* swapPtr = static_cast<SwapParam*>(specialTestObject.get());
40a69a01cdSopenharmony_ci    if (swapPtr == nullptr) {
41a69a01cdSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
42a69a01cdSopenharmony_ci    }
43a69a01cdSopenharmony_ci    int xSrcPosition = swapPtr->startX_;
44a69a01cdSopenharmony_ci    int ySrcPosition = swapPtr->startY_;
45a69a01cdSopenharmony_ci    int xDstPosition = swapPtr->endX_;
46a69a01cdSopenharmony_ci    int yDstPosition = swapPtr->endY_;
47a69a01cdSopenharmony_ci    if (swapPtr->isGoBack_) {
48a69a01cdSopenharmony_ci        isBack = !isBack;
49a69a01cdSopenharmony_ci        swapPtr->isBack_ = isBack;
50a69a01cdSopenharmony_ci    }
51a69a01cdSopenharmony_ci    if (isBack) {
52a69a01cdSopenharmony_ci        xSrcPosition = swapPtr->endX_;
53a69a01cdSopenharmony_ci        ySrcPosition = swapPtr->endY_;
54a69a01cdSopenharmony_ci        xDstPosition = swapPtr->startX_;
55a69a01cdSopenharmony_ci        yDstPosition = swapPtr->startY_;
56a69a01cdSopenharmony_ci    }
57a69a01cdSopenharmony_ci    result = MultimodeManager::GetInstance()->IntervalSwap(xSrcPosition, ySrcPosition, xDstPosition, yDstPosition);
58a69a01cdSopenharmony_ci    return result;
59a69a01cdSopenharmony_ci}
60a69a01cdSopenharmony_ci
61a69a01cdSopenharmony_ciErrCode SwapInput::RandomInput()
62a69a01cdSopenharmony_ci{
63a69a01cdSopenharmony_ci    int32_t screenWidth = -1;
64a69a01cdSopenharmony_ci    int32_t screenHeight = -1;
65a69a01cdSopenharmony_ci    ErrCode result = WuKongUtil::GetInstance()->GetScreenSize(screenWidth, screenHeight);
66a69a01cdSopenharmony_ci    if (result != OHOS::ERR_OK) {
67a69a01cdSopenharmony_ci        return result;
68a69a01cdSopenharmony_ci    }
69a69a01cdSopenharmony_ci    int xSrcPosition = rand() % screenWidth;
70a69a01cdSopenharmony_ci    int ySrcPosition = rand() % screenHeight;
71a69a01cdSopenharmony_ci    int xDstPosition = rand() % screenWidth;
72a69a01cdSopenharmony_ci    int yDstPosition = rand() % screenHeight;
73a69a01cdSopenharmony_ci    INFO_LOG_STR("Swap: (%d, %d) -> (%d, %d)", xSrcPosition, ySrcPosition, xDstPosition, yDstPosition);
74a69a01cdSopenharmony_ci    result = MultimodeManager::GetInstance()->IntervalSwap(xSrcPosition, ySrcPosition, xDstPosition, yDstPosition);
75a69a01cdSopenharmony_ci    if (result != OHOS::ERR_OK) {
76a69a01cdSopenharmony_ci        return result;
77a69a01cdSopenharmony_ci    }
78a69a01cdSopenharmony_ci    Report::GetInstance()->SyncInputInfo(inputedMsgObject_);
79a69a01cdSopenharmony_ci    return result;
80a69a01cdSopenharmony_ci}
81a69a01cdSopenharmony_ci
82a69a01cdSopenharmony_ciInputType SwapInput::GetInputInfo()
83a69a01cdSopenharmony_ci{
84a69a01cdSopenharmony_ci    return INPUTTYPE_SWAPINPUT;
85a69a01cdSopenharmony_ci}
86a69a01cdSopenharmony_ci}  // namespace WuKong
87a69a01cdSopenharmony_ci}  // namespace OHOS
88