1 /* 2 * Copyright (c) 2021-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 #ifndef SERVICES_DTBSCHEDMGR_INCLUDE_SNAPSHOT_SNAP_SHOT_H 17 #define SERVICES_DTBSCHEDMGR_INCLUDE_SNAPSHOT_SNAP_SHOT_H 18 19 #include <memory> 20 21 #include "dtbschedmgr_log.h" 22 #include "message_parcel.h" 23 #include "pixel_map.h" 24 25 namespace OHOS { 26 namespace DistributedSchedule { 27 struct Rect; 28 class Snapshot { 29 public: 30 int32_t version_ = 0; 31 int32_t orientation_ = 0; 32 std::unique_ptr<Rect> rect_; 33 bool reducedResolution_ = true; 34 float scale_ = 0.0; 35 bool isRealSnapshot_ = true; 36 int32_t windowingMode_ = 0; 37 int32_t systemUiVisibility_ = 0; 38 bool isTranslucent_ = true; 39 std::unique_ptr<Rect> windowBounds_; 40 std::u16string appLabel_; 41 std::u16string abilityLabel_; 42 std::vector<uint8_t> icon_; 43 std::u16string secAppLabel_; 44 std::u16string secAbilityLabel_; 45 std::vector<uint8_t> secIcon_; 46 std::u16string sourceDeviceTips_; 47 std::shared_ptr<Media::PixelMap> pixelMap_; 48 49 ~Snapshot(); 50 bool WriteToParcel(MessageParcel& data) const; 51 static std::unique_ptr<Snapshot> Create(const std::vector<uint8_t>& data); 52 bool WriteSnapshotInfo(MessageParcel& data) const; 53 bool WritePixelMap(MessageParcel& data) const; 54 int64_t GetCreatedTime() const; 55 int64_t GetLastAccessTime() const; 56 void UpdateLastAccessTime(int64_t accessTime); 57 private: 58 static std::unique_ptr<Media::PixelMap> CreatePixelMap(const uint8_t* buffer, uint32_t bufferSize); 59 static std::unique_ptr<Snapshot> FillSnapShot(MessageParcel& data); 60 61 // inner used 62 int64_t createdTime_ = 0; 63 int64_t lastAccessTime_ = 0; 64 }; 65 66 struct Rect : public Parcelable { RectRect67 Rect(int32_t left, int32_t top, int32_t right, int32_t bottom) 68 { 69 this->left = left; 70 this->top = top; 71 this->right = right; 72 this->bottom = bottom; 73 } 74 MarshallingRect75 bool Marshalling(Parcel &parcel) const override 76 { 77 if (!parcel.WriteInt32(left)) { 78 return false; 79 } 80 if (!parcel.WriteInt32(top)) { 81 return false; 82 } 83 if (!parcel.WriteInt32(right)) { 84 return false; 85 } 86 if (!parcel.WriteInt32(bottom)) { 87 return false; 88 } 89 return true; 90 } 91 UnmarshallingRect92 static Rect* Unmarshalling(Parcel &parcel) 93 { 94 int32_t left = parcel.ReadInt32(); 95 int32_t top = parcel.ReadInt32(); 96 int32_t right = parcel.ReadInt32(); 97 int32_t bottom = parcel.ReadInt32(); 98 auto rectPtr = new Rect(left, top, right, bottom); 99 return rectPtr; 100 } 101 102 int32_t left = 0; 103 int32_t top = 0; 104 int32_t right = 0; 105 int32_t bottom = 0; 106 }; 107 } // DistributedSchedule 108 } // OHOS 109 #endif /* SERVICES_DTBSCHEDMGR_INCLUDE_SNAPSHOT_SNAP_SHOT_H */ 110