1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License.
5e0dac50fSopenharmony_ci * You may obtain a copy of the License at
6e0dac50fSopenharmony_ci *
7e0dac50fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e0dac50fSopenharmony_ci *
9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and
13e0dac50fSopenharmony_ci * limitations under the License.
14e0dac50fSopenharmony_ci */
15e0dac50fSopenharmony_ci
16e0dac50fSopenharmony_ci#include "window_transition_info.h"
17e0dac50fSopenharmony_ci
18e0dac50fSopenharmony_cinamespace OHOS {
19e0dac50fSopenharmony_cinamespace Rosen {
20e0dac50fSopenharmony_ciWindowTransitionInfo::WindowTransitionInfo(sptr<AAFwk::AbilityTransitionInfo> info)
21e0dac50fSopenharmony_ci{
22e0dac50fSopenharmony_ci    bundleName_ = info->bundleName_;
23e0dac50fSopenharmony_ci    abilityName_ = info->abilityName_;
24e0dac50fSopenharmony_ci    mode_ = static_cast<WindowMode>(info->mode_);
25e0dac50fSopenharmony_ci    abilityToken_ = info->abilityToken_;
26e0dac50fSopenharmony_ci    displayId_ = info->displayId_;
27e0dac50fSopenharmony_ci    isShowWhenLocked_ = info->isShowWhenLocked_;
28e0dac50fSopenharmony_ci    isRecent_ = info->isRecent_;
29e0dac50fSopenharmony_ci    missionId_ = info->missionId_;
30e0dac50fSopenharmony_ci    if (info->windowModes_.empty()) {
31e0dac50fSopenharmony_ci        supportWindowModes_ = {
32e0dac50fSopenharmony_ci            AppExecFwk::SupportWindowMode::FULLSCREEN,
33e0dac50fSopenharmony_ci            AppExecFwk::SupportWindowMode::SPLIT,
34e0dac50fSopenharmony_ci            AppExecFwk::SupportWindowMode::FLOATING
35e0dac50fSopenharmony_ci        };
36e0dac50fSopenharmony_ci    } else {
37e0dac50fSopenharmony_ci        supportWindowModes_.assign(info->windowModes_.begin(), info->windowModes_.end());
38e0dac50fSopenharmony_ci    }
39e0dac50fSopenharmony_ci
40e0dac50fSopenharmony_ci    sizeLimits_.maxRatio_ = static_cast<float>(info->maxWindowRatio_);
41e0dac50fSopenharmony_ci    sizeLimits_.minRatio_ = static_cast<float>(info->minWindowRatio_);
42e0dac50fSopenharmony_ci    sizeLimits_.maxWidth_ = info->maxWindowWidth_;
43e0dac50fSopenharmony_ci    sizeLimits_.minWidth_ = info->minWindowWidth_;
44e0dac50fSopenharmony_ci    sizeLimits_.maxHeight_ = info->maxWindowHeight_;
45e0dac50fSopenharmony_ci    sizeLimits_.minHeight_ = info->minWindowHeight_;
46e0dac50fSopenharmony_ci    reason_ = static_cast<TransitionReason>(info->reason_);
47e0dac50fSopenharmony_ci    orientation_ = info->orientation_;
48e0dac50fSopenharmony_ci    apiCompatibleVersion_ = info->apiCompatibleVersion_;
49e0dac50fSopenharmony_ci}
50e0dac50fSopenharmony_ci
51e0dac50fSopenharmony_civoid WindowTransitionInfo::SetBundleName(std::string name)
52e0dac50fSopenharmony_ci{
53e0dac50fSopenharmony_ci    bundleName_ = name;
54e0dac50fSopenharmony_ci}
55e0dac50fSopenharmony_ci
56e0dac50fSopenharmony_cistd::string WindowTransitionInfo::GetBundleName()
57e0dac50fSopenharmony_ci{
58e0dac50fSopenharmony_ci    return bundleName_;
59e0dac50fSopenharmony_ci}
60e0dac50fSopenharmony_ci
61e0dac50fSopenharmony_civoid WindowTransitionInfo::SetAbilityName(std::string name)
62e0dac50fSopenharmony_ci{
63e0dac50fSopenharmony_ci    abilityName_ = name;
64e0dac50fSopenharmony_ci}
65e0dac50fSopenharmony_ci
66e0dac50fSopenharmony_cistd::string WindowTransitionInfo::GetAbilityName()
67e0dac50fSopenharmony_ci{
68e0dac50fSopenharmony_ci    return abilityName_;
69e0dac50fSopenharmony_ci}
70e0dac50fSopenharmony_ci
71e0dac50fSopenharmony_civoid WindowTransitionInfo::SetWindowMode(WindowMode mode)
72e0dac50fSopenharmony_ci{
73e0dac50fSopenharmony_ci    mode_ = mode;
74e0dac50fSopenharmony_ci}
75e0dac50fSopenharmony_ci
76e0dac50fSopenharmony_ciWindowMode WindowTransitionInfo::GetWindowMode()
77e0dac50fSopenharmony_ci{
78e0dac50fSopenharmony_ci    return mode_;
79e0dac50fSopenharmony_ci}
80e0dac50fSopenharmony_ci
81e0dac50fSopenharmony_civoid WindowTransitionInfo::SetWindowRect(Rect rect)
82e0dac50fSopenharmony_ci{
83e0dac50fSopenharmony_ci    windowRect_ = rect;
84e0dac50fSopenharmony_ci}
85e0dac50fSopenharmony_ci
86e0dac50fSopenharmony_ciRect WindowTransitionInfo::GetWindowRect()
87e0dac50fSopenharmony_ci{
88e0dac50fSopenharmony_ci    return windowRect_;
89e0dac50fSopenharmony_ci}
90e0dac50fSopenharmony_ci
91e0dac50fSopenharmony_civoid WindowTransitionInfo::SetAbilityToken(sptr<IRemoteObject> abilityToken)
92e0dac50fSopenharmony_ci{
93e0dac50fSopenharmony_ci    abilityToken_ = abilityToken;
94e0dac50fSopenharmony_ci}
95e0dac50fSopenharmony_ci
96e0dac50fSopenharmony_cisptr<IRemoteObject> WindowTransitionInfo::GetAbilityToken()
97e0dac50fSopenharmony_ci{
98e0dac50fSopenharmony_ci    return abilityToken_;
99e0dac50fSopenharmony_ci}
100e0dac50fSopenharmony_ci
101e0dac50fSopenharmony_civoid WindowTransitionInfo::SetDisplayId(DisplayId displayId)
102e0dac50fSopenharmony_ci{
103e0dac50fSopenharmony_ci    displayId_ = displayId;
104e0dac50fSopenharmony_ci}
105e0dac50fSopenharmony_ci
106e0dac50fSopenharmony_ciDisplayId WindowTransitionInfo::GetDisplayId()
107e0dac50fSopenharmony_ci{
108e0dac50fSopenharmony_ci    return displayId_;
109e0dac50fSopenharmony_ci}
110e0dac50fSopenharmony_ci
111e0dac50fSopenharmony_civoid WindowTransitionInfo::SetWindowType(WindowType windowType)
112e0dac50fSopenharmony_ci{
113e0dac50fSopenharmony_ci    windowType_ = windowType;
114e0dac50fSopenharmony_ci}
115e0dac50fSopenharmony_ci
116e0dac50fSopenharmony_ciWindowType WindowTransitionInfo::GetWindowType()
117e0dac50fSopenharmony_ci{
118e0dac50fSopenharmony_ci    return windowType_;
119e0dac50fSopenharmony_ci}
120e0dac50fSopenharmony_ci
121e0dac50fSopenharmony_civoid WindowTransitionInfo::SetShowFlagWhenLocked(bool isShow)
122e0dac50fSopenharmony_ci{
123e0dac50fSopenharmony_ci    isShowWhenLocked_ = isShow;
124e0dac50fSopenharmony_ci}
125e0dac50fSopenharmony_ci
126e0dac50fSopenharmony_civoid WindowTransitionInfo::SetWindowSupportModes(const std::vector<AppExecFwk::SupportWindowMode> supportModes)
127e0dac50fSopenharmony_ci{
128e0dac50fSopenharmony_ci    supportWindowModes_.assign(supportModes.begin(), supportModes.end());
129e0dac50fSopenharmony_ci}
130e0dac50fSopenharmony_ci
131e0dac50fSopenharmony_cistd::vector<AppExecFwk::SupportWindowMode> WindowTransitionInfo::GetWindowSupportModes()
132e0dac50fSopenharmony_ci{
133e0dac50fSopenharmony_ci    return supportWindowModes_;
134e0dac50fSopenharmony_ci}
135e0dac50fSopenharmony_ci
136e0dac50fSopenharmony_ciWindowLimits WindowTransitionInfo::GetWindowSizeLimits() const
137e0dac50fSopenharmony_ci{
138e0dac50fSopenharmony_ci    return sizeLimits_;
139e0dac50fSopenharmony_ci}
140e0dac50fSopenharmony_ci
141e0dac50fSopenharmony_cibool WindowTransitionInfo::GetShowFlagWhenLocked()
142e0dac50fSopenharmony_ci{
143e0dac50fSopenharmony_ci    return isShowWhenLocked_;
144e0dac50fSopenharmony_ci}
145e0dac50fSopenharmony_ci
146e0dac50fSopenharmony_civoid WindowTransitionInfo::SetTransitionReason(TransitionReason reason)
147e0dac50fSopenharmony_ci{
148e0dac50fSopenharmony_ci    reason_ = reason;
149e0dac50fSopenharmony_ci}
150e0dac50fSopenharmony_ci
151e0dac50fSopenharmony_ciTransitionReason WindowTransitionInfo::GetTransitionReason()
152e0dac50fSopenharmony_ci{
153e0dac50fSopenharmony_ci    return reason_;
154e0dac50fSopenharmony_ci}
155e0dac50fSopenharmony_ci
156e0dac50fSopenharmony_civoid WindowTransitionInfo::SetIsRecent(bool isRecent)
157e0dac50fSopenharmony_ci{
158e0dac50fSopenharmony_ci    isRecent_ = isRecent;
159e0dac50fSopenharmony_ci}
160e0dac50fSopenharmony_ci
161e0dac50fSopenharmony_cibool WindowTransitionInfo::GetIsRecent() const
162e0dac50fSopenharmony_ci{
163e0dac50fSopenharmony_ci    return isRecent_;
164e0dac50fSopenharmony_ci}
165e0dac50fSopenharmony_ci
166e0dac50fSopenharmony_civoid WindowTransitionInfo::SetMissionId(int32_t missionId)
167e0dac50fSopenharmony_ci{
168e0dac50fSopenharmony_ci    missionId_ = missionId;
169e0dac50fSopenharmony_ci}
170e0dac50fSopenharmony_ci
171e0dac50fSopenharmony_ciint32_t WindowTransitionInfo::GetMissionId() const
172e0dac50fSopenharmony_ci{
173e0dac50fSopenharmony_ci    return missionId_;
174e0dac50fSopenharmony_ci}
175e0dac50fSopenharmony_ci
176e0dac50fSopenharmony_civoid WindowTransitionInfo::SetOrientation(AppExecFwk::DisplayOrientation orientation)
177e0dac50fSopenharmony_ci{
178e0dac50fSopenharmony_ci    orientation_ = orientation;
179e0dac50fSopenharmony_ci}
180e0dac50fSopenharmony_ci
181e0dac50fSopenharmony_ciAppExecFwk::DisplayOrientation WindowTransitionInfo::GetOrientation() const
182e0dac50fSopenharmony_ci{
183e0dac50fSopenharmony_ci    return orientation_;
184e0dac50fSopenharmony_ci}
185e0dac50fSopenharmony_ci
186e0dac50fSopenharmony_civoid WindowTransitionInfo::SetApiCompatibleVersion(uint32_t apiCompatibleVersion)
187e0dac50fSopenharmony_ci{
188e0dac50fSopenharmony_ci    apiCompatibleVersion_ = apiCompatibleVersion;
189e0dac50fSopenharmony_ci}
190e0dac50fSopenharmony_ci
191e0dac50fSopenharmony_ciuint32_t WindowTransitionInfo::GetApiCompatibleVersion() const
192e0dac50fSopenharmony_ci{
193e0dac50fSopenharmony_ci    return apiCompatibleVersion_;
194e0dac50fSopenharmony_ci}
195e0dac50fSopenharmony_ci
196e0dac50fSopenharmony_cibool WindowTransitionInfo::Marshalling(Parcel& parcel) const
197e0dac50fSopenharmony_ci{
198e0dac50fSopenharmony_ci    if (!parcel.WriteString(bundleName_) || !parcel.WriteString(abilityName_)) {
199e0dac50fSopenharmony_ci        return false;
200e0dac50fSopenharmony_ci    }
201e0dac50fSopenharmony_ci
202e0dac50fSopenharmony_ci    if (!parcel.WriteUint32(static_cast<uint32_t>(mode_))) {
203e0dac50fSopenharmony_ci        return false;
204e0dac50fSopenharmony_ci    }
205e0dac50fSopenharmony_ci
206e0dac50fSopenharmony_ci    if (!(parcel.WriteInt32(windowRect_.posX_) && parcel.WriteInt32(windowRect_.posY_) &&
207e0dac50fSopenharmony_ci        parcel.WriteUint32(windowRect_.width_) && parcel.WriteUint32(windowRect_.height_))) {
208e0dac50fSopenharmony_ci        return false;
209e0dac50fSopenharmony_ci    }
210e0dac50fSopenharmony_ci
211e0dac50fSopenharmony_ci    if (!abilityToken_) {
212e0dac50fSopenharmony_ci        if (!parcel.WriteBool(false)) {
213e0dac50fSopenharmony_ci            return false;
214e0dac50fSopenharmony_ci        }
215e0dac50fSopenharmony_ci    } else {
216e0dac50fSopenharmony_ci        if (!parcel.WriteBool(true) || !parcel.WriteObject(abilityToken_)) {
217e0dac50fSopenharmony_ci            return false;
218e0dac50fSopenharmony_ci        }
219e0dac50fSopenharmony_ci    }
220e0dac50fSopenharmony_ci
221e0dac50fSopenharmony_ci    if (!parcel.WriteUint64(displayId_)) {
222e0dac50fSopenharmony_ci        return false;
223e0dac50fSopenharmony_ci    }
224e0dac50fSopenharmony_ci
225e0dac50fSopenharmony_ci    if (!parcel.WriteUint32(static_cast<uint32_t>(windowType_))) {
226e0dac50fSopenharmony_ci        return false;
227e0dac50fSopenharmony_ci    }
228e0dac50fSopenharmony_ci
229e0dac50fSopenharmony_ci    if (!parcel.WriteBool(isShowWhenLocked_)) {
230e0dac50fSopenharmony_ci        return false;
231e0dac50fSopenharmony_ci    }
232e0dac50fSopenharmony_ci
233e0dac50fSopenharmony_ci    if (!parcel.WriteBool(isRecent_)) {
234e0dac50fSopenharmony_ci        return false;
235e0dac50fSopenharmony_ci    }
236e0dac50fSopenharmony_ci
237e0dac50fSopenharmony_ci    if (!parcel.WriteUint32(static_cast<uint32_t>(reason_))) {
238e0dac50fSopenharmony_ci        return false;
239e0dac50fSopenharmony_ci    }
240e0dac50fSopenharmony_ci
241e0dac50fSopenharmony_ci    if (!parcel.WriteInt32(missionId_)) {
242e0dac50fSopenharmony_ci        return false;
243e0dac50fSopenharmony_ci    }
244e0dac50fSopenharmony_ci
245e0dac50fSopenharmony_ci    if (!parcel.WriteUint32(static_cast<uint32_t>(orientation_))) {
246e0dac50fSopenharmony_ci        return false;
247e0dac50fSopenharmony_ci    }
248e0dac50fSopenharmony_ci    return true;
249e0dac50fSopenharmony_ci}
250e0dac50fSopenharmony_ci
251e0dac50fSopenharmony_ciWindowTransitionInfo* WindowTransitionInfo::Unmarshalling(Parcel& parcel)
252e0dac50fSopenharmony_ci{
253e0dac50fSopenharmony_ci    auto windowTransitionInfo = new(std::nothrow) WindowTransitionInfo();
254e0dac50fSopenharmony_ci    if (windowTransitionInfo == nullptr) {
255e0dac50fSopenharmony_ci        return nullptr;
256e0dac50fSopenharmony_ci    }
257e0dac50fSopenharmony_ci    windowTransitionInfo->bundleName_ = parcel.ReadString();
258e0dac50fSopenharmony_ci    windowTransitionInfo->abilityName_ = parcel.ReadString();
259e0dac50fSopenharmony_ci    windowTransitionInfo->mode_ = static_cast<WindowMode>(parcel.ReadUint32());
260e0dac50fSopenharmony_ci    windowTransitionInfo->windowRect_.posX_ = parcel.ReadInt32();
261e0dac50fSopenharmony_ci    windowTransitionInfo->windowRect_.posY_  = parcel.ReadInt32();
262e0dac50fSopenharmony_ci    windowTransitionInfo->windowRect_.width_  = parcel.ReadUint32();
263e0dac50fSopenharmony_ci    windowTransitionInfo->windowRect_.height_  = parcel.ReadUint32();
264e0dac50fSopenharmony_ci    if (parcel.ReadBool()) {
265e0dac50fSopenharmony_ci        auto readObject = parcel.ReadObject<IRemoteObject>();
266e0dac50fSopenharmony_ci        if (readObject == nullptr) {
267e0dac50fSopenharmony_ci            return nullptr;
268e0dac50fSopenharmony_ci        }
269e0dac50fSopenharmony_ci        windowTransitionInfo->abilityToken_ = readObject;
270e0dac50fSopenharmony_ci    }
271e0dac50fSopenharmony_ci    windowTransitionInfo->displayId_ = parcel.ReadUint64();
272e0dac50fSopenharmony_ci    windowTransitionInfo->windowType_ = static_cast<WindowType>(parcel.ReadUint32());
273e0dac50fSopenharmony_ci    windowTransitionInfo->isShowWhenLocked_ = parcel.ReadBool();
274e0dac50fSopenharmony_ci    windowTransitionInfo->isRecent_ = parcel.ReadBool();
275e0dac50fSopenharmony_ci    windowTransitionInfo->reason_ = static_cast<TransitionReason>(parcel.ReadUint32());
276e0dac50fSopenharmony_ci    windowTransitionInfo->missionId_ = parcel.ReadInt32();
277e0dac50fSopenharmony_ci    windowTransitionInfo->orientation_ = static_cast<AppExecFwk::DisplayOrientation>(parcel.ReadUint32());
278e0dac50fSopenharmony_ci    return windowTransitionInfo;
279e0dac50fSopenharmony_ci}
280e0dac50fSopenharmony_ci} // Rosen
281e0dac50fSopenharmony_ci} // OHOS
282