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 } 48 SetBundleName(std::string name)49void WindowTransitionInfo::SetBundleName(std::string name) 50 { 51 bundleName_ = name; 52 } 53 GetBundleName()54std::string WindowTransitionInfo::GetBundleName() 55 { 56 return bundleName_; 57 } 58 SetAbilityName(std::string name)59void WindowTransitionInfo::SetAbilityName(std::string name) 60 { 61 abilityName_ = name; 62 } 63 GetAbilityName()64std::string WindowTransitionInfo::GetAbilityName() 65 { 66 return abilityName_; 67 } 68 SetWindowMode(WindowMode mode)69void WindowTransitionInfo::SetWindowMode(WindowMode mode) 70 { 71 mode_ = mode; 72 } 73 GetWindowMode()74WindowMode WindowTransitionInfo::GetWindowMode() 75 { 76 return mode_; 77 } 78 SetWindowRect(Rect rect)79void WindowTransitionInfo::SetWindowRect(Rect rect) 80 { 81 windowRect_ = rect; 82 } 83 GetWindowRect()84Rect WindowTransitionInfo::GetWindowRect() 85 { 86 return windowRect_; 87 } 88 SetAbilityToken(sptr<IRemoteObject> abilityToken)89void WindowTransitionInfo::SetAbilityToken(sptr<IRemoteObject> abilityToken) 90 { 91 abilityToken_ = abilityToken; 92 } 93 GetAbilityToken()94sptr<IRemoteObject> WindowTransitionInfo::GetAbilityToken() 95 { 96 return abilityToken_; 97 } 98 SetDisplayId(DisplayId displayId)99void WindowTransitionInfo::SetDisplayId(DisplayId displayId) 100 { 101 displayId_ = displayId; 102 } 103 GetDisplayId()104DisplayId WindowTransitionInfo::GetDisplayId() 105 { 106 return displayId_; 107 } 108 SetWindowType(WindowType windowType)109void WindowTransitionInfo::SetWindowType(WindowType windowType) 110 { 111 windowType_ = windowType; 112 } 113 GetWindowType()114WindowType WindowTransitionInfo::GetWindowType() 115 { 116 return windowType_; 117 } 118 SetShowFlagWhenLocked(bool isShow)119void WindowTransitionInfo::SetShowFlagWhenLocked(bool isShow) 120 { 121 isShowWhenLocked_ = isShow; 122 } 123 SetWindowSupportModes(const std::vector<AppExecFwk::SupportWindowMode> supportModes)124void WindowTransitionInfo::SetWindowSupportModes(const std::vector<AppExecFwk::SupportWindowMode> supportModes) 125 { 126 supportWindowModes_.assign(supportModes.begin(), supportModes.end()); 127 } 128 GetWindowSupportModes()129std::vector<AppExecFwk::SupportWindowMode> WindowTransitionInfo::GetWindowSupportModes() 130 { 131 return supportWindowModes_; 132 } 133 GetWindowSizeLimits() const134WindowSizeLimits WindowTransitionInfo::GetWindowSizeLimits() const 135 { 136 return sizeLimits_; 137 } 138 GetShowFlagWhenLocked()139bool WindowTransitionInfo::GetShowFlagWhenLocked() 140 { 141 return isShowWhenLocked_; 142 } 143 SetTransitionReason(TransitionReason reason)144void WindowTransitionInfo::SetTransitionReason(TransitionReason reason) 145 { 146 reason_ = reason; 147 } 148 GetTransitionReason()149TransitionReason WindowTransitionInfo::GetTransitionReason() 150 { 151 return reason_; 152 } 153 SetIsRecent(bool isRecent)154void WindowTransitionInfo::SetIsRecent(bool isRecent) 155 { 156 isRecent_ = isRecent; 157 } 158 GetIsRecent() const159bool WindowTransitionInfo::GetIsRecent() const 160 { 161 return isRecent_; 162 } 163 SetMissionId(int32_t missionId)164void WindowTransitionInfo::SetMissionId(int32_t missionId) 165 { 166 missionId_ = missionId; 167 } 168 GetMissionId() const169int32_t WindowTransitionInfo::GetMissionId() const 170 { 171 return missionId_; 172 } 173 Marshalling(Parcel & parcel) const174bool WindowTransitionInfo::Marshalling(Parcel& parcel) const 175 { 176 if (!parcel.WriteString(bundleName_) || !parcel.WriteString(abilityName_)) { 177 return false; 178 } 179 180 if (!parcel.WriteUint32(static_cast<uint32_t>(mode_))) { 181 return false; 182 } 183 184 if (!(parcel.WriteInt32(windowRect_.posX_) && parcel.WriteInt32(windowRect_.posY_) && 185 parcel.WriteUint32(windowRect_.width_) && parcel.WriteUint32(windowRect_.height_))) { 186 return false; 187 } 188 189 if (!abilityToken_) { 190 if (!parcel.WriteBool(false)) { 191 return false; 192 } 193 } else { 194 if (!parcel.WriteBool(true) || !parcel.WriteObject(abilityToken_)) { 195 return false; 196 } 197 } 198 199 if (!parcel.WriteUint64(displayId_)) { 200 return false; 201 } 202 203 if (!parcel.WriteUint32(static_cast<uint32_t>(windowType_))) { 204 return false; 205 } 206 207 if (!parcel.WriteBool(isShowWhenLocked_)) { 208 return false; 209 } 210 211 if (!parcel.WriteBool(isRecent_)) { 212 return false; 213 } 214 215 if (!parcel.WriteUint32(static_cast<uint32_t>(reason_))) { 216 return false; 217 } 218 219 if (!parcel.WriteInt32(missionId_)) { 220 return false; 221 } 222 return true; 223 } 224 Unmarshalling(Parcel & parcel)225WindowTransitionInfo* WindowTransitionInfo::Unmarshalling(Parcel& parcel) 226 { 227 auto windowTransitionInfo = new(std::nothrow) WindowTransitionInfo(); 228 if (windowTransitionInfo == nullptr) { 229 return nullptr; 230 } 231 windowTransitionInfo->bundleName_ = parcel.ReadString(); 232 windowTransitionInfo->abilityName_ = parcel.ReadString(); 233 windowTransitionInfo->mode_ = static_cast<WindowMode>(parcel.ReadUint32()); 234 windowTransitionInfo->windowRect_.posX_ = parcel.ReadInt32(); 235 windowTransitionInfo->windowRect_.posY_ = parcel.ReadInt32(); 236 windowTransitionInfo->windowRect_.width_ = parcel.ReadUint32(); 237 windowTransitionInfo->windowRect_.height_ = parcel.ReadUint32(); 238 if (parcel.ReadBool()) { 239 windowTransitionInfo->abilityToken_ = parcel.ReadObject<IRemoteObject>(); 240 } 241 windowTransitionInfo->displayId_ = parcel.ReadUint64(); 242 windowTransitionInfo->windowType_ = static_cast<WindowType>(parcel.ReadUint32()); 243 windowTransitionInfo->isShowWhenLocked_ = parcel.ReadBool(); 244 windowTransitionInfo->isRecent_ = parcel.ReadBool(); 245 windowTransitionInfo->reason_ = static_cast<TransitionReason>(parcel.ReadUint32()); 246 windowTransitionInfo->missionId_ = parcel.ReadInt32(); 247 return windowTransitionInfo; 248 } 249 } // Rosen 250 } // OHOS 251