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