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 "appswitch_input.h" 17a69a01cdSopenharmony_ci 18a69a01cdSopenharmony_ci#include "input_manager.h" 19a69a01cdSopenharmony_ci#include "report.h" 20a69a01cdSopenharmony_ci#include "wukong_define.h" 21a69a01cdSopenharmony_ci 22a69a01cdSopenharmony_cinamespace OHOS { 23a69a01cdSopenharmony_cinamespace WuKong { 24a69a01cdSopenharmony_ciAppswitchInput::AppswitchInput() : InputAction() 25a69a01cdSopenharmony_ci{ 26a69a01cdSopenharmony_ci std::shared_ptr<MultimodeInputMsg> multimodeInputMsg = std::make_shared<MultimodeInputMsg>(); 27a69a01cdSopenharmony_ci multimodeInputMsg->inputType_ = INPUTTYPE_APPSWITCHINPUT; 28a69a01cdSopenharmony_ci inputedMsgObject_ = multimodeInputMsg; 29a69a01cdSopenharmony_ci} 30a69a01cdSopenharmony_ci 31a69a01cdSopenharmony_ciAppswitchInput::~AppswitchInput() 32a69a01cdSopenharmony_ci{ 33a69a01cdSopenharmony_ci} 34a69a01cdSopenharmony_ci 35a69a01cdSopenharmony_ciErrCode AppswitchInput::OrderInput(const std::shared_ptr<SpcialTestObject>& specialTestObject) 36a69a01cdSopenharmony_ci{ 37a69a01cdSopenharmony_ci AppSwitchParam* appSwitchPtr = static_cast<AppSwitchParam*>(specialTestObject.get()); 38a69a01cdSopenharmony_ci if (appSwitchPtr == nullptr) { 39a69a01cdSopenharmony_ci return OHOS::ERR_INVALID_VALUE; 40a69a01cdSopenharmony_ci } 41a69a01cdSopenharmony_ci std::string bundlename = appSwitchPtr->bundlename_; 42a69a01cdSopenharmony_ci std::vector<std::string> bundleList(0); 43a69a01cdSopenharmony_ci std::vector<std::string> abilityList(0); 44a69a01cdSopenharmony_ci auto util = WuKongUtil::GetInstance(); 45a69a01cdSopenharmony_ci util->GetBundleList(bundleList, abilityList); 46a69a01cdSopenharmony_ci if (bundleList.size() == 0 || abilityList.size() == 0) { 47a69a01cdSopenharmony_ci ERROR_LOG_STR("bundleList (%u) or abilityList (%u) is 0", bundleList.size(), abilityList.size()); 48a69a01cdSopenharmony_ci return OHOS::ERR_INVALID_VALUE; 49a69a01cdSopenharmony_ci } 50a69a01cdSopenharmony_ci uint32_t index = util->FindElement(bundleList, bundlename); 51a69a01cdSopenharmony_ci if (index == INVALIDVALUE) { 52a69a01cdSopenharmony_ci ERROR_LOG("not found bundle"); 53a69a01cdSopenharmony_ci return OHOS::ERR_INVALID_VALUE; 54a69a01cdSopenharmony_ci } 55a69a01cdSopenharmony_ci 56a69a01cdSopenharmony_ci // start ability through bundle information 57a69a01cdSopenharmony_ci ErrCode result = AppManager::GetInstance()->StartAbilityByBundleInfo(abilityList[index], bundleList[index]); 58a69a01cdSopenharmony_ci // print the result of start event 59a69a01cdSopenharmony_ci PrintResultOfStartAbility(result, index); 60a69a01cdSopenharmony_ci usleep(WAIT_TIME); 61a69a01cdSopenharmony_ci return result; 62a69a01cdSopenharmony_ci} 63a69a01cdSopenharmony_ci 64a69a01cdSopenharmony_ciErrCode AppswitchInput::RandomInput() 65a69a01cdSopenharmony_ci{ 66a69a01cdSopenharmony_ci std::vector<std::string> bundleList(0); 67a69a01cdSopenharmony_ci std::vector<std::string> abilityList(0); 68a69a01cdSopenharmony_ci WuKongUtil::GetInstance()->GetBundleList(bundleList, abilityList); 69a69a01cdSopenharmony_ci if (bundleList.size() == 0 || abilityList.size() == 0) { 70a69a01cdSopenharmony_ci ERROR_LOG_STR("bundleList (%u) or abilityList (%u) is 0", bundleList.size(), abilityList.size()); 71a69a01cdSopenharmony_ci return OHOS::ERR_INVALID_VALUE; 72a69a01cdSopenharmony_ci } 73a69a01cdSopenharmony_ci uint32_t index = GetAbilityIndex(bundleList); 74a69a01cdSopenharmony_ci if (index == INVALIDVALUE) { 75a69a01cdSopenharmony_ci ERROR_LOG("not found bundle"); 76a69a01cdSopenharmony_ci return OHOS::ERR_INVALID_VALUE; 77a69a01cdSopenharmony_ci } 78a69a01cdSopenharmony_ci // start ability through bundle information 79a69a01cdSopenharmony_ci ErrCode result = AppManager::GetInstance()->StartAbilityByBundleInfo(abilityList[index], bundleList[index]); 80a69a01cdSopenharmony_ci // print the result of start event 81a69a01cdSopenharmony_ci PrintResultOfStartAbility(result, index); 82a69a01cdSopenharmony_ci TRACK_LOG_STR("bundle index: %d", index); 83a69a01cdSopenharmony_ci Report::GetInstance()->SyncInputInfo(inputedMsgObject_); 84a69a01cdSopenharmony_ci return result; 85a69a01cdSopenharmony_ci} 86a69a01cdSopenharmony_ci 87a69a01cdSopenharmony_ciErrCode AppswitchInput::RandomInput(const std::string &uri, const std::string &uriType) 88a69a01cdSopenharmony_ci{ 89a69a01cdSopenharmony_ci ErrCode result = AppManager::GetInstance()->StartAbilityByUriAndType(uri, uriType); 90a69a01cdSopenharmony_ci Report::GetInstance()->SyncInputInfo(inputedMsgObject_); 91a69a01cdSopenharmony_ci return result; 92a69a01cdSopenharmony_ci} 93a69a01cdSopenharmony_ci 94a69a01cdSopenharmony_ciErrCode AppswitchInput::RandomInput(const std::string &uri, const std::vector<std::string> &abilityName) 95a69a01cdSopenharmony_ci{ 96a69a01cdSopenharmony_ci ErrCode result = AppManager::GetInstance()->StartAbilityByAbilityAndUri(uri, abilityName); 97a69a01cdSopenharmony_ci Report::GetInstance()->SyncInputInfo(inputedMsgObject_); 98a69a01cdSopenharmony_ci return result; 99a69a01cdSopenharmony_ci} 100a69a01cdSopenharmony_ci 101a69a01cdSopenharmony_ciErrCode AppswitchInput::FocusInput(bool shouldScreenCap) 102a69a01cdSopenharmony_ci{ 103a69a01cdSopenharmony_ci return AppswitchInput::RandomInput(); 104a69a01cdSopenharmony_ci} 105a69a01cdSopenharmony_ci 106a69a01cdSopenharmony_ciErrCode AppswitchInput::PrintResultOfStartAbility(const ErrCode result, uint32_t index) 107a69a01cdSopenharmony_ci{ 108a69a01cdSopenharmony_ci std::vector<std::string> bundleList; 109a69a01cdSopenharmony_ci std::vector<std::string> abilityList; 110a69a01cdSopenharmony_ci WuKongUtil::GetInstance()->GetBundleList(bundleList, abilityList); 111a69a01cdSopenharmony_ci if (result == OHOS::ERR_OK) { 112a69a01cdSopenharmony_ci INFO_LOG_STR("Bundle Name: (%s) startup successful", bundleList[index].c_str()); 113a69a01cdSopenharmony_ci } else { 114a69a01cdSopenharmony_ci INFO_LOG_STR("Bundle Name: (%s) startup failed", bundleList[index].c_str()); 115a69a01cdSopenharmony_ci } 116a69a01cdSopenharmony_ci return OHOS::ERR_OK; 117a69a01cdSopenharmony_ci} 118a69a01cdSopenharmony_ci 119a69a01cdSopenharmony_ciInputType AppswitchInput::GetInputInfo() 120a69a01cdSopenharmony_ci{ 121a69a01cdSopenharmony_ci return INPUTTYPE_APPSWITCHINPUT; 122a69a01cdSopenharmony_ci} 123a69a01cdSopenharmony_ci 124a69a01cdSopenharmony_ciuint32_t AppswitchInput::GetAbilityIndex(std::vector<std::string>& bundlelist) 125a69a01cdSopenharmony_ci{ 126a69a01cdSopenharmony_ci uint32_t index = INVALIDVALUE; 127a69a01cdSopenharmony_ci std::vector<std::string> allowlist; 128a69a01cdSopenharmony_ci std::vector<std::string> validlist; 129a69a01cdSopenharmony_ci WuKongUtil::GetInstance()->GetAllowList(allowlist); 130a69a01cdSopenharmony_ci WuKongUtil::GetInstance()->GetValidBundleList(validlist); 131a69a01cdSopenharmony_ci if (bundlelist.size() > 0) { 132a69a01cdSopenharmony_ci if (allowlist.size() > 0) { 133a69a01cdSopenharmony_ci index = WuKongUtil::GetInstance()->FindElement(bundlelist, allowlist.at(rand() % allowlist.size())); 134a69a01cdSopenharmony_ci } else if (validlist.size() > 0) { 135a69a01cdSopenharmony_ci index = WuKongUtil::GetInstance()->FindElement(bundlelist, validlist.at(rand() % validlist.size())); 136a69a01cdSopenharmony_ci } else { 137a69a01cdSopenharmony_ci index = rand() % bundlelist.size(); 138a69a01cdSopenharmony_ci } 139a69a01cdSopenharmony_ci } 140a69a01cdSopenharmony_ci return index; 141a69a01cdSopenharmony_ci} 142a69a01cdSopenharmony_ci} // namespace WuKong 143a69a01cdSopenharmony_ci} // namespace OHOS 144