From 870870c86777debaa4e40741e0fda10b703d4651 Mon Sep 17 00:00:00 2001 From: w00623444 Date: Wed, 31 Jul 2024 17:25:32 +0800 Subject: [PATCH 1/8] change statusbar default color follow from sys to app Signed-off-by: w00623444 --- wm/BUILD.gn | 1 + wm/include/window_scene_session_impl.h | 1 + wm/src/window_scene_session_impl.cpp | 31 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/wm/BUILD.gn b/wm/BUILD.gn index 76e838b671..d4d8bce418 100644 --- a/wm/BUILD.gn +++ b/wm/BUILD.gn @@ -252,6 +252,7 @@ ohos_shared_library("libwm") { "ability_base:zuri", "ability_runtime:ability_context_native", "ability_runtime:ability_manager", + "ability_runtime:app_context", "ability_runtime:app_manager", "accessibility:accessibility_common", "ace_engine:ace_uicontent", diff --git a/wm/include/window_scene_session_impl.h b/wm/include/window_scene_session_impl.h index a29872fc0c..2adc8b3f26 100644 --- a/wm/include/window_scene_session_impl.h +++ b/wm/include/window_scene_session_impl.h @@ -213,6 +213,7 @@ private: WindowLimits& newLimits, WindowLimits& customizedLimits, float& virtualPixelRatio); void CalculateNewLimitsByRatio(WindowLimits& newLimits, WindowLimits& customizedLimits); void NotifyDisplayInfoChange(); + void InitStatusBarColor(); bool userLimitsSet_ = false; bool enableDefaultAnimation_ = true; sptr animationTransitionController_; diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index 318707e55e..031e71f488 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -46,6 +46,7 @@ #include "pattern_detach_callback.h" #include "window_session_impl.h" #include "sys_cap_util.h" +#include "application_context.h" namespace OHOS { namespace Rosen { @@ -477,6 +478,7 @@ WMError WindowSceneSessionImpl::Create(const std::shared_ptr appContext = AbilityRuntime::Context::GetApplicationContext(); + std::shared_ptr config = appContext->GetConfiguration(); + bool isColorModeSetByApp = !config->GetItem(AAFwk::GlobalConfigurationKey::COLORMODE_IS_SET_BY_APP).empty(); + std::string colorMode = config->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_COLORMODE); + uint32_t contentColor; + static const uint32_t BLACK = 0xE5000000; + static const uint32_t WHITE = 0xE5FFFFFF; + if (isColorModeSetByApp) { + contentColor = colorMode == AppExecFwk::ConfigurationInner::COLOR_MODE_LIGHT ? BLACK : WHITE; + } else { + bool hasDarkRes = false; + appContext->AppHasDarkRes(hasDarkRes); + TLOGI(WmsLogTag::WMS_IMMS, "has dark res: %{public}u", hasDarkRes); + contentColor = colorMode == AppExecFwk::ConfigurationInner::COLOR_MODE_LIGHT ? BLACK : + (hasDarkRes ? WHITE : BLACK); + } + + SystemBarProperty curSysBarProp = GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_STATUS_BAR); + SystemBarSettingFlag settingFlag = static_cast( + static_cast(curSysBarProp.settingFlag_) | + static_cast(SystemBarSettingFlag::COLOR_SETTING) + ); + SystemBarProperty sysBarProp(curSysBarProp.enable_, curSysBarProp.backgroundColor_, contentColor, + curSysBarProp.enableAnimation_, settingFlag); + SetSpecificBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, sysBarProp); +} + void WindowSceneSessionImpl::RegisterSessionRecoverListener(bool isSpecificSession) { TLOGD(WmsLogTag::WMS_RECOVER, "persistentId = %{public}d, isSpecificSession = %{public}s", -- Gitee From 50872df7f7608ecb742b6ca5e77dfc01bf9e485d Mon Sep 17 00:00:00 2001 From: w00623444 Date: Thu, 1 Aug 2024 14:41:23 +0800 Subject: [PATCH 2/8] clean code Signed-off-by: w00623444 --- wm/src/window_scene_session_impl.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index 031e71f488..a792b4206f 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -492,7 +492,15 @@ WMError WindowSceneSessionImpl::Create(const std::shared_ptr appContext = AbilityRuntime::Context::GetApplicationContext(); + if (appContext == nullptr) { + TLOGI(WmsLogTag::WMS_IMMS, "app context is nullptr"); + return; + } std::shared_ptr config = appContext->GetConfiguration(); + if (config == nullptr) { + TLOGI(WmsLogTag::WMS_IMMS, "app config is nullptr"); + return; + } bool isColorModeSetByApp = !config->GetItem(AAFwk::GlobalConfigurationKey::COLORMODE_IS_SET_BY_APP).empty(); std::string colorMode = config->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_COLORMODE); uint32_t contentColor; -- Gitee From 49641249bdbb49a0fe494ea9404e8eca8e3bfb1d Mon Sep 17 00:00:00 2001 From: w00623444 Date: Thu, 1 Aug 2024 22:34:26 +0800 Subject: [PATCH 3/8] optimize Signed-off-by: w00623444 --- wm/include/window_scene_session_impl.h | 2 +- wm/src/window_scene_session_impl.cpp | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/wm/include/window_scene_session_impl.h b/wm/include/window_scene_session_impl.h index 2adc8b3f26..51d9f78f6e 100644 --- a/wm/include/window_scene_session_impl.h +++ b/wm/include/window_scene_session_impl.h @@ -213,7 +213,7 @@ private: WindowLimits& newLimits, WindowLimits& customizedLimits, float& virtualPixelRatio); void CalculateNewLimitsByRatio(WindowLimits& newLimits, WindowLimits& customizedLimits); void NotifyDisplayInfoChange(); - void InitStatusBarColor(); + void UpdateStatusBarColor(const std::shared_ptr& configuration = nullptr); bool userLimitsSet_ = false; bool enableDefaultAnimation_ = true; sptr animationTransitionController_; diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index a792b4206f..d7ae53c8ff 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -489,18 +489,24 @@ WMError WindowSceneSessionImpl::Create(const std::shared_ptr configuration) { + if (!WindowHelper::IsMainWindow(property_->GetWindowType())) { + TLOGD(WmsLogTag::WMS_IMMS, "not main window"); + } std::shared_ptr appContext = AbilityRuntime::Context::GetApplicationContext(); if (appContext == nullptr) { - TLOGI(WmsLogTag::WMS_IMMS, "app context is nullptr"); + TLOGE(WmsLogTag::WMS_IMMS, "app context is nullptr"); return; } - std::shared_ptr config = appContext->GetConfiguration(); + std::shared_ptr config = configuration; if (config == nullptr) { - TLOGI(WmsLogTag::WMS_IMMS, "app config is nullptr"); - return; + config = appContext->GetConfiguration(); + if (config == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "app config is nullptr") + } } + bool isColorModeSetByApp = !config->GetItem(AAFwk::GlobalConfigurationKey::COLORMODE_IS_SET_BY_APP).empty(); std::string colorMode = config->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_COLORMODE); uint32_t contentColor; @@ -2391,6 +2397,7 @@ void WindowSceneSessionImpl::UpdateConfiguration(const std::shared_ptrUpdateConfiguration(configuration); } } + UpdateStatusBarColor(configuration); if (subWindowSessionMap_.count(GetPersistentId()) == 0) { return; } -- Gitee From cc4291702668e850a17e0db2fc05289aa2c38178 Mon Sep 17 00:00:00 2001 From: w00623444 Date: Thu, 1 Aug 2024 22:34:26 +0800 Subject: [PATCH 4/8] optimize Signed-off-by: w00623444 --- wm/include/window_scene_session_impl.h | 2 +- wm/src/window_scene_session_impl.cpp | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/wm/include/window_scene_session_impl.h b/wm/include/window_scene_session_impl.h index 2adc8b3f26..51d9f78f6e 100644 --- a/wm/include/window_scene_session_impl.h +++ b/wm/include/window_scene_session_impl.h @@ -213,7 +213,7 @@ private: WindowLimits& newLimits, WindowLimits& customizedLimits, float& virtualPixelRatio); void CalculateNewLimitsByRatio(WindowLimits& newLimits, WindowLimits& customizedLimits); void NotifyDisplayInfoChange(); - void InitStatusBarColor(); + void UpdateStatusBarColor(const std::shared_ptr& configuration = nullptr); bool userLimitsSet_ = false; bool enableDefaultAnimation_ = true; sptr animationTransitionController_; diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index a792b4206f..1e8ad95336 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -478,7 +478,7 @@ WMError WindowSceneSessionImpl::Create(const std::shared_ptr configuration) { + if (!WindowHelper::IsMainWindow(property_->GetWindowType())) { + TLOGD(WmsLogTag::WMS_IMMS, "not main window"); + } std::shared_ptr appContext = AbilityRuntime::Context::GetApplicationContext(); if (appContext == nullptr) { - TLOGI(WmsLogTag::WMS_IMMS, "app context is nullptr"); + TLOGE(WmsLogTag::WMS_IMMS, "app context is nullptr"); return; } - std::shared_ptr config = appContext->GetConfiguration(); + std::shared_ptr config = configuration; if (config == nullptr) { - TLOGI(WmsLogTag::WMS_IMMS, "app config is nullptr"); - return; + config = appContext->GetConfiguration(); + if (config == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "app config is nullptr") + } } + bool isColorModeSetByApp = !config->GetItem(AAFwk::GlobalConfigurationKey::COLORMODE_IS_SET_BY_APP).empty(); std::string colorMode = config->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_COLORMODE); uint32_t contentColor; @@ -2391,6 +2397,7 @@ void WindowSceneSessionImpl::UpdateConfiguration(const std::shared_ptrUpdateConfiguration(configuration); } } + UpdateStatusBarColor(configuration); if (subWindowSessionMap_.count(GetPersistentId()) == 0) { return; } -- Gitee From b0e4993801e6fee10ca53330b2f26cc3eebc21e5 Mon Sep 17 00:00:00 2001 From: w00623444 Date: Fri, 2 Aug 2024 16:20:55 +0800 Subject: [PATCH 5/8] fix Signed-off-by: w00623444 --- wm/include/window_scene_session_impl.h | 3 +- wm/src/window_scene_session_impl.cpp | 43 +++++++++++++------------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/wm/include/window_scene_session_impl.h b/wm/include/window_scene_session_impl.h index 51d9f78f6e..4296c49bba 100644 --- a/wm/include/window_scene_session_impl.h +++ b/wm/include/window_scene_session_impl.h @@ -213,7 +213,8 @@ private: WindowLimits& newLimits, WindowLimits& customizedLimits, float& virtualPixelRatio); void CalculateNewLimitsByRatio(WindowLimits& newLimits, WindowLimits& customizedLimits); void NotifyDisplayInfoChange(); - void UpdateStatusBarColor(const std::shared_ptr& configuration = nullptr); + void UpdateDefaultStatusBarColor(); + bool shouldFollowAppColorMode_ = true; bool userLimitsSet_ = false; bool enableDefaultAnimation_ = true; sptr animationTransitionController_; diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index c243e02d74..7fdc60fa39 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -478,7 +478,7 @@ WMError WindowSceneSessionImpl::Create(const std::shared_ptr& configuration) +void WindowSceneSessionImpl::UpdateDefaultStatusBarColor() { - if (!WindowHelper::IsMainWindow(property_->GetWindowType())) { + if (!shouldFollowAppColorMode_) { + TLOGD(WmsLogTag::WMS_IMMS, "user set"); + } + if (!WindowHelper::IsMainWindow(GetType())) { TLOGD(WmsLogTag::WMS_IMMS, "not main window"); } std::shared_ptr appContext = AbilityRuntime::Context::GetApplicationContext(); @@ -499,37 +502,34 @@ void WindowSceneSessionImpl::UpdateStatusBarColor(const std::shared_ptr config = configuration; - if (config == nullptr) { - config = appContext->GetConfiguration(); - if (config == nullptr) { - TLOGE(WmsLogTag::WMS_IMMS, "app config is nullptr"); - } - } - + + std::shared_ptr config = appContext->GetConfiguration(); bool isColorModeSetByApp = !config->GetItem(AAFwk::GlobalConfigurationKey::COLORMODE_IS_SET_BY_APP).empty(); std::string colorMode = config->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_COLORMODE); uint32_t contentColor; - static const uint32_t BLACK = 0xE5000000; - static const uint32_t WHITE = 0xE5FFFFFF; + static const uint32_t BLACK = 0xFF000000; + static const uint32_t WHITE = 0xFFFFFFFF; if (isColorModeSetByApp) { + TLOGI(WmsLogTag::WMS_IMMS, "winId: %{public}u, type: %{public}u, colorMode: %{public}s", + GetPersistentId(), GetType(), colorMode.c_str()); contentColor = colorMode == AppExecFwk::ConfigurationInner::COLOR_MODE_LIGHT ? BLACK : WHITE; } else { bool hasDarkRes = false; appContext->AppHasDarkRes(hasDarkRes); - TLOGI(WmsLogTag::WMS_IMMS, "has dark res: %{public}u", hasDarkRes); + TLOGI(WmsLogTag::WMS_IMMS, "winId: %{public}u, type: %{public}u, hasDarkRes: %{public}u, colorMode: %{public}s", + GetPersistentId(), GetType(), hasDarkRes, colorMode.c_str()); contentColor = colorMode == AppExecFwk::ConfigurationInner::COLOR_MODE_LIGHT ? BLACK : (hasDarkRes ? WHITE : BLACK); } - SystemBarProperty curSysBarProp = GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_STATUS_BAR); - SystemBarSettingFlag settingFlag = static_cast( - static_cast(curSysBarProp.settingFlag_) | + SystemBarProperty statusBarProp = GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_STATUS_BAR); + statusBarProp.contentColor_ = contentColor; + statusBarProp.settingFlag_ = static_cast( + static_cast(statusBarProp.settingFlag_) | static_cast(SystemBarSettingFlag::COLOR_SETTING) ); - SystemBarProperty sysBarProp(curSysBarProp.enable_, curSysBarProp.backgroundColor_, contentColor, - curSysBarProp.enableAnimation_, settingFlag); - SetSpecificBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, sysBarProp); + SetSpecificBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, statusBarProp); + shouldFollowAppColorMode_ = true; } void WindowSceneSessionImpl::RegisterSessionRecoverListener(bool isSpecificSession) @@ -1830,6 +1830,7 @@ WMError WindowSceneSessionImpl::SetSpecificBarProperty(WindowType type, const Sy return WMError::WM_ERROR_NULLPTR; } isSystembarPropertiesSet_ = true; + shouldFollowAppColorMode_ = false; property_->SetSystemBarProperty(type, property); WMError ret = NotifySpecificWindowSessionProperty(type, property); if (ret != WMError::WM_OK) { @@ -2397,7 +2398,7 @@ void WindowSceneSessionImpl::UpdateConfiguration(const std::shared_ptrUpdateConfiguration(configuration); } } - UpdateStatusBarColor(configuration); + UpdateDefaultStatusBarColor(); if (subWindowSessionMap_.count(GetPersistentId()) == 0) { return; } -- Gitee From 36775316734aa0c93ae1705e10cd03f265205de8 Mon Sep 17 00:00:00 2001 From: w00623444 Date: Sat, 3 Aug 2024 18:02:04 +0800 Subject: [PATCH 6/8] optimize Signed-off-by: w00623444 --- interfaces/innerkits/wm/wm_common.h | 6 ++++-- wm/include/window_scene_session_impl.h | 1 - wm/src/window_scene_session_impl.cpp | 11 ++++++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index e66aaedfd0..a5a3a9364b 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -249,11 +249,13 @@ enum class WindowStatus : uint32_t { /** * @brief Enumerates setting flag of systemStatusBar */ -enum class SystemBarSettingFlag : uint32_t { +enum class SystemBarSettingFlag : uint32_t +{ DEFAULT_SETTING = 0, COLOR_SETTING = 1, ENABLE_SETTING = 1 << 1, - ALL_SETTING = 0b11 + FOLLOW_SETTING = 1 << 2, + ALL_SETTING = 0b011 }; /** diff --git a/wm/include/window_scene_session_impl.h b/wm/include/window_scene_session_impl.h index 4296c49bba..9540dc1914 100644 --- a/wm/include/window_scene_session_impl.h +++ b/wm/include/window_scene_session_impl.h @@ -214,7 +214,6 @@ private: void CalculateNewLimitsByRatio(WindowLimits& newLimits, WindowLimits& customizedLimits); void NotifyDisplayInfoChange(); void UpdateDefaultStatusBarColor(); - bool shouldFollowAppColorMode_ = true; bool userLimitsSet_ = false; bool enableDefaultAnimation_ = true; sptr animationTransitionController_; diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index 7fdc60fa39..9dc1047fd9 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -491,11 +491,15 @@ WMError WindowSceneSessionImpl::Create(const std::shared_ptr(static_cast(statusBarProp.settingFlag_) & + static_cast(SystemBarPropertyFlag::COLOR_SETTING)) == SystemBarPropertyFlag::COLOR_SETTING) { TLOGD(WmsLogTag::WMS_IMMS, "user set"); + return; } if (!WindowHelper::IsMainWindow(GetType())) { TLOGD(WmsLogTag::WMS_IMMS, "not main window"); + return; } std::shared_ptr appContext = AbilityRuntime::Context::GetApplicationContext(); if (appContext == nullptr) { @@ -522,14 +526,12 @@ void WindowSceneSessionImpl::UpdateDefaultStatusBarColor() (hasDarkRes ? WHITE : BLACK); } - SystemBarProperty statusBarProp = GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_STATUS_BAR); statusBarProp.contentColor_ = contentColor; statusBarProp.settingFlag_ = static_cast( static_cast(statusBarProp.settingFlag_) | - static_cast(SystemBarSettingFlag::COLOR_SETTING) + static_cast(SystemBarSettingFlag::FOLLOW_SETTING) ); SetSpecificBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, statusBarProp); - shouldFollowAppColorMode_ = true; } void WindowSceneSessionImpl::RegisterSessionRecoverListener(bool isSpecificSession) @@ -1830,7 +1832,6 @@ WMError WindowSceneSessionImpl::SetSpecificBarProperty(WindowType type, const Sy return WMError::WM_ERROR_NULLPTR; } isSystembarPropertiesSet_ = true; - shouldFollowAppColorMode_ = false; property_->SetSystemBarProperty(type, property); WMError ret = NotifySpecificWindowSessionProperty(type, property); if (ret != WMError::WM_OK) { -- Gitee From 92f125f3a11ad9f7363ccd1eb6cd3335603b75e2 Mon Sep 17 00:00:00 2001 From: w00623444 Date: Sat, 3 Aug 2024 18:09:30 +0800 Subject: [PATCH 7/8] fix Signed-off-by: w00623444 --- wm/src/window_scene_session_impl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index 9dc1047fd9..770615dd1b 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -492,8 +492,8 @@ WMError WindowSceneSessionImpl::Create(const std::shared_ptr(static_cast(statusBarProp.settingFlag_) & - static_cast(SystemBarPropertyFlag::COLOR_SETTING)) == SystemBarPropertyFlag::COLOR_SETTING) { + if (static_cast(static_cast(statusBarProp.settingFlag_) & + static_cast(SystemBarSettingFlag::COLOR_SETTING)) == SystemBarSettingFlag::COLOR_SETTING) { TLOGD(WmsLogTag::WMS_IMMS, "user set"); return; } -- Gitee From 8dd1d72916b8d1dfd6e4622b3a12efe71b11c719 Mon Sep 17 00:00:00 2001 From: w00623444 Date: Sat, 3 Aug 2024 22:56:05 +0800 Subject: [PATCH 8/8] clean code Signed-off-by: w00623444 --- interfaces/innerkits/wm/wm_common.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index a5a3a9364b..c0503acb96 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -249,8 +249,7 @@ enum class WindowStatus : uint32_t { /** * @brief Enumerates setting flag of systemStatusBar */ -enum class SystemBarSettingFlag : uint32_t -{ +enum class SystemBarSettingFlag : uint32_t { DEFAULT_SETTING = 0, COLOR_SETTING = 1, ENABLE_SETTING = 1 << 1, -- Gitee