• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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