1 /*
2  * Copyright (c) 2022 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 "window_transition_info.h"
17 
18 namespace OHOS {
19 namespace Rosen {
WindowTransitionInfo(sptr<AAFwk::AbilityTransitionInfo> info)20 WindowTransitionInfo::WindowTransitionInfo(sptr<AAFwk::AbilityTransitionInfo> info)
21 {
22     bundleName_ = info->bundleName_;
23     abilityName_ = info->abilityName_;
24     mode_ = static_cast<WindowMode>(info->mode_);
25     abilityToken_ = info->abilityToken_;
26     displayId_ = info->displayId_;
27     isShowWhenLocked_ = info->isShowWhenLocked_;
28     isRecent_ = info->isRecent_;
29     missionId_ = info->missionId_;
30     if (info->windowModes_.empty()) {
31         supportWindowModes_ = {
32             AppExecFwk::SupportWindowMode::FULLSCREEN,
33             AppExecFwk::SupportWindowMode::SPLIT,
34             AppExecFwk::SupportWindowMode::FLOATING
35         };
36     } else {
37         supportWindowModes_.assign(info->windowModes_.begin(), info->windowModes_.end());
38     }
39 
40     sizeLimits_.maxRatio_ = static_cast<float>(info->maxWindowRatio_);
41     sizeLimits_.minRatio_ = static_cast<float>(info->minWindowRatio_);
42     sizeLimits_.maxWidth_ = info->maxWindowWidth_;
43     sizeLimits_.minWidth_ = info->minWindowWidth_;
44     sizeLimits_.maxHeight_ = info->maxWindowHeight_;
45     sizeLimits_.minHeight_ = info->minWindowHeight_;
46     reason_ = static_cast<TransitionReason>(info->reason_);
47     orientation_ = info->orientation_;
48     apiCompatibleVersion_ = info->apiCompatibleVersion_;
49 }
50 
SetBundleName(std::string name)51 void WindowTransitionInfo::SetBundleName(std::string name)
52 {
53     bundleName_ = name;
54 }
55 
GetBundleName()56 std::string WindowTransitionInfo::GetBundleName()
57 {
58     return bundleName_;
59 }
60 
SetAbilityName(std::string name)61 void WindowTransitionInfo::SetAbilityName(std::string name)
62 {
63     abilityName_ = name;
64 }
65 
GetAbilityName()66 std::string WindowTransitionInfo::GetAbilityName()
67 {
68     return abilityName_;
69 }
70 
SetWindowMode(WindowMode mode)71 void WindowTransitionInfo::SetWindowMode(WindowMode mode)
72 {
73     mode_ = mode;
74 }
75 
GetWindowMode()76 WindowMode WindowTransitionInfo::GetWindowMode()
77 {
78     return mode_;
79 }
80 
SetWindowRect(Rect rect)81 void WindowTransitionInfo::SetWindowRect(Rect rect)
82 {
83     windowRect_ = rect;
84 }
85 
GetWindowRect()86 Rect WindowTransitionInfo::GetWindowRect()
87 {
88     return windowRect_;
89 }
90 
SetAbilityToken(sptr<IRemoteObject> abilityToken)91 void WindowTransitionInfo::SetAbilityToken(sptr<IRemoteObject> abilityToken)
92 {
93     abilityToken_ = abilityToken;
94 }
95 
GetAbilityToken()96 sptr<IRemoteObject> WindowTransitionInfo::GetAbilityToken()
97 {
98     return abilityToken_;
99 }
100 
SetDisplayId(DisplayId displayId)101 void WindowTransitionInfo::SetDisplayId(DisplayId displayId)
102 {
103     displayId_ = displayId;
104 }
105 
GetDisplayId()106 DisplayId WindowTransitionInfo::GetDisplayId()
107 {
108     return displayId_;
109 }
110 
SetWindowType(WindowType windowType)111 void WindowTransitionInfo::SetWindowType(WindowType windowType)
112 {
113     windowType_ = windowType;
114 }
115 
GetWindowType()116 WindowType WindowTransitionInfo::GetWindowType()
117 {
118     return windowType_;
119 }
120 
SetShowFlagWhenLocked(bool isShow)121 void WindowTransitionInfo::SetShowFlagWhenLocked(bool isShow)
122 {
123     isShowWhenLocked_ = isShow;
124 }
125 
SetWindowSupportModes(const std::vector<AppExecFwk::SupportWindowMode> supportModes)126 void WindowTransitionInfo::SetWindowSupportModes(const std::vector<AppExecFwk::SupportWindowMode> supportModes)
127 {
128     supportWindowModes_.assign(supportModes.begin(), supportModes.end());
129 }
130 
GetWindowSupportModes()131 std::vector<AppExecFwk::SupportWindowMode> WindowTransitionInfo::GetWindowSupportModes()
132 {
133     return supportWindowModes_;
134 }
135 
GetWindowSizeLimits() const136 WindowLimits WindowTransitionInfo::GetWindowSizeLimits() const
137 {
138     return sizeLimits_;
139 }
140 
GetShowFlagWhenLocked()141 bool WindowTransitionInfo::GetShowFlagWhenLocked()
142 {
143     return isShowWhenLocked_;
144 }
145 
SetTransitionReason(TransitionReason reason)146 void WindowTransitionInfo::SetTransitionReason(TransitionReason reason)
147 {
148     reason_ = reason;
149 }
150 
GetTransitionReason()151 TransitionReason WindowTransitionInfo::GetTransitionReason()
152 {
153     return reason_;
154 }
155 
SetIsRecent(bool isRecent)156 void WindowTransitionInfo::SetIsRecent(bool isRecent)
157 {
158     isRecent_ = isRecent;
159 }
160 
GetIsRecent() const161 bool WindowTransitionInfo::GetIsRecent() const
162 {
163     return isRecent_;
164 }
165 
SetMissionId(int32_t missionId)166 void WindowTransitionInfo::SetMissionId(int32_t missionId)
167 {
168     missionId_ = missionId;
169 }
170 
GetMissionId() const171 int32_t WindowTransitionInfo::GetMissionId() const
172 {
173     return missionId_;
174 }
175 
SetOrientation(AppExecFwk::DisplayOrientation orientation)176 void WindowTransitionInfo::SetOrientation(AppExecFwk::DisplayOrientation orientation)
177 {
178     orientation_ = orientation;
179 }
180 
GetOrientation() const181 AppExecFwk::DisplayOrientation WindowTransitionInfo::GetOrientation() const
182 {
183     return orientation_;
184 }
185 
SetApiCompatibleVersion(uint32_t apiCompatibleVersion)186 void WindowTransitionInfo::SetApiCompatibleVersion(uint32_t apiCompatibleVersion)
187 {
188     apiCompatibleVersion_ = apiCompatibleVersion;
189 }
190 
GetApiCompatibleVersion() const191 uint32_t WindowTransitionInfo::GetApiCompatibleVersion() const
192 {
193     return apiCompatibleVersion_;
194 }
195 
Marshalling(Parcel & parcel) const196 bool WindowTransitionInfo::Marshalling(Parcel& parcel) const
197 {
198     if (!parcel.WriteString(bundleName_) || !parcel.WriteString(abilityName_)) {
199         return false;
200     }
201 
202     if (!parcel.WriteUint32(static_cast<uint32_t>(mode_))) {
203         return false;
204     }
205 
206     if (!(parcel.WriteInt32(windowRect_.posX_) && parcel.WriteInt32(windowRect_.posY_) &&
207         parcel.WriteUint32(windowRect_.width_) && parcel.WriteUint32(windowRect_.height_))) {
208         return false;
209     }
210 
211     if (!abilityToken_) {
212         if (!parcel.WriteBool(false)) {
213             return false;
214         }
215     } else {
216         if (!parcel.WriteBool(true) || !parcel.WriteObject(abilityToken_)) {
217             return false;
218         }
219     }
220 
221     if (!parcel.WriteUint64(displayId_)) {
222         return false;
223     }
224 
225     if (!parcel.WriteUint32(static_cast<uint32_t>(windowType_))) {
226         return false;
227     }
228 
229     if (!parcel.WriteBool(isShowWhenLocked_)) {
230         return false;
231     }
232 
233     if (!parcel.WriteBool(isRecent_)) {
234         return false;
235     }
236 
237     if (!parcel.WriteUint32(static_cast<uint32_t>(reason_))) {
238         return false;
239     }
240 
241     if (!parcel.WriteInt32(missionId_)) {
242         return false;
243     }
244 
245     if (!parcel.WriteUint32(static_cast<uint32_t>(orientation_))) {
246         return false;
247     }
248     return true;
249 }
250 
Unmarshalling(Parcel & parcel)251 WindowTransitionInfo* WindowTransitionInfo::Unmarshalling(Parcel& parcel)
252 {
253     auto windowTransitionInfo = new(std::nothrow) WindowTransitionInfo();
254     if (windowTransitionInfo == nullptr) {
255         return nullptr;
256     }
257     windowTransitionInfo->bundleName_ = parcel.ReadString();
258     windowTransitionInfo->abilityName_ = parcel.ReadString();
259     windowTransitionInfo->mode_ = static_cast<WindowMode>(parcel.ReadUint32());
260     windowTransitionInfo->windowRect_.posX_ = parcel.ReadInt32();
261     windowTransitionInfo->windowRect_.posY_  = parcel.ReadInt32();
262     windowTransitionInfo->windowRect_.width_  = parcel.ReadUint32();
263     windowTransitionInfo->windowRect_.height_  = parcel.ReadUint32();
264     if (parcel.ReadBool()) {
265         auto readObject = parcel.ReadObject<IRemoteObject>();
266         if (readObject == nullptr) {
267             return nullptr;
268         }
269         windowTransitionInfo->abilityToken_ = readObject;
270     }
271     windowTransitionInfo->displayId_ = parcel.ReadUint64();
272     windowTransitionInfo->windowType_ = static_cast<WindowType>(parcel.ReadUint32());
273     windowTransitionInfo->isShowWhenLocked_ = parcel.ReadBool();
274     windowTransitionInfo->isRecent_ = parcel.ReadBool();
275     windowTransitionInfo->reason_ = static_cast<TransitionReason>(parcel.ReadUint32());
276     windowTransitionInfo->missionId_ = parcel.ReadInt32();
277     windowTransitionInfo->orientation_ = static_cast<AppExecFwk::DisplayOrientation>(parcel.ReadUint32());
278     return windowTransitionInfo;
279 }
280 } // Rosen
281 } // OHOS
282