17c804472Sopenharmony_ci/* 27c804472Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47c804472Sopenharmony_ci * you may not use this file except in compliance with the License. 57c804472Sopenharmony_ci * You may obtain a copy of the License at 67c804472Sopenharmony_ci * 77c804472Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87c804472Sopenharmony_ci * 97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c804472Sopenharmony_ci * See the License for the specific language governing permissions and 137c804472Sopenharmony_ci * limitations under the License. 147c804472Sopenharmony_ci */ 157c804472Sopenharmony_ci 167c804472Sopenharmony_ci#include "JsAppImpl.h" 177c804472Sopenharmony_ci 187c804472Sopenharmony_ci#include "CommandParser.h" 197c804472Sopenharmony_ci#include "FileSystem.h" 207c804472Sopenharmony_ci#include "JsonReader.h" 217c804472Sopenharmony_ci#include "PreviewerEngineLog.h" 227c804472Sopenharmony_ci#include "SharedData.h" 237c804472Sopenharmony_ci#include "TraceTool.h" 247c804472Sopenharmony_ci#include "VirtualScreenImpl.h" 257c804472Sopenharmony_ci#include "external/EventHandler.h" 267c804472Sopenharmony_ci#include "external/StageContext.h" 277c804472Sopenharmony_ci#include "viewport_config.h" 287c804472Sopenharmony_ci#include "glfw_render_context.h" 297c804472Sopenharmony_ci#if defined(REPLACE_WINDOW_HEADER) 307c804472Sopenharmony_ci#include "window.h" 317c804472Sopenharmony_ci#endif 327c804472Sopenharmony_ci#include "window_model.h" 337c804472Sopenharmony_ci#include "window_display.h" 347c804472Sopenharmony_ci#include "ace_preview_helper.h" 357c804472Sopenharmony_ci#include "ClipboardHelper.h" 367c804472Sopenharmony_ci#include "CommandLineInterface.h" 377c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 387c804472Sopenharmony_ci#include "options.h" 397c804472Sopenharmony_ci#include "simulator.h" 407c804472Sopenharmony_ci#endif 417c804472Sopenharmony_ci#include <fstream> 427c804472Sopenharmony_ci 437c804472Sopenharmony_ciusing namespace OHOS; 447c804472Sopenharmony_ciusing namespace OHOS::Ace; 457c804472Sopenharmony_ci 467c804472Sopenharmony_cinamespace { 477c804472Sopenharmony_ciScreenInfo screenInfo; 487c804472Sopenharmony_ciCommandInfo commandInfo; 497c804472Sopenharmony_ci} 507c804472Sopenharmony_ci 517c804472Sopenharmony_ciclass PreviewerListener : public OHOS::Rosen::IWindowSystemBarEnableListener { 527c804472Sopenharmony_cipublic: 537c804472Sopenharmony_ci OHOS::Rosen::WMError OnSetSpecificBarProperty(OHOS::Rosen::WindowType type, 547c804472Sopenharmony_ci const OHOS::Rosen::SystemBarProperty& property) 557c804472Sopenharmony_ci { 567c804472Sopenharmony_ci JsAppImpl::GetInstance().CalculateAvoidAreaByType(type, property); 577c804472Sopenharmony_ci return OHOS::Rosen::WMError::WM_OK; 587c804472Sopenharmony_ci } 597c804472Sopenharmony_ci}; 607c804472Sopenharmony_ci 617c804472Sopenharmony_cinamespace { 627c804472Sopenharmony_ciOHOS::sptr<PreviewerListener> listener = nullptr; 637c804472Sopenharmony_ci} 647c804472Sopenharmony_ci 657c804472Sopenharmony_ciJsAppImpl::JsAppImpl() noexcept : ability(nullptr), isStop(false) 667c804472Sopenharmony_ci{ 677c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 687c804472Sopenharmony_ci windowModel = std::make_shared<OHOS::Previewer::PreviewerWindowModel>(); 697c804472Sopenharmony_ci#endif 707c804472Sopenharmony_ci} 717c804472Sopenharmony_ci 727c804472Sopenharmony_ciJsAppImpl::~JsAppImpl() {} 737c804472Sopenharmony_ci 747c804472Sopenharmony_ciJsAppImpl& JsAppImpl::GetInstance() 757c804472Sopenharmony_ci{ 767c804472Sopenharmony_ci static JsAppImpl instance; 777c804472Sopenharmony_ci return instance; 787c804472Sopenharmony_ci} 797c804472Sopenharmony_ci 807c804472Sopenharmony_civoid JsAppImpl::Start() 817c804472Sopenharmony_ci{ 827c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().InitVirtualScreen(); 837c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().InitAll(pipeName, pipePort); 847c804472Sopenharmony_ci isFinished = false; 857c804472Sopenharmony_ci ILOG("Start run js app"); 867c804472Sopenharmony_ci OHOS::AppExecFwk::EventHandler::SetMainThreadId(std::this_thread::get_id()); 877c804472Sopenharmony_ci RunJsApp(); 887c804472Sopenharmony_ci ILOG("Js app run finished"); 897c804472Sopenharmony_ci while (!isStop) { 907c804472Sopenharmony_ci // Execute all tasks in the main thread 917c804472Sopenharmony_ci OHOS::AppExecFwk::EventHandler::Run(); 927c804472Sopenharmony_ci glfwRenderContext->PollEvents(); 937c804472Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(1)); 947c804472Sopenharmony_ci } 957c804472Sopenharmony_ci StopAbility(); // start and stop ability at the same thread 967c804472Sopenharmony_ci ILOG("JsAppImpl::Interrupt finished"); 977c804472Sopenharmony_ci isFinished = true; 987c804472Sopenharmony_ci} 997c804472Sopenharmony_ci 1007c804472Sopenharmony_civoid JsAppImpl::Restart() 1017c804472Sopenharmony_ci{ 1027c804472Sopenharmony_ci StopAbility(); 1037c804472Sopenharmony_ci} 1047c804472Sopenharmony_ci 1057c804472Sopenharmony_cistd::string JsAppImpl::GetJSONTree() 1067c804472Sopenharmony_ci{ 1077c804472Sopenharmony_ci std::string jsonTree = ability->GetJSONTree(); 1087c804472Sopenharmony_ci return jsonTree; 1097c804472Sopenharmony_ci} 1107c804472Sopenharmony_ci 1117c804472Sopenharmony_cistd::string JsAppImpl::GetDefaultJSONTree() 1127c804472Sopenharmony_ci{ 1137c804472Sopenharmony_ci ILOG("Start getDefaultJsontree."); 1147c804472Sopenharmony_ci std::string jsonTree = ability->GetDefaultJSONTree(); 1157c804472Sopenharmony_ci ILOG("GetDefaultJsontree finished."); 1167c804472Sopenharmony_ci return jsonTree; 1177c804472Sopenharmony_ci} 1187c804472Sopenharmony_ci 1197c804472Sopenharmony_civoid JsAppImpl::OrientationChanged(std::string commandOrientation) 1207c804472Sopenharmony_ci{ 1217c804472Sopenharmony_ci aceRunArgs.deviceWidth = height; 1227c804472Sopenharmony_ci aceRunArgs.deviceHeight = width; 1237c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().WidthAndHeightReverse(); 1247c804472Sopenharmony_ci AdaptDeviceType(aceRunArgs, commandInfo.deviceType, aceRunArgs.deviceWidth); 1257c804472Sopenharmony_ci if (commandOrientation == "portrait") { 1267c804472Sopenharmony_ci aceRunArgs.deviceConfig.orientation = DeviceOrientation::PORTRAIT; 1277c804472Sopenharmony_ci } else { 1287c804472Sopenharmony_ci aceRunArgs.deviceConfig.orientation = DeviceOrientation::LANDSCAPE; 1297c804472Sopenharmony_ci } 1307c804472Sopenharmony_ci 1317c804472Sopenharmony_ci orientation = commandOrientation; 1327c804472Sopenharmony_ci ILOG("OrientationChanged: %s %d %d %f", orientation.c_str(), aceRunArgs.deviceWidth, 1337c804472Sopenharmony_ci aceRunArgs.deviceHeight, aceRunArgs.deviceConfig.density); 1347c804472Sopenharmony_ci if (ability != nullptr) { 1357c804472Sopenharmony_ci OHOS::AppExecFwk::EventHandler::PostTask([this]() { 1367c804472Sopenharmony_ci glfwRenderContext->SetWindowSize(width, height); 1377c804472Sopenharmony_ci }); 1387c804472Sopenharmony_ci ability->SurfaceChanged(aceRunArgs.deviceConfig.orientation, aceRunArgs.deviceConfig.density, 1397c804472Sopenharmony_ci aceRunArgs.deviceWidth, aceRunArgs.deviceHeight); 1407c804472Sopenharmony_ci } 1417c804472Sopenharmony_ci} 1427c804472Sopenharmony_ci 1437c804472Sopenharmony_civoid JsAppImpl::ColorModeChanged(const std::string commandColorMode) 1447c804472Sopenharmony_ci{ 1457c804472Sopenharmony_ci if (commandColorMode == "light") { 1467c804472Sopenharmony_ci aceRunArgs.deviceConfig.colorMode = ColorMode::LIGHT; 1477c804472Sopenharmony_ci } else { 1487c804472Sopenharmony_ci aceRunArgs.deviceConfig.colorMode = ColorMode::DARK; 1497c804472Sopenharmony_ci } 1507c804472Sopenharmony_ci 1517c804472Sopenharmony_ci if (ability != nullptr) { 1527c804472Sopenharmony_ci ability->OnConfigurationChanged(aceRunArgs.deviceConfig); 1537c804472Sopenharmony_ci } 1547c804472Sopenharmony_ci} 1557c804472Sopenharmony_ci 1567c804472Sopenharmony_civoid JsAppImpl::Interrupt() 1577c804472Sopenharmony_ci{ 1587c804472Sopenharmony_ci isStop = true; 1597c804472Sopenharmony_ci} 1607c804472Sopenharmony_ci 1617c804472Sopenharmony_civoid JsAppImpl::SetJsAppArgs(OHOS::Ace::Platform::AceRunArgs& args) 1627c804472Sopenharmony_ci{ 1637c804472Sopenharmony_ci ILOG("foldStatus:%s foldWidth:%d foldHeight:%d", 1647c804472Sopenharmony_ci screenInfo.foldStatus.c_str(), screenInfo.foldWidth, screenInfo.foldHeight); 1657c804472Sopenharmony_ci SetAssetPath(args, jsAppPath); 1667c804472Sopenharmony_ci SetProjectModel(args); 1677c804472Sopenharmony_ci SetPageProfile(args, commandInfo.pages); 1687c804472Sopenharmony_ci SetDeviceWidth(args, ConvertFoldStatus(screenInfo.foldStatus) == 1697c804472Sopenharmony_ci OHOS::Rosen::FoldStatus::FOLDED ? screenInfo.foldWidth : screenInfo.orignalResolutionWidth); 1707c804472Sopenharmony_ci SetDeviceHeight(args, ConvertFoldStatus(screenInfo.foldStatus) == 1717c804472Sopenharmony_ci OHOS::Rosen::FoldStatus::FOLDED ? screenInfo.foldHeight : screenInfo.orignalResolutionHeight); 1727c804472Sopenharmony_ci SetWindowTitle(args, "Ace"); 1737c804472Sopenharmony_ci SetUrl(args, urlPath); 1747c804472Sopenharmony_ci SetConfigChanges(args, configChanges); 1757c804472Sopenharmony_ci SetColorMode(args, colorMode); 1767c804472Sopenharmony_ci SetOrientation(args, orientation); 1777c804472Sopenharmony_ci SetAceVersionArgs(args, aceVersion); 1787c804472Sopenharmony_ci SetDeviceScreenDensity(atoi(screenDensity.c_str()), commandInfo.deviceType); 1797c804472Sopenharmony_ci SetLanguage(args, SharedData<std::string>::GetData(SharedDataType::LAN)); 1807c804472Sopenharmony_ci SetRegion(args, SharedData<std::string>::GetData(SharedDataType::REGION)); 1817c804472Sopenharmony_ci SetScript(args, ""); 1827c804472Sopenharmony_ci SetSystemResourcesPath(args); 1837c804472Sopenharmony_ci SetAppResourcesPath(args, commandInfo.appResourcePath); 1847c804472Sopenharmony_ci SetFormsEnabled(args, commandInfo.isCardDisplay); 1857c804472Sopenharmony_ci SetContainerSdkPath(args, commandInfo.containerSdkPath); 1867c804472Sopenharmony_ci AdaptDeviceType(args, commandInfo.deviceType, ConvertFoldStatus(screenInfo.foldStatus) == 1877c804472Sopenharmony_ci OHOS::Rosen::FoldStatus::FOLDED ? screenInfo.foldWidth : screenInfo.orignalResolutionWidth); 1887c804472Sopenharmony_ci SetOnRouterChange(args); 1897c804472Sopenharmony_ci SetOnError(args); 1907c804472Sopenharmony_ci SetComponentModeEnabled(args, commandInfo.isComponentMode); 1917c804472Sopenharmony_ci SetPkgContextInfo(); 1927c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED 1937c804472Sopenharmony_ci SetComponentTestConfig(args, componentTestModeConfig); 1947c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED 1957c804472Sopenharmony_ci ILOG("start ability: %d %d %f", args.deviceWidth, args.deviceHeight, args.deviceConfig.density); 1967c804472Sopenharmony_ci} 1977c804472Sopenharmony_ci 1987c804472Sopenharmony_civoid JsAppImpl::RunJsApp() 1997c804472Sopenharmony_ci{ 2007c804472Sopenharmony_ci ILOG("RunJsApp 1"); 2017c804472Sopenharmony_ci InitScreenInfo(); 2027c804472Sopenharmony_ci AssignValueForWidthAndHeight(screenInfo.orignalResolutionWidth, screenInfo.orignalResolutionHeight, 2037c804472Sopenharmony_ci screenInfo.compressionResolutionWidth, screenInfo.compressionResolutionHeight); 2047c804472Sopenharmony_ci SetJsAppArgs(aceRunArgs); 2057c804472Sopenharmony_ci OHOS::Ide::StageContext::GetInstance().SetLoaderJsonPath(commandInfo.loaderJsonPath); 2067c804472Sopenharmony_ci OHOS::Ide::StageContext::GetInstance().SetHosSdkPath(commandInfo.containerSdkPath); 2077c804472Sopenharmony_ci OHOS::Ide::StageContext::GetInstance().GetModulePathMapFromLoaderJson(); 2087c804472Sopenharmony_ci OHOS::Previewer::PreviewerDisplay::GetInstance().SetFoldable(screenInfo.foldable); 2097c804472Sopenharmony_ci OHOS::Previewer::PreviewerDisplay::GetInstance().SetFoldStatus(ConvertFoldStatus(screenInfo.foldStatus)); 2107c804472Sopenharmony_ci InitGlfwEnv(); 2117c804472Sopenharmony_ci Platform::AcePreviewHelper::GetInstance()->SetCallbackOfPostTask(AppExecFwk::EventHandler::PostTask); 2127c804472Sopenharmony_ci Platform::AcePreviewHelper::GetInstance()-> 2137c804472Sopenharmony_ci SetCallbackOfIsCurrentRunnerThread(AppExecFwk::EventHandler::IsCurrentRunnerThread); 2147c804472Sopenharmony_ci Platform::AcePreviewHelper::GetInstance()->SetCallbackOfSetClipboardData(ClipboardHelper::SetClipboardData); 2157c804472Sopenharmony_ci Platform::AcePreviewHelper::GetInstance()->SetCallbackOfGetClipboardData(ClipboardHelper::GetClipboardData); 2167c804472Sopenharmony_ci listener = new(std::nothrow) PreviewerListener(); 2177c804472Sopenharmony_ci if (!listener) { 2187c804472Sopenharmony_ci ELOG("Memory allocation failed: listener."); 2197c804472Sopenharmony_ci return; 2207c804472Sopenharmony_ci } 2217c804472Sopenharmony_ci if (isDebug && debugServerPort >= 0) { 2227c804472Sopenharmony_ci RunDebugAbility(); // for debug preview 2237c804472Sopenharmony_ci } else { 2247c804472Sopenharmony_ci RunNormalAbility(); // for normal preview 2257c804472Sopenharmony_ci } 2267c804472Sopenharmony_ci} 2277c804472Sopenharmony_ci 2287c804472Sopenharmony_civoid JsAppImpl::RunNormalAbility() 2297c804472Sopenharmony_ci{ 2307c804472Sopenharmony_ci Platform::AcePreviewHelper::GetInstance()->SetCallbackOfHspBufferTracker( 2317c804472Sopenharmony_ci [](const std::string& inputPath, uint8_t** buff, size_t* buffSize, std::string &errorMsg) -> bool { 2327c804472Sopenharmony_ci if (!buff || !buffSize || inputPath.empty()) { 2337c804472Sopenharmony_ci return false; 2347c804472Sopenharmony_ci } 2357c804472Sopenharmony_ci auto data = OHOS::Ide::StageContext::GetInstance().GetModuleBuffer(inputPath); 2367c804472Sopenharmony_ci if (!data) { 2377c804472Sopenharmony_ci return false; 2387c804472Sopenharmony_ci } 2397c804472Sopenharmony_ci *buff = data->data(); 2407c804472Sopenharmony_ci *buffSize = data->size(); 2417c804472Sopenharmony_ci return true; 2427c804472Sopenharmony_ci }); 2437c804472Sopenharmony_ci if (ability != nullptr) { 2447c804472Sopenharmony_ci ability.reset(); 2457c804472Sopenharmony_ci } 2467c804472Sopenharmony_ci TraceTool::GetInstance().HandleTrace("Launch Js App"); 2477c804472Sopenharmony_ci ability = Platform::AceAbility::CreateInstance(aceRunArgs); 2487c804472Sopenharmony_ci if (ability == nullptr) { 2497c804472Sopenharmony_ci ELOG("JsApp::Run ability create failed."); 2507c804472Sopenharmony_ci return; 2517c804472Sopenharmony_ci } 2527c804472Sopenharmony_ci SetMockJsonInfo(); 2537c804472Sopenharmony_ci OHOS::Rosen::WMError errCode; 2547c804472Sopenharmony_ci OHOS::sptr<OHOS::Rosen::WindowOption> sp = nullptr; 2557c804472Sopenharmony_ci auto window = OHOS::Rosen::Window::Create("previewer", sp, nullptr, errCode); 2567c804472Sopenharmony_ci window->RegisterSystemBarEnableListener(sptr<OHOS::Rosen::IWindowSystemBarEnableListener>(listener)); 2577c804472Sopenharmony_ci window->SetContentInfoCallback(std::move(VirtualScreenImpl::LoadContentCallback)); 2587c804472Sopenharmony_ci window->CreateSurfaceNode("preview_surface", std::move(VirtualScreenImpl::Callback)); 2597c804472Sopenharmony_ci ability->SetWindow(window); 2607c804472Sopenharmony_ci InitAvoidAreas(window); 2617c804472Sopenharmony_ci ability->InitEnv(); 2627c804472Sopenharmony_ci} 2637c804472Sopenharmony_ci 2647c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 2657c804472Sopenharmony_civoid JsAppImpl::RunDebugAbility() 2667c804472Sopenharmony_ci{ 2677c804472Sopenharmony_ci // init window params 2687c804472Sopenharmony_ci SetWindowParams(); 2697c804472Sopenharmony_ci OHOS::Previewer::PreviewerWindow::GetInstance().SetWindowParams(*windowModel); 2707c804472Sopenharmony_ci // start ability 2717c804472Sopenharmony_ci OHOS::AbilityRuntime::Options options; 2727c804472Sopenharmony_ci SetSimulatorParams(options); 2737c804472Sopenharmony_ci simulator = OHOS::AbilityRuntime::Simulator::Create(options); 2747c804472Sopenharmony_ci if (!simulator) { 2757c804472Sopenharmony_ci ELOG("JsApp::Run simulator create failed."); 2767c804472Sopenharmony_ci return; 2777c804472Sopenharmony_ci } 2787c804472Sopenharmony_ci simulator->SetHostResolveBufferTracker( 2797c804472Sopenharmony_ci [](const std::string &inputPath, uint8_t **buff, size_t *buffSize, std::string &errorMsg) -> bool { 2807c804472Sopenharmony_ci if (inputPath.empty() || buff == nullptr || buffSize == nullptr) { 2817c804472Sopenharmony_ci ELOG("Param invalid."); 2827c804472Sopenharmony_ci return false; 2837c804472Sopenharmony_ci } 2847c804472Sopenharmony_ci 2857c804472Sopenharmony_ci DLOG("Get module buffer, input path: %{public}s.", inputPath.c_str()); 2867c804472Sopenharmony_ci auto data = Ide::StageContext::GetInstance().GetModuleBuffer(inputPath); 2877c804472Sopenharmony_ci if (data == nullptr) { 2887c804472Sopenharmony_ci ELOG("Get module buffer failed, input path: %{public}s.", inputPath.c_str()); 2897c804472Sopenharmony_ci return false; 2907c804472Sopenharmony_ci } 2917c804472Sopenharmony_ci 2927c804472Sopenharmony_ci *buff = data->data(); 2937c804472Sopenharmony_ci *buffSize = data->size(); 2947c804472Sopenharmony_ci return true; 2957c804472Sopenharmony_ci }); 2967c804472Sopenharmony_ci SetMockJsonInfo(); 2977c804472Sopenharmony_ci std::string abilitySrcPath = commandInfo.abilityPath; 2987c804472Sopenharmony_ci std::string abilityName = commandInfo.abilityName; 2997c804472Sopenharmony_ci debugAbilityId = simulator->StartAbility(abilitySrcPath, [](int64_t abilityId) {}, abilityName); 3007c804472Sopenharmony_ci if (debugAbilityId < 0) { 3017c804472Sopenharmony_ci ELOG("JsApp::Run ability start failed. abilitySrcPath:%s abilityName:%s", abilitySrcPath.c_str(), 3027c804472Sopenharmony_ci abilityName.c_str()); 3037c804472Sopenharmony_ci return; 3047c804472Sopenharmony_ci } 3057c804472Sopenharmony_ci // set onRender callback 3067c804472Sopenharmony_ci OHOS::Rosen::Window* window = OHOS::Previewer::PreviewerWindow::GetInstance().GetWindowObject(); 3077c804472Sopenharmony_ci if (!window) { 3087c804472Sopenharmony_ci ELOG("JsApp::Run get window failed."); 3097c804472Sopenharmony_ci return; 3107c804472Sopenharmony_ci } 3117c804472Sopenharmony_ci window->RegisterSystemBarEnableListener(sptr<OHOS::Rosen::IWindowSystemBarEnableListener>(listener)); 3127c804472Sopenharmony_ci window->SetContentInfoCallback(std::move(VirtualScreenImpl::LoadContentCallback)); 3137c804472Sopenharmony_ci window->CreateSurfaceNode(options.moduleName, std::move(VirtualScreenImpl::Callback)); 3147c804472Sopenharmony_ci InitAvoidAreas(window); 3157c804472Sopenharmony_ci} 3167c804472Sopenharmony_ci 3177c804472Sopenharmony_civoid JsAppImpl::SetSimulatorParams(OHOS::AbilityRuntime::Options& options) 3187c804472Sopenharmony_ci{ 3197c804472Sopenharmony_ci const std::string path = commandInfo.appResourcePath + FileSystem::GetSeparator() + "module.json"; 3207c804472Sopenharmony_ci if (!FileSystem::IsFileExists(path)) { 3217c804472Sopenharmony_ci ELOG("The module.json file is not exist."); 3227c804472Sopenharmony_ci return; 3237c804472Sopenharmony_ci } 3247c804472Sopenharmony_ci std::optional<std::vector<uint8_t>> ctx = OHOS::Ide::StageContext::GetInstance().ReadFileContents(path); 3257c804472Sopenharmony_ci if (ctx.has_value()) { 3267c804472Sopenharmony_ci options.moduleJsonBuffer = ctx.value(); 3277c804472Sopenharmony_ci } else { 3287c804472Sopenharmony_ci ELOG("get module.json content failed"); 3297c804472Sopenharmony_ci } 3307c804472Sopenharmony_ci SetSimulatorCommonParams(options); 3317c804472Sopenharmony_ci ILOG("setted bundleName:%s moduleName:%s", options.modulePath.c_str(), options.resourcePath.c_str()); 3327c804472Sopenharmony_ci} 3337c804472Sopenharmony_ci 3347c804472Sopenharmony_civoid JsAppImpl::SetSimulatorCommonParams(OHOS::AbilityRuntime::Options& options) 3357c804472Sopenharmony_ci{ 3367c804472Sopenharmony_ci options.modulePath = aceRunArgs.assetPath + FileSystem::GetSeparator() + "modules.abc"; 3377c804472Sopenharmony_ci options.resourcePath = commandInfo.appResourcePath + FileSystem::GetSeparator() + "resources.index"; 3387c804472Sopenharmony_ci if (debugServerPort > 0) { 3397c804472Sopenharmony_ci options.debugPort = debugServerPort; 3407c804472Sopenharmony_ci } 3417c804472Sopenharmony_ci options.assetPath = aceRunArgs.assetPath; 3427c804472Sopenharmony_ci options.systemResourcePath = aceRunArgs.systemResourcesPath; 3437c804472Sopenharmony_ci options.appResourcePath = aceRunArgs.appResourcesPath; 3447c804472Sopenharmony_ci options.containerSdkPath = aceRunArgs.containerSdkPath; 3457c804472Sopenharmony_ci options.url = aceRunArgs.url; 3467c804472Sopenharmony_ci options.language = aceRunArgs.language; 3477c804472Sopenharmony_ci options.region = aceRunArgs.region; 3487c804472Sopenharmony_ci options.script = aceRunArgs.script; 3497c804472Sopenharmony_ci options.themeId = aceRunArgs.themeId; 3507c804472Sopenharmony_ci options.deviceWidth = aceRunArgs.deviceWidth; 3517c804472Sopenharmony_ci options.deviceHeight = aceRunArgs.deviceHeight; 3527c804472Sopenharmony_ci options.isRound = aceRunArgs.isRound; 3537c804472Sopenharmony_ci options.onRouterChange = aceRunArgs.onRouterChange; 3547c804472Sopenharmony_ci options.pkgContextInfoJsonStringMap = aceRunArgs.pkgContextInfoJsonStringMap; 3557c804472Sopenharmony_ci options.packageNameList = aceRunArgs.packageNameList; 3567c804472Sopenharmony_ci OHOS::AbilityRuntime::DeviceConfig deviceCfg; 3577c804472Sopenharmony_ci deviceCfg.deviceType = SetDevice<OHOS::AbilityRuntime::DeviceType>(aceRunArgs.deviceConfig.deviceType); 3587c804472Sopenharmony_ci deviceCfg.orientation = SetOrientation<OHOS::AbilityRuntime::DeviceOrientation>( 3597c804472Sopenharmony_ci aceRunArgs.deviceConfig.orientation); 3607c804472Sopenharmony_ci deviceCfg.colorMode = SetColorMode<OHOS::AbilityRuntime::ColorMode>(aceRunArgs.deviceConfig.colorMode); 3617c804472Sopenharmony_ci deviceCfg.density = aceRunArgs.deviceConfig.density; 3627c804472Sopenharmony_ci options.deviceConfig = deviceCfg; 3637c804472Sopenharmony_ci std::string fPath = commandInfo.configPath; 3647c804472Sopenharmony_ci options.configuration = UpdateConfiguration(aceRunArgs); 3657c804472Sopenharmony_ci std::size_t pos = fPath.find(".idea"); 3667c804472Sopenharmony_ci if (pos == std::string::npos) { 3677c804472Sopenharmony_ci ELOG("previewPath error:%s", fPath.c_str()); 3687c804472Sopenharmony_ci } else { 3697c804472Sopenharmony_ci options.previewPath = fPath.substr(0, pos) + ".idea" + FileSystem::GetSeparator() + "previewer"; 3707c804472Sopenharmony_ci ILOG("previewPath info:%s", options.previewPath.c_str()); 3717c804472Sopenharmony_ci } 3727c804472Sopenharmony_ci options.postTask = AppExecFwk::EventHandler::PostTask; 3737c804472Sopenharmony_ci} 3747c804472Sopenharmony_ci 3757c804472Sopenharmony_cistd::shared_ptr<AppExecFwk::Configuration> JsAppImpl::UpdateConfiguration(OHOS::Ace::Platform::AceRunArgs& args) 3767c804472Sopenharmony_ci{ 3777c804472Sopenharmony_ci std::shared_ptr<AppExecFwk::Configuration> configuration = std::make_shared<AppExecFwk::Configuration>(); 3787c804472Sopenharmony_ci configuration->AddItem(OHOS::AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, 3797c804472Sopenharmony_ci SharedData<std::string>::GetData(SharedDataType::LANGUAGE)); 3807c804472Sopenharmony_ci std::string colorMode = "light"; 3817c804472Sopenharmony_ci if (aceRunArgs.deviceConfig.colorMode == ColorMode::DARK) { 3827c804472Sopenharmony_ci colorMode = "dark"; 3837c804472Sopenharmony_ci } 3847c804472Sopenharmony_ci configuration->AddItem(OHOS::AAFwk::GlobalConfigurationKey::SYSTEM_COLORMODE, colorMode); 3857c804472Sopenharmony_ci std::string direction = "portrait"; 3867c804472Sopenharmony_ci if (aceRunArgs.deviceConfig.orientation == DeviceOrientation::LANDSCAPE) { 3877c804472Sopenharmony_ci orientation = "landscape"; 3887c804472Sopenharmony_ci } 3897c804472Sopenharmony_ci configuration->AddItem(OHOS::AppExecFwk::ConfigurationInner::APPLICATION_DIRECTION, direction); 3907c804472Sopenharmony_ci std::string density = std::to_string(aceRunArgs.deviceConfig.density); 3917c804472Sopenharmony_ci configuration->AddItem(OHOS::AppExecFwk::ConfigurationInner::APPLICATION_DENSITYDPI, density); 3927c804472Sopenharmony_ci return configuration; 3937c804472Sopenharmony_ci} 3947c804472Sopenharmony_ci 3957c804472Sopenharmony_ci 3967c804472Sopenharmony_civoid JsAppImpl::SetWindowParams() const 3977c804472Sopenharmony_ci{ 3987c804472Sopenharmony_ci windowModel->isRound = aceRunArgs.isRound; 3997c804472Sopenharmony_ci windowModel->originWidth = aceRunArgs.deviceWidth; 4007c804472Sopenharmony_ci windowModel->originHeight = aceRunArgs.deviceHeight; 4017c804472Sopenharmony_ci windowModel->compressWidth = aceRunArgs.deviceWidth; 4027c804472Sopenharmony_ci windowModel->compressHeight = aceRunArgs.deviceHeight; 4037c804472Sopenharmony_ci windowModel->density = aceRunArgs.deviceConfig.density; 4047c804472Sopenharmony_ci windowModel->deviceType = SetDevice<OHOS::Previewer::DeviceType>(aceRunArgs.deviceConfig.deviceType); 4057c804472Sopenharmony_ci windowModel->orientation = SetOrientation<OHOS::Previewer::Orientation>(aceRunArgs.deviceConfig.orientation); 4067c804472Sopenharmony_ci windowModel->colorMode = SetColorMode<OHOS::Previewer::ColorMode>(aceRunArgs.deviceConfig.colorMode); 4077c804472Sopenharmony_ci} 4087c804472Sopenharmony_ci#else 4097c804472Sopenharmony_ci void JsAppImpl::RunDebugAbility() 4107c804472Sopenharmony_ci { 4117c804472Sopenharmony_ci ELOG("JsApp::Run ability start failed.Linux is not supported."); 4127c804472Sopenharmony_ci return; 4137c804472Sopenharmony_ci } 4147c804472Sopenharmony_ci#endif 4157c804472Sopenharmony_ci 4167c804472Sopenharmony_civoid JsAppImpl::AdaptDeviceType(Platform::AceRunArgs& args, const std::string type, 4177c804472Sopenharmony_ci const int32_t realDeviceWidth, double screenDendity) const 4187c804472Sopenharmony_ci{ 4197c804472Sopenharmony_ci if (type == "wearable") { 4207c804472Sopenharmony_ci args.deviceConfig.deviceType = DeviceType::WATCH; 4217c804472Sopenharmony_ci double density = screenDendity > 0 ? screenDendity : watchScreenDensity; 4227c804472Sopenharmony_ci double adaptWidthWatch = realDeviceWidth * BASE_SCREEN_DENSITY / density; 4237c804472Sopenharmony_ci args.deviceConfig.density = args.deviceWidth / adaptWidthWatch; 4247c804472Sopenharmony_ci return; 4257c804472Sopenharmony_ci } 4267c804472Sopenharmony_ci if (type == "tv") { 4277c804472Sopenharmony_ci args.deviceConfig.deviceType = DeviceType::TV; 4287c804472Sopenharmony_ci double density = screenDendity > 0 ? screenDendity : tvScreenDensity; 4297c804472Sopenharmony_ci double adaptWidthTv = realDeviceWidth * BASE_SCREEN_DENSITY / density; 4307c804472Sopenharmony_ci args.deviceConfig.density = args.deviceWidth / adaptWidthTv; 4317c804472Sopenharmony_ci return; 4327c804472Sopenharmony_ci } 4337c804472Sopenharmony_ci if (type == "phone" || type == "default") { 4347c804472Sopenharmony_ci args.deviceConfig.deviceType = DeviceType::PHONE; 4357c804472Sopenharmony_ci double density = screenDendity > 0 ? screenDendity : phoneScreenDensity; 4367c804472Sopenharmony_ci double adaptWidthPhone = realDeviceWidth * BASE_SCREEN_DENSITY / density; 4377c804472Sopenharmony_ci args.deviceConfig.density = args.deviceWidth / adaptWidthPhone; 4387c804472Sopenharmony_ci return; 4397c804472Sopenharmony_ci } 4407c804472Sopenharmony_ci if (type == "2in1") { 4417c804472Sopenharmony_ci args.deviceConfig.deviceType = DeviceType::TWO_IN_ONE; 4427c804472Sopenharmony_ci double density = screenDendity > 0 ? screenDendity : twoInOneScreenDensity; 4437c804472Sopenharmony_ci double adaptWidthPhone = realDeviceWidth * BASE_SCREEN_DENSITY / density; 4447c804472Sopenharmony_ci args.deviceConfig.density = args.deviceWidth / adaptWidthPhone; 4457c804472Sopenharmony_ci return; 4467c804472Sopenharmony_ci } 4477c804472Sopenharmony_ci if (type == "tablet") { 4487c804472Sopenharmony_ci args.deviceConfig.deviceType = DeviceType::TABLET; 4497c804472Sopenharmony_ci double density = screenDendity > 0 ? screenDendity : tabletScreenDensity; 4507c804472Sopenharmony_ci double adaptWidthTablet = realDeviceWidth * BASE_SCREEN_DENSITY / density; 4517c804472Sopenharmony_ci args.deviceConfig.density = args.deviceWidth / adaptWidthTablet; 4527c804472Sopenharmony_ci return; 4537c804472Sopenharmony_ci } 4547c804472Sopenharmony_ci if (type == "car") { 4557c804472Sopenharmony_ci args.deviceConfig.deviceType = DeviceType::CAR; 4567c804472Sopenharmony_ci double density = screenDendity > 0 ? screenDendity : carScreenDensity; 4577c804472Sopenharmony_ci double adaptWidthCar = realDeviceWidth * BASE_SCREEN_DENSITY / density; 4587c804472Sopenharmony_ci args.deviceConfig.density = args.deviceWidth / adaptWidthCar; 4597c804472Sopenharmony_ci return; 4607c804472Sopenharmony_ci } 4617c804472Sopenharmony_ci ELOG("DeviceType not supported : %s", type.c_str()); 4627c804472Sopenharmony_ci return; 4637c804472Sopenharmony_ci} 4647c804472Sopenharmony_ci 4657c804472Sopenharmony_civoid JsAppImpl::SetAssetPath(Platform::AceRunArgs& args, const std::string assetPath) const 4667c804472Sopenharmony_ci{ 4677c804472Sopenharmony_ci args.assetPath = assetPath; 4687c804472Sopenharmony_ci} 4697c804472Sopenharmony_ci 4707c804472Sopenharmony_civoid JsAppImpl::SetProjectModel(Platform::AceRunArgs& args) const 4717c804472Sopenharmony_ci{ 4727c804472Sopenharmony_ci int idxVal = CommandParser::GetInstance().GetProjectModelEnumValue(); 4737c804472Sopenharmony_ci ILOG("ProjectModel: %s", CommandParser::GetInstance().GetProjectModelEnumName(idxVal).c_str()); 4747c804472Sopenharmony_ci args.projectModel = Platform::ProjectModel(idxVal); 4757c804472Sopenharmony_ci} 4767c804472Sopenharmony_ci 4777c804472Sopenharmony_civoid JsAppImpl::SetPageProfile(Platform::AceRunArgs& args, const std::string pageProfile) const 4787c804472Sopenharmony_ci{ 4797c804472Sopenharmony_ci args.pageProfile = pageProfile; 4807c804472Sopenharmony_ci} 4817c804472Sopenharmony_ci 4827c804472Sopenharmony_civoid JsAppImpl::SetDeviceWidth(Platform::AceRunArgs& args, const int32_t deviceWidth) const 4837c804472Sopenharmony_ci{ 4847c804472Sopenharmony_ci args.deviceWidth = deviceWidth; 4857c804472Sopenharmony_ci} 4867c804472Sopenharmony_ci 4877c804472Sopenharmony_civoid JsAppImpl::SetDeviceHeight(Platform::AceRunArgs& args, const int32_t deviceHeight) const 4887c804472Sopenharmony_ci{ 4897c804472Sopenharmony_ci args.deviceHeight = deviceHeight; 4907c804472Sopenharmony_ci} 4917c804472Sopenharmony_ci 4927c804472Sopenharmony_civoid JsAppImpl::SetWindowTitle(Platform::AceRunArgs& args, const std::string windowTitle) const 4937c804472Sopenharmony_ci{ 4947c804472Sopenharmony_ci args.windowTitle = windowTitle; 4957c804472Sopenharmony_ci} 4967c804472Sopenharmony_ci 4977c804472Sopenharmony_civoid JsAppImpl::SetUrl(Platform::AceRunArgs& args, const std::string urlPath) const 4987c804472Sopenharmony_ci{ 4997c804472Sopenharmony_ci args.url = urlPath; 5007c804472Sopenharmony_ci} 5017c804472Sopenharmony_ci 5027c804472Sopenharmony_civoid JsAppImpl::SetConfigChanges(Platform::AceRunArgs& args, const std::string configChanges) const 5037c804472Sopenharmony_ci{ 5047c804472Sopenharmony_ci args.configChanges = configChanges; 5057c804472Sopenharmony_ci} 5067c804472Sopenharmony_ci 5077c804472Sopenharmony_civoid JsAppImpl::SetColorMode(Platform::AceRunArgs& args, const std::string colorMode) const 5087c804472Sopenharmony_ci{ 5097c804472Sopenharmony_ci ILOG("JsAppImpl::RunJsApp SetColorMode: %s", colorMode.c_str()); 5107c804472Sopenharmony_ci if (colorMode == "dark") { 5117c804472Sopenharmony_ci args.deviceConfig.colorMode = ColorMode::DARK; 5127c804472Sopenharmony_ci } else { 5137c804472Sopenharmony_ci args.deviceConfig.colorMode = ColorMode::LIGHT; 5147c804472Sopenharmony_ci } 5157c804472Sopenharmony_ci} 5167c804472Sopenharmony_ci 5177c804472Sopenharmony_civoid JsAppImpl::SetOrientation(Platform::AceRunArgs& args, const std::string orientation) const 5187c804472Sopenharmony_ci{ 5197c804472Sopenharmony_ci ILOG("JsAppImpl::RunJsApp SetOrientation: %s", orientation.c_str()); 5207c804472Sopenharmony_ci if (orientation == "landscape") { 5217c804472Sopenharmony_ci args.deviceConfig.orientation = DeviceOrientation::LANDSCAPE; 5227c804472Sopenharmony_ci } else { 5237c804472Sopenharmony_ci args.deviceConfig.orientation = DeviceOrientation::PORTRAIT; 5247c804472Sopenharmony_ci } 5257c804472Sopenharmony_ci} 5267c804472Sopenharmony_ci 5277c804472Sopenharmony_civoid JsAppImpl::SetAceVersionArgs(Platform::AceRunArgs& args, const std::string aceVersion) const 5287c804472Sopenharmony_ci{ 5297c804472Sopenharmony_ci ILOG("JsAppImpl::RunJsApp SetAceVersionArgs: %s", aceVersion.c_str()); 5307c804472Sopenharmony_ci if (aceVersion == "ACE_2_0") { 5317c804472Sopenharmony_ci args.aceVersion = Platform::AceVersion::ACE_2_0; 5327c804472Sopenharmony_ci } else { 5337c804472Sopenharmony_ci args.aceVersion = Platform::AceVersion::ACE_1_0; 5347c804472Sopenharmony_ci } 5357c804472Sopenharmony_ci} 5367c804472Sopenharmony_ci 5377c804472Sopenharmony_civoid JsAppImpl::SetLanguage(Platform::AceRunArgs& args, const std::string language) const 5387c804472Sopenharmony_ci{ 5397c804472Sopenharmony_ci args.language = language; 5407c804472Sopenharmony_ci} 5417c804472Sopenharmony_ci 5427c804472Sopenharmony_civoid JsAppImpl::SetRegion(Platform::AceRunArgs& args, const std::string region) const 5437c804472Sopenharmony_ci{ 5447c804472Sopenharmony_ci args.region = region; 5457c804472Sopenharmony_ci} 5467c804472Sopenharmony_ci 5477c804472Sopenharmony_civoid JsAppImpl::SetScript(Platform::AceRunArgs& args, const std::string script) const 5487c804472Sopenharmony_ci{ 5497c804472Sopenharmony_ci args.script = script; 5507c804472Sopenharmony_ci} 5517c804472Sopenharmony_ci 5527c804472Sopenharmony_civoid JsAppImpl::SetSystemResourcesPath(Platform::AceRunArgs& args) const 5537c804472Sopenharmony_ci{ 5547c804472Sopenharmony_ci std::string sep = FileSystem::GetSeparator(); 5557c804472Sopenharmony_ci std::string rPath = FileSystem::GetApplicationPath(); 5567c804472Sopenharmony_ci rPath = FileSystem::NormalizePath(rPath); 5577c804472Sopenharmony_ci int idx = rPath.find_last_of(sep); 5587c804472Sopenharmony_ci rPath = rPath.substr(0, idx + 1) + "resources"; 5597c804472Sopenharmony_ci args.systemResourcesPath = rPath; 5607c804472Sopenharmony_ci} 5617c804472Sopenharmony_ci 5627c804472Sopenharmony_civoid JsAppImpl::SetAppResourcesPath(Platform::AceRunArgs& args, const std::string appResourcesPath) const 5637c804472Sopenharmony_ci{ 5647c804472Sopenharmony_ci args.appResourcesPath = appResourcesPath; 5657c804472Sopenharmony_ci} 5667c804472Sopenharmony_ci 5677c804472Sopenharmony_civoid JsAppImpl::SetFormsEnabled(Platform::AceRunArgs& args, bool formsEnabled) const 5687c804472Sopenharmony_ci{ 5697c804472Sopenharmony_ci args.formsEnabled = formsEnabled; 5707c804472Sopenharmony_ci} 5717c804472Sopenharmony_ci 5727c804472Sopenharmony_civoid JsAppImpl::SetContainerSdkPath(Platform::AceRunArgs& args, const std::string containerSdkPath) const 5737c804472Sopenharmony_ci{ 5747c804472Sopenharmony_ci args.containerSdkPath = containerSdkPath; 5757c804472Sopenharmony_ci} 5767c804472Sopenharmony_ci 5777c804472Sopenharmony_civoid JsAppImpl::SetOnRouterChange(Platform::AceRunArgs& args) const 5787c804472Sopenharmony_ci{ 5797c804472Sopenharmony_ci args.onRouterChange = std::move(VirtualScreenImpl::PageCallback); 5807c804472Sopenharmony_ci} 5817c804472Sopenharmony_ci 5827c804472Sopenharmony_civoid JsAppImpl::SetOnError(Platform::AceRunArgs& args) const 5837c804472Sopenharmony_ci{ 5847c804472Sopenharmony_ci args.onError = std::move(VirtualScreenImpl::FastPreviewCallback); 5857c804472Sopenharmony_ci} 5867c804472Sopenharmony_ci 5877c804472Sopenharmony_civoid JsAppImpl::SetComponentModeEnabled(Platform::AceRunArgs& args, bool isComponentMode) const 5887c804472Sopenharmony_ci{ 5897c804472Sopenharmony_ci args.isComponentMode = isComponentMode; 5907c804472Sopenharmony_ci} 5917c804472Sopenharmony_ci 5927c804472Sopenharmony_civoid JsAppImpl::AssignValueForWidthAndHeight(const int32_t origWidth, 5937c804472Sopenharmony_ci const int32_t origHeight, 5947c804472Sopenharmony_ci const int32_t compWidth, 5957c804472Sopenharmony_ci const int32_t compHeight) 5967c804472Sopenharmony_ci{ 5977c804472Sopenharmony_ci orignalWidth = origWidth; 5987c804472Sopenharmony_ci orignalHeight = origHeight; 5997c804472Sopenharmony_ci width = compWidth; 6007c804472Sopenharmony_ci height = compHeight; 6017c804472Sopenharmony_ci ILOG("AssignValueForWidthAndHeight: %d %d %d %d", orignalWidth, orignalHeight, width, height); 6027c804472Sopenharmony_ci} 6037c804472Sopenharmony_ci 6047c804472Sopenharmony_civoid JsAppImpl::ResolutionChanged(ResolutionParam& param, int32_t screenDensity, std::string reason) 6057c804472Sopenharmony_ci{ 6067c804472Sopenharmony_ci SetResolutionParams(param.orignalWidth, param.orignalHeight, param.compressionWidth, 6077c804472Sopenharmony_ci param.compressionHeight, screenDensity); 6087c804472Sopenharmony_ci if (isDebug && debugServerPort >= 0) { 6097c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 6107c804472Sopenharmony_ci SetWindowParams(); 6117c804472Sopenharmony_ci OHOS::Ace::ViewportConfig config; 6127c804472Sopenharmony_ci config.SetSize(windowModel->originWidth, windowModel->originHeight); 6137c804472Sopenharmony_ci config.SetPosition(0, 0); 6147c804472Sopenharmony_ci config.SetOrientation(static_cast<int32_t>( 6157c804472Sopenharmony_ci OHOS::Previewer::PreviewerWindow::TransOrientation(windowModel->orientation))); 6167c804472Sopenharmony_ci config.SetDensity(windowModel->density); 6177c804472Sopenharmony_ci OHOS::Rosen::Window* window = OHOS::Previewer::PreviewerWindow::GetInstance().GetWindowObject(); 6187c804472Sopenharmony_ci if (!window) { 6197c804472Sopenharmony_ci ELOG("JsApp::Run get window failed."); 6207c804472Sopenharmony_ci return; 6217c804472Sopenharmony_ci } 6227c804472Sopenharmony_ci InitAvoidAreas(window); 6237c804472Sopenharmony_ci OHOS::AppExecFwk::EventHandler::PostTask([this]() { 6247c804472Sopenharmony_ci glfwRenderContext->SetWindowSize(aceRunArgs.deviceWidth, aceRunArgs.deviceHeight); 6257c804472Sopenharmony_ci }); 6267c804472Sopenharmony_ci simulator->UpdateConfiguration(*(UpdateConfiguration(aceRunArgs).get())); 6277c804472Sopenharmony_ci window->SetViewportConfig(config); 6287c804472Sopenharmony_ci#endif 6297c804472Sopenharmony_ci } else { 6307c804472Sopenharmony_ci if (ability != nullptr) { 6317c804472Sopenharmony_ci InitAvoidAreas(ability->GetWindow()); 6327c804472Sopenharmony_ci OHOS::AppExecFwk::EventHandler::PostTask([this]() { 6337c804472Sopenharmony_ci glfwRenderContext->SetWindowSize(aceRunArgs.deviceWidth, aceRunArgs.deviceHeight); 6347c804472Sopenharmony_ci }); 6357c804472Sopenharmony_ci ability->SurfaceChanged(aceRunArgs.deviceConfig.orientation, aceRunArgs.deviceConfig.density, 6367c804472Sopenharmony_ci aceRunArgs.deviceWidth, aceRunArgs.deviceHeight, ConvertResizeReason(reason)); 6377c804472Sopenharmony_ci } 6387c804472Sopenharmony_ci } 6397c804472Sopenharmony_ci} 6407c804472Sopenharmony_ci 6417c804472Sopenharmony_ciWindowSizeChangeReason JsAppImpl::ConvertResizeReason(std::string reason) 6427c804472Sopenharmony_ci{ 6437c804472Sopenharmony_ci if (reason == "undefined") { 6447c804472Sopenharmony_ci return WindowSizeChangeReason::UNDEFINED; 6457c804472Sopenharmony_ci } else if (reason == "rotation") { 6467c804472Sopenharmony_ci return WindowSizeChangeReason::ROTATION; 6477c804472Sopenharmony_ci } else { 6487c804472Sopenharmony_ci return WindowSizeChangeReason::RESIZE; 6497c804472Sopenharmony_ci } 6507c804472Sopenharmony_ci} 6517c804472Sopenharmony_ci 6527c804472Sopenharmony_civoid JsAppImpl::SetResolutionParams(int32_t changedOriginWidth, int32_t changedOriginHeight, int32_t changedWidth, 6537c804472Sopenharmony_ci int32_t changedHeight, int32_t screenDensity) 6547c804472Sopenharmony_ci{ 6557c804472Sopenharmony_ci SetDeviceWidth(aceRunArgs, changedWidth); 6567c804472Sopenharmony_ci SetDeviceHeight(aceRunArgs, changedHeight); 6577c804472Sopenharmony_ci orignalWidth = changedOriginWidth; 6587c804472Sopenharmony_ci orignalHeight = changedOriginHeight; 6597c804472Sopenharmony_ci SetDeviceScreenDensity(screenDensity, commandInfo.deviceType); 6607c804472Sopenharmony_ci AdaptDeviceType(aceRunArgs, commandInfo.deviceType, changedOriginWidth); 6617c804472Sopenharmony_ci AssignValueForWidthAndHeight(changedOriginWidth, changedOriginHeight, changedWidth, changedHeight); 6627c804472Sopenharmony_ci if (changedWidth <= changedHeight) { 6637c804472Sopenharmony_ci JsAppImpl::GetInstance().SetDeviceOrentation("portrait"); 6647c804472Sopenharmony_ci } else { 6657c804472Sopenharmony_ci JsAppImpl::GetInstance().SetDeviceOrentation("landscape"); 6667c804472Sopenharmony_ci } 6677c804472Sopenharmony_ci SetOrientation(aceRunArgs, orientation); 6687c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetCurrentResolution(aceRunArgs.deviceWidth, aceRunArgs.deviceHeight); 6697c804472Sopenharmony_ci ILOG("ResolutionChanged: %s %d %d %f", orientation.c_str(), aceRunArgs.deviceWidth, 6707c804472Sopenharmony_ci aceRunArgs.deviceHeight, aceRunArgs.deviceConfig.density); 6717c804472Sopenharmony_ci} 6727c804472Sopenharmony_ci 6737c804472Sopenharmony_civoid JsAppImpl::SetArgsColorMode(const std::string& value) 6747c804472Sopenharmony_ci{ 6757c804472Sopenharmony_ci colorMode = value; 6767c804472Sopenharmony_ci} 6777c804472Sopenharmony_ci 6787c804472Sopenharmony_civoid JsAppImpl::SetArgsAceVersion(const std::string& value) 6797c804472Sopenharmony_ci{ 6807c804472Sopenharmony_ci aceVersion = value; 6817c804472Sopenharmony_ci} 6827c804472Sopenharmony_ci 6837c804472Sopenharmony_civoid JsAppImpl::SetDeviceOrentation(const std::string& value) 6847c804472Sopenharmony_ci{ 6857c804472Sopenharmony_ci orientation = value; 6867c804472Sopenharmony_ci} 6877c804472Sopenharmony_ci 6887c804472Sopenharmony_cistd::string JsAppImpl::GetOrientation() const 6897c804472Sopenharmony_ci{ 6907c804472Sopenharmony_ci return orientation; 6917c804472Sopenharmony_ci} 6927c804472Sopenharmony_ci 6937c804472Sopenharmony_cistd::string JsAppImpl::GetColorMode() const 6947c804472Sopenharmony_ci{ 6957c804472Sopenharmony_ci return colorMode; 6967c804472Sopenharmony_ci} 6977c804472Sopenharmony_ci 6987c804472Sopenharmony_civoid JsAppImpl::SetDeviceScreenDensity(const int32_t screenDensity, const std::string type) 6997c804472Sopenharmony_ci{ 7007c804472Sopenharmony_ci if (type == "wearable" && screenDensity != 0) { 7017c804472Sopenharmony_ci watchScreenDensity = screenDensity; 7027c804472Sopenharmony_ci return; 7037c804472Sopenharmony_ci } 7047c804472Sopenharmony_ci if (type == "tv" && screenDensity != 0) { 7057c804472Sopenharmony_ci tvScreenDensity = screenDensity; 7067c804472Sopenharmony_ci return; 7077c804472Sopenharmony_ci } 7087c804472Sopenharmony_ci if ((type == "phone" || type == "default") && screenDensity != 0) { 7097c804472Sopenharmony_ci phoneScreenDensity = screenDensity; 7107c804472Sopenharmony_ci return; 7117c804472Sopenharmony_ci } 7127c804472Sopenharmony_ci if (type == "2in1" && screenDensity != 0) { 7137c804472Sopenharmony_ci twoInOneScreenDensity = screenDensity; 7147c804472Sopenharmony_ci return; 7157c804472Sopenharmony_ci } 7167c804472Sopenharmony_ci if (type == "tablet" && screenDensity != 0) { 7177c804472Sopenharmony_ci tabletScreenDensity = screenDensity; 7187c804472Sopenharmony_ci return; 7197c804472Sopenharmony_ci } 7207c804472Sopenharmony_ci if (type == "car" && screenDensity != 0) { 7217c804472Sopenharmony_ci carScreenDensity = screenDensity; 7227c804472Sopenharmony_ci return; 7237c804472Sopenharmony_ci } 7247c804472Sopenharmony_ci ILOG("DeviceType not supported to SetDeviceScreenDensity: %s", type.c_str()); 7257c804472Sopenharmony_ci return; 7267c804472Sopenharmony_ci} 7277c804472Sopenharmony_ci 7287c804472Sopenharmony_civoid JsAppImpl::ReloadRuntimePage(const std::string currentPage) 7297c804472Sopenharmony_ci{ 7307c804472Sopenharmony_ci std::string params = ""; 7317c804472Sopenharmony_ci if (ability != nullptr) { 7327c804472Sopenharmony_ci ability->ReplacePage(currentPage, params); 7337c804472Sopenharmony_ci } 7347c804472Sopenharmony_ci} 7357c804472Sopenharmony_ci 7367c804472Sopenharmony_civoid JsAppImpl::SetScreenDensity(const std::string value) 7377c804472Sopenharmony_ci{ 7387c804472Sopenharmony_ci screenDensity = value; 7397c804472Sopenharmony_ci} 7407c804472Sopenharmony_ci 7417c804472Sopenharmony_civoid JsAppImpl::SetConfigChanges(const std::string value) 7427c804472Sopenharmony_ci{ 7437c804472Sopenharmony_ci configChanges = value; 7447c804472Sopenharmony_ci} 7457c804472Sopenharmony_ci 7467c804472Sopenharmony_cibool JsAppImpl::MemoryRefresh(const std::string memoryRefreshArgs) const 7477c804472Sopenharmony_ci{ 7487c804472Sopenharmony_ci ILOG("MemoryRefresh."); 7497c804472Sopenharmony_ci if (ability != nullptr) { 7507c804472Sopenharmony_ci return ability->OperateComponent(memoryRefreshArgs); 7517c804472Sopenharmony_ci } 7527c804472Sopenharmony_ci return false; 7537c804472Sopenharmony_ci} 7547c804472Sopenharmony_ci 7557c804472Sopenharmony_civoid JsAppImpl::ParseSystemParams(OHOS::Ace::Platform::AceRunArgs& args, const Json2::Value& paramObj) 7567c804472Sopenharmony_ci{ 7577c804472Sopenharmony_ci if (paramObj.IsNull()) { 7587c804472Sopenharmony_ci SetDeviceWidth(args, VirtualScreenImpl::GetInstance().GetCompressionWidth()); 7597c804472Sopenharmony_ci SetDeviceHeight(args, VirtualScreenImpl::GetInstance().GetCompressionHeight()); 7607c804472Sopenharmony_ci AssignValueForWidthAndHeight(args.deviceWidth, args.deviceHeight, 7617c804472Sopenharmony_ci args.deviceWidth, args.deviceHeight); 7627c804472Sopenharmony_ci SetColorMode(args, colorMode); 7637c804472Sopenharmony_ci SetOrientation(args, orientation); 7647c804472Sopenharmony_ci SetDeviceScreenDensity(atoi(screenDensity.c_str()), commandInfo.deviceType); 7657c804472Sopenharmony_ci AdaptDeviceType(args, commandInfo.deviceType, aceRunArgs.deviceWidth); 7667c804472Sopenharmony_ci SetLanguage(args, SharedData<std::string>::GetData(SharedDataType::LAN)); 7677c804472Sopenharmony_ci SetRegion(args, SharedData<std::string>::GetData(SharedDataType::REGION)); 7687c804472Sopenharmony_ci } else { 7697c804472Sopenharmony_ci SetDeviceWidth(args, paramObj["width"].AsInt()); 7707c804472Sopenharmony_ci SetDeviceHeight(args, paramObj["height"].AsInt()); 7717c804472Sopenharmony_ci AssignValueForWidthAndHeight(args.deviceWidth, args.deviceHeight, 7727c804472Sopenharmony_ci args.deviceWidth, args.deviceHeight); 7737c804472Sopenharmony_ci SetColorMode(args, paramObj["colorMode"].AsString()); 7747c804472Sopenharmony_ci SetOrientation(args, paramObj["orientation"].AsString()); 7757c804472Sopenharmony_ci std::string deviceType = paramObj["deviceType"].AsString(); 7767c804472Sopenharmony_ci SetDeviceScreenDensity(atoi(screenDensity.c_str()), deviceType); 7777c804472Sopenharmony_ci AdaptDeviceType(args, deviceType, args.deviceWidth, paramObj["dpi"].AsDouble()); 7787c804472Sopenharmony_ci std::string lanInfo = paramObj["locale"].AsString(); 7797c804472Sopenharmony_ci SetLanguage(args, lanInfo.substr(0, lanInfo.find("_"))); 7807c804472Sopenharmony_ci SetRegion(args, lanInfo.substr(lanInfo.find("_") + 1, lanInfo.length() - 1)); 7817c804472Sopenharmony_ci } 7827c804472Sopenharmony_ci} 7837c804472Sopenharmony_ci 7847c804472Sopenharmony_civoid JsAppImpl::SetSystemParams(OHOS::Ace::Platform::SystemParams& params, const Json2::Value& paramObj) 7857c804472Sopenharmony_ci{ 7867c804472Sopenharmony_ci ParseSystemParams(aceRunArgs, paramObj); 7877c804472Sopenharmony_ci params.deviceWidth = aceRunArgs.deviceWidth; 7887c804472Sopenharmony_ci params.deviceHeight = aceRunArgs.deviceHeight; 7897c804472Sopenharmony_ci params.language = aceRunArgs.language; 7907c804472Sopenharmony_ci params.region = aceRunArgs.region; 7917c804472Sopenharmony_ci params.colorMode = aceRunArgs.deviceConfig.colorMode; 7927c804472Sopenharmony_ci params.orientation = aceRunArgs.deviceConfig.orientation; 7937c804472Sopenharmony_ci params.deviceType = aceRunArgs.deviceConfig.deviceType; 7947c804472Sopenharmony_ci params.density = aceRunArgs.deviceConfig.density; 7957c804472Sopenharmony_ci params.isRound = (paramObj.IsNull()) ? (commandInfo.screenShape == "circle") : 7967c804472Sopenharmony_ci paramObj["roundScreen"].AsBool(); 7977c804472Sopenharmony_ci} 7987c804472Sopenharmony_ci 7997c804472Sopenharmony_civoid JsAppImpl::LoadDocument(const std::string filePath, 8007c804472Sopenharmony_ci const std::string componentName, 8017c804472Sopenharmony_ci const Json2::Value& previewContext) 8027c804472Sopenharmony_ci{ 8037c804472Sopenharmony_ci ILOG("LoadDocument."); 8047c804472Sopenharmony_ci if (ability != nullptr) { 8057c804472Sopenharmony_ci OHOS::Ace::Platform::SystemParams params; 8067c804472Sopenharmony_ci SetSystemParams(params, previewContext); 8077c804472Sopenharmony_ci ILOG("LoadDocument params is density: %f region: %s language: %s deviceWidth: %d\ 8087c804472Sopenharmony_ci deviceHeight: %d isRound:%d colorMode:%s orientation: %s deviceType: %s", 8097c804472Sopenharmony_ci params.density, 8107c804472Sopenharmony_ci params.region.c_str(), 8117c804472Sopenharmony_ci params.language.c_str(), 8127c804472Sopenharmony_ci params.deviceWidth, 8137c804472Sopenharmony_ci params.deviceHeight, 8147c804472Sopenharmony_ci (params.isRound ? "true" : "false"), 8157c804472Sopenharmony_ci ((params.colorMode == ColorMode::DARK) ? "dark" : "light"), 8167c804472Sopenharmony_ci ((params.orientation == DeviceOrientation::LANDSCAPE) ? "landscape" : "portrait"), 8177c804472Sopenharmony_ci GetDeviceTypeName(params.deviceType).c_str()); 8187c804472Sopenharmony_ci OHOS::AppExecFwk::EventHandler::PostTask([this]() { 8197c804472Sopenharmony_ci glfwRenderContext->SetWindowSize(aceRunArgs.deviceWidth, aceRunArgs.deviceHeight); 8207c804472Sopenharmony_ci }); 8217c804472Sopenharmony_ci ability->LoadDocument(filePath, componentName, params); 8227c804472Sopenharmony_ci } 8237c804472Sopenharmony_ci} 8247c804472Sopenharmony_ci 8257c804472Sopenharmony_civoid JsAppImpl::DispatchBackPressedEvent() const 8267c804472Sopenharmony_ci{ 8277c804472Sopenharmony_ci ability->OnBackPressed(); 8287c804472Sopenharmony_ci} 8297c804472Sopenharmony_civoid JsAppImpl::DispatchKeyEvent(const std::shared_ptr<OHOS::MMI::KeyEvent>& keyEvent) const 8307c804472Sopenharmony_ci{ 8317c804472Sopenharmony_ci if (isDebug && debugServerPort >= 0) { 8327c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 8337c804472Sopenharmony_ci OHOS::Rosen::Window* window = OHOS::Previewer::PreviewerWindow::GetInstance().GetWindowObject(); 8347c804472Sopenharmony_ci if (!window) { 8357c804472Sopenharmony_ci ELOG("JsApp::Run get window failed."); 8367c804472Sopenharmony_ci return; 8377c804472Sopenharmony_ci } 8387c804472Sopenharmony_ci window->ConsumeKeyEvent(keyEvent); 8397c804472Sopenharmony_ci#endif 8407c804472Sopenharmony_ci } else { 8417c804472Sopenharmony_ci ability->OnInputEvent(keyEvent); 8427c804472Sopenharmony_ci } 8437c804472Sopenharmony_ci} 8447c804472Sopenharmony_civoid JsAppImpl::DispatchPointerEvent(const std::shared_ptr<OHOS::MMI::PointerEvent>& pointerEvent) const 8457c804472Sopenharmony_ci{ 8467c804472Sopenharmony_ci if (isDebug && debugServerPort >= 0) { 8477c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 8487c804472Sopenharmony_ci OHOS::Rosen::Window* window = OHOS::Previewer::PreviewerWindow::GetInstance().GetWindowObject(); 8497c804472Sopenharmony_ci if (!window) { 8507c804472Sopenharmony_ci ELOG("JsApp::Run get window failed."); 8517c804472Sopenharmony_ci return; 8527c804472Sopenharmony_ci } 8537c804472Sopenharmony_ci window->ConsumePointerEvent(pointerEvent); 8547c804472Sopenharmony_ci#endif 8557c804472Sopenharmony_ci } else { 8567c804472Sopenharmony_ci ability->OnInputEvent(pointerEvent); 8577c804472Sopenharmony_ci } 8587c804472Sopenharmony_ci} 8597c804472Sopenharmony_civoid JsAppImpl::DispatchAxisEvent(const std::shared_ptr<OHOS::MMI::AxisEvent>& axisEvent) const 8607c804472Sopenharmony_ci{ 8617c804472Sopenharmony_ci ability->OnInputEvent(axisEvent); 8627c804472Sopenharmony_ci} 8637c804472Sopenharmony_civoid JsAppImpl::DispatchInputMethodEvent(const unsigned int codePoint) const 8647c804472Sopenharmony_ci{ 8657c804472Sopenharmony_ci ability->OnInputMethodEvent(codePoint); 8667c804472Sopenharmony_ci} 8677c804472Sopenharmony_ci 8687c804472Sopenharmony_cistd::string JsAppImpl::GetDeviceTypeName(const OHOS::Ace::DeviceType type) const 8697c804472Sopenharmony_ci{ 8707c804472Sopenharmony_ci switch (type) { 8717c804472Sopenharmony_ci case DeviceType::WATCH: 8727c804472Sopenharmony_ci return "watch"; 8737c804472Sopenharmony_ci case DeviceType::TV: 8747c804472Sopenharmony_ci return "tv"; 8757c804472Sopenharmony_ci case DeviceType::PHONE: 8767c804472Sopenharmony_ci return "phone"; 8777c804472Sopenharmony_ci case DeviceType::TABLET: 8787c804472Sopenharmony_ci return "tablet"; 8797c804472Sopenharmony_ci case DeviceType::CAR: 8807c804472Sopenharmony_ci return "car"; 8817c804472Sopenharmony_ci default: 8827c804472Sopenharmony_ci return ""; 8837c804472Sopenharmony_ci } 8847c804472Sopenharmony_ci} 8857c804472Sopenharmony_ci 8867c804472Sopenharmony_civoid JsAppImpl::InitGlfwEnv() 8877c804472Sopenharmony_ci{ 8887c804472Sopenharmony_ci ILOG("InitGlfwEnv started"); 8897c804472Sopenharmony_ci glfwRenderContext = OHOS::Rosen::GlfwRenderContext::GetGlobal(); 8907c804472Sopenharmony_ci if (!glfwRenderContext->Init()) { 8917c804472Sopenharmony_ci ELOG("Could not create window: InitGlfwEnv failed."); 8927c804472Sopenharmony_ci return; 8937c804472Sopenharmony_ci } 8947c804472Sopenharmony_ci glfwRenderContext->CreateGlfwWindow(aceRunArgs.deviceWidth, aceRunArgs.deviceHeight, false); 8957c804472Sopenharmony_ci ILOG("InitGlfwEnv finished"); 8967c804472Sopenharmony_ci} 8977c804472Sopenharmony_ci 8987c804472Sopenharmony_civoid JsAppImpl::SetMockJsonInfo() 8997c804472Sopenharmony_ci{ 9007c804472Sopenharmony_ci std::string filePath = commandInfo.appResourcePath + FileSystem::GetSeparator() + "mock-config.json"; 9017c804472Sopenharmony_ci if (isDebug && debugServerPort >= 0) { 9027c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 9037c804472Sopenharmony_ci simulator->SetMockList(Ide::StageContext::GetInstance().ParseMockJsonFile(filePath)); 9047c804472Sopenharmony_ci#endif 9057c804472Sopenharmony_ci } else { 9067c804472Sopenharmony_ci ability->SetMockModuleList(Ide::StageContext::GetInstance().ParseMockJsonFile(filePath)); 9077c804472Sopenharmony_ci } 9087c804472Sopenharmony_ci} 9097c804472Sopenharmony_ci 9107c804472Sopenharmony_civoid JsAppImpl::SetPkgContextInfo() 9117c804472Sopenharmony_ci{ 9127c804472Sopenharmony_ci Ide::StageContext::GetInstance().SetPkgContextInfo(aceRunArgs.pkgContextInfoJsonStringMap, 9137c804472Sopenharmony_ci aceRunArgs.packageNameList); 9147c804472Sopenharmony_ci} 9157c804472Sopenharmony_ci 9167c804472Sopenharmony_civoid JsAppImpl::FoldStatusChanged(const std::string commandFoldStatus, int32_t currentWidth, int32_t currentHeight) 9177c804472Sopenharmony_ci{ 9187c804472Sopenharmony_ci std::string reason = "resize"; 9197c804472Sopenharmony_ci ILOG("FoldStatusChanged commandFoldStatus:%s", commandFoldStatus.c_str()); 9207c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetFoldStatus(commandFoldStatus); 9217c804472Sopenharmony_ci OHOS::Rosen::FoldStatus status = ConvertFoldStatus(commandFoldStatus); 9227c804472Sopenharmony_ci // execute callback 9237c804472Sopenharmony_ci OHOS::Previewer::PreviewerDisplay::GetInstance().SetFoldStatus(status); 9247c804472Sopenharmony_ci OHOS::Previewer::PreviewerDisplay::GetInstance().ExecStatusChangedCallback(); 9257c804472Sopenharmony_ci if (status == OHOS::Rosen::FoldStatus::UNKNOWN) { 9267c804472Sopenharmony_ci return; // unknown status do nothing 9277c804472Sopenharmony_ci } 9287c804472Sopenharmony_ci // change resolution 9297c804472Sopenharmony_ci ResolutionParam param(currentWidth, currentHeight, currentWidth, currentHeight); 9307c804472Sopenharmony_ci ResolutionChanged(param, atoi(screenDensity.c_str()), reason); 9317c804472Sopenharmony_ci} 9327c804472Sopenharmony_ci 9337c804472Sopenharmony_ciOHOS::Rosen::FoldStatus JsAppImpl::ConvertFoldStatus(std::string value) const 9347c804472Sopenharmony_ci{ 9357c804472Sopenharmony_ci OHOS::Rosen::FoldStatus foldStatus = OHOS::Rosen::FoldStatus::EXPAND; 9367c804472Sopenharmony_ci if (value == "fold") { 9377c804472Sopenharmony_ci foldStatus = OHOS::Rosen::FoldStatus::FOLDED; 9387c804472Sopenharmony_ci } else if (value == "unfold") { 9397c804472Sopenharmony_ci foldStatus = OHOS::Rosen::FoldStatus::EXPAND; 9407c804472Sopenharmony_ci } else if (value == "half_fold") { 9417c804472Sopenharmony_ci foldStatus = OHOS::Rosen::FoldStatus::HALF_FOLD; 9427c804472Sopenharmony_ci } else { 9437c804472Sopenharmony_ci foldStatus = OHOS::Rosen::FoldStatus::UNKNOWN; 9447c804472Sopenharmony_ci } 9457c804472Sopenharmony_ci return foldStatus; 9467c804472Sopenharmony_ci} 9477c804472Sopenharmony_ci 9487c804472Sopenharmony_civoid JsAppImpl::SetAvoidArea(const AvoidAreas& areas) 9497c804472Sopenharmony_ci{ 9507c804472Sopenharmony_ci avoidInitialAreas = areas; 9517c804472Sopenharmony_ci} 9527c804472Sopenharmony_ci 9537c804472Sopenharmony_civoid JsAppImpl::CalculateAvoidAreaByType(OHOS::Rosen::WindowType type, 9547c804472Sopenharmony_ci const OHOS::Rosen::SystemBarProperty& property) 9557c804472Sopenharmony_ci{ 9567c804472Sopenharmony_ci uint32_t deviceWidth = static_cast<uint32_t>(aceRunArgs.deviceWidth); 9577c804472Sopenharmony_ci uint32_t deviceHeight = static_cast<uint32_t>(aceRunArgs.deviceHeight); 9587c804472Sopenharmony_ci OHOS::Rosen::Window* window = GetWindow(); 9597c804472Sopenharmony_ci if (!window) { 9607c804472Sopenharmony_ci ELOG("GetWindow failed"); 9617c804472Sopenharmony_ci return; 9627c804472Sopenharmony_ci } 9637c804472Sopenharmony_ci sptr<OHOS::Rosen::AvoidArea> statusArea(new(std::nothrow) OHOS::Rosen::AvoidArea()); 9647c804472Sopenharmony_ci if (!statusArea) { 9657c804472Sopenharmony_ci ELOG("new OHOS::Rosen::AvoidArea failed"); 9667c804472Sopenharmony_ci return; 9677c804472Sopenharmony_ci } 9687c804472Sopenharmony_ci if (OHOS::Rosen::WindowType::WINDOW_TYPE_STATUS_BAR == type) { 9697c804472Sopenharmony_ci if (property.enable_) { 9707c804472Sopenharmony_ci statusArea->topRect_ = {0, 0, deviceWidth, avoidInitialAreas.topRect.height}; 9717c804472Sopenharmony_ci window->UpdateAvoidArea(statusArea, OHOS::Rosen::AvoidAreaType::TYPE_SYSTEM); 9727c804472Sopenharmony_ci } else { 9737c804472Sopenharmony_ci statusArea->topRect_ = {0, 0, 0, 0}; 9747c804472Sopenharmony_ci window->UpdateAvoidArea(statusArea, OHOS::Rosen::AvoidAreaType::TYPE_SYSTEM); 9757c804472Sopenharmony_ci } 9767c804472Sopenharmony_ci UpdateAvoidArea2Ide("topRect", statusArea->topRect_); 9777c804472Sopenharmony_ci } else if (OHOS::Rosen::WindowType::WINDOW_TYPE_NAVIGATION_INDICATOR == type) { 9787c804472Sopenharmony_ci if (property.enable_) { 9797c804472Sopenharmony_ci statusArea->bottomRect_ = {0, deviceHeight - avoidInitialAreas.bottomRect.height, 9807c804472Sopenharmony_ci deviceWidth, avoidInitialAreas.bottomRect.height}; 9817c804472Sopenharmony_ci window->UpdateAvoidArea(statusArea, OHOS::Rosen::AvoidAreaType::TYPE_NAVIGATION_INDICATOR); 9827c804472Sopenharmony_ci } else { 9837c804472Sopenharmony_ci statusArea->bottomRect_ = {0, 0, 0, 0}; 9847c804472Sopenharmony_ci window->UpdateAvoidArea(statusArea, OHOS::Rosen::AvoidAreaType::TYPE_NAVIGATION_INDICATOR); 9857c804472Sopenharmony_ci } 9867c804472Sopenharmony_ci UpdateAvoidArea2Ide("bottomRect", statusArea->bottomRect_); 9877c804472Sopenharmony_ci } else { 9887c804472Sopenharmony_ci return; // currently not support 9897c804472Sopenharmony_ci } 9907c804472Sopenharmony_ci} 9917c804472Sopenharmony_ci 9927c804472Sopenharmony_civoid JsAppImpl::UpdateAvoidArea2Ide(const std::string& key, const OHOS::Rosen::Rect& value) 9937c804472Sopenharmony_ci{ 9947c804472Sopenharmony_ci Json2::Value son = JsonReader::CreateObject(); 9957c804472Sopenharmony_ci son.Add("posX", value.posX_); 9967c804472Sopenharmony_ci son.Add("posY", value.posY_); 9977c804472Sopenharmony_ci son.Add("width", value.width_); 9987c804472Sopenharmony_ci son.Add("height", value.height_); 9997c804472Sopenharmony_ci Json2::Value val = JsonReader::CreateObject(); 10007c804472Sopenharmony_ci val.Add(key.c_str(), son); 10017c804472Sopenharmony_ci CommandLineInterface::GetInstance().CreatCommandToSendData("AvoidAreaChanged", val, "get"); 10027c804472Sopenharmony_ci} 10037c804472Sopenharmony_ci 10047c804472Sopenharmony_ciOHOS::Rosen::Window* JsAppImpl::GetWindow() const 10057c804472Sopenharmony_ci{ 10067c804472Sopenharmony_ci if (isDebug && debugServerPort >= 0) { 10077c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 10087c804472Sopenharmony_ci return OHOS::Previewer::PreviewerWindow::GetInstance().GetWindowObject(); 10097c804472Sopenharmony_ci#else 10107c804472Sopenharmony_ci return nullptr; 10117c804472Sopenharmony_ci#endif 10127c804472Sopenharmony_ci } else { 10137c804472Sopenharmony_ci return ability->GetWindow(); 10147c804472Sopenharmony_ci } 10157c804472Sopenharmony_ci} 10167c804472Sopenharmony_ci 10177c804472Sopenharmony_civoid JsAppImpl::InitAvoidAreas(OHOS::Rosen::Window* window) 10187c804472Sopenharmony_ci{ 10197c804472Sopenharmony_ci CalculateAvoidAreaByType(OHOS::Rosen::WindowType::WINDOW_TYPE_STATUS_BAR, 10207c804472Sopenharmony_ci window->GetSystemBarPropertyByType(OHOS::Rosen::WindowType::WINDOW_TYPE_STATUS_BAR)); 10217c804472Sopenharmony_ci CalculateAvoidAreaByType(OHOS::Rosen::WindowType::WINDOW_TYPE_NAVIGATION_INDICATOR, 10227c804472Sopenharmony_ci window->GetSystemBarPropertyByType(OHOS::Rosen::WindowType::WINDOW_TYPE_NAVIGATION_INDICATOR)); 10237c804472Sopenharmony_ci} 10247c804472Sopenharmony_ci 10257c804472Sopenharmony_civoid JsAppImpl::InitJsApp() 10267c804472Sopenharmony_ci{ 10277c804472Sopenharmony_ci CommandParser& parser = CommandParser::GetInstance(); 10287c804472Sopenharmony_ci InitCommandInfo(); 10297c804472Sopenharmony_ci SetJsAppPath(parser.Value("j")); 10307c804472Sopenharmony_ci if (parser.IsSet("s")) { 10317c804472Sopenharmony_ci SetPipeName(parser.Value("s")); 10327c804472Sopenharmony_ci } 10337c804472Sopenharmony_ci if (parser.IsSet("url")) { 10347c804472Sopenharmony_ci SetUrlPath(parser.Value("url")); 10357c804472Sopenharmony_ci } 10367c804472Sopenharmony_ci if (parser.IsSet("lws")) { 10377c804472Sopenharmony_ci SetPipePort(parser.Value("lws")); 10387c804472Sopenharmony_ci } 10397c804472Sopenharmony_ci if (parser.IsSet("cm")) { 10407c804472Sopenharmony_ci SetArgsColorMode(parser.Value("cm")); 10417c804472Sopenharmony_ci } 10427c804472Sopenharmony_ci if (parser.IsSet("av")) { 10437c804472Sopenharmony_ci SetArgsAceVersion(parser.Value("av")); 10447c804472Sopenharmony_ci } 10457c804472Sopenharmony_ci if (parser.IsSet("sd")) { 10467c804472Sopenharmony_ci SetScreenDensity(parser.Value("sd")); 10477c804472Sopenharmony_ci } 10487c804472Sopenharmony_ci if (parser.IsSet("cc")) { 10497c804472Sopenharmony_ci SetConfigChanges(parser.Value("cc")); 10507c804472Sopenharmony_ci } 10517c804472Sopenharmony_ci if (commandInfo.compressionResolutionWidth <= commandInfo.compressionResolutionHeight) { 10527c804472Sopenharmony_ci SetDeviceOrentation("portrait"); 10537c804472Sopenharmony_ci } else { 10547c804472Sopenharmony_ci SetDeviceOrentation("landscape"); 10557c804472Sopenharmony_ci } 10567c804472Sopenharmony_ci if (parser.IsSet("d")) { 10577c804472Sopenharmony_ci SetIsDebug(true); 10587c804472Sopenharmony_ci if (parser.IsSet("p")) { 10597c804472Sopenharmony_ci SetDebugServerPort(static_cast<uint16_t>(atoi(parser.Value("p").c_str()))); 10607c804472Sopenharmony_ci } 10617c804472Sopenharmony_ci } 10627c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED 10637c804472Sopenharmony_ci if (parser.IsSet("componentTest")) { 10647c804472Sopenharmony_ci JsAppImpl::GetInstance().SetComponentTestModeConfig(parser.Value("componentTest")); 10657c804472Sopenharmony_ci } 10667c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED 10677c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().InitFoldParams(); 10687c804472Sopenharmony_ci Start(); 10697c804472Sopenharmony_ci} 10707c804472Sopenharmony_ci 10717c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED 10727c804472Sopenharmony_civoid JsAppImpl::SetComponentTestConfig(Platform::AceRunArgs& args, const std::string componentTest) const 10737c804472Sopenharmony_ci{ 10747c804472Sopenharmony_ci args.componentTestConfig = componentTest; 10757c804472Sopenharmony_ci args.isComponentTestMode = true; 10767c804472Sopenharmony_ci} 10777c804472Sopenharmony_ci 10787c804472Sopenharmony_civoid JsAppImpl::SetComponentTestModeConfig(const std::string value) 10797c804472Sopenharmony_ci{ 10807c804472Sopenharmony_ci componentTestModeConfig = value; 10817c804472Sopenharmony_ci} 10827c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED 10837c804472Sopenharmony_ci 10847c804472Sopenharmony_civoid JsAppImpl::StopAbility() 10857c804472Sopenharmony_ci{ 10867c804472Sopenharmony_ci if (listener) { 10877c804472Sopenharmony_ci OHOS::Rosen::Window* window = GetWindow(); 10887c804472Sopenharmony_ci if (window) { 10897c804472Sopenharmony_ci window->UnRegisterSystemBarEnableListener(sptr<OHOS::Rosen::IWindowSystemBarEnableListener>(listener)); 10907c804472Sopenharmony_ci listener = nullptr; 10917c804472Sopenharmony_ci } 10927c804472Sopenharmony_ci } 10937c804472Sopenharmony_ci if (isDebug && debugServerPort >= 0) { 10947c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 10957c804472Sopenharmony_ci if (simulator) { 10967c804472Sopenharmony_ci simulator->TerminateAbility(debugAbilityId); 10977c804472Sopenharmony_ci } 10987c804472Sopenharmony_ci#endif 10997c804472Sopenharmony_ci } else { 11007c804472Sopenharmony_ci ability = nullptr; 11017c804472Sopenharmony_ci } 11027c804472Sopenharmony_ci OHOS::Ide::StageContext::GetInstance().ReleaseHspBuffers(); 11037c804472Sopenharmony_ci if (glfwRenderContext != nullptr) { 11047c804472Sopenharmony_ci glfwRenderContext->DestroyWindow(); 11057c804472Sopenharmony_ci glfwRenderContext->Terminate(); 11067c804472Sopenharmony_ci ILOG("glfw Terminate finished"); 11077c804472Sopenharmony_ci } 11087c804472Sopenharmony_ci} 11097c804472Sopenharmony_ci 11107c804472Sopenharmony_civoid JsAppImpl::InitCommandInfo() 11117c804472Sopenharmony_ci{ 11127c804472Sopenharmony_ci CommandParser::GetInstance().GetCommandInfo(commandInfo); 11137c804472Sopenharmony_ci} 11147c804472Sopenharmony_ci 11157c804472Sopenharmony_civoid JsAppImpl::InitScreenInfo() 11167c804472Sopenharmony_ci{ 11177c804472Sopenharmony_ci screenInfo = VirtualScreenImpl::GetInstance().GetScreenInfo(); 11187c804472Sopenharmony_ci} 1119