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