Description:去除为拓展屏单独设置DPI功能

IssueNo:https://gitee.com/openharmony/window_window_manager/issues/IB5BTT
Binary Source:No
Signed-off-by: songjiawei9 <songjiawei9@h-partners.com>
This commit is contained in:
宋佳伟 2024-11-19 11:22:10 +08:00
parent 86be0556e9
commit 4bc201ad3b
6 changed files with 20 additions and 139 deletions

View File

@ -34,7 +34,6 @@ const static std::string DEFAULT_SCREEN_NAME = "buildIn";
constexpr int DOT_PER_INCH_MAXIMUM_VALUE = 1000; constexpr int DOT_PER_INCH_MAXIMUM_VALUE = 1000;
constexpr int DOT_PER_INCH_MINIMUM_VALUE = 80; constexpr int DOT_PER_INCH_MINIMUM_VALUE = 80;
constexpr uint32_t BASELINE_DENSITY = 160; constexpr uint32_t BASELINE_DENSITY = 160;
constexpr float INCH_TO_MM = 25.4f;
} }
/** /**

View File

@ -245,7 +245,6 @@ public:
void NotifyScreenMagneticStateChanged(bool isMagneticState); void NotifyScreenMagneticStateChanged(bool isMagneticState);
void OnTentModeChanged(bool isTentMode); void OnTentModeChanged(bool isTentMode);
void RegisterSettingDpiObserver(); void RegisterSettingDpiObserver();
void RegisterExtendSettingDpiObserver();
void RegisterSettingRotationObserver(); void RegisterSettingRotationObserver();
void OnConnect(ScreenId screenId) override {} void OnConnect(ScreenId screenId) override {}
@ -342,7 +341,6 @@ private:
sptr<ScreenSession> GetOrCreateScreenSession(ScreenId screenId); sptr<ScreenSession> GetOrCreateScreenSession(ScreenId screenId);
void CreateScreenProperty(ScreenId screenId, ScreenProperty& property); void CreateScreenProperty(ScreenId screenId, ScreenProperty& property);
void InitExtendScreenDensity(sptr<ScreenSession> session, ScreenProperty property); void InitExtendScreenDensity(sptr<ScreenSession> session, ScreenProperty property);
float CalcDefaultExtendScreenDensity(const ScreenProperty& property);
sptr<ScreenSession> GetScreenSessionInner(ScreenId screenId, ScreenProperty property); sptr<ScreenSession> GetScreenSessionInner(ScreenId screenId, ScreenProperty property);
sptr<ScreenSession> CreatePhysicalMirrorSessionInner(ScreenId screenId, ScreenId defaultScreenId, sptr<ScreenSession> CreatePhysicalMirrorSessionInner(ScreenId screenId, ScreenId defaultScreenId,
ScreenProperty property); ScreenProperty property);
@ -512,7 +510,6 @@ private:
void HandleFoldScreenPowerInit(); void HandleFoldScreenPowerInit();
void SetFoldScreenPowerInit(std::function<void()> foldScreenPowerInit); void SetFoldScreenPowerInit(std::function<void()> foldScreenPowerInit);
void SetDpiFromSettingData(); void SetDpiFromSettingData();
void SetDpiFromSettingData(bool isInternal);
void SetRotateLockedFromSettingData(); void SetRotateLockedFromSettingData();
void NotifyClientProxyUpdateFoldDisplayMode(FoldDisplayMode displayMode); void NotifyClientProxyUpdateFoldDisplayMode(FoldDisplayMode displayMode);
void UpdateDisplayScaleState(ScreenId screenId); void UpdateDisplayScaleState(ScreenId screenId);
@ -531,6 +528,7 @@ private:
void RegisterCastObserver(std::vector<ScreenId>& mirrorScreenIds); void RegisterCastObserver(std::vector<ScreenId>& mirrorScreenIds);
void ExitCoordination(const std::string& reason); void ExitCoordination(const std::string& reason);
void UpdateDisplayState(std::vector<ScreenId> screenIds, DisplayState state); void UpdateDisplayState(std::vector<ScreenId> screenIds, DisplayState state);
void SetExtendPixelRatio(const float& dpi);
DisplayState lastDisplayState_ { DisplayState::UNKNOWN }; DisplayState lastDisplayState_ { DisplayState::UNKNOWN };
private: private:

View File

@ -27,8 +27,6 @@ class ScreenSettingHelper {
public: public:
static void RegisterSettingDpiObserver(SettingObserver::UpdateFunc func); static void RegisterSettingDpiObserver(SettingObserver::UpdateFunc func);
static void UnregisterSettingDpiObserver(); static void UnregisterSettingDpiObserver();
static void RegisterExtendSettingDpiObserver(SettingObserver::UpdateFunc func);
static void UnregisterExtendSettingDpiObserver();
static bool GetSettingDpi(uint32_t& dpi, const std::string& key = SETTING_DPI_KEY); static bool GetSettingDpi(uint32_t& dpi, const std::string& key = SETTING_DPI_KEY);
static bool SetSettingDefaultDpi(uint32_t& dpi, const std::string& key); static bool SetSettingDefaultDpi(uint32_t& dpi, const std::string& key);
static bool GetSettingValue(uint32_t& value, const std::string& key); static bool GetSettingValue(uint32_t& value, const std::string& key);
@ -56,7 +54,6 @@ public:
private: private:
static const constexpr char* SETTING_DPI_KEY {"user_set_dpi_value"}; static const constexpr char* SETTING_DPI_KEY {"user_set_dpi_value"};
static const constexpr char* SETTING_DPI_KEY_EXTEND {"user_set_dpi_value_extend"};
static const constexpr char* SETTING_CAST_KEY {"huaweicast.data.privacy_projection_state"}; static const constexpr char* SETTING_CAST_KEY {"huaweicast.data.privacy_projection_state"};
static const constexpr char* SETTING_ROTATION_KEY {"screen_rotation_value"}; static const constexpr char* SETTING_ROTATION_KEY {"screen_rotation_value"};
static const constexpr char* SETTING_ROTATION_SCREEN_ID_KEY {"screen_rotation_screen_id_value"}; static const constexpr char* SETTING_ROTATION_SCREEN_ID_KEY {"screen_rotation_screen_id_value"};
@ -64,7 +61,6 @@ private:
static const constexpr char* SETTING_SCREEN_MODE_KEY {"user_set_last_screen_mode"}; static const constexpr char* SETTING_SCREEN_MODE_KEY {"user_set_last_screen_mode"};
static const constexpr char* SETTING_RELATIVE_POSITION_KEY {"user_set_relative_position"}; static const constexpr char* SETTING_RELATIVE_POSITION_KEY {"user_set_relative_position"};
static sptr<SettingObserver> dpiObserver_; static sptr<SettingObserver> dpiObserver_;
static sptr<SettingObserver> extendDpiObserver_;
static sptr<SettingObserver> castObserver_; static sptr<SettingObserver> castObserver_;
static sptr<SettingObserver> rotationObserver_; static sptr<SettingObserver> rotationObserver_;
}; };

View File

@ -97,7 +97,6 @@ constexpr int32_t CAST_WIRED_PROJECTION_START = 1005;
constexpr int32_t CAST_WIRED_PROJECTION_STOP = 1007; constexpr int32_t CAST_WIRED_PROJECTION_STOP = 1007;
constexpr int32_t RES_FAILURE_FOR_PRIVACY_WINDOW = -2; constexpr int32_t RES_FAILURE_FOR_PRIVACY_WINDOW = -2;
constexpr int32_t REMOVE_DISPLAY_MODE = 0; constexpr int32_t REMOVE_DISPLAY_MODE = 0;
constexpr int32_t INVALID_DPI = 0;
constexpr int32_t IRREGULAR_REFRESH_RATE_SKIP_THRETHOLD = 10; constexpr int32_t IRREGULAR_REFRESH_RATE_SKIP_THRETHOLD = 10;
constexpr uint32_t SCREEN_MAIN_IN_DATA = 0; constexpr uint32_t SCREEN_MAIN_IN_DATA = 0;
constexpr uint32_t SCREEN_MIRROR_IN_DATA = 1; constexpr uint32_t SCREEN_MIRROR_IN_DATA = 1;
@ -111,14 +110,11 @@ const int32_t ROTATE_POLICY = system::GetIntParameter("const.window.device.rotat
constexpr int32_t FOLDABLE_DEVICE { 2 }; constexpr int32_t FOLDABLE_DEVICE { 2 };
constexpr float DEFAULT_PIVOT = 0.5f; constexpr float DEFAULT_PIVOT = 0.5f;
constexpr float DEFAULT_SCALE = 1.0f; constexpr float DEFAULT_SCALE = 1.0f;
static const constexpr char* SETTING_DPI_KEY {"user_set_dpi_value"};
static const constexpr char* SETTING_DPI_KEY_EXTEND {"user_set_dpi_value_extend"};
static const constexpr char* SET_SETTING_DPI_KEY {"default_display_dpi"}; static const constexpr char* SET_SETTING_DPI_KEY {"default_display_dpi"};
const std::string SCREEN_EXTEND = "extend"; const std::string SCREEN_EXTEND = "extend";
const std::string SCREEN_MIRROR = "mirror"; const std::string SCREEN_MIRROR = "mirror";
const std::string SCREEN_UNKNOWN = "unknown"; const std::string SCREEN_UNKNOWN = "unknown";
constexpr float PHYSICAL_MASS = 1.6f;
// based on the bundle_util // based on the bundle_util
inline int32_t GetUserIdByCallingUid() inline int32_t GetUserIdByCallingUid()
@ -796,7 +792,6 @@ void ScreenSessionManager::RecoverMultiScreenInfoFromData(sptr<ScreenSession> sc
secondaryScreenOption.screenId_, secondaryScreenOption.startX_, secondaryScreenOption.startY_); secondaryScreenOption.screenId_, secondaryScreenOption.startX_, secondaryScreenOption.startY_);
SetMultiScreenMode(mainScreenOption.screenId_, secondaryScreenOption.screenId_, multiScreenMode); SetMultiScreenMode(mainScreenOption.screenId_, secondaryScreenOption.screenId_, multiScreenMode);
SetMultiScreenRelativePosition(mainScreenOption, secondaryScreenOption); SetMultiScreenRelativePosition(mainScreenOption, secondaryScreenOption);
SetDpiFromSettingData(false);
} }
void ScreenSessionManager::HandleScreenConnectEvent(sptr<ScreenSession> screenSession, void ScreenSessionManager::HandleScreenConnectEvent(sptr<ScreenSession> screenSession,
@ -1512,9 +1507,14 @@ void ScreenSessionManager::InitExtendScreenDensity(sptr<ScreenSession> session,
TLOGI(WmsLogTag::DMS, "Not expandable screen, no need to set dpi"); TLOGI(WmsLogTag::DMS, "Not expandable screen, no need to set dpi");
return; return;
} }
float extendDensity = CalcDefaultExtendScreenDensity(property); ScreenId mainScreenId = GetDefaultScreenId();
sptr<ScreenSession> screenSession = GetScreenSession(mainScreenId);
if (screenSession == nullptr) {
TLOGE(WmsLogTag::DMS, "screenSession is nullptr");
return;
}
float extendDensity = screenSession->GetScreenProperty().GetDensity();
TLOGI(WmsLogTag::DMS, "extendDensity = %{public}f", extendDensity); TLOGI(WmsLogTag::DMS, "extendDensity = %{public}f", extendDensity);
extendDefaultDpi_ = static_cast<uint32_t>(extendDensity * BASELINE_DENSITY);
session->SetVirtualPixelRatio(extendDensity); session->SetVirtualPixelRatio(extendDensity);
session->SetDefaultDensity(extendDensity); session->SetDefaultDensity(extendDensity);
session->SetDensityInCurResolution(extendDensity); session->SetDensityInCurResolution(extendDensity);
@ -1529,26 +1529,6 @@ void ScreenSessionManager::InitExtendScreenDensity(sptr<ScreenSession> session,
return; return;
} }
float ScreenSessionManager::CalcDefaultExtendScreenDensity(const ScreenProperty& property)
{
int32_t phyWith = property.GetPhyWidth();
int32_t phyHeight = property.GetPhyHeight();
float phyDiagonal = std::sqrt(static_cast<float>(phyWith * phyWith + phyHeight * phyHeight));
TLOGI(WmsLogTag::DMS, "phyDiagonal:%{public}f", phyDiagonal);
if (phyDiagonal > 0) {
RRect phyBounds = property.GetPhyBounds();
int32_t width = phyBounds.rect_.GetWidth();
int32_t height = phyBounds.rect_.GetHeight();
float PPI = std::sqrt(static_cast<float>(width * width + height * height)) * INCH_TO_MM / phyDiagonal;
float DPI = std::ceil(PPI * PHYSICAL_MASS);
TLOGI(WmsLogTag::DMS, "DPI:%{public}f", DPI);
float density = DPI / BASELINE_DENSITY;
return density;
} else {
return densityDpi_;
}
}
sptr<ScreenSession> ScreenSessionManager::GetOrCreateScreenSession(ScreenId screenId) sptr<ScreenSession> ScreenSessionManager::GetOrCreateScreenSession(ScreenId screenId)
{ {
TLOGI(WmsLogTag::DMS, "ENTER. ScreenId: %{public}" PRIu64 "", screenId); TLOGI(WmsLogTag::DMS, "ENTER. ScreenId: %{public}" PRIu64 "", screenId);
@ -2271,7 +2251,6 @@ void ScreenSessionManager::BootFinishedCallback(const char *key, const char *val
that.SetRotateLockedFromSettingData(); that.SetRotateLockedFromSettingData();
that.SetDpiFromSettingData(); that.SetDpiFromSettingData();
that.RegisterSettingDpiObserver(); that.RegisterSettingDpiObserver();
that.RegisterExtendSettingDpiObserver();
if (that.foldScreenPowerInit_ != nullptr) { if (that.foldScreenPowerInit_ != nullptr) {
that.foldScreenPowerInit_(); that.foldScreenPowerInit_();
} }
@ -2310,21 +2289,9 @@ void ScreenSessionManager::SetRotateLockedFromSettingData()
void ScreenSessionManager::RegisterSettingDpiObserver() void ScreenSessionManager::RegisterSettingDpiObserver()
{ {
TLOGI(WmsLogTag::DMS, "start"); TLOGI(WmsLogTag::DMS, "Register Setting Dpi Observer");
if (ScreenSceneConfig::GetExternalScreenDefaultMode() == "mirror") { SettingObserver::UpdateFunc updateFunc = [&](const std::string& key) { SetDpiFromSettingData(); };
SettingObserver::UpdateFunc updateFunc = [&](const std::string& key) { SetDpiFromSettingData(); }; ScreenSettingHelper::RegisterSettingDpiObserver(updateFunc);
ScreenSettingHelper::RegisterSettingDpiObserver(updateFunc);
} else {
SettingObserver::UpdateFunc updateFunc = [&](const std::string& key) { SetDpiFromSettingData(true); };
ScreenSettingHelper::RegisterSettingDpiObserver(updateFunc);
}
}
void ScreenSessionManager::RegisterExtendSettingDpiObserver()
{
TLOGI(WmsLogTag::DMS, "start");
SettingObserver::UpdateFunc updateFunc = [&](const std::string& key) { SetDpiFromSettingData(false); };
ScreenSettingHelper::RegisterExtendSettingDpiObserver(updateFunc);
} }
void ScreenSessionManager::SetDpiFromSettingData() void ScreenSessionManager::SetDpiFromSettingData()
@ -2343,45 +2310,22 @@ void ScreenSessionManager::SetDpiFromSettingData()
float dpi = static_cast<float>(settingDpi) / BASELINE_DENSITY; float dpi = static_cast<float>(settingDpi) / BASELINE_DENSITY;
ScreenId defaultScreenId = GetDefaultScreenId(); ScreenId defaultScreenId = GetDefaultScreenId();
SetVirtualPixelRatio(defaultScreenId, dpi); SetVirtualPixelRatio(defaultScreenId, dpi);
if (g_isPcDevice) {
SetExtendPixelRatio(dpi);
}
} else { } else {
TLOGE(WmsLogTag::DMS, "setting dpi error, settingDpi: %{public}d", settingDpi); TLOGE(WmsLogTag::DMS, "setting dpi error, settingDpi: %{public}d", settingDpi);
} }
} }
void ScreenSessionManager::SetDpiFromSettingData(bool isInternal) void ScreenSessionManager::SetExtendPixelRatio(const float& dpi)
{ {
uint32_t settingDpi = INVALID_DPI; std::lock_guard<std::recursive_mutex> lock(screenSessionMapMutex_);
bool ret = false; for (const auto& sessionIt : screenSessionMap_) {
if (isInternal == true) { const auto& screenSession = sessionIt.second;
ret = ScreenSettingHelper::GetSettingDpi(settingDpi, SETTING_DPI_KEY); if (screenSession->GetScreenProperty().GetScreenType() == ScreenType::REAL && !screenSession->isInternal_) {
} else { SetVirtualPixelRatio(sessionIt.first, dpi);
ret = ScreenSettingHelper::GetSettingDpi(settingDpi, SETTING_DPI_KEY_EXTEND);
}
if (!ret) {
TLOGW(WmsLogTag::DMS, "get setting dpi failed,use default dpi");
if (isInternal) {
settingDpi = defaultDpi;
} else {
settingDpi = extendDefaultDpi_;
} }
} else {
TLOGI(WmsLogTag::DMS, "get setting dpi success,settingDpi: %{public}u", settingDpi);
}
if (settingDpi >= DOT_PER_INCH_MINIMUM_VALUE && settingDpi <= DOT_PER_INCH_MAXIMUM_VALUE) {
float dpi = static_cast<float>(settingDpi) / BASELINE_DENSITY;
ScreenId screenId = SCREEN_ID_INVALID;
{
std::lock_guard<std::recursive_mutex> lock(screenSessionMapMutex_);
for (const auto& sessionIt : screenSessionMap_) {
const auto& screenSession = sessionIt.second;
if (screenSession->GetScreenProperty().GetScreenType() == ScreenType::REAL &&
screenSession->isInternal_ == isInternal) {
screenId = sessionIt.first;
break;
}
}
}
SetVirtualPixelRatio(screenId, dpi);
} }
} }

View File

@ -21,7 +21,6 @@
namespace OHOS { namespace OHOS {
namespace Rosen { namespace Rosen {
sptr<SettingObserver> ScreenSettingHelper::dpiObserver_; sptr<SettingObserver> ScreenSettingHelper::dpiObserver_;
sptr<SettingObserver> ScreenSettingHelper::extendDpiObserver_;
sptr<SettingObserver> ScreenSettingHelper::castObserver_; sptr<SettingObserver> ScreenSettingHelper::castObserver_;
sptr<SettingObserver> ScreenSettingHelper::rotationObserver_; sptr<SettingObserver> ScreenSettingHelper::rotationObserver_;
constexpr int32_t PARAM_NUM_TEN = 10; constexpr int32_t PARAM_NUM_TEN = 10;
@ -47,21 +46,6 @@ void ScreenSettingHelper::RegisterSettingDpiObserver(SettingObserver::UpdateFunc
} }
} }
void ScreenSettingHelper::RegisterExtendSettingDpiObserver(SettingObserver::UpdateFunc func)
{
if (extendDpiObserver_) {
TLOGD(WmsLogTag::DMS, "setting extend dpi observer is registered");
return;
}
SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
extendDpiObserver_ = provider.CreateObserver(SETTING_DPI_KEY_EXTEND, func);
ErrCode ret = provider.RegisterObserver(extendDpiObserver_);
if (ret != ERR_OK) {
TLOGW(WmsLogTag::DMS, "failed, ret=%{public}d", ret);
extendDpiObserver_ = nullptr;
}
}
void ScreenSettingHelper::UnregisterSettingDpiObserver() void ScreenSettingHelper::UnregisterSettingDpiObserver()
{ {
if (dpiObserver_ == nullptr) { if (dpiObserver_ == nullptr) {
@ -76,20 +60,6 @@ void ScreenSettingHelper::UnregisterSettingDpiObserver()
dpiObserver_ = nullptr; dpiObserver_ = nullptr;
} }
void ScreenSettingHelper::UnregisterExtendSettingDpiObserver()
{
if (extendDpiObserver_ == nullptr) {
TLOGD(WmsLogTag::DMS, "extendDpiObserver_ is nullptr");
return;
}
SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
ErrCode ret = provider.UnregisterObserver(extendDpiObserver_);
if (ret != ERR_OK) {
TLOGW(WmsLogTag::DMS, "failed, ret=%{public}d", ret);
}
extendDpiObserver_ = nullptr;
}
bool ScreenSettingHelper::GetSettingDpi(uint32_t& dpi, const std::string& key) bool ScreenSettingHelper::GetSettingDpi(uint32_t& dpi, const std::string& key)
{ {
return GetSettingValue(dpi, key); return GetSettingValue(dpi, key);

View File

@ -212,30 +212,6 @@ namespace {
ASSERT_TRUE(ret); ASSERT_TRUE(ret);
} }
/**
* @tc.name: UnregisterExtendSettingDpiObserver01
* @tc.desc: UnregisterExtendSettingDpiObserver01
* @tc.type: FUNC
*/
HWTEST_F(ScreenSettingHelperTest, UnregisterExtendSettingDpiObserver01, Function | SmallTest | Level3)
{
ScreenSettingHelper::extendDpiObserver_ = nullptr;
ScreenSettingHelper::UnregisterExtendSettingDpiObserver();
ASSERT_EQ(ScreenSettingHelper::extendDpiObserver_, nullptr);
}
/**
* @tc.name: UnregisterExtendSettingDpiObserver02
* @tc.desc: UnregisterExtendSettingDpiObserver02
* @tc.type: FUNC
*/
HWTEST_F(ScreenSettingHelperTest, UnregisterExtendSettingDpiObserver02, Function | SmallTest | Level3)
{
ScreenSettingHelper::extendDpiObserver_ = new SettingObserver;
ScreenSettingHelper::UnregisterExtendSettingDpiObserver();
ASSERT_EQ(ScreenSettingHelper::extendDpiObserver_, nullptr);
}
/** /**
* @tc.name: UnregisterSettingRotationObserver01 * @tc.name: UnregisterSettingRotationObserver01
* @tc.desc: UnregisterSettingRotationObserver01 * @tc.desc: UnregisterSettingRotationObserver01
@ -244,7 +220,6 @@ namespace {
HWTEST_F(ScreenSettingHelperTest, UnregisterSettingRotationObserver01, Function | SmallTest | Level3) HWTEST_F(ScreenSettingHelperTest, UnregisterSettingRotationObserver01, Function | SmallTest | Level3)
{ {
ScreenSettingHelper::rotationObserver_ = nullptr; ScreenSettingHelper::rotationObserver_ = nullptr;
ScreenSettingHelper::UnregisterExtendSettingDpiObserver();
ASSERT_EQ(ScreenSettingHelper::rotationObserver_, nullptr); ASSERT_EQ(ScreenSettingHelper::rotationObserver_, nullptr);
} }
@ -256,7 +231,6 @@ namespace {
HWTEST_F(ScreenSettingHelperTest, UnregisterSettingRotationObserver02, Function | SmallTest | Level3) HWTEST_F(ScreenSettingHelperTest, UnregisterSettingRotationObserver02, Function | SmallTest | Level3)
{ {
ScreenSettingHelper::rotationObserver_ = new SettingObserver; ScreenSettingHelper::rotationObserver_ = new SettingObserver;
ScreenSettingHelper::UnregisterExtendSettingDpiObserver();
ASSERT_NE(ScreenSettingHelper::rotationObserver_, nullptr); ASSERT_NE(ScreenSettingHelper::rotationObserver_, nullptr);
} }