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 18namespace OHOS { 19namespace Rosen { 20WindowTransitionInfo::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 51void WindowTransitionInfo::SetBundleName(std::string name) 52{ 53 bundleName_ = name; 54} 55 56std::string WindowTransitionInfo::GetBundleName() 57{ 58 return bundleName_; 59} 60 61void WindowTransitionInfo::SetAbilityName(std::string name) 62{ 63 abilityName_ = name; 64} 65 66std::string WindowTransitionInfo::GetAbilityName() 67{ 68 return abilityName_; 69} 70 71void WindowTransitionInfo::SetWindowMode(WindowMode mode) 72{ 73 mode_ = mode; 74} 75 76WindowMode WindowTransitionInfo::GetWindowMode() 77{ 78 return mode_; 79} 80 81void WindowTransitionInfo::SetWindowRect(Rect rect) 82{ 83 windowRect_ = rect; 84} 85 86Rect WindowTransitionInfo::GetWindowRect() 87{ 88 return windowRect_; 89} 90 91void WindowTransitionInfo::SetAbilityToken(sptr<IRemoteObject> abilityToken) 92{ 93 abilityToken_ = abilityToken; 94} 95 96sptr<IRemoteObject> WindowTransitionInfo::GetAbilityToken() 97{ 98 return abilityToken_; 99} 100 101void WindowTransitionInfo::SetDisplayId(DisplayId displayId) 102{ 103 displayId_ = displayId; 104} 105 106DisplayId WindowTransitionInfo::GetDisplayId() 107{ 108 return displayId_; 109} 110 111void WindowTransitionInfo::SetWindowType(WindowType windowType) 112{ 113 windowType_ = windowType; 114} 115 116WindowType WindowTransitionInfo::GetWindowType() 117{ 118 return windowType_; 119} 120 121void WindowTransitionInfo::SetShowFlagWhenLocked(bool isShow) 122{ 123 isShowWhenLocked_ = isShow; 124} 125 126void WindowTransitionInfo::SetWindowSupportModes(const std::vector<AppExecFwk::SupportWindowMode> supportModes) 127{ 128 supportWindowModes_.assign(supportModes.begin(), supportModes.end()); 129} 130 131std::vector<AppExecFwk::SupportWindowMode> WindowTransitionInfo::GetWindowSupportModes() 132{ 133 return supportWindowModes_; 134} 135 136WindowLimits WindowTransitionInfo::GetWindowSizeLimits() const 137{ 138 return sizeLimits_; 139} 140 141bool WindowTransitionInfo::GetShowFlagWhenLocked() 142{ 143 return isShowWhenLocked_; 144} 145 146void WindowTransitionInfo::SetTransitionReason(TransitionReason reason) 147{ 148 reason_ = reason; 149} 150 151TransitionReason WindowTransitionInfo::GetTransitionReason() 152{ 153 return reason_; 154} 155 156void WindowTransitionInfo::SetIsRecent(bool isRecent) 157{ 158 isRecent_ = isRecent; 159} 160 161bool WindowTransitionInfo::GetIsRecent() const 162{ 163 return isRecent_; 164} 165 166void WindowTransitionInfo::SetMissionId(int32_t missionId) 167{ 168 missionId_ = missionId; 169} 170 171int32_t WindowTransitionInfo::GetMissionId() const 172{ 173 return missionId_; 174} 175 176void WindowTransitionInfo::SetOrientation(AppExecFwk::DisplayOrientation orientation) 177{ 178 orientation_ = orientation; 179} 180 181AppExecFwk::DisplayOrientation WindowTransitionInfo::GetOrientation() const 182{ 183 return orientation_; 184} 185 186void WindowTransitionInfo::SetApiCompatibleVersion(uint32_t apiCompatibleVersion) 187{ 188 apiCompatibleVersion_ = apiCompatibleVersion; 189} 190 191uint32_t WindowTransitionInfo::GetApiCompatibleVersion() const 192{ 193 return apiCompatibleVersion_; 194} 195 196bool 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 251WindowTransitionInfo* 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