1  /*
2   * Copyright (c) 2021-2023 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.0f;
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) || !parcel.WriteInt32(top) ||
78              !parcel.WriteInt32(right) || !parcel.WriteInt32(bottom)) {
79              return false;
80          }
81          return true;
82      }
83  
UnmarshallingRect84      static Rect* Unmarshalling(Parcel &parcel)
85      {
86          int32_t left = parcel.ReadInt32();
87          int32_t top = parcel.ReadInt32();
88          int32_t right = parcel.ReadInt32();
89          int32_t bottom = parcel.ReadInt32();
90          auto rectPtr = new Rect(left, top, right, bottom);
91          return rectPtr;
92      }
93  
94      int32_t left = 0;
95      int32_t top = 0;
96      int32_t right = 0;
97      int32_t bottom = 0;
98  };
99  } // namespace DistributedSchedule
100  } // namespace OHOS
101  #endif /* SERVICES_DTBSCHEDMGR_INCLUDE_SNAPSHOT_SNAP_SHOT_H */
102