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