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 "fold_screen_controller/fold_screen_policy.h"
17 #include "window_manager_hilog.h"
18
19 namespace OHOS::Rosen {
20 const uint32_t MODE_CHANGE_TIMEOUT_MS = 2000;
21 FoldScreenPolicy::FoldScreenPolicy() = default;
22 FoldScreenPolicy::~FoldScreenPolicy() = default;
23
ChangeScreenDisplayMode(FoldDisplayMode displayMode,DisplayModeChangeReason reason)24 void FoldScreenPolicy::ChangeScreenDisplayMode(FoldDisplayMode displayMode, DisplayModeChangeReason reason) {}
25
LockDisplayStatus(bool locked)26 void FoldScreenPolicy::LockDisplayStatus(bool locked)
27 {
28 lockDisplayStatus_ = locked;
29 }
SendSensorResult(FoldStatus foldStatus)30 void FoldScreenPolicy::SendSensorResult(FoldStatus foldStatus) {}
31
GetCurrentScreenId()32 ScreenId FoldScreenPolicy::GetCurrentScreenId()
33 {
34 return screenId_;
35 }
GetCurrentFoldCreaseRegion()36 sptr<FoldCreaseRegion> FoldScreenPolicy::GetCurrentFoldCreaseRegion()
37 {
38 return currentFoldCreaseRegion_;
39 }
40
GetLiveCreaseRegion()41 FoldCreaseRegion FoldScreenPolicy::GetLiveCreaseRegion()
42 {
43 std::lock_guard<std::mutex> lock_mode(liveCreaseRegionMutex_);
44 return liveCreaseRegion_;
45 }
46
SetOnBootAnimation(bool onBootAnimation)47 void FoldScreenPolicy::SetOnBootAnimation(bool onBootAnimation)
48 {
49 onBootAnimation_ = onBootAnimation;
50 }
51
UpdateForPhyScreenPropertyChange()52 void FoldScreenPolicy::UpdateForPhyScreenPropertyChange() {}
53
GetScreenDisplayMode()54 FoldDisplayMode FoldScreenPolicy::GetScreenDisplayMode()
55 {
56 std::lock_guard<std::recursive_mutex> lock_mode(displayModeMutex_);
57 return lastDisplayMode_;
58 }
59
GetFoldStatus()60 FoldStatus FoldScreenPolicy::GetFoldStatus()
61 {
62 return lastFoldStatus_;
63 }
64
SetFoldStatus(FoldStatus foldStatus)65 void FoldScreenPolicy::SetFoldStatus(FoldStatus foldStatus)
66 {
67 TLOGI(WmsLogTag::DMS, "FoldStatus: %{public}d", foldStatus);
68 currentFoldStatus_ = foldStatus;
69 lastFoldStatus_ = foldStatus;
70 }
71
GetStartTimePoint()72 std::chrono::steady_clock::time_point FoldScreenPolicy::GetStartTimePoint()
73 {
74 return startTimePoint_;
75 }
76
GetIsFirstFrameCommitReported()77 bool FoldScreenPolicy::GetIsFirstFrameCommitReported()
78 {
79 return isFirstFrameCommitReported_;
80 }
81
SetIsFirstFrameCommitReported(bool isFirstFrameCommitReported)82 void FoldScreenPolicy::SetIsFirstFrameCommitReported(bool isFirstFrameCommitReported)
83 {
84 isFirstFrameCommitReported_ = isFirstFrameCommitReported;
85 }
86
ClearState()87 void FoldScreenPolicy::ClearState()
88 {
89 currentDisplayMode_ = FoldDisplayMode::UNKNOWN;
90 currentFoldStatus_ = FoldStatus::UNKNOWN;
91 }
92
ExitCoordination()93 void FoldScreenPolicy::ExitCoordination() {};
94
ChangeOnTentMode(FoldStatus currentState)95 void FoldScreenPolicy::ChangeOnTentMode(FoldStatus currentState) {}
96
ChangeOffTentMode()97 void FoldScreenPolicy::ChangeOffTentMode() {}
98
GetModeChangeRunningStatus()99 bool FoldScreenPolicy::GetModeChangeRunningStatus()
100 {
101 TLOGE(WmsLogTag::DMS, "GetdisplayModeRunningStatus: %{public}d", GetdisplayModeRunningStatus());
102 auto currentTime = std::chrono::steady_clock::now();
103 auto intervalMs = std::chrono::duration_cast<std::chrono::milliseconds>(currentTime - startTimePoint_).count();
104 if (intervalMs > MODE_CHANGE_TIMEOUT_MS) {
105 TLOGE(WmsLogTag::DMS, "mode change timeout.");
106 return false;
107 }
108 return GetdisplayModeRunningStatus();
109 }
110
GetdisplayModeRunningStatus()111 bool FoldScreenPolicy::GetdisplayModeRunningStatus()
112 {
113 return displayModeChangeRunning_.load();
114 }
115
GetLastCacheDisplayMode()116 FoldDisplayMode FoldScreenPolicy::GetLastCacheDisplayMode()
117 {
118 return lastCachedisplayMode_.load();
119 }
120
SetLastCacheDisplayMode(FoldDisplayMode mode)121 void FoldScreenPolicy::SetLastCacheDisplayMode(FoldDisplayMode mode)
122 {
123 lastCachedisplayMode_ = mode;
124 }
125
getFoldingElapsedMs()126 int64_t FoldScreenPolicy::getFoldingElapsedMs()
127 {
128 if (endTimePoint_ < startTimePoint_) {
129 TLOGE(WmsLogTag::DMS, "invalid timepoint. endTimePoint less startTimePoint");
130 return 0;
131 }
132 auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(endTimePoint_ - startTimePoint_).count();
133 return static_cast<int64_t>(elapsed);
134 }
135
AddOrRemoveDisplayNodeToTree(ScreenId screenId,int32_t command)136 void FoldScreenPolicy::AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command) {};
137
GetScreenSnapshotRect()138 Drawing::Rect FoldScreenPolicy::GetScreenSnapshotRect()
139 {
140 Drawing::Rect snapshotRect = {0, 0, 0, 0};
141 return snapshotRect;
142 }
143
SetMainScreenRegion(DMRect & mainScreenRegion)144 void FoldScreenPolicy::SetMainScreenRegion(DMRect& mainScreenRegion) {}
145
SetIsClearingBootAnimation(bool isClearingBootAnimation)146 void FoldScreenPolicy::SetIsClearingBootAnimation(bool isClearingBootAnimation) {}
147
GetAllCreaseRegion(std::vector<FoldCreaseRegionItem> & foldCreaseRegionItems) const148 void FoldScreenPolicy::GetAllCreaseRegion(std::vector<FoldCreaseRegionItem>& foldCreaseRegionItems) const {}
149 } // namespace OHOS::Rosen