• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 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 "adapter/preview/osal/resource_adapter_impl_standard.h"
17 
18 #include "adapter/ohos/osal/resource_theme_style.h"
19 #include "adapter/preview/entrance/ace_application_info.h"
20 #include "adapter/preview/osal/resource_convertor.h"
21 #include "base/log/log.h"
22 #include "core/common/container.h"
23 #include "core/components/theme/theme_attributes.h"
24 
25 namespace OHOS::Ace {
26 
27 namespace {
28 #ifdef WINDOWS_PLATFORM
29 constexpr char DELIMITER[] = "\\";
30 #else
31 constexpr char DELIMITER[] = "/";
32 #endif
33 
34 constexpr uint32_t OHOS_THEME_ID = 125829872; // ohos_theme
35 
CheckThemeId(int32_t & themeId)36 void CheckThemeId(int32_t& themeId)
37 {
38     if (themeId >= 0) {
39         return;
40     }
41     themeId = OHOS_THEME_ID;
42 }
43 
44 const char* PATTERN_MAP[] = {
45     THEME_PATTERN_BUTTON,
46     THEME_PATTERN_CHECKBOX,
47     THEME_PATTERN_DATA_PANEL,
48     THEME_PATTERN_RADIO,
49     THEME_PATTERN_SWIPER,
50     THEME_PATTERN_SWITCH,
51     THEME_PATTERN_TOOLBAR,
52     THEME_PATTERN_TOGGLE,
53     THEME_PATTERN_TOAST,
54     THEME_PATTERN_DIALOG,
55     THEME_PATTERN_DRAG_BAR,
56     THEME_PATTERN_CLOSE_ICON,
57     THEME_PATTERN_SEMI_MODAL,
58     // append
59     THEME_PATTERN_BADGE,
60     THEME_PATTERN_CALENDAR,
61     THEME_PATTERN_CAMERA,
62     THEME_PATTERN_CARD,
63     THEME_PATTERN_CLOCK,
64     THEME_PATTERN_COUNTER,
65     THEME_PATTERN_DIVIDER,
66     THEME_PATTERN_FOCUS_ANIMATION,
67     THEME_PATTERN_GRID,
68     THEME_PATTERN_IMAGE,
69     THEME_PATTERN_LIST,
70     THEME_PATTERN_LIST_ITEM,
71     THEME_PATTERN_ARC_LIST,
72     THEME_PATTERN_ARC_LIST_ITEM,
73     THEME_PATTERN_MARQUEE,
74     THEME_PATTERN_NAVIGATION_BAR,
75     THEME_PATTERN_PICKER,
76     THEME_PATTERN_PIECE,
77     THEME_PATTERN_POPUP,
78     THEME_PATTERN_PROGRESS,
79     THEME_PATTERN_QRCODE,
80     THEME_PATTERN_RATING,
81     THEME_PATTERN_REFRESH,
82     THEME_PATTERN_SCROLL_BAR,
83     THEME_PATTERN_SEARCH,
84     THEME_PATTERN_SELECT,
85     THEME_PATTERN_SLIDER,
86     THEME_PATTERN_STEPPER,
87     THEME_PATTERN_TAB,
88     THEME_PATTERN_TEXT,
89     THEME_PATTERN_TEXTFIELD,
90     THEME_PATTERN_TEXT_OVERLAY,
91     THEME_PATTERN_VIDEO,
92     THEME_PATTERN_ICON,
93     THEME_PATTERN_INDEXER,
94     THEME_PATTERN_APP_BAR,
95     THEME_PATTERN_SECURITY_COMPONENT,
96     THEME_PATTERN_SIDE_BAR,
97     THEME_PATTERN_PATTERN_LOCK,
98     THEME_PATTERN_HYPERLINK,
99     THEME_PATTERN_GAUGE,
100     THEME_PATTERN_SHEET,
101     THEME_BLUR_STYLE_COMMON,
102     THEME_PATTERN_SHADOW,
103     THEME_PATTERN_RICH_EDITOR,
104     THEME_PATTERN_CONTAINER_MODAL,
105     THEME_PATTERN_APP,
106     THEME_PATTERN_LINEAR_INDICATOR
107 };
108 } // namespace
109 
Create()110 RefPtr<ResourceAdapter> ResourceAdapter::Create()
111 {
112     return AceType::MakeRefPtr<ResourceAdapterImpl>();
113 }
114 
ParseDimensionUnit(const std::string & unit)115 DimensionUnit ParseDimensionUnit(const std::string& unit)
116 {
117     if (unit == "px") {
118         return DimensionUnit::PX;
119     } else if (unit == "fp") {
120         return DimensionUnit::FP;
121     } else if (unit == "lpx") {
122         return DimensionUnit::LPX;
123     } else if (unit == "%") {
124         return DimensionUnit::PERCENT;
125     } else {
126         return DimensionUnit::VP;
127     }
128 }
129 
ResourceAdapterImpl(std::shared_ptr<Global::Resource::ResourceManager> resourceManager)130 ResourceAdapterImpl::ResourceAdapterImpl(std::shared_ptr<Global::Resource::ResourceManager> resourceManager)
131 {
132     resourceManager_ = resourceManager;
133 }
134 
Init(const ResourceInfo & resourceInfo)135 void ResourceAdapterImpl::Init(const ResourceInfo& resourceInfo)
136 {
137     std::string appResPath = resourceInfo.GetPackagePath();
138     std::string sysResPath = resourceInfo.GetSystemPackagePath();
139     std::string hmsResPath = resourceInfo.GetHmsPackagePath();
140     auto resConfig = ConvertConfigToGlobal(resourceInfo.GetResourceConfiguration());
141     std::shared_ptr<Global::Resource::ResourceManager> newResMgr(Global::Resource::CreateResourceManager());
142 
143     std::string appResIndexPath = appResPath + DELIMITER + "resources.index";
144     auto appResRet = newResMgr->AddResource(appResIndexPath.c_str());
145     std::string sysResIndexPath = sysResPath + DELIMITER + "resources.index";
146     auto sysResRet = newResMgr->AddResource(sysResIndexPath.c_str());
147     if (!hmsResPath.empty()) {
148         std::string hmsResIndexPath =
149             hmsResPath + DELIMITER + "resources" + DELIMITER + "resources" + DELIMITER + "resources.index";
150         newResMgr->AddResource(hmsResIndexPath.c_str());
151     }
152 
153     if (resConfig != nullptr) {
154         auto configRet = newResMgr->UpdateResConfig(*resConfig);
155         LOGI("AddAppRes result=%{public}d, AddSysRes result=%{public}d,  UpdateResConfig result=%{public}d, "
156              "ori=%{public}d, dpi=%{public}f, device=%{public}d",
157             appResRet, sysResRet, configRet, resConfig->GetDirection(), resConfig->GetScreenDensity(),
158             resConfig->GetDeviceType());
159     }
160 
161     Platform::AceApplicationInfoImpl::GetInstance().SetResourceManager(newResMgr);
162     resourceManager_ = newResMgr;
163     packagePathStr_ = appResPath;
164 }
165 
CreateNewResourceAdapter(const std::string & bundleName,const std::string & moduleName)166 RefPtr<ResourceAdapter> ResourceAdapter::CreateNewResourceAdapter(
167     const std::string& bundleName, const std::string& moduleName)
168 {
169     TAG_LOGW(AceLogTag::ACE_RESOURCE,
170         "Cannot preview the component from the %{public}s module, because it contains a resource reference. Preview it "
171         "in the %{public}s module instead.",
172         moduleName.c_str(), moduleName.c_str());
173     return nullptr;
174 }
175 
UpdateConfig(const ResourceConfiguration & config,bool themeFlag)176 void ResourceAdapterImpl::UpdateConfig(const ResourceConfiguration& config, bool themeFlag)
177 {
178     auto resConfig = ConvertConfigToGlobal(config);
179     LOGI("UpdateConfig ori=%{public}d, dpi=%{public}f, device=%{public}d", resConfig->GetDirection(),
180         resConfig->GetScreenDensity(), resConfig->GetDeviceType());
181     if (resConfig != nullptr) {
182         resourceManager_->UpdateResConfig(*resConfig);
183     }
184 }
185 
GetTheme(int32_t themeId)186 RefPtr<ThemeStyle> ResourceAdapterImpl::GetTheme(int32_t themeId)
187 {
188     CheckThemeId(themeId);
189     auto theme = AceType::MakeRefPtr<ResourceThemeStyle>(AceType::Claim(this));
190     constexpr char OHFlag[] = "ohos_"; // fit with resource/base/theme.json and pattern.json
191     if (resourceManager_) {
192         auto ret = resourceManager_->GetThemeById(themeId, theme->rawAttrs_);
193         for (size_t i = 0; i < sizeof(PATTERN_MAP) / sizeof(PATTERN_MAP[0]); i++) {
194             ResourceThemeStyle::RawAttrMap attrMap;
195             std::string patternTag = PATTERN_MAP[i];
196             std::string patternName = std::string(OHFlag) + PATTERN_MAP[i];
197             ret = resourceManager_->GetPatternByName(patternName.c_str(), attrMap);
198             if (attrMap.empty()) {
199                 continue;
200             }
201             theme->patternAttrs_[patternTag] = attrMap;
202         }
203         LOGI("themeId=%{public}d, ret=%{public}d, attr size=%{public}zu, pattern size=%{public}zu", themeId, ret,
204             theme->rawAttrs_.size(), theme->patternAttrs_.size());
205     }
206 
207     if (theme->patternAttrs_.empty() && theme->rawAttrs_.empty()) {
208         LOGW("theme resource get failed, use default theme config.");
209         return nullptr;
210     }
211 
212     theme->ParseContent();
213     theme->patternAttrs_.clear();
214     return theme;
215 };
216 
GetColor(uint32_t resId)217 Color ResourceAdapterImpl::GetColor(uint32_t resId)
218 {
219     uint32_t result = 0;
220     if (resourceManager_) {
221         auto state = resourceManager_->GetColorById(resId, result);
222         if (state != Global::Resource::SUCCESS) {
223             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetColor error, id=%{public}u", resId);
224         }
225     }
226     return Color(result);
227 }
228 
GetColorByName(const std::string & resName)229 Color ResourceAdapterImpl::GetColorByName(const std::string& resName)
230 {
231     uint32_t result = 0;
232     if (resourceManager_) {
233         auto index = resName.find_last_of('.');
234         auto actualResName = resName.substr(index + 1, resName.length() - index - 1);
235         auto state = resourceManager_->GetColorByName(actualResName.c_str(), result);
236         if (state != Global::Resource::SUCCESS) {
237             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetColorByName error, name=%{public}s", resName.c_str());
238         }
239     }
240     return Color(result);
241 }
242 
GetDimension(uint32_t resId)243 Dimension ResourceAdapterImpl::GetDimension(uint32_t resId)
244 {
245     float dimensionFloat = 0.0f;
246     std::string unit = "";
247     if (resourceManager_) {
248         auto state = resourceManager_->GetFloatById(resId, dimensionFloat, unit);
249         if (state != Global::Resource::SUCCESS) {
250             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetDimension error, id=%{public}u", resId);
251         }
252     }
253     return Dimension(static_cast<double>(dimensionFloat), ParseDimensionUnit(unit));
254 }
255 
GetDimensionByName(const std::string & resName)256 Dimension ResourceAdapterImpl::GetDimensionByName(const std::string& resName)
257 {
258     float dimensionFloat = 0.0f;
259     std::string unit = "";
260     if (resourceManager_) {
261         auto index = resName.find_last_of('.');
262         auto actualResName = resName.substr(index + 1, resName.length() - index - 1);
263         auto state = resourceManager_->GetFloatByName(actualResName.c_str(), dimensionFloat, unit);
264         if (state != Global::Resource::SUCCESS) {
265             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetDimensionByName error, name=%{public}s", resName.c_str());
266         }
267     }
268     return Dimension(static_cast<double>(dimensionFloat), ParseDimensionUnit(unit));
269 }
270 
GetString(uint32_t resId)271 std::string ResourceAdapterImpl::GetString(uint32_t resId)
272 {
273     std::string strResult = "";
274     if (resourceManager_) {
275         auto state = resourceManager_->GetStringById(resId, strResult);
276         if (state != Global::Resource::SUCCESS) {
277             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetString error, id=%{public}u", resId);
278         }
279     }
280     return strResult;
281 }
282 
GetStringByName(const std::string & resName)283 std::string ResourceAdapterImpl::GetStringByName(const std::string& resName)
284 {
285     std::string strResult = "";
286     auto actualResName = GetActualResourceName(resName);
287     if (resourceManager_) {
288         auto state = resourceManager_->GetStringByName(actualResName.c_str(), strResult);
289         if (state != Global::Resource::SUCCESS) {
290             TAG_LOGW(AceLogTag::ACE_RESOURCE, "Get string by name error, resName=%{public}s, errorCode=%{public}d",
291                 resName.c_str(), state);
292         }
293     }
294     return strResult;
295 }
296 
GetPluralString(uint32_t resId,int quantity)297 std::string ResourceAdapterImpl::GetPluralString(uint32_t resId, int quantity)
298 {
299     std::string strResult = "";
300     if (resourceManager_) {
301         auto state = resourceManager_->GetPluralStringById(resId, quantity, strResult);
302         if (state != Global::Resource::SUCCESS) {
303             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetPluralString error, id=%{public}u", resId);
304         }
305     }
306     return strResult;
307 }
308 
GetPluralStringByName(const std::string & resName,int quantity)309 std::string ResourceAdapterImpl::GetPluralStringByName(const std::string& resName, int quantity)
310 {
311     std::string strResult = "";
312     auto actualResName = GetActualResourceName(resName);
313     if (resourceManager_) {
314         auto state = resourceManager_->GetPluralStringByName(actualResName.c_str(), quantity, strResult);
315         if (state != Global::Resource::SUCCESS) {
316             TAG_LOGW(AceLogTag::ACE_RESOURCE,
317                 "Get plural string by name error, resName=%{public}s, errorCode=%{public}d", resName.c_str(), state);
318         }
319     }
320     return strResult;
321 }
322 
GetStringArray(uint32_t resId) const323 std::vector<std::string> ResourceAdapterImpl::GetStringArray(uint32_t resId) const
324 {
325     std::vector<std::string> strResults;
326     if (resourceManager_) {
327         auto state = resourceManager_->GetStringArrayById(resId, strResults);
328         if (state != Global::Resource::SUCCESS) {
329             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetStringArray error, id=%{public}u", resId);
330         }
331     }
332     return strResults;
333 }
334 
GetStringArrayByName(const std::string & resName) const335 std::vector<std::string> ResourceAdapterImpl::GetStringArrayByName(const std::string& resName) const
336 {
337     std::vector<std::string> strResults;
338     auto actualResName = GetActualResourceName(resName);
339     if (resourceManager_) {
340         auto state = resourceManager_->GetStringArrayByName(actualResName.c_str(), strResults);
341         if (state != Global::Resource::SUCCESS) {
342             TAG_LOGW(AceLogTag::ACE_RESOURCE, "Get stringArray by name error, resName=%{public}s, errorCode=%{public}d",
343                 resName.c_str(), state);
344         }
345     }
346     return strResults;
347 }
348 
GetDouble(uint32_t resId)349 double ResourceAdapterImpl::GetDouble(uint32_t resId)
350 {
351     float result = 0.0f;
352     if (resourceManager_) {
353         auto state = resourceManager_->GetFloatById(resId, result);
354         if (state != Global::Resource::SUCCESS) {
355             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetDouble error, id=%{public}u", resId);
356         }
357     }
358     return static_cast<double>(result);
359 }
360 
GetDoubleByName(const std::string & resName)361 double ResourceAdapterImpl::GetDoubleByName(const std::string& resName)
362 {
363     float result = 0.0f;
364     auto actualResName = GetActualResourceName(resName);
365     if (resourceManager_) {
366         auto state = resourceManager_->GetFloatByName(actualResName.c_str(), result);
367         if (state != Global::Resource::SUCCESS) {
368             TAG_LOGW(AceLogTag::ACE_RESOURCE, "Get double by name error, resName=%{public}s, errorCode=%{public}d",
369                 resName.c_str(), state);
370         }
371     }
372     return static_cast<double>(result);
373 }
374 
GetInt(uint32_t resId)375 int32_t ResourceAdapterImpl::GetInt(uint32_t resId)
376 {
377     int32_t result = 0;
378     if (resourceManager_) {
379         auto state = resourceManager_->GetIntegerById(resId, result);
380         if (state != Global::Resource::SUCCESS) {
381             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetInt error, id=%{public}u", resId);
382         }
383     }
384     return result;
385 }
386 
GetIntByName(const std::string & resName)387 int32_t ResourceAdapterImpl::GetIntByName(const std::string& resName)
388 {
389     int32_t result = 0;
390     auto actualResName = GetActualResourceName(resName);
391     if (resourceManager_) {
392         auto state = resourceManager_->GetIntegerByName(actualResName.c_str(), result);
393         if (state != Global::Resource::SUCCESS) {
394             TAG_LOGW(AceLogTag::ACE_RESOURCE, "Get int by name error, resName=%{public}s, errorCode=%{public}d",
395                 resName.c_str(), state);
396         }
397     }
398     return result;
399 }
400 
GetIntArray(uint32_t resId) const401 std::vector<uint32_t> ResourceAdapterImpl::GetIntArray(uint32_t resId) const
402 {
403     std::vector<int> intVectorResult;
404     if (resourceManager_) {
405         auto state = resourceManager_->GetIntArrayById(resId, intVectorResult);
406         if (state != Global::Resource::SUCCESS) {
407             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetIntArray error, id=%{public}u", resId);
408         }
409     }
410     std::vector<uint32_t> result(intVectorResult.size());
411     std::transform(
412         intVectorResult.begin(), intVectorResult.end(), result.begin(), [](int x) { return static_cast<uint32_t>(x); });
413     return result;
414 }
415 
GetIntArrayByName(const std::string & resName) const416 std::vector<uint32_t> ResourceAdapterImpl::GetIntArrayByName(const std::string& resName) const
417 {
418     std::vector<int> intVectorResult;
419     auto actualResName = GetActualResourceName(resName);
420     if (resourceManager_) {
421         auto state = resourceManager_->GetIntArrayByName(actualResName.c_str(), intVectorResult);
422         if (state != Global::Resource::SUCCESS) {
423             TAG_LOGW(AceLogTag::ACE_RESOURCE, "Get intArray by name error, resName=%{public}s, errorCode=%{public}d",
424                 resName.c_str(), state);
425         }
426     }
427 
428     std::vector<uint32_t> result(intVectorResult.size());
429     std::transform(
430         intVectorResult.begin(), intVectorResult.end(), result.begin(), [](int x) { return static_cast<uint32_t>(x); });
431     return result;
432 }
433 
GetBoolean(uint32_t resId) const434 bool ResourceAdapterImpl::GetBoolean(uint32_t resId) const
435 {
436     bool result = false;
437     if (resourceManager_) {
438         auto state = resourceManager_->GetBooleanById(resId, result);
439         if (state != Global::Resource::SUCCESS) {
440             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetBoolean error, id=%{public}u", resId);
441         }
442     }
443     return result;
444 }
445 
GetBooleanByName(const std::string & resName) const446 bool ResourceAdapterImpl::GetBooleanByName(const std::string& resName) const
447 {
448     bool result = false;
449     auto actualResName = GetActualResourceName(resName);
450     if (resourceManager_) {
451         auto state = resourceManager_->GetBooleanByName(actualResName.c_str(), result);
452         if (state != Global::Resource::SUCCESS) {
453             TAG_LOGW(AceLogTag::ACE_RESOURCE, "Get boolean by name error, resName=%{public}s, errorCode=%{public}d",
454                 resName.c_str(), state);
455         }
456     }
457     return result;
458 }
459 
GetMediaPath(uint32_t resId)460 std::string ResourceAdapterImpl::GetMediaPath(uint32_t resId)
461 {
462     std::string mediaPath = "";
463     if (resourceManager_) {
464         auto state = resourceManager_->GetMediaById(resId, mediaPath);
465         if (state != Global::Resource::SUCCESS) {
466             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetMediaPath error, id=%{public}u", resId);
467             return "";
468         }
469         // The Media file directory starts with file// on the PC Preview
470         return "file://" + mediaPath;
471     }
472     return "";
473 }
474 
GetMediaPathByName(const std::string & resName)475 std::string ResourceAdapterImpl::GetMediaPathByName(const std::string& resName)
476 {
477     std::string mediaPath = "";
478     auto actualResName = GetActualResourceName(resName);
479     if (resourceManager_) {
480         auto state = resourceManager_->GetMediaByName(actualResName.c_str(), mediaPath);
481         if (state != Global::Resource::SUCCESS) {
482             TAG_LOGW(AceLogTag::ACE_RESOURCE, "GetMediaPathByName error, resName=%{public}s, errorCode=%{public}u",
483                 resName.c_str(), state);
484             return "";
485         }
486         // The Media file directory starts with file// on the PC Preview
487         return "file://" + mediaPath;
488     }
489     return "";
490 }
491 
GetRawfile(const std::string & fileName)492 std::string ResourceAdapterImpl::GetRawfile(const std::string& fileName)
493 {
494     // The rawfile file directory starts with file// on the PC Preview
495     return "file://" + packagePathStr_ + "/resources/rawfile/" + fileName;
496 }
497 
GetRawFileData(const std::string & rawFile,size_t & len,std::unique_ptr<uint8_t[]> & dest)498 bool ResourceAdapterImpl::GetRawFileData(const std::string& rawFile, size_t& len, std::unique_ptr<uint8_t[]>& dest)
499 {
500     return false;
501 }
502 
GetMediaData(uint32_t resId,size_t & len,std::unique_ptr<uint8_t[]> & dest)503 bool ResourceAdapterImpl::GetMediaData(uint32_t resId, size_t& len, std::unique_ptr<uint8_t[]>& dest)
504 {
505     return false;
506 }
507 
GetMediaData(const std::string & resName,size_t & len,std::unique_ptr<uint8_t[]> & dest)508 bool ResourceAdapterImpl::GetMediaData(const std::string& resName, size_t& len, std::unique_ptr<uint8_t[]>& dest)
509 {
510     return false;
511 }
512 
UpdateResourceManager(const std::string & bundleName,const std::string & moduleName)513 void ResourceAdapterImpl::UpdateResourceManager(const std::string& bundleName, const std::string& moduleName)
514 {
515     return;
516 }
517 
GetActualResourceName(const std::string & resName)518 std::string ResourceAdapterImpl::GetActualResourceName(const std::string& resName)
519 {
520     auto index = resName.find_last_of('.');
521     if (index == std::string::npos) {
522         LOGE("GetActualResourceName error, incorrect resName format.");
523         return {};
524     }
525     return resName.substr(index + 1, resName.length() - index - 1);
526 }
527 
GetSymbolById(uint32_t resId) const528 uint32_t ResourceAdapterImpl::GetSymbolById(uint32_t resId) const
529 {
530     uint32_t result = 0;
531     if (resourceManager_) {
532         resourceManager_->GetSymbolById(resId, result);
533     }
534     return result;
535 }
536 
GetSymbolByName(const char * resName) const537 uint32_t ResourceAdapterImpl::GetSymbolByName(const char* resName) const
538 {
539     uint32_t result = 0;
540     auto actualResName = GetActualResourceName(resName);
541     if (resourceManager_) {
542         auto state = resourceManager_->GetSymbolByName(actualResName.c_str(), result);
543         if (state != Global::Resource::SUCCESS) {
544             TAG_LOGW(AceLogTag::ACE_RESOURCE, "Get symbol by name error, name=%{public}s, errorCode=%{public}d",
545                 resName, state);
546         }
547     }
548     return result;
549 }
550 
GetResourceColorMode() const551 ColorMode ResourceAdapterImpl::GetResourceColorMode() const
552 {
553     CHECK_NULL_RETURN(resourceManager_, ColorMode::LIGHT);
554     std::unique_ptr<Global::Resource::ResConfig> resConfig(Global::Resource::CreateResConfig());
555     resourceManager_->GetResConfig(*resConfig);
556     return resConfig->GetColorMode() == OHOS::Global::Resource::ColorMode::DARK ? ColorMode::DARK : ColorMode::LIGHT;
557 }
558 
GetOverrideResourceAdapter(const ResourceConfiguration & config,const ConfigurationChange & configurationChange)559 RefPtr<ResourceAdapter> ResourceAdapterImpl::GetOverrideResourceAdapter(
560     const ResourceConfiguration& config, const ConfigurationChange& configurationChange)
561 {
562     std::shared_ptr<Global::Resource::ResConfig> overrideResConfig(Global::Resource::CreateResConfig());
563     resourceManager_->GetOverrideResConfig(*overrideResConfig);
564     if (configurationChange.colorModeUpdate) {
565         overrideResConfig->SetColorMode(ConvertColorModeToGlobal(config.GetColorMode()));
566     }
567     if (configurationChange.directionUpdate) {
568         overrideResConfig->SetDirection(ConvertDirectionToGlobal(config.GetOrientation()));
569     }
570     if (configurationChange.dpiUpdate) {
571         overrideResConfig->SetScreenDensity(config.GetDensity());
572     }
573     auto overrideResMgr = resourceManager_->GetOverrideResourceManager(overrideResConfig);
574     return AceType::MakeRefPtr<ResourceAdapterImpl>(overrideResMgr);
575 }
576 } // namespace OHOS::Ace
577