1/*
2 * Copyright (c) 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#include <vector>
16
17#include "devicestatus_common.h"
18#include "devicestatus_define.h"
19#include "devicestatus_errors.h"
20#include "preview_style_packer.h"
21
22#undef LOG_TAG
23#define LOG_TAG "PreviewStylePacker"
24
25namespace OHOS {
26namespace Msdp {
27namespace DeviceStatus {
28
29int32_t PreviewStylePacker::Marshalling(const PreviewStyle &previewStyle, Parcel &data)
30{
31    std::vector<int32_t> types;
32    for (const auto &elem : previewStyle.types) {
33        types.push_back(static_cast<int32_t>(elem));
34    }
35    WRITEINT32VECTOR(data, types, ERR_INVALID_VALUE);
36    WRITEUINT32(data, previewStyle.foregroundColor, ERR_INVALID_VALUE);
37    WRITEINT32(data, previewStyle.opacity, ERR_INVALID_VALUE);
38    WRITEFLOAT(data, previewStyle.radius, ERR_INVALID_VALUE);
39    WRITEFLOAT(data, previewStyle.scale, ERR_INVALID_VALUE);
40    return RET_OK;
41}
42
43int32_t PreviewStylePacker::UnMarshalling(Parcel &data, PreviewStyle &previewStyle)
44{
45    std::vector<int32_t> types;
46    READINT32VECTOR(data, types, ERR_INVALID_VALUE);
47    for (const auto &elem : types) {
48        previewStyle.types.push_back(static_cast<PreviewType>(elem));
49    }
50    READUINT32(data, previewStyle.foregroundColor, ERR_INVALID_VALUE);
51    READINT32(data, previewStyle.opacity, ERR_INVALID_VALUE);
52    READFLOAT(data, previewStyle.radius, ERR_INVALID_VALUE);
53    READFLOAT(data, previewStyle.scale, ERR_INVALID_VALUE);
54    return RET_OK;
55}
56
57int32_t PreviewAnimationPacker::Marshalling(const PreviewAnimation &previewAnimation, Parcel &data)
58{
59    WRITEINT32(data, previewAnimation.duration, ERR_INVALID_VALUE);
60    WRITESTRING(data, previewAnimation.curveName, ERR_INVALID_VALUE);
61    WRITEFLOATVECTOR(data, previewAnimation.curve, ERR_INVALID_VALUE);
62    return RET_OK;
63}
64
65int32_t PreviewAnimationPacker::UnMarshalling(Parcel &data, PreviewAnimation &previewAnimation)
66{
67    READINT32(data, previewAnimation.duration, ERR_INVALID_VALUE);
68    if (previewAnimation.duration <= 0) {
69        FI_HILOGE("Invalid paramater duration:%{public}d", previewAnimation.duration);
70        return ERR_INVALID_VALUE;
71    }
72    if (previewAnimation.duration > MAX_ANIMATION_DURATION_MS) {
73        FI_HILOGW("Duration:%{public}d too long, use default value", previewAnimation.duration);
74        previewAnimation.duration = MAX_ANIMATION_DURATION_MS;
75    }
76    READSTRING(data, previewAnimation.curveName, ERR_INVALID_VALUE);
77    READFLOATVECTOR(data, previewAnimation.curve, ERR_INVALID_VALUE);
78    return RET_OK;
79}
80
81} // namespace DeviceStatus
82} // namespace Msdp
83} // namespace OHOS