1/* 2 * Copyright (c) 2021 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#include "base/utils/resource_configuration.h" 17 18#include "base/utils/utils.h" 19 20namespace OHOS::Ace { 21namespace { 22 23const std::string CONFIGURATION_COLOR_MODE = "colorMode"; 24const std::string COLOR_MODE_LIGHT = "light"; 25const std::string COLOR_MODE_DARK = "dark"; 26const std::string CONFIGURATION_FONT_RATIO = "fontScale"; 27 28void AddFlag(uint32_t& flags, uint32_t flag) 29{ 30 flags |= flag; 31} 32 33} // namespace 34 35bool ResourceConfiguration::ParseJsonColorMode(const std::unique_ptr<JsonValue>& jsonConfig, uint32_t& updateFlags) 36{ 37 if (!jsonConfig->Contains(CONFIGURATION_COLOR_MODE)) { 38 return false; 39 } 40 auto jsonColorMode = jsonConfig->GetValue(CONFIGURATION_COLOR_MODE); 41 if (!jsonColorMode->IsString()) { 42 return false; 43 } 44 auto strColorMode = jsonColorMode->GetString(); 45 if (strColorMode != COLOR_MODE_LIGHT && strColorMode != COLOR_MODE_DARK) { 46 return false; 47 } 48 ColorMode colorMode = ColorMode::LIGHT; 49 if (strColorMode == COLOR_MODE_DARK) { 50 colorMode = ColorMode::DARK; 51 } 52 if (colorMode != colorMode_) { 53 colorMode_ = colorMode; 54 AddFlag(updateFlags, ResourceConfiguration::COLOR_MODE_UPDATED_FLAG); 55 } 56 return true; 57} 58 59bool ResourceConfiguration::ParseJsonFontRatio(const std::unique_ptr<JsonValue>& jsonConfig, uint32_t& updateFlags) 60{ 61 if (!jsonConfig->Contains(CONFIGURATION_FONT_RATIO)) { 62 return false; 63 } 64 auto jsonFontRatio = jsonConfig->GetValue(CONFIGURATION_FONT_RATIO); 65 if (!jsonFontRatio->IsNumber()) { 66 return false; 67 } 68 double fontRatio = jsonFontRatio->GetDouble(); 69 if (!NearEqual(fontRatio, fontRatio_)) { 70 fontRatio_ = fontRatio; 71 AddFlag(updateFlags, ResourceConfiguration::FONT_RATIO_UPDATED_FLAG); 72 } 73 return true; 74} 75 76bool ResourceConfiguration::UpdateFromJsonString(const std::string jsonStr, uint32_t& updateFlags) 77{ 78 updateFlags = 0; 79 std::unique_ptr<JsonValue> jsonConfig = JsonUtil::ParseJsonString(jsonStr); 80 81 CHECK_NULL_RETURN(jsonConfig, false); 82 ParseJsonColorMode(jsonConfig, updateFlags); 83 ParseJsonFontRatio(jsonConfig, updateFlags); 84 return true; 85} 86 87} // namespace OHOS::Ace 88