change statusbar default color follow from sys to app

Signed-off-by: w00623444 <wanghaofan@huawei.com>
This commit is contained in:
w00623444 2024-07-31 17:25:32 +08:00
parent 8236baea65
commit 870870c867
3 changed files with 33 additions and 0 deletions

View File

@ -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",

View File

@ -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<IAnimationTransitionController> animationTransitionController_;

View File

@ -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<AbilityRuntime::Con
MakeSubOrDialogWindowDragableAndMoveble();
UpdateWindowState();
RegisterSessionRecoverListener(isSpecificSession);
InitStatusBarColor();
}
TLOGD(WmsLogTag::WMS_LIFE, "Window Create success [name:%{public}s, \
id:%{public}d], state:%{public}u, windowmode:%{public}u",
@ -487,6 +489,35 @@ WMError WindowSceneSessionImpl::Create(const std::shared_ptr<AbilityRuntime::Con
return ret;
}
void WindowSceneSessionImpl::InitStatusBarColor()
{
std::shared_ptr<AbilityRuntime::ApplicationContext> appContext = AbilityRuntime::Context::GetApplicationContext();
std::shared_ptr<AppExecFwk::Configuration> 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<SystemBarSettingFlag>(
static_cast<uint32_t>(curSysBarProp.settingFlag_) |
static_cast<uint32_t>(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",