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