From 0b8e72f85c2dbb2d9de3f4e0f0b69b6ad74a40be Mon Sep 17 00:00:00 2001 From: liuzongze Date: Tue, 21 May 2024 16:28:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=BA=94=E7=94=A8=E7=BA=A7?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liuzongze Change-Id: I328fbd6c28acf51cb03cc7b8075bb3227272d2f1 --- .../application_context.js | 4 +++ .../context/application_context.cpp | 18 ++++++++++ .../context/js_application_context_utils.cpp | 35 ++++++++++++++++--- .../native/appkit/app/ohos_application.cpp | 25 +++++++++++++ .../simulator/common/include/configuration.h | 1 + .../context/application_context.h | 3 ++ .../ability_runtime/context/context_impl.h | 11 ++++-- .../context/js_application_context_utils.h | 2 ++ .../kits/native/appkit/app/ohos_application.h | 8 +++++ 9 files changed, 101 insertions(+), 6 deletions(-) diff --git a/frameworks/js/napi/app/application_context/application_context.js b/frameworks/js/napi/app/application_context/application_context.js index 5c12391586..781f5bcdb2 100644 --- a/frameworks/js/napi/app/application_context/application_context.js +++ b/frameworks/js/napi/app/application_context/application_context.js @@ -157,6 +157,10 @@ class ApplicationContext { return this.__context_impl__.setLanguage(language); } + setFont(font) { + return this.__context_impl__.setFont(font); + } + setAutoStartup(info, callback) { return this.__context_impl__.setAutoStartup(info, callback); } diff --git a/frameworks/native/appkit/ability_runtime/context/application_context.cpp b/frameworks/native/appkit/ability_runtime/context/application_context.cpp index c87c71944c..bec01bde89 100644 --- a/frameworks/native/appkit/ability_runtime/context/application_context.cpp +++ b/frameworks/native/appkit/ability_runtime/context/application_context.cpp @@ -502,6 +502,19 @@ void ApplicationContext::SetLanguage(const std::string &language) } } +void ApplicationContext::SetFont(const std::string &font) +{ + TAG_LOGD(AAFwkTag::APPKIT, "font:%{public}s.", font.c_str()); + #ifdef SUPPORT_GRAPHICS + // Notify Window + AppExecFwk::Configuration config; + config.AddItem(AppExecFwk::ConfigurationInner::APPLICATION_FONT, font); + if (appFontCallback_ != nullptr) { + appFontCallback_(config); + } + #endif +} + void ApplicationContext::ClearUpApplicationData() { if (contextImpl_ != nullptr) { @@ -538,6 +551,11 @@ void ApplicationContext::RegisterAppConfigUpdateObserver(AppConfigUpdateCallback appConfigChangeCallback_ = appConfigChangeCallback; } +void ApplicationContext::RegisterAppFontObserver(AppConfigUpdateCallback appFontCallback) +{ + appFontCallback_ = appFontCallback; +} + std::string ApplicationContext::GetAppRunningUniqueId() const { TAG_LOGD(AAFwkTag::APPKIT, "GetAppRunningUniqueId is %{public}s.", appRunningUniqueId_.c_str()); diff --git a/frameworks/native/appkit/ability_runtime/context/js_application_context_utils.cpp b/frameworks/native/appkit/ability_runtime/context/js_application_context_utils.cpp index c18df7372d..f8ef94b58c 100644 --- a/frameworks/native/appkit/ability_runtime/context/js_application_context_utils.cpp +++ b/frameworks/native/appkit/ability_runtime/context/js_application_context_utils.cpp @@ -666,6 +666,34 @@ napi_value JsApplicationContextUtils::OnSetLanguage(napi_env env, NapiCallbackIn return CreateJsUndefined(env); } +napi_value JsApplicationContextUtils::SetFont(napi_env env, napi_callback_info info) +{ + GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsApplicationContextUtils, OnSetFont, APPLICATION_CONTEXT_NAME); +} + +napi_value JsApplicationContextUtils::OnSetFont(napi_env env, NapiCallbackInfo& info) +{ + // only support one params + if (info.argc == ARGC_ZERO) { + TAG_LOGE(AAFwkTag::APPKIT, "Not enough params"); + ThrowInvalidParamError(env, "Not enough params."); + return CreateJsUndefined(env); + } + auto applicationContext = applicationContext_.lock(); + if (!applicationContext) { + TAG_LOGW(AAFwkTag::APPKIT, "applicationContext is already released"); + return CreateJsUndefined(env); + } + std::string font; + if (!ConvertFromJsValue(env, info.argv[INDEX_ZERO], font)) { + TAG_LOGE(AAFwkTag::APPKIT, "Parse font failed"); + ThrowInvalidParamError(env, "Parse param font failed, font must be string."); + return CreateJsUndefined(env); + } + applicationContext->SetFont(font); + return CreateJsUndefined(env); +} + napi_value JsApplicationContextUtils::PreloadUIExtensionAbility(napi_env env, napi_callback_info info) { GET_NAPI_INFO_WITH_NAME_AND_CALL( @@ -1508,6 +1536,7 @@ void JsApplicationContextUtils::BindNativeApplicationContext(napi_env env, napi_ BindNativeFunction(env, object, "killAllProcesses", MD_NAME, JsApplicationContextUtils::KillProcessBySelf); BindNativeFunction(env, object, "setColorMode", MD_NAME, JsApplicationContextUtils::SetColorMode); BindNativeFunction(env, object, "setLanguage", MD_NAME, JsApplicationContextUtils::SetLanguage); + BindNativeFunction(env, object, "setFont", MD_NAME, JsApplicationContextUtils::SetFont); BindNativeFunction(env, object, "clearUpApplicationData", MD_NAME, JsApplicationContextUtils::ClearUpApplicationData); BindNativeFunction(env, object, "preloadUIExtensionAbility", MD_NAME, @@ -1518,10 +1547,8 @@ void JsApplicationContextUtils::BindNativeApplicationContext(napi_env env, napi_ JsApplicationContextUtils::GetRunningProcessInformation); BindNativeFunction(env, object, "getCurrentAppCloneIndex", MD_NAME, JsApplicationContextUtils::GetCurrentAppCloneIndex); - BindNativeFunction(env, object, "getGroupDir", MD_NAME, - JsApplicationContextUtils::GetGroupDir); - BindNativeFunction(env, object, "restartApp", MD_NAME, - JsApplicationContextUtils::RestartApp); + BindNativeFunction(env, object, "getGroupDir", MD_NAME, JsApplicationContextUtils::GetGroupDir); + BindNativeFunction(env, object, "restartApp", MD_NAME, JsApplicationContextUtils::RestartApp); BindNativeFunction(env, object, "setSupportedProcessCache", MD_NAME, JsApplicationContextUtils::SetSupportedProcessCacheSelf); } diff --git a/frameworks/native/appkit/app/ohos_application.cpp b/frameworks/native/appkit/app/ohos_application.cpp index 262301b742..482e999eca 100644 --- a/frameworks/native/appkit/app/ohos_application.cpp +++ b/frameworks/native/appkit/app/ohos_application.cpp @@ -200,10 +200,19 @@ void OHOSApplication::SetApplicationContext( abilityRuntimeContext_->RegisterAppConfigUpdateObserver([applicationWptr](const Configuration &config) { std::shared_ptr applicationSptr = applicationWptr.lock(); if (applicationSptr == nullptr) { + TAG_LOGE(AAFwkTag::APPKIT, "application is nullptr."); return; } applicationSptr->OnConfigurationUpdated(config); }); + abilityRuntimeContext_->RegisterAppFontObserver([applicationWptr](const Configuration &config) { + std::shared_ptr applicationSptr = applicationWptr.lock(); + if (applicationSptr == nullptr) { + TAG_LOGE(AAFwkTag::APPKIT, "application is nullptr."); + return; + } + applicationSptr->OnFontUpdated(config); + }); } /** @@ -537,6 +546,22 @@ void OHOSApplication::OnConfigurationUpdated(Configuration config) } } +/** + * + * @brief Will be Called when the application font of the device changes. + * + * @param config Indicates the new Configuration object. + */ +void OHOSApplication::OnFontUpdated(Configuration config) +{ + #ifdef SUPPORT_GRAPHICS + // Notify Window + TAG_LOGD(AAFwkTag::APPKIT, "Update configuration for all window."); + auto diffConfiguration = std::make_shared(config); + Rosen::Window::UpdateConfigurationForAll(diffConfiguration); + #endif +} + /** * * @brief Called when the system has determined to trim the memory, for example, diff --git a/frameworks/simulator/common/include/configuration.h b/frameworks/simulator/common/include/configuration.h index d4e38e088c..370e36584b 100644 --- a/frameworks/simulator/common/include/configuration.h +++ b/frameworks/simulator/common/include/configuration.h @@ -43,6 +43,7 @@ constexpr const char* EMPTY_STRING = ""; constexpr const char* APPLICATION_DIRECTION = "ohos.application.direction"; constexpr const char* APPLICATION_DENSITYDPI = "ohos.application.densitydpi"; constexpr const char* APPLICATION_DISPLAYID = "ohos.application.displayid"; +constexpr const char* APPLICATION_FONT = "ohos.application.font"; constexpr const char* COLOR_MODE_LIGHT = "light"; constexpr const char* COLOR_MODE_DARK = "dark"; diff --git a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h index e7dd14c9cb..a0b771be57 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h @@ -91,6 +91,7 @@ public: void SwitchArea(int mode) override; void SetColorMode(int32_t colorMode); void SetLanguage(const std::string &language); + void SetFont(const std::string &font); void ClearUpApplicationData(); int GetArea() override; std::shared_ptr GetConfiguration() const override; @@ -110,6 +111,7 @@ public: bool GetApplicationInfoUpdateFlag() const; void SetApplicationInfoUpdateFlag(bool flag); void RegisterAppConfigUpdateObserver(AppConfigUpdateCallback appConfigChangeCallback); + void RegisterAppFontObserver(AppConfigUpdateCallback appFontCallback); std::string GetAppRunningUniqueId() const; void SetAppRunningUniqueId(const std::string &appRunningUniqueId); @@ -128,6 +130,7 @@ private: std::recursive_mutex applicationStateCallbackLock_; bool applicationInfoUpdateFlag_ = false; AppConfigUpdateCallback appConfigChangeCallback_ = nullptr; + AppConfigUpdateCallback appFontCallback_ = nullptr; std::string appRunningUniqueId_; int32_t appIndex_ = 0; int32_t appMode_ = 0; diff --git a/interfaces/kits/native/appkit/ability_runtime/context/context_impl.h b/interfaces/kits/native/appkit/ability_runtime/context/context_impl.h index cea4d75680..3ffbfdd83b 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/context_impl.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/context_impl.h @@ -157,12 +157,19 @@ public: void SetColorMode(int colorMode); /** - * @brief Set color mode + * @brief Set language * - * @param colorMode color mode. + * @param language language. */ void SetLanguage(std::string language); + /** + * @brief Set font + * + * @param Font font. + */ + void SetFont(std::string font); + /** * @brief clear the application data by app self */ diff --git a/interfaces/kits/native/appkit/ability_runtime/context/js_application_context_utils.h b/interfaces/kits/native/appkit/ability_runtime/context/js_application_context_utils.h index ca3bcd046d..777d32a5f9 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/js_application_context_utils.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/js_application_context_utils.h @@ -94,6 +94,7 @@ public: napi_value OnGetRunningProcessInformation(napi_env env, NapiCallbackInfo& info); napi_value OnSetColorMode(napi_env env, NapiCallbackInfo& info); napi_value OnSetLanguage(napi_env env, NapiCallbackInfo& info); + napi_value OnSetFont(napi_env env, NapiCallbackInfo& info); napi_value OnClearUpApplicationData(napi_env env, NapiCallbackInfo& info); napi_value OnRestartApp(napi_env env, NapiCallbackInfo& info); napi_value OnSetSupportedProcessCacheSelf(napi_env env, NapiCallbackInfo& info); @@ -114,6 +115,7 @@ public: static napi_value KillProcessBySelf(napi_env env, napi_callback_info info); static napi_value SetColorMode(napi_env env, napi_callback_info info); static napi_value SetLanguage(napi_env env, napi_callback_info info); + static napi_value SetFont(napi_env env, napi_callback_info info); static napi_value ClearUpApplicationData(napi_env env, napi_callback_info info); static napi_value GetRunningProcessInformation(napi_env env, napi_callback_info info); static napi_value CreateJsApplicationContext(napi_env env); diff --git a/interfaces/kits/native/appkit/app/ohos_application.h b/interfaces/kits/native/appkit/app/ohos_application.h index 6f7c2b331d..f0461a9f53 100644 --- a/interfaces/kits/native/appkit/app/ohos_application.h +++ b/interfaces/kits/native/appkit/app/ohos_application.h @@ -176,6 +176,14 @@ public: * @param config Indicates the new Configuration object. */ virtual void OnConfigurationUpdated(Configuration config); + + /** + * + * @brief Will be Called when the application font of the device changes. + * + * @param config Indicates the new Configuration object. + */ + virtual void OnFontUpdated(Configuration config); /** *