122736c2fSopenharmony_ci/*
222736c2fSopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd.
322736c2fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
422736c2fSopenharmony_ci * you may not use this file except in compliance with the License.
522736c2fSopenharmony_ci * You may obtain a copy of the License at
622736c2fSopenharmony_ci *
722736c2fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
822736c2fSopenharmony_ci *
922736c2fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1022736c2fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1122736c2fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1222736c2fSopenharmony_ci * See the License for the specific language governing permissions and
1322736c2fSopenharmony_ci * limitations under the License.
1422736c2fSopenharmony_ci */
1522736c2fSopenharmony_ci
1622736c2fSopenharmony_ci#ifndef SERVICES_INCLUDE_SYS_CFG_PARSE_H
1722736c2fSopenharmony_ci#define SERVICES_INCLUDE_SYS_CFG_PARSE_H
1822736c2fSopenharmony_ci
1922736c2fSopenharmony_ci#include <map>
2022736c2fSopenharmony_ci#include <string>
2122736c2fSopenharmony_ci#include <utility>
2222736c2fSopenharmony_ci#include <vector>
2322736c2fSopenharmony_ci
2422736c2fSopenharmony_ci#include "input_method_utils.h"
2522736c2fSopenharmony_ci#include "serializable.h"
2622736c2fSopenharmony_cinamespace OHOS {
2722736c2fSopenharmony_cinamespace MiscServices {
2822736c2fSopenharmony_cistruct SystemConfig : public Serializable {
2922736c2fSopenharmony_ci    std::string systemInputMethodConfigAbility;
3022736c2fSopenharmony_ci    std::string defaultInputMethod;
3122736c2fSopenharmony_ci    bool enableInputMethodFeature = false;
3222736c2fSopenharmony_ci    bool enableFullExperienceFeature = false;
3322736c2fSopenharmony_ci    bool Unmarshal(cJSON *node) override
3422736c2fSopenharmony_ci    {
3522736c2fSopenharmony_ci        GetValue(node, GET_NAME(systemInputMethodConfigAbility), systemInputMethodConfigAbility);
3622736c2fSopenharmony_ci        GetValue(node, GET_NAME(defaultInputMethod), defaultInputMethod);
3722736c2fSopenharmony_ci        GetValue(node, GET_NAME(enableInputMethodFeature), enableInputMethodFeature);
3822736c2fSopenharmony_ci        GetValue(node, GET_NAME(enableFullExperienceFeature), enableFullExperienceFeature);
3922736c2fSopenharmony_ci        return true;
4022736c2fSopenharmony_ci    }
4122736c2fSopenharmony_ci};
4222736c2fSopenharmony_cistruct ImeSystemConfig : public Serializable {
4322736c2fSopenharmony_ci    SystemConfig systemConfig;
4422736c2fSopenharmony_ci    bool Unmarshal(cJSON *node) override
4522736c2fSopenharmony_ci    {
4622736c2fSopenharmony_ci        return GetValue(node, GET_NAME(systemConfig), systemConfig);
4722736c2fSopenharmony_ci    }
4822736c2fSopenharmony_ci};
4922736c2fSopenharmony_ci
5022736c2fSopenharmony_cistruct InputTypeInfo : public Serializable {
5122736c2fSopenharmony_ci    InputType type{ InputType::NONE };
5222736c2fSopenharmony_ci    std::string bundleName;
5322736c2fSopenharmony_ci    std::string subName;
5422736c2fSopenharmony_ci    bool Unmarshal(cJSON *node) override
5522736c2fSopenharmony_ci    {
5622736c2fSopenharmony_ci        int32_t typeTemp = -1;
5722736c2fSopenharmony_ci        auto ret = GetValue(node, GET_NAME(inputType), typeTemp);
5822736c2fSopenharmony_ci        if (typeTemp <= static_cast<int32_t>(InputType::NONE) || typeTemp >= static_cast<int32_t>(InputType::END)) {
5922736c2fSopenharmony_ci            return false;
6022736c2fSopenharmony_ci        }
6122736c2fSopenharmony_ci        type = static_cast<InputType>(typeTemp);
6222736c2fSopenharmony_ci        ret = GetValue(node, GET_NAME(bundleName), bundleName) && ret;
6322736c2fSopenharmony_ci        ret = GetValue(node, GET_NAME(subtypeId), subName) && ret;
6422736c2fSopenharmony_ci        return ret;
6522736c2fSopenharmony_ci    }
6622736c2fSopenharmony_ci};
6722736c2fSopenharmony_cistruct InputTypeCfg : public Serializable {
6822736c2fSopenharmony_ci    std::vector<InputTypeInfo> inputType;
6922736c2fSopenharmony_ci    bool Unmarshal(cJSON *node) override
7022736c2fSopenharmony_ci    {
7122736c2fSopenharmony_ci        return GetValue(node, GET_NAME(supportedInputTypeList), inputType);
7222736c2fSopenharmony_ci    }
7322736c2fSopenharmony_ci};
7422736c2fSopenharmony_ci
7522736c2fSopenharmony_cistruct SysPanelAdjust : public Serializable {
7622736c2fSopenharmony_ci    std::vector<std::string> style;
7722736c2fSopenharmony_ci    int32_t top = 0;
7822736c2fSopenharmony_ci    int32_t left = 0;
7922736c2fSopenharmony_ci    int32_t right = 0;
8022736c2fSopenharmony_ci    int32_t bottom = 0;
8122736c2fSopenharmony_ci    bool Unmarshal(cJSON *node) override
8222736c2fSopenharmony_ci    {
8322736c2fSopenharmony_ci        auto ret = GetValue(node, GET_NAME(style), style);
8422736c2fSopenharmony_ci        ret = GetValue(node, GET_NAME(top), top) && ret;
8522736c2fSopenharmony_ci        ret = GetValue(node, GET_NAME(left), left) && ret;
8622736c2fSopenharmony_ci        ret = GetValue(node, GET_NAME(right), right) && ret;
8722736c2fSopenharmony_ci        ret = GetValue(node, GET_NAME(bottom), bottom) && ret;
8822736c2fSopenharmony_ci        return ret;
8922736c2fSopenharmony_ci    }
9022736c2fSopenharmony_ci};
9122736c2fSopenharmony_ci
9222736c2fSopenharmony_cistruct SysPanelAdjustCfg : public Serializable {
9322736c2fSopenharmony_ci    std::vector<SysPanelAdjust> panelAdjust;
9422736c2fSopenharmony_ci    bool Unmarshal(cJSON *node) override
9522736c2fSopenharmony_ci    {
9622736c2fSopenharmony_ci        return GetValue(node, GET_NAME(sysPanelAdjust), panelAdjust);
9722736c2fSopenharmony_ci    }
9822736c2fSopenharmony_ci};
9922736c2fSopenharmony_ci
10022736c2fSopenharmony_cistruct DefaultFullImeInfo : public Serializable {
10122736c2fSopenharmony_ci    std::string appId;
10222736c2fSopenharmony_ci    std::string expirationTime;
10322736c2fSopenharmony_ci    uint32_t expirationVersionCode{ 0 };
10422736c2fSopenharmony_ci    bool Unmarshal(cJSON *node) override
10522736c2fSopenharmony_ci    {
10622736c2fSopenharmony_ci        bool ret = GetValue(node, GET_NAME(appIdentifier), appId);
10722736c2fSopenharmony_ci        ret &= GetValue(node, GET_NAME(expirationTime), expirationTime);
10822736c2fSopenharmony_ci        GetValue(node, GET_NAME(expirationVersionCode), expirationVersionCode);
10922736c2fSopenharmony_ci        return ret;
11022736c2fSopenharmony_ci    }
11122736c2fSopenharmony_ci};
11222736c2fSopenharmony_ci
11322736c2fSopenharmony_cistruct DefaultFullImeCfg : Serializable {
11422736c2fSopenharmony_ci    std::vector<DefaultFullImeInfo> defaultFullImeList;
11522736c2fSopenharmony_ci    bool Unmarshal(cJSON *node) override
11622736c2fSopenharmony_ci    {
11722736c2fSopenharmony_ci        return GetValue(node, GET_NAME(defaultFullImeList), defaultFullImeList);
11822736c2fSopenharmony_ci    }
11922736c2fSopenharmony_ci};
12022736c2fSopenharmony_ci
12122736c2fSopenharmony_ciclass SysCfgParser {
12222736c2fSopenharmony_cipublic:
12322736c2fSopenharmony_ci    static bool ParseSystemConfig(SystemConfig &systemConfig);
12422736c2fSopenharmony_ci    static bool ParseInputType(std::vector<InputTypeInfo> &inputType);
12522736c2fSopenharmony_ci    static bool ParsePanelAdjust(std::vector<SysPanelAdjust> &sysPanelAdjust);
12622736c2fSopenharmony_ci    static bool ParseDefaultFullIme(std::vector<DefaultFullImeInfo> &defaultFullImeList);
12722736c2fSopenharmony_ci
12822736c2fSopenharmony_ciprivate:
12922736c2fSopenharmony_ci    static constexpr const char *SYS_CFG_FILE_PATH = "etc/inputmethod/inputmethod_framework_config.json";
13022736c2fSopenharmony_ci    static std::string GetSysCfgContent(const std::string &key);
13122736c2fSopenharmony_ci};
13222736c2fSopenharmony_ci} // namespace MiscServices
13322736c2fSopenharmony_ci} // namespace OHOS
13422736c2fSopenharmony_ci#endif // SERVICES_INCLUDE_SYS_CFG_PARSE_H
135