1 /*
2 * Copyright (c) 2021 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 "screen_manager/rs_screen_data.h"
17 #include "platform/common/rs_log.h"
18
19 namespace OHOS {
20 namespace Rosen {
RSScreenData(RSScreenCapability capability,RSScreenModeInfo activityModeInfo,const std::vector<RSScreenModeInfo> & supportModeInfo,ScreenPowerStatus powerStatus)21 RSScreenData::RSScreenData(RSScreenCapability capability, RSScreenModeInfo activityModeInfo,
22 const std::vector<RSScreenModeInfo>& supportModeInfo, ScreenPowerStatus powerStatus)
23 : capability_(capability), activityModeInfo_(activityModeInfo),
24 supportModeInfo_(supportModeInfo), powerStatus_(powerStatus)
25 {
26 }
27
SetCapability(const RSScreenCapability & capability)28 void RSScreenData::SetCapability(const RSScreenCapability& capability)
29 {
30 capability_ = capability;
31 }
32
SetActivityModeInfo(const RSScreenModeInfo & activityModeInfo)33 void RSScreenData::SetActivityModeInfo(const RSScreenModeInfo& activityModeInfo)
34 {
35 activityModeInfo_ = activityModeInfo;
36 }
37
SetSupportModeInfo(const std::vector<RSScreenModeInfo> & supportModeInfo)38 void RSScreenData::SetSupportModeInfo(const std::vector<RSScreenModeInfo>& supportModeInfo)
39 {
40 supportModeInfo_ = supportModeInfo;
41 }
42
SetPowerStatus(ScreenPowerStatus powerStatus)43 void RSScreenData::SetPowerStatus(ScreenPowerStatus powerStatus)
44 {
45 powerStatus_ = powerStatus;
46 }
47
48
GetCapability() const49 RSScreenCapability RSScreenData::GetCapability() const
50 {
51 return capability_;
52 }
53
GetActivityModeInfo() const54 RSScreenModeInfo RSScreenData::GetActivityModeInfo() const
55 {
56 return activityModeInfo_;
57 }
58
GetSupportModeInfo() const59 const std::vector<RSScreenModeInfo>& RSScreenData::GetSupportModeInfo() const
60 {
61 return supportModeInfo_;
62 }
63
GetPowerStatus() const64 ScreenPowerStatus RSScreenData::GetPowerStatus() const
65 {
66 return powerStatus_;
67 }
68
WriteVector(const std::vector<RSScreenModeInfo> & supportModes,Parcel & parcel) const69 bool RSScreenData::WriteVector(const std::vector<RSScreenModeInfo> &supportModes, Parcel &parcel) const
70 {
71 for (uint32_t modeIndex = 0; modeIndex < supportModes.size(); modeIndex++) {
72 if (!parcel.WriteParcelable(&supportModes[modeIndex])) {
73 ROSEN_LOGE("RSScreenData::WriteVector WriteParcelable failed");
74 return false;
75 }
76 }
77 return true;
78 }
79
ReadVector(std::vector<RSScreenModeInfo> & unmarsupportModes,uint32_t unmarModeCount,Parcel & parcel)80 bool RSScreenData::ReadVector(std::vector<RSScreenModeInfo> &unmarsupportModes, uint32_t unmarModeCount, Parcel &parcel)
81 {
82 for (uint32_t modeIndex = 0; modeIndex < unmarModeCount; modeIndex++) {
83 sptr<RSScreenModeInfo> itemMode = parcel.ReadParcelable<RSScreenModeInfo>();
84 if (itemMode == nullptr) {
85 return false;
86 } else {
87 unmarsupportModes.push_back(*itemMode);
88 }
89 }
90 return true;
91 }
92
Marshalling(Parcel & parcel) const93 bool RSScreenData::Marshalling(Parcel &parcel) const
94 {
95 if (!parcel.WriteParcelable(&capability_)) {
96 ROSEN_LOGE("RSScreenData::Marshalling WriteParcelable 1 failed");
97 return false;
98 }
99 if (!parcel.WriteParcelable(&activityModeInfo_)) {
100 ROSEN_LOGE("RSScreenData::Marshalling WriteParcelable 2 failed");
101 return false;
102 }
103 if (!parcel.WriteUint32(static_cast<uint32_t>(supportModeInfo_.size()))) {
104 ROSEN_LOGE("RSScreenData::Marshalling WriteUint32 failed");
105 return false;
106 }
107 if (!WriteVector(supportModeInfo_, parcel)) {
108 ROSEN_LOGE("RSScreenData::Marshalling WriteVector failed");
109 return false;
110 }
111 if (!parcel.WriteUint8(static_cast<uint8_t>(powerStatus_))) {
112 ROSEN_LOGE("RSScreenData::Marshalling WriteUint8 failed");
113 return false;
114 }
115 return true;
116 }
117
Unmarshalling(Parcel & parcel)118 RSScreenData* RSScreenData::Unmarshalling(Parcel &parcel)
119 {
120 sptr<RSScreenCapability> capability;
121 sptr<RSScreenModeInfo> activityModeInfo;
122 uint32_t modeCount;
123 std::vector<RSScreenModeInfo> supportModeInfo;
124 uint8_t powerStatus;
125 capability = parcel.ReadParcelable<RSScreenCapability>();
126 if (capability == nullptr) {
127 return nullptr;
128 }
129 activityModeInfo = parcel.ReadParcelable<RSScreenModeInfo>();
130 if (activityModeInfo == nullptr) {
131 return nullptr;
132 }
133 if (!parcel.ReadUint32(modeCount)) {
134 ROSEN_LOGE("RSScreenData::Unmarshalling ReadUint32 failed");
135 return nullptr;
136 }
137 if (!ReadVector(supportModeInfo, modeCount, parcel)) {
138 return nullptr;
139 }
140 if (!parcel.ReadUint8(powerStatus)) {
141 ROSEN_LOGE("RSScreenData::Unmarshalling ReadUint8 failed");
142 return nullptr;
143 }
144 RSScreenData* screenData = new RSScreenData(*capability, *activityModeInfo,
145 supportModeInfo, static_cast<ScreenPowerStatus>(powerStatus));
146 return screenData;
147 }
148 }
149 }
150