!8629 支持应用级字体切换

Merge pull request !8629 from liuzongze/master
This commit is contained in:
openharmony_ci
2024-05-31 01:46:05 +00:00
committed by Gitee
9 changed files with 101 additions and 6 deletions
@@ -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);
}
@@ -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());
@@ -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(
@@ -1515,6 +1543,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,
@@ -1525,10 +1554,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);
}
@@ -200,10 +200,19 @@ void OHOSApplication::SetApplicationContext(
abilityRuntimeContext_->RegisterAppConfigUpdateObserver([applicationWptr](const Configuration &config) {
std::shared_ptr<OHOSApplication> 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<OHOSApplication> 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<AppExecFwk::Configuration>(config);
Rosen::Window::UpdateConfigurationForAll(diffConfiguration);
#endif
}
/**
*
* @brief Called when the system has determined to trim the memory, for example,
@@ -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";
@@ -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<AppExecFwk::Configuration> 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;
@@ -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
*/
@@ -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);
@@ -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);
/**
*