diff --git a/frameworks/kits/ability/native/src/ability.cpp b/frameworks/kits/ability/native/src/ability.cpp index a5cf910b1a..96b450aa28 100755 --- a/frameworks/kits/ability/native/src/ability.cpp +++ b/frameworks/kits/ability/native/src/ability.cpp @@ -241,8 +241,9 @@ void Ability::OnStart(const Want &want) int32_t width = display->GetWidth(); int32_t height = display->GetHeight(); auto configuration = application_->GetConfiguration(); - configuration->AddItem(ConfigurationInner::APPLICATION_DIRECTION, GetDirectionStr(height, width)); - configuration->AddItem(ConfigurationInner::APPLICATION_DENSITYDPI, GetDensityStr(density)); + configuration->AddItem(displayId, ConfigurationInner::APPLICATION_DIRECTION, + GetDirectionStr(height, width)); + configuration->AddItem(displayId, ConfigurationInner::APPLICATION_DENSITYDPI, GetDensityStr(density)); configuration->AddItem(ConfigurationInner::APPLICATION_DISPLAYID, std::to_string(displayId)); UpdateContextConfiguration(); @@ -3465,8 +3466,8 @@ void Ability::OnChange(Rosen::DisplayId displayId, Rosen::DisplayChangeEvent cha // Notify ability Configuration newConfig; - newConfig.AddItem(ConfigurationInner::APPLICATION_DIRECTION, GetDirectionStr(height, width)); - newConfig.AddItem(ConfigurationInner::APPLICATION_DENSITYDPI, GetDensityStr(density)); + newConfig.AddItem(displayId, ConfigurationInner::APPLICATION_DIRECTION, GetDirectionStr(height, width)); + newConfig.AddItem(displayId, ConfigurationInner::APPLICATION_DENSITYDPI, GetDensityStr(density)); std::vector changeKeyV; auto configuration = application_->GetConfiguration(); diff --git a/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp b/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp index 8aac9cafb3..efa71ba1bb 100755 --- a/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp +++ b/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp @@ -305,9 +305,10 @@ void JsAbility::OnConfigurationUpdated(const Configuration &configuration) HandleScope handleScope(jsRuntime_); auto& nativeEngine = jsRuntime_.GetNativeEngine(); - JsAbilityContext::ConfigurationUpdated(&nativeEngine, shellContextRef_, GetAbilityContext()->GetConfiguration()); + auto fullConfig = GetAbilityContext()->GetConfiguration(); + JsAbilityContext::ConfigurationUpdated(&nativeEngine, shellContextRef_, fullConfig); napi_value napiConfiguration = OHOS::AppExecFwk::WrapConfiguration( - reinterpret_cast(&nativeEngine), configuration); + reinterpret_cast(&nativeEngine), *fullConfig); NativeValue* jsConfiguration = reinterpret_cast(napiConfiguration); CallObjectMethod("onConfigurationUpdated", &jsConfiguration, 1); } diff --git a/frameworks/kits/ability/native/src/ability_thread.cpp b/frameworks/kits/ability/native/src/ability_thread.cpp index 33b74c04b5..d962b23b2c 100644 --- a/frameworks/kits/ability/native/src/ability_thread.cpp +++ b/frameworks/kits/ability/native/src/ability_thread.cpp @@ -672,11 +672,6 @@ void AbilityThread::ScheduleRestoreAbilityState(const PacMap &state) void AbilityThread::ScheduleUpdateConfiguration(const Configuration &config) { APP_LOGI("AbilityThread::ScheduleUpdateConfiguration begin"); - if (abilityImpl_ == nullptr) { - APP_LOGE("AbilityThread::ScheduleUpdateConfiguration abilityImpl_ is nullptr"); - return; - } - wptr weak = this; auto task = [weak, config]() { auto abilityThread = weak.promote(); diff --git a/frameworks/kits/ability/native/src/form_runtime/js_form_extension.cpp b/frameworks/kits/ability/native/src/form_runtime/js_form_extension.cpp index 94bd57d369..0a97767f7f 100644 --- a/frameworks/kits/ability/native/src/form_runtime/js_form_extension.cpp +++ b/frameworks/kits/ability/native/src/form_runtime/js_form_extension.cpp @@ -308,10 +308,11 @@ void JsFormExtension::OnConfigurationUpdated(const AppExecFwk::Configuration& co auto& nativeEngine = jsRuntime_.GetNativeEngine(); // Notify extension context - JsExtensionContext::ConfigurationUpdated(&nativeEngine, shellContextRef_, GetContext()->GetConfiguration()); + auto fullConfig = GetContext()->GetConfiguration(); + JsExtensionContext::ConfigurationUpdated(&nativeEngine, shellContextRef_, fullConfig); napi_value napiConfiguration = OHOS::AppExecFwk::WrapConfiguration( - reinterpret_cast(&nativeEngine), configuration); + reinterpret_cast(&nativeEngine), *fullConfig); NativeValue* jsConfiguration = reinterpret_cast(napiConfiguration); CallObjectMethod("onConfigurationUpdated", &jsConfiguration, 1); } diff --git a/frameworks/kits/ability/native/src/js_service_extension.cpp b/frameworks/kits/ability/native/src/js_service_extension.cpp index a492231cba..7213058c2c 100755 --- a/frameworks/kits/ability/native/src/js_service_extension.cpp +++ b/frameworks/kits/ability/native/src/js_service_extension.cpp @@ -281,10 +281,11 @@ void JsServiceExtension::OnConfigurationUpdated(const AppExecFwk::Configuration& auto& nativeEngine = jsRuntime_.GetNativeEngine(); // Notify extension context - JsExtensionContext::ConfigurationUpdated(&nativeEngine, shellContextRef_, GetContext()->GetConfiguration()); + auto fullConfig = GetContext()->GetConfiguration(); + JsExtensionContext::ConfigurationUpdated(&nativeEngine, shellContextRef_, fullConfig); napi_value napiConfiguration = OHOS::AppExecFwk::WrapConfiguration( - reinterpret_cast(&nativeEngine), configuration); + reinterpret_cast(&nativeEngine), *fullConfig); NativeValue* jsConfiguration = reinterpret_cast(napiConfiguration); CallObjectMethod("onConfigurationUpdated", &jsConfiguration, 1); } diff --git a/frameworks/kits/appkit/native/ability_runtime/app/js_ability_stage.cpp b/frameworks/kits/appkit/native/ability_runtime/app/js_ability_stage.cpp index dcfb207c30..deffaa191c 100644 --- a/frameworks/kits/appkit/native/ability_runtime/app/js_ability_stage.cpp +++ b/frameworks/kits/appkit/native/ability_runtime/app/js_ability_stage.cpp @@ -185,10 +185,11 @@ void JsAbilityStage::OnConfigurationUpdated(const AppExecFwk::Configuration& con auto& nativeEngine = jsRuntime_.GetNativeEngine(); // Notify Ability stage context - JsAbilityStageContext::ConfigurationUpdated(&nativeEngine, shellContextRef_, GetContext()->GetConfiguration()); + auto fullConfig = GetContext()->GetConfiguration(); + JsAbilityStageContext::ConfigurationUpdated(&nativeEngine, shellContextRef_, fullConfig); napi_value napiConfiguration = OHOS::AppExecFwk::WrapConfiguration( - reinterpret_cast(&nativeEngine), configuration); + reinterpret_cast(&nativeEngine), *fullConfig); NativeValue* jsConfiguration = reinterpret_cast(napiConfiguration); CallObjectMethod("onConfigurationUpdated", &jsConfiguration, 1); } diff --git a/frameworks/kits/appkit/native/app/src/main_thread.cpp b/frameworks/kits/appkit/native/app/src/main_thread.cpp index 6f46776914..a9a083db37 100644 --- a/frameworks/kits/appkit/native/app/src/main_thread.cpp +++ b/frameworks/kits/appkit/native/app/src/main_thread.cpp @@ -898,6 +898,7 @@ void MainThread::HandleLaunchApplication(const AppLaunchData &appLaunchData, con application_->AttachBaseContext(contextDeal); application_->SetAbilityRecordMgr(abilityRecordMgr_); application_->SetConfiguration(config); + contextImpl->SetConfiguration(application_->GetConfiguration()); applicationImpl_->SetRecordId(appLaunchData.GetRecordId()); applicationImpl_->SetApplication(application_); diff --git a/frameworks/kits/runtime/native/js_data_struct_converter.cpp b/frameworks/kits/runtime/native/js_data_struct_converter.cpp index 68e0dffc98..a3f108737e 100644 --- a/frameworks/kits/runtime/native/js_data_struct_converter.cpp +++ b/frameworks/kits/runtime/native/js_data_struct_converter.cpp @@ -21,6 +21,7 @@ namespace OHOS { namespace AbilityRuntime { +using namespace OHOS::AppExecFwk; NativeValue* CreateJsWantObject(NativeEngine& engine, const AAFwk::Want& want) { NativeValue* objValue = engine.CreateObject(); @@ -172,15 +173,19 @@ NativeValue* CreateJsConfiguration(NativeEngine& engine, const AppExecFwk::Confi NativeObject* object = ConvertNativeValueTo(objValue); object->SetProperty("language", CreateJsValue(engine, - configuration.GetItem(AppExecFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE))); + configuration.GetItem(GlobalConfigurationKey::SYSTEM_LANGUAGE))); object->SetProperty("colorMode", CreateJsValue(engine, - AppExecFwk::ConvertColorMode(configuration.GetItem(AppExecFwk::GlobalConfigurationKey::SYSTEM_COLORMODE)))); - object->SetProperty("direction", CreateJsValue(engine, - AppExecFwk::ConvertDirection(configuration.GetItem(AppExecFwk::ConfigurationInner::APPLICATION_DIRECTION)))); - object->SetProperty("screenDensity", CreateJsValue(engine, - AppExecFwk::ConvertDensity(configuration.GetItem(AppExecFwk::ConfigurationInner::APPLICATION_DENSITYDPI)))); - object->SetProperty("displayId", CreateJsValue(engine, - AppExecFwk::ConvertDisplayId(configuration.GetItem(AppExecFwk::ConfigurationInner::APPLICATION_DISPLAYID)))); + ConvertColorMode(configuration.GetItem(GlobalConfigurationKey::SYSTEM_COLORMODE)))); + + int32_t displayId = ConvertDisplayId(configuration.GetItem(ConfigurationInner::APPLICATION_DISPLAYID)); + + std::string direction = configuration.GetItem(displayId, ConfigurationInner::APPLICATION_DIRECTION); + object->SetProperty("direction", CreateJsValue(engine, ConvertDirection(direction))); + + std::string density = configuration.GetItem(displayId, ConfigurationInner::APPLICATION_DENSITYDPI); + object->SetProperty("screenDensity", CreateJsValue(engine, ConvertDensity(density))); + + object->SetProperty("displayId", CreateJsValue(engine, displayId)); return objValue; } diff --git a/interfaces/kits/napi/aafwk/ext_ability_context/ext_ability_context.js b/interfaces/kits/napi/aafwk/ext_ability_context/ext_ability_context.js index c1029e0992..9f0af27655 100644 --- a/interfaces/kits/napi/aafwk/ext_ability_context/ext_ability_context.js +++ b/interfaces/kits/napi/aafwk/ext_ability_context/ext_ability_context.js @@ -18,6 +18,11 @@ class ExtAbilityContext extends Context { constructor(obj) { super(obj); this.currentHapModuleInfo = obj.currentHapModuleInfo + this.config = obj.config + } + + onUpdateConfiguration(config) { + this.config = config } } diff --git a/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_configuration.cpp b/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_configuration.cpp index f73406fbd1..60ce79a718 100644 --- a/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_configuration.cpp +++ b/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_configuration.cpp @@ -50,13 +50,17 @@ napi_value WrapConfiguration(napi_env env, const AppExecFwk::Configuration &conf jsValue = WrapInt32ToJS(env, ConvertColorMode(configuration.GetItem(GlobalConfigurationKey::SYSTEM_COLORMODE))); SetPropertyValueByPropertyName(env, jsObject, "colorMode", jsValue); - jsValue = WrapInt32ToJS(env, ConvertDirection(configuration.GetItem(ConfigurationInner::APPLICATION_DIRECTION))); + int32_t displayId = ConvertDisplayId(configuration.GetItem(ConfigurationInner::APPLICATION_DISPLAYID)); + + std::string direction = configuration.GetItem(displayId, ConfigurationInner::APPLICATION_DIRECTION); + jsValue = WrapInt32ToJS(env, ConvertDirection(direction)); SetPropertyValueByPropertyName(env, jsObject, "direction", jsValue); - jsValue = WrapInt32ToJS(env, ConvertDensity(configuration.GetItem(ConfigurationInner::APPLICATION_DENSITYDPI))); + std::string density = configuration.GetItem(displayId, ConfigurationInner::APPLICATION_DENSITYDPI); + jsValue = WrapInt32ToJS(env, ConvertDensity(density)); SetPropertyValueByPropertyName(env, jsObject, "screenDensity", jsValue); - jsValue = WrapInt32ToJS(env, ConvertDisplayId(configuration.GetItem(ConfigurationInner::APPLICATION_DISPLAYID))); + jsValue = WrapInt32ToJS(env, displayId); SetPropertyValueByPropertyName(env, jsObject, "displayId", jsValue); return jsObject;