• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <hisysevent.h>
17 #include <hitrace_meter.h>
18 #include <transaction/rs_interfaces.h>
19 #include "fold_screen_controller/single_display_fold_policy.h"
20 #include "session/screen/include/screen_session.h"
21 #include "screen_session_manager.h"
22 
23 #include "window_manager_hilog.h"
24 
25 #ifdef POWER_MANAGER_ENABLE
26 #include <power_mgr_client.h>
27 #endif
28 
29 namespace OHOS::Rosen {
30 namespace {
31 const ScreenId SCREEN_ID_FULL = 0;
32 const ScreenId SCREEN_ID_MAIN = 5;
33 
34 #ifdef TP_FEATURE_ENABLE
35 const int32_t TP_TYPE = 12;
36 const int32_t TP_TYPE_POWER_CTRL = 18;
37 const std::string FULL_TP = "0";
38 const std::string MAIN_TP = "1";
39 const std::string MAIN_TP_OFF = "1,1";
40 const std::string FULL_TP_OFF = "0,1";
41 #endif
42 } // namespace
43 
SingleDisplayFoldPolicy(std::recursive_mutex & displayInfoMutex,std::shared_ptr<TaskScheduler> screenPowerTaskScheduler)44 SingleDisplayFoldPolicy::SingleDisplayFoldPolicy(std::recursive_mutex& displayInfoMutex,
45     std::shared_ptr<TaskScheduler> screenPowerTaskScheduler)
46     : displayInfoMutex_(displayInfoMutex), screenPowerTaskScheduler_(screenPowerTaskScheduler)
47 {
48     TLOGI(WmsLogTag::DMS, "SingleDisplayFoldPolicy created");
49 
50     ScreenId screenIdFull = 0;
51     int32_t foldCreaseRegionPosX = 0;
52     int32_t foldCreaseRegionPosY = 1064;
53     int32_t foldCreaseRegionPosWidth = 2496;
54     int32_t foldCreaseRegionPosHeight = 171;
55 
56     std::vector<DMRect> rect = {
57         {
58             foldCreaseRegionPosX, foldCreaseRegionPosY,
59             foldCreaseRegionPosWidth, foldCreaseRegionPosHeight
60         }
61     };
62     currentFoldCreaseRegion_ = new FoldCreaseRegion(screenIdFull, rect);
63 }
64 
SetdisplayModeChangeStatus(bool status,bool isOnBootAnimation)65 void SingleDisplayFoldPolicy::SetdisplayModeChangeStatus(bool status, bool isOnBootAnimation)
66 {
67     if (status) {
68         pengdingTask_ = isOnBootAnimation ? FOLD_TO_EXPAND_ONBOOTANIMATION_TASK_NUM : FOLD_TO_EXPAND_TASK_NUM;
69         startTimePoint_ = std::chrono::steady_clock::now();
70         displayModeChangeRunning_ = status;
71     } else {
72         pengdingTask_ --;
73         if (pengdingTask_ != 0) {
74             return;
75         }
76         displayModeChangeRunning_ = false;
77         endTimePoint_ = std::chrono::steady_clock::now();
78         if (lastCachedisplayMode_.load() != GetScreenDisplayMode()) {
79             ScreenSessionManager::GetInstance().TriggerDisplayModeUpdate(lastCachedisplayMode_.load());
80         }
81     }
82 }
83 
ChangeScreenDisplayMode(FoldDisplayMode displayMode,DisplayModeChangeReason reason)84 void SingleDisplayFoldPolicy::ChangeScreenDisplayMode(FoldDisplayMode displayMode, DisplayModeChangeReason reason)
85 {
86     SetLastCacheDisplayMode(displayMode);
87     if (GetModeChangeRunningStatus()) {
88         TLOGW(WmsLogTag::DMS, "last process not complete, skip mode: %{public}d", displayMode);
89         return;
90     }
91     TLOGI(WmsLogTag::DMS, "start change displaymode: %{public}d, lastElapsedMs: %{public}" PRId64 "ms",
92         displayMode, getFoldingElapsedMs());
93 
94     HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "ssm:ChangeScreenDisplayMode(displayMode = %" PRIu64")", displayMode);
95     {
96         std::lock_guard<std::recursive_mutex> lock_mode(displayModeMutex_);
97         if (currentDisplayMode_ == displayMode) {
98             TLOGW(WmsLogTag::DMS, "ChangeScreenDisplayMode already in displayMode %{public}d", displayMode);
99             return;
100         }
101     }
102     ChangeScreenDisplayModeInner(displayMode, reason);
103     ScreenSessionManager::GetInstance().NotifyDisplayModeChanged(displayMode);
104     ScreenSessionManager::GetInstance().SwitchScrollParam(displayMode);
105 }
106 
ChangeScreenDisplayModeInner(FoldDisplayMode displayMode,DisplayModeChangeReason reason)107 void SingleDisplayFoldPolicy::ChangeScreenDisplayModeInner(FoldDisplayMode displayMode, DisplayModeChangeReason reason)
108 {
109     sptr<ScreenSession> screenSession = ScreenSessionManager::GetInstance().GetScreenSession(SCREEN_ID_FULL);
110     if (screenSession == nullptr) {
111         TLOGE(WmsLogTag::DMS, "default screenSession is null");
112         return;
113     }
114     SetdisplayModeChangeStatus(true);
115     {
116         std::lock_guard<std::recursive_mutex> lock_mode(displayModeMutex_);
117         lastDisplayMode_ = displayMode;
118     }
119     ReportFoldDisplayModeChange(displayMode);
120     switch (displayMode) {
121         case FoldDisplayMode::MAIN: {
122             ChangeScreenDisplayModeToMain(screenSession, reason);
123             break;
124         }
125         case FoldDisplayMode::FULL: {
126             ChangeScreenDisplayModeToFull(screenSession, reason);
127             break;
128         }
129         case FoldDisplayMode::UNKNOWN: {
130             TLOGI(WmsLogTag::DMS, "ChangeScreenDisplayMode displayMode is unknown");
131             break;
132         }
133         default: {
134             TLOGI(WmsLogTag::DMS, "ChangeScreenDisplayMode displayMode is invalid");
135             break;
136         }
137     }
138     {
139         std::lock_guard<std::recursive_mutex> lock_mode(displayModeMutex_);
140         currentDisplayMode_ = displayMode;
141     }
142 }
143 
SendSensorResult(FoldStatus foldStatus)144 void SingleDisplayFoldPolicy::SendSensorResult(FoldStatus foldStatus)
145 {
146     TLOGI(WmsLogTag::DMS, "SendSensorResult FoldStatus: %{public}d", foldStatus);
147     FoldDisplayMode displayMode = GetModeMatchStatus();
148     ChangeScreenDisplayMode(displayMode);
149 }
150 
GetCurrentFoldCreaseRegion()151 sptr<FoldCreaseRegion> SingleDisplayFoldPolicy::GetCurrentFoldCreaseRegion()
152 {
153     TLOGI(WmsLogTag::DMS, "GetCurrentFoldCreaseRegion");
154     return currentFoldCreaseRegion_;
155 }
156 
LockDisplayStatus(bool locked)157 void SingleDisplayFoldPolicy::LockDisplayStatus(bool locked)
158 {
159     TLOGI(WmsLogTag::DMS, "LockDisplayStatus locked: %{public}d", locked);
160     lockDisplayStatus_ = locked;
161 }
162 
SetOnBootAnimation(bool onBootAnimation)163 void SingleDisplayFoldPolicy::SetOnBootAnimation(bool onBootAnimation)
164 {
165     TLOGI(WmsLogTag::DMS, "SetOnBootAnimation onBootAnimation: %{public}d", onBootAnimation);
166     onBootAnimation_ = onBootAnimation;
167     if (!onBootAnimation_) {
168         TLOGI(WmsLogTag::DMS, "SetOnBootAnimation when boot animation finished, change display mode");
169         RecoverWhenBootAnimationExit();
170     }
171 }
172 
RecoverWhenBootAnimationExit()173 void SingleDisplayFoldPolicy::RecoverWhenBootAnimationExit()
174 {
175     TLOGI(WmsLogTag::DMS, "CurrentScreen(%{public}" PRIu64 ")", screenId_);
176     FoldDisplayMode displayMode = GetModeMatchStatus();
177     if (currentDisplayMode_ != displayMode) {
178         ChangeScreenDisplayMode(displayMode);
179     }
180 }
181 
UpdateForPhyScreenPropertyChange()182 void SingleDisplayFoldPolicy::UpdateForPhyScreenPropertyChange()
183 {
184     TLOGI(WmsLogTag::DMS, "CurrentScreen(%{public}" PRIu64 ")", screenId_);
185     FoldDisplayMode displayMode = GetModeMatchStatus();
186     if (currentDisplayMode_ != displayMode) {
187         ChangeScreenDisplayMode(displayMode);
188     }
189 }
190 
GetModeMatchStatus()191 FoldDisplayMode SingleDisplayFoldPolicy::GetModeMatchStatus()
192 {
193     FoldDisplayMode displayMode = FoldDisplayMode::UNKNOWN;
194     switch (currentFoldStatus_) {
195         case FoldStatus::EXPAND: {
196             displayMode = FoldDisplayMode::FULL;
197             break;
198         }
199         case FoldStatus::FOLDED: {
200             displayMode = FoldDisplayMode::MAIN;
201             break;
202         }
203         case FoldStatus::HALF_FOLD: {
204             displayMode = FoldDisplayMode::FULL;
205             break;
206         }
207         default: {
208             TLOGI(WmsLogTag::DMS, "GetModeMatchStatus FoldStatus is invalid");
209         }
210     }
211     return displayMode;
212 }
213 
ReportFoldDisplayModeChange(FoldDisplayMode displayMode)214 void SingleDisplayFoldPolicy::ReportFoldDisplayModeChange(FoldDisplayMode displayMode)
215 {
216     int32_t mode = static_cast<int32_t>(displayMode);
217     TLOGI(WmsLogTag::DMS, "ReportFoldDisplayModeChange displayMode: %{public}d", mode);
218     int32_t ret = HiSysEventWrite(
219         OHOS::HiviewDFX::HiSysEvent::Domain::WINDOW_MANAGER,
220         "DISPLAY_MODE",
221         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
222         "FOLD_DISPLAY_MODE", mode);
223     if (ret != 0) {
224         TLOGE(WmsLogTag::DMS, "ReportFoldDisplayModeChange Write HiSysEvent error, ret: %{public}d", ret);
225     }
226 }
227 
ReportFoldStatusChangeBegin(int32_t offScreen,int32_t onScreen)228 void SingleDisplayFoldPolicy::ReportFoldStatusChangeBegin(int32_t offScreen, int32_t onScreen)
229 {
230     TLOGI(WmsLogTag::DMS, "ReportFoldStatusChangeBegin offScreen: %{public}d, onScreen: %{public}d",
231         offScreen, onScreen);
232     int32_t ret = HiSysEventWrite(
233         OHOS::HiviewDFX::HiSysEvent::Domain::WINDOW_MANAGER,
234         "FOLD_STATE_CHANGE_BEGIN",
235         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
236         "POWER_OFF_SCREEN", offScreen,
237         "POWER_ON_SCREEN", onScreen);
238     if (ret != 0) {
239         TLOGE(WmsLogTag::DMS, "ReportFoldStatusChangeBegin Write HiSysEvent error, ret: %{public}d", ret);
240     }
241 }
242 
ChangeScreenDisplayModeToMainWhenFoldScreenOn(sptr<ScreenSession> screenSession)243 void SingleDisplayFoldPolicy::ChangeScreenDisplayModeToMainWhenFoldScreenOn(sptr<ScreenSession> screenSession)
244 {
245     TLOGI(WmsLogTag::DMS, "IsFoldScreenOn is true, begin.");
246     ReportFoldStatusChangeBegin(static_cast<int32_t>(SCREEN_ID_FULL),
247         static_cast<int32_t>(SCREEN_ID_MAIN));
248     auto taskScreenOnMain = [=] {
249         // off full screen
250         TLOGNI(WmsLogTag::DMS, "ChangeScreenDisplayModeToMain: IsFoldScreenOn is true, screenIdFull OFF.");
251         screenId_ = SCREEN_ID_FULL;
252         ChangeScreenDisplayModePower(SCREEN_ID_FULL, ScreenPowerStatus::POWER_STATUS_OFF);
253         SetdisplayModeChangeStatus(false);
254 
255         // on main screen
256         TLOGNI(WmsLogTag::DMS, "ChangeScreenDisplayModeToMain: IsFoldScreenOn is true, screenIdMain ON.");
257         screenId_ = SCREEN_ID_MAIN;
258         ChangeScreenDisplayModePower(SCREEN_ID_MAIN, ScreenPowerStatus::POWER_STATUS_ON);
259         SetdisplayModeChangeStatus(false);
260     };
261     screenPowerTaskScheduler_->PostAsyncTask(taskScreenOnMain, "screenOnMainTask");
262     SendPropertyChangeResult(screenSession, SCREEN_ID_MAIN, ScreenPropertyChangeReason::FOLD_SCREEN_FOLDING);
263 }
264 
ChangeScreenDisplayModeToMainWhenFoldScreenOff(sptr<ScreenSession> screenSession)265 void SingleDisplayFoldPolicy::ChangeScreenDisplayModeToMainWhenFoldScreenOff(sptr<ScreenSession> screenSession)
266 {
267     TLOGI(WmsLogTag::DMS, "IsFoldScreenOn is false, begin.");
268     // off full screen
269     auto taskScreenOffMainOff = [=] {
270         TLOGNI(WmsLogTag::DMS, "ChangeScreenDisplayModeToMain: IsFoldScreenOn is false, screenIdFull OFF.");
271         screenId_ = SCREEN_ID_FULL;
272         ChangeScreenDisplayModePower(SCREEN_ID_FULL, ScreenPowerStatus::POWER_STATUS_OFF);
273         SetdisplayModeChangeStatus(false);
274     };
275     screenPowerTaskScheduler_->PostAsyncTask(taskScreenOffMainOff, "screenOffMainOffTask");
276     SendPropertyChangeResult(screenSession, SCREEN_ID_MAIN, ScreenPropertyChangeReason::FOLD_SCREEN_FOLDING);
277     auto taskScreenOnMainChangeScreenId = [=] {
278         TLOGNI(WmsLogTag::DMS, "ChangeScreenDisplayModeToMain: IsFoldScreenOn is false, Change ScreenId to Main.");
279         screenId_ = SCREEN_ID_MAIN;
280 #ifdef TP_FEATURE_ENABLE
281         RSInterfaces::GetInstance().SetTpFeatureConfig(TP_TYPE_POWER_CTRL, MAIN_TP_OFF.c_str());
282 #endif
283         SetdisplayModeChangeStatus(false);
284     };
285     screenPowerTaskScheduler_->PostAsyncTask(taskScreenOnMainChangeScreenId, "taskScreenOnMainChangeScreenId");
286 }
287 
ChangeScreenDisplayModeToMain(sptr<ScreenSession> screenSession,DisplayModeChangeReason reason)288 void SingleDisplayFoldPolicy::ChangeScreenDisplayModeToMain(sptr<ScreenSession> screenSession,
289     DisplayModeChangeReason reason)
290 {
291     if (onBootAnimation_) {
292         SetdisplayModeChangeStatus(true, true);
293         ChangeScreenDisplayModeToMainOnBootAnimation(screenSession);
294         return;
295     }
296     RSInterfaces::GetInstance().NotifyScreenSwitched();
297 #ifdef TP_FEATURE_ENABLE
298     RSInterfaces::GetInstance().SetTpFeatureConfig(TP_TYPE, MAIN_TP.c_str());
299 #endif
300     if (PowerMgr::PowerMgrClient::GetInstance().IsFoldScreenOn()) {
301         ChangeScreenDisplayModeToMainWhenFoldScreenOn(screenSession);
302     } else { // When the screen is off and folded, it is not powered on
303         ScreenSessionManager::GetInstance().ForceSkipScreenOffAnimation();
304         ChangeScreenDisplayModeToMainWhenFoldScreenOff(screenSession);
305     }
306 }
307 
ChangeScreenDisplayModeToFullWhenFoldScreenOn(sptr<ScreenSession> screenSession)308 void SingleDisplayFoldPolicy::ChangeScreenDisplayModeToFullWhenFoldScreenOn(sptr<ScreenSession> screenSession)
309 {
310     TLOGI(WmsLogTag::DMS, "IsFoldScreenOn is true, begin.");
311     auto taskScreenOnFull = [=] {
312         // off main screen
313         TLOGNI(WmsLogTag::DMS, "ChangeScreenDisplayModeToFull: IsFoldScreenOn is true, screenIdMain OFF.");
314         screenId_ = SCREEN_ID_MAIN;
315         ChangeScreenDisplayModePower(SCREEN_ID_MAIN, ScreenPowerStatus::POWER_STATUS_OFF);
316         SetdisplayModeChangeStatus(false);
317 
318         // on full screen
319         TLOGNI(WmsLogTag::DMS, "ChangeScreenDisplayModeToFull: IsFoldScreenOn is true, screenIdFull ON.");
320         screenId_ = SCREEN_ID_FULL;
321         ChangeScreenDisplayModePower(SCREEN_ID_FULL, ScreenPowerStatus::POWER_STATUS_ON);
322         SetdisplayModeChangeStatus(false);
323     };
324     screenPowerTaskScheduler_->PostAsyncTask(taskScreenOnFull, "screenOnFullTask");
325     SendPropertyChangeResult(screenSession, SCREEN_ID_FULL, ScreenPropertyChangeReason::FOLD_SCREEN_EXPAND);
326 }
327 
ChangeScreenDisplayModeToFullWhenFoldScreenOff(sptr<ScreenSession> screenSession,DisplayModeChangeReason reason)328 void SingleDisplayFoldPolicy::ChangeScreenDisplayModeToFullWhenFoldScreenOff(sptr<ScreenSession> screenSession,
329     DisplayModeChangeReason reason)
330 {
331     TLOGI(WmsLogTag::DMS, "IsFoldScreenOn is false, begin.");
332     // off main screen
333     auto taskScreenOffFullOff = [=] {
334         TLOGNI(WmsLogTag::DMS, "ChangeScreenDisplayModeToFull: IsFoldScreenOn is false, screenIdMain OFF.");
335         screenId_ = SCREEN_ID_MAIN;
336         ChangeScreenDisplayModePower(SCREEN_ID_MAIN, ScreenPowerStatus::POWER_STATUS_OFF);
337         SetdisplayModeChangeStatus(false);
338     };
339     screenPowerTaskScheduler_->PostAsyncTask(taskScreenOffFullOff, "screenOffFullOffTask");
340     SendPropertyChangeResult(screenSession, SCREEN_ID_FULL, ScreenPropertyChangeReason::FOLD_SCREEN_EXPAND);
341     // on full screen
342     auto taskScreenOnFullOn = [=] {
343         TLOGNI(WmsLogTag::DMS, "ChangeScreenDisplayModeToFull: IsFoldScreenOn is false, screenIdFull ON.");
344         screenId_ = SCREEN_ID_FULL;
345         if (reason == DisplayModeChangeReason::RECOVER) {
346 #ifdef TP_FEATURE_ENABLE
347             RSInterfaces::GetInstance().SetTpFeatureConfig(TP_TYPE_POWER_CTRL, FULL_TP_OFF.c_str());
348 #endif
349         } else {
350             PowerMgr::PowerMgrClient::GetInstance().WakeupDeviceAsync();
351         }
352         SetdisplayModeChangeStatus(false);
353     };
354     screenPowerTaskScheduler_->PostAsyncTask(taskScreenOnFullOn, "screenOnFullOnTask");
355 }
356 
ChangeScreenDisplayModeToFull(sptr<ScreenSession> screenSession,DisplayModeChangeReason reason)357 void SingleDisplayFoldPolicy::ChangeScreenDisplayModeToFull(sptr<ScreenSession> screenSession,
358     DisplayModeChangeReason reason)
359 {
360     if (onBootAnimation_) {
361         SetdisplayModeChangeStatus(true, true);
362         ChangeScreenDisplayModeToFullOnBootAnimation(screenSession);
363         return;
364     }
365     RSInterfaces::GetInstance().NotifyScreenSwitched();
366     ReportFoldStatusChangeBegin((int32_t)SCREEN_ID_MAIN, (int32_t)SCREEN_ID_FULL);
367 #ifdef TP_FEATURE_ENABLE
368     RSInterfaces::GetInstance().SetTpFeatureConfig(TP_TYPE, FULL_TP.c_str());
369 #endif
370     if (PowerMgr::PowerMgrClient::GetInstance().IsFoldScreenOn()) {
371         ChangeScreenDisplayModeToFullWhenFoldScreenOn(screenSession);
372     } else { //AOD scene
373         if (ScreenSessionManager::GetInstance().TryToCancelScreenOff()) {
374             ChangeScreenDisplayModeToFullWhenFoldScreenOn(screenSession);
375         } else {
376             ChangeScreenDisplayModeToFullWhenFoldScreenOff(screenSession, reason);
377         }
378     }
379 }
380 
ChangeScreenDisplayModePower(ScreenId screenId,ScreenPowerStatus screenPowerStatus)381 void SingleDisplayFoldPolicy::ChangeScreenDisplayModePower(ScreenId screenId, ScreenPowerStatus screenPowerStatus)
382 {
383     ScreenSessionManager::GetInstance().SetKeyguardDrawnDoneFlag(false);
384     ScreenSessionManager::GetInstance().SetScreenPowerForFold(screenId, screenPowerStatus);
385 }
386 
SendPropertyChangeResult(sptr<ScreenSession> screenSession,ScreenId screenId,ScreenPropertyChangeReason reason)387 void SingleDisplayFoldPolicy::SendPropertyChangeResult(sptr<ScreenSession> screenSession, ScreenId screenId,
388     ScreenPropertyChangeReason reason)
389 {
390     std::lock_guard<std::recursive_mutex> lock_info(displayInfoMutex_);
391     screenProperty_ = ScreenSessionManager::GetInstance().GetPhyScreenProperty(screenId);
392     ScreenProperty property = screenSession->UpdatePropertyByFoldControl(screenProperty_);
393     screenSession->PropertyChange(property, reason);
394     screenSession->SetRotationAndScreenRotationOnly(Rotation::ROTATION_0);
395     TLOGI(WmsLogTag::DMS, "screenBounds : width_= %{public}f, height_= %{public}f",
396         screenSession->GetScreenProperty().GetBounds().rect_.width_,
397         screenSession->GetScreenProperty().GetBounds().rect_.height_);
398     ScreenSessionManager::GetInstance().NotifyDisplayChanged(screenSession->ConvertToDisplayInfo(),
399         DisplayChangeEvent::DISPLAY_SIZE_CHANGED);
400 }
401 
ChangeScreenDisplayModeToMainOnBootAnimation(sptr<ScreenSession> screenSession)402 void SingleDisplayFoldPolicy::ChangeScreenDisplayModeToMainOnBootAnimation(sptr<ScreenSession> screenSession)
403 {
404     TLOGI(WmsLogTag::DMS, "ChangeScreenDisplayModeToMainOnBootAnimation");
405     screenProperty_ = ScreenSessionManager::GetInstance().GetPhyScreenProperty(SCREEN_ID_MAIN);
406     screenSession->UpdatePropertyByFoldControl(screenProperty_);
407     screenSession->PropertyChange(screenSession->GetScreenProperty(),
408         ScreenPropertyChangeReason::FOLD_SCREEN_FOLDING);
409     TLOGI(WmsLogTag::DMS, "screenBounds : width_= %{public}f, height_= %{public}f",
410         screenSession->GetScreenProperty().GetBounds().rect_.width_,
411         screenSession->GetScreenProperty().GetBounds().rect_.height_);
412     screenId_ = SCREEN_ID_MAIN;
413 }
414 
ChangeScreenDisplayModeToFullOnBootAnimation(sptr<ScreenSession> screenSession)415 void SingleDisplayFoldPolicy::ChangeScreenDisplayModeToFullOnBootAnimation(sptr<ScreenSession> screenSession)
416 {
417     TLOGI(WmsLogTag::DMS, "ChangeScreenDisplayModeToFullOnBootAnimation");
418     screenProperty_ = ScreenSessionManager::GetInstance().GetPhyScreenProperty(SCREEN_ID_FULL);
419     screenSession->UpdatePropertyByFoldControl(screenProperty_);
420     screenSession->PropertyChange(screenSession->GetScreenProperty(),
421         ScreenPropertyChangeReason::FOLD_SCREEN_EXPAND);
422     TLOGI(WmsLogTag::DMS, "screenBounds : width_= %{public}f, height_= %{public}f",
423         screenSession->GetScreenProperty().GetBounds().rect_.width_,
424         screenSession->GetScreenProperty().GetBounds().rect_.height_);
425     screenId_ = SCREEN_ID_FULL;
426 }
427 } // namespace OHOS::Rosen