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#ifndef JSAPPIMPL_H 177c804472Sopenharmony_ci#define JSAPPIMPL_H 187c804472Sopenharmony_ci 197c804472Sopenharmony_ci#include <atomic> 207c804472Sopenharmony_ci#include <memory> 217c804472Sopenharmony_ci#include <thread> 227c804472Sopenharmony_ci 237c804472Sopenharmony_ci#include "JsApp.h" 247c804472Sopenharmony_ci#include "ace_ability.h" 257c804472Sopenharmony_ci#include "ace_run_args.h" 267c804472Sopenharmony_ci#include "device_config.h" 277c804472Sopenharmony_ci#include "device_type.h" 287c804472Sopenharmony_ci#include "window_animation_config.h" 297c804472Sopenharmony_ci 307c804472Sopenharmony_cinamespace OHOS { 317c804472Sopenharmony_cinamespace Previewer { 327c804472Sopenharmony_ci struct PreviewerWindowModel; 337c804472Sopenharmony_ci class PreviewerDisplay; 347c804472Sopenharmony_ci} 357c804472Sopenharmony_cinamespace Rosen { 367c804472Sopenharmony_ci class GlfwRenderContext; 377c804472Sopenharmony_ci enum class FoldStatus: uint32_t; 387c804472Sopenharmony_ci enum class WindowType : uint32_t; 397c804472Sopenharmony_ci struct SystemBarProperty; 407c804472Sopenharmony_ci struct Rect; 417c804472Sopenharmony_ci} 427c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 437c804472Sopenharmony_cinamespace AbilityRuntime { 447c804472Sopenharmony_ci class Simulator; 457c804472Sopenharmony_ci struct Options; 467c804472Sopenharmony_ci} 477c804472Sopenharmony_cinamespace AppExecFwk { 487c804472Sopenharmony_ci class Configuration; 497c804472Sopenharmony_ci} 507c804472Sopenharmony_ci#endif 517c804472Sopenharmony_ci} 527c804472Sopenharmony_ci 537c804472Sopenharmony_ciclass JsAppImpl : public JsApp { 547c804472Sopenharmony_cipublic: 557c804472Sopenharmony_ci JsAppImpl() noexcept; 567c804472Sopenharmony_ci ~JsAppImpl(); 577c804472Sopenharmony_ci JsAppImpl& operator=(const JsAppImpl&) = delete; 587c804472Sopenharmony_ci JsAppImpl(const JsAppImpl&) = delete; 597c804472Sopenharmony_ci 607c804472Sopenharmony_ci static JsAppImpl& GetInstance(); 617c804472Sopenharmony_ci void Start() override; 627c804472Sopenharmony_ci void Restart() override; 637c804472Sopenharmony_ci void Interrupt() override; 647c804472Sopenharmony_ci std::string GetJSONTree() override; 657c804472Sopenharmony_ci std::string GetDefaultJSONTree() override; 667c804472Sopenharmony_ci void OrientationChanged(std::string commandOrientation) override; 677c804472Sopenharmony_ci void ResolutionChanged(ResolutionParam& param, int32_t screenDensity, std::string reason) override; 687c804472Sopenharmony_ci OHOS::Ace::WindowSizeChangeReason ConvertResizeReason(std::string reason); 697c804472Sopenharmony_ci void SetResolutionParams(int32_t changedOriginWidth, int32_t changedOriginHeight, 707c804472Sopenharmony_ci int32_t changedWidth, int32_t changedHeight, int32_t screenDensity); 717c804472Sopenharmony_ci void SetArgsColorMode(const std::string& value) override; 727c804472Sopenharmony_ci void SetArgsAceVersion(const std::string& value) override; 737c804472Sopenharmony_ci void SetDeviceOrentation(const std::string& value); 747c804472Sopenharmony_ci std::string GetOrientation() const override; 757c804472Sopenharmony_ci std::string GetColorMode() const override; 767c804472Sopenharmony_ci void ColorModeChanged(const std::string commandColorMode) override; 777c804472Sopenharmony_ci void ReloadRuntimePage(const std::string currentPage) override; 787c804472Sopenharmony_ci void SetScreenDensity(const std::string value) override; 797c804472Sopenharmony_ci void SetConfigChanges(const std::string value) override; 807c804472Sopenharmony_ci bool MemoryRefresh(const std::string memoryRefreshArgs) const override; 817c804472Sopenharmony_ci void LoadDocument(const std::string, const std::string, const Json2::Value&) override; 827c804472Sopenharmony_ci void FoldStatusChanged(const std::string commandFoldStatus, 837c804472Sopenharmony_ci int32_t currentWidth, int32_t currentHeight) override; 847c804472Sopenharmony_ci void SetAvoidArea(const AvoidAreas& areas) override; 857c804472Sopenharmony_ci void UpdateAvoidArea2Ide(const std::string& key, const OHOS::Rosen::Rect& value); 867c804472Sopenharmony_ci OHOS::Rosen::Window* GetWindow() const; 877c804472Sopenharmony_ci 887c804472Sopenharmony_ci void DispatchBackPressedEvent() const; 897c804472Sopenharmony_ci void DispatchKeyEvent(const std::shared_ptr<OHOS::MMI::KeyEvent>& keyEvent) const; 907c804472Sopenharmony_ci void DispatchPointerEvent(const std::shared_ptr<OHOS::MMI::PointerEvent>& pointerEvent) const; 917c804472Sopenharmony_ci void DispatchAxisEvent(const std::shared_ptr<OHOS::MMI::AxisEvent>& axisEvent) const; 927c804472Sopenharmony_ci void DispatchInputMethodEvent(const unsigned int codePoint) const; 937c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED 947c804472Sopenharmony_ci void SetComponentTestModeConfig(const std::string value); 957c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED 967c804472Sopenharmony_ci void InitGlfwEnv(); 977c804472Sopenharmony_ci void CalculateAvoidAreaByType(OHOS::Rosen::WindowType type, 987c804472Sopenharmony_ci const OHOS::Rosen::SystemBarProperty& property); 997c804472Sopenharmony_ci void InitAvoidAreas(OHOS::Rosen::Window* window); 1007c804472Sopenharmony_ci void InitJsApp() override; 1017c804472Sopenharmony_ci void StopAbility(); 1027c804472Sopenharmony_ci void InitCommandInfo(); 1037c804472Sopenharmony_ci void InitScreenInfo(); 1047c804472Sopenharmony_ci 1057c804472Sopenharmony_ciprotected: 1067c804472Sopenharmony_ci void SetJsAppArgs(OHOS::Ace::Platform::AceRunArgs& args); 1077c804472Sopenharmony_ci void RunJsApp(); 1087c804472Sopenharmony_ci void RunNormalAbility(); 1097c804472Sopenharmony_ci void RunDebugAbility(); 1107c804472Sopenharmony_ci double watchScreenDensity = 320; // Watch Screen Density 1117c804472Sopenharmony_ci double phoneScreenDensity = 480; // Phone Screen Density 1127c804472Sopenharmony_ci double tvScreenDensity = 320; // TV Screen Density 1137c804472Sopenharmony_ci double tabletScreenDensity = 400; // Tablet Screen Density 1147c804472Sopenharmony_ci double carScreenDensity = 320; // Car Screen Density 1157c804472Sopenharmony_ci double twoInOneScreenDensity = 240; // Car Screen Density 1167c804472Sopenharmony_ci 1177c804472Sopenharmony_ciprivate: 1187c804472Sopenharmony_ci void SetPkgContextInfo(); 1197c804472Sopenharmony_ci void SetMockJsonInfo(); 1207c804472Sopenharmony_ci void SetAssetPath(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1217c804472Sopenharmony_ci void SetProjectModel(OHOS::Ace::Platform::AceRunArgs& args) const; 1227c804472Sopenharmony_ci void SetPageProfile(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1237c804472Sopenharmony_ci void SetDeviceWidth(OHOS::Ace::Platform::AceRunArgs& args, const int32_t) const; 1247c804472Sopenharmony_ci void SetDeviceHeight(OHOS::Ace::Platform::AceRunArgs& args, const int32_t) const; 1257c804472Sopenharmony_ci void SetWindowTitle(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1267c804472Sopenharmony_ci void SetUrl(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1277c804472Sopenharmony_ci void SetConfigChanges(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1287c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED 1297c804472Sopenharmony_ci void SetComponentTestConfig(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1307c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED 1317c804472Sopenharmony_ci void SetColorMode(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1327c804472Sopenharmony_ci void SetOrientation(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1337c804472Sopenharmony_ci void SetAceVersionArgs(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1347c804472Sopenharmony_ci void SetLanguage(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1357c804472Sopenharmony_ci void SetRegion(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1367c804472Sopenharmony_ci void SetScript(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1377c804472Sopenharmony_ci void SetSystemResourcesPath(OHOS::Ace::Platform::AceRunArgs& args) const; 1387c804472Sopenharmony_ci void SetAppResourcesPath(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1397c804472Sopenharmony_ci void SetFormsEnabled(OHOS::Ace::Platform::AceRunArgs& args, bool formsEnabled) const; 1407c804472Sopenharmony_ci void SetContainerSdkPath(OHOS::Ace::Platform::AceRunArgs& args, const std::string) const; 1417c804472Sopenharmony_ci void SetOnRouterChange(OHOS::Ace::Platform::AceRunArgs& args) const; 1427c804472Sopenharmony_ci void SetOnError(OHOS::Ace::Platform::AceRunArgs& args) const; 1437c804472Sopenharmony_ci void SetComponentModeEnabled(OHOS::Ace::Platform::AceRunArgs& args, bool isComponentMode) const; 1447c804472Sopenharmony_ci void AssignValueForWidthAndHeight(const int32_t origWidth, const int32_t origHeight, 1457c804472Sopenharmony_ci const int32_t compWidth, const int32_t compHeight); 1467c804472Sopenharmony_ci void AdaptDeviceType(OHOS::Ace::Platform::AceRunArgs& args, const std::string, 1477c804472Sopenharmony_ci const int32_t, double screenDendity = 0) const; 1487c804472Sopenharmony_ci void ParseSystemParams(OHOS::Ace::Platform::AceRunArgs& args, const Json2::Value& paramObj); 1497c804472Sopenharmony_ci void SetSystemParams(OHOS::Ace::Platform::SystemParams& args, const Json2::Value& paramObj); 1507c804472Sopenharmony_ci void SetDeviceScreenDensity(const int32_t screenDensity, const std::string type); 1517c804472Sopenharmony_ci std::string GetDeviceTypeName(const OHOS::Ace::DeviceType) const; 1527c804472Sopenharmony_ci OHOS::Rosen::FoldStatus ConvertFoldStatus(std::string value) const; 1537c804472Sopenharmony_ci const double BASE_SCREEN_DENSITY = 160; // Device Baseline Screen Density 1547c804472Sopenharmony_ci std::unique_ptr<OHOS::Ace::Platform::AceAbility> ability; 1557c804472Sopenharmony_ci std::atomic<bool> isStop; 1567c804472Sopenharmony_ci int32_t width = 0; 1577c804472Sopenharmony_ci int32_t height = 0; 1587c804472Sopenharmony_ci int32_t orignalWidth = 0; 1597c804472Sopenharmony_ci int32_t orignalHeight = 0; 1607c804472Sopenharmony_ci AvoidAreas avoidInitialAreas; 1617c804472Sopenharmony_ci OHOS::Ace::Platform::AceRunArgs aceRunArgs; 1627c804472Sopenharmony_ci std::shared_ptr<OHOS::Rosen::GlfwRenderContext> glfwRenderContext; 1637c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED 1647c804472Sopenharmony_ci std::string componentTestModeConfig; 1657c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED 1667c804472Sopenharmony_ci#if defined(__APPLE__) || defined(_WIN32) 1677c804472Sopenharmony_ci std::shared_ptr<OHOS::AbilityRuntime::Simulator> simulator; 1687c804472Sopenharmony_ci int64_t debugAbilityId = -1; 1697c804472Sopenharmony_ci void SetSimulatorParams(OHOS::AbilityRuntime::Options& options); 1707c804472Sopenharmony_ci void SetSimulatorCommonParams(OHOS::AbilityRuntime::Options& options); 1717c804472Sopenharmony_ci std::shared_ptr<OHOS::AppExecFwk::Configuration> UpdateConfiguration(OHOS::Ace::Platform::AceRunArgs& args); 1727c804472Sopenharmony_ci 1737c804472Sopenharmony_ci std::shared_ptr<OHOS::Previewer::PreviewerWindowModel> windowModel; 1747c804472Sopenharmony_ci void SetWindowParams() const; 1757c804472Sopenharmony_ci template<typename T> 1767c804472Sopenharmony_ci T SetDevice(const OHOS::Ace::DeviceType& deviceType) const 1777c804472Sopenharmony_ci { 1787c804472Sopenharmony_ci static_assert(std::is_enum_v<T>, "T must be an enum type"); 1797c804472Sopenharmony_ci switch (deviceType) { 1807c804472Sopenharmony_ci case OHOS::Ace::DeviceType::WATCH: 1817c804472Sopenharmony_ci return T::WATCH; 1827c804472Sopenharmony_ci case OHOS::Ace::DeviceType::TV: 1837c804472Sopenharmony_ci return T::TV; 1847c804472Sopenharmony_ci case OHOS::Ace::DeviceType::CAR: 1857c804472Sopenharmony_ci return T::CAR; 1867c804472Sopenharmony_ci case OHOS::Ace::DeviceType::TABLET: 1877c804472Sopenharmony_ci return T::TABLET; 1887c804472Sopenharmony_ci case OHOS::Ace::DeviceType::PHONE: 1897c804472Sopenharmony_ci return T::PHONE; 1907c804472Sopenharmony_ci default: 1917c804472Sopenharmony_ci return T::UNKNOWN; 1927c804472Sopenharmony_ci } 1937c804472Sopenharmony_ci } 1947c804472Sopenharmony_ci template<typename T> 1957c804472Sopenharmony_ci T SetColorMode(const OHOS::Ace::ColorMode& colorMode) const 1967c804472Sopenharmony_ci { 1977c804472Sopenharmony_ci static_assert(std::is_enum_v<T>, "T must be an enum type"); 1987c804472Sopenharmony_ci if (colorMode == OHOS::Ace::ColorMode::LIGHT) { 1997c804472Sopenharmony_ci return T::LIGHT; 2007c804472Sopenharmony_ci } else if (colorMode == OHOS::Ace::ColorMode::DARK) { 2017c804472Sopenharmony_ci return T::DARK; 2027c804472Sopenharmony_ci } else { 2037c804472Sopenharmony_ci return T::COLOR_MODE_UNDEFINED; 2047c804472Sopenharmony_ci } 2057c804472Sopenharmony_ci } 2067c804472Sopenharmony_ci template<typename T> 2077c804472Sopenharmony_ci T SetOrientation(const OHOS::Ace::DeviceOrientation& orientation) const 2087c804472Sopenharmony_ci { 2097c804472Sopenharmony_ci static_assert(std::is_enum_v<T>, "T must be an enum type"); 2107c804472Sopenharmony_ci if (orientation == OHOS::Ace::DeviceOrientation::PORTRAIT) { 2117c804472Sopenharmony_ci return T::PORTRAIT; 2127c804472Sopenharmony_ci } else if (orientation == OHOS::Ace::DeviceOrientation::LANDSCAPE) { 2137c804472Sopenharmony_ci return T::LANDSCAPE; 2147c804472Sopenharmony_ci } else { 2157c804472Sopenharmony_ci return T::ORIENTATION_UNDEFINED; 2167c804472Sopenharmony_ci } 2177c804472Sopenharmony_ci } 2187c804472Sopenharmony_ci#endif 2197c804472Sopenharmony_ci}; 2207c804472Sopenharmony_ci 2217c804472Sopenharmony_ci#endif // JSAPPIMPL_H 222