2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 #include <feedback/feedback.h>
20 #include <FBaseInteger.h>
21 #include <FBaseByteBuffer.h>
22 #include <FBaseColIMap.h>
23 #include <FBaseColArrayListT.h>
24 #include <FBaseSysLog.h>
25 #include <FIoDirectory.h>
27 #include <FGrpBitmap.h>
28 #include <FGrpDimension.h>
29 #include <FGrpColor.h>
30 #include <FMediaImageTypes.h>
31 #include <FUiCtrlAnimationFrame.h>
32 #include <FApp_AppInfo.h>
33 #include <FAppPkg_PackageManagerImpl.h>
34 #include <FIo_DirectoryImpl.h>
35 #include <FGrp_BitmapImpl.h>
36 #include <FGrp_CanvasImpl.h>
37 #include <FGrp_CoordinateSystem.h>
38 #include <FGrp_Screen.h>
39 #include <FMedia_ImageDecoder.h>
40 #include <FSys_SystemInfoImpl.h>
41 #include "FUi_ControlManager.h"
42 #include "FUi_CoordinateSystemUtils.h"
43 #include "FUi_ResourceManager.h"
44 #include "FUi_ResourceStringLoader.h"
45 #include "FUi_ResourceConfigLoader.h"
46 #include "FUi_ResourceConfigParser.h"
47 #include "FUi_ResourceMapContainer.h"
49 using namespace Tizen::App;
50 using namespace Tizen::App::Package;
51 using namespace Tizen::Base;
52 using namespace Tizen::Base::Collection;
53 using namespace Tizen::Io;
54 using namespace Tizen::Graphics;
55 using namespace Tizen::Media;
56 using namespace Tizen::Ui::Controls;
57 using namespace Tizen::Ui::_Resource;
61 const int DEFAULT_SCREEN_WIDTH = 720;
62 const int DEFAULT_SCREEN_HEIGHT = 1280;
64 const int DPI_FOR_XHIGH = 290;
65 const int DPI_FOR_HIGH = 200;
66 const int DPI_FOR_MIDDLE = 150;
67 const int DPI_FOR_LOW = 0;
69 template<typename T> class ResourceFallbackItemComparer
70 : public IComparerT <T>
73 ResourceFallbackItemComparer(void) {}
74 virtual ~ResourceFallbackItemComparer(void) {}
75 virtual result Compare(const T& obj1, const T& obj2, int& cmp) const
77 if (obj1->scaleFactor > obj2->scaleFactor)
82 else if (obj1->scaleFactor < obj2->scaleFactor)
95 MediaPixelFormat ConvertBitmapPixelFormatToMediaPixelFormat(BitmapPixelFormat format)
97 MediaPixelFormat out = MEDIA_PIXEL_FORMAT_NONE;
100 case BITMAP_PIXEL_FORMAT_RGB565:
101 out = MEDIA_PIXEL_FORMAT_RGB565LE;
103 case BITMAP_PIXEL_FORMAT_ARGB8888:
104 out = MEDIA_PIXEL_FORMAT_BGRA8888;
106 case BITMAP_PIXEL_FORMAT_R8G8B8A8:
107 out = MEDIA_PIXEL_FORMAT_RGBA8888;
115 feedback_pattern_e Convert_ResourceFeedbackPatternTofeedback_pattern_e(Tizen::Ui::_ResourceFeedbackPattern pattern)
117 feedback_pattern_e outPattern = FEEDBACK_PATTERN_TAP;
120 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_TAP:
121 outPattern = FEEDBACK_PATTERN_TAP;
123 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_SIP:
124 outPattern = FEEDBACK_PATTERN_SIP;
126 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_SIP_BACKSPACE:
127 outPattern = FEEDBACK_PATTERN_SIP_BACKSPACE;
129 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_MAX_CHARACTER:
130 outPattern = FEEDBACK_PATTERN_MAX_CHARACTER;
132 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY0:
133 outPattern = FEEDBACK_PATTERN_KEY0;
135 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY1:
136 outPattern = FEEDBACK_PATTERN_KEY1;
138 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY2:
139 outPattern = FEEDBACK_PATTERN_KEY2;
141 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY3:
142 outPattern = FEEDBACK_PATTERN_KEY3;
144 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY4:
145 outPattern = FEEDBACK_PATTERN_KEY4;
147 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY5:
148 outPattern = FEEDBACK_PATTERN_KEY5;
150 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY6:
151 outPattern = FEEDBACK_PATTERN_KEY6;
153 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY7:
154 outPattern = FEEDBACK_PATTERN_KEY7;
156 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY8:
157 outPattern = FEEDBACK_PATTERN_KEY8;
159 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY9:
160 outPattern = FEEDBACK_PATTERN_KEY9;
162 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY_STAR:
163 outPattern = FEEDBACK_PATTERN_KEY_STAR;
165 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_KEY_SHARP:
166 outPattern = FEEDBACK_PATTERN_KEY_SHARP;
168 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_HOLD:
169 outPattern = FEEDBACK_PATTERN_HOLD;
171 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_MULTI_TAP:
172 outPattern = FEEDBACK_PATTERN_MULTI_TAP;
174 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_HW_TAP:
175 outPattern = FEEDBACK_PATTERN_HW_TAP;
177 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_HW_HOLD:
178 outPattern = FEEDBACK_PATTERN_HW_HOLD;
180 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_MESSAGE:
181 outPattern = FEEDBACK_PATTERN_MESSAGE;
183 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_MESSAGE_ON_CALL:
184 outPattern = FEEDBACK_PATTERN_MESSAGE_ON_CALL;
186 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_EMAIL:
187 outPattern = FEEDBACK_PATTERN_EMAIL;
189 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_EMAIL_ON_CALL:
190 outPattern = FEEDBACK_PATTERN_EMAIL_ON_CALL;
192 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_WAKEUP:
193 outPattern = FEEDBACK_PATTERN_WAKEUP;
195 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_WAKEUP_ON_CALL:
196 outPattern = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
198 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_SCHEDULE:
199 outPattern = FEEDBACK_PATTERN_SCHEDULE;
201 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
202 outPattern = FEEDBACK_PATTERN_SCHEDULE_ON_CALL;
204 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_TIMER:
205 outPattern = FEEDBACK_PATTERN_TIMER;
207 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_TIMER_ON_CALL:
208 outPattern = FEEDBACK_PATTERN_TIMER_ON_CALL;
210 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_GENERAL:
211 outPattern = FEEDBACK_PATTERN_GENERAL;
213 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_GENERAL_ON_CALL:
214 outPattern = FEEDBACK_PATTERN_GENERAL_ON_CALL;
216 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_POWERON:
217 outPattern = FEEDBACK_PATTERN_POWERON;
219 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_POWEROFF:
220 outPattern = FEEDBACK_PATTERN_POWEROFF;
222 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_CHARGERCONN:
223 outPattern = FEEDBACK_PATTERN_CHARGERCONN;
225 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
226 outPattern = FEEDBACK_PATTERN_CHARGERCONN_ON_CALL;
228 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_FULLCHARGED:
229 outPattern = FEEDBACK_PATTERN_FULLCHARGED;
231 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_FULLCHARGED_ON_CALL:
232 outPattern = FEEDBACK_PATTERN_FULLCHARGED_ON_CALL;
234 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_LOWBATT:
235 outPattern = FEEDBACK_PATTERN_LOWBATT;
237 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_LOWBATT_ON_CALL:
238 outPattern = FEEDBACK_PATTERN_LOWBATT_ON_CALL;
240 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_LOCK:
241 outPattern = FEEDBACK_PATTERN_LOCK;
243 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_UNLOCK:
244 outPattern = FEEDBACK_PATTERN_UNLOCK;
246 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_CALLCONNECT:
247 outPattern = FEEDBACK_PATTERN_CALLCONNECT;
249 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_DISCALLCONNECT:
250 outPattern = FEEDBACK_PATTERN_DISCALLCONNECT;
252 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_MINUTEMINDER:
253 outPattern = FEEDBACK_PATTERN_MINUTEMINDER;
255 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_VIBRATION:
256 outPattern = FEEDBACK_PATTERN_VIBRATION;
258 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_SHUTTER:
259 outPattern = FEEDBACK_PATTERN_SHUTTER;
261 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_LIST_REORDER:
262 outPattern = FEEDBACK_PATTERN_LIST_REORDER;
264 case Tizen::Ui::_RESOURCE_FEEDBACK_PATTERN_SLIDER_SWEEP:
265 outPattern = FEEDBACK_PATTERN_SLIDER_SWEEP;
274 namespace Tizen { namespace Graphics
277 _CreateCoordinateTransformer(_ICoordinateSystemTransformer*& pTransformer, int srcResolution, _BaseScreenSize srcBaseScreenSize, Dimension destResolution, _BaseScreenSize destBaseScreenSize);
280 namespace Tizen { namespace Ui
283 int _SCREEN_HEIGHT_ = 0;
285 Color _GetDefaultBackgroundColor(void)
288 GET_COLOR_CONFIG(BASIC::background, color);
291 Color _GetDefaultForegroundColor(void)
294 GET_COLOR_CONFIG(BASIC::foreground, color);
298 _ResourceManager* pRsrcMgr = null;
301 _ResourceManager::GetInstance(void)
303 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
305 if (pRsrcMgr == null)
307 pthread_once(&onceBlock, CreateInstance);
308 pRsrcMgr->DoPostInitialization();
314 _ResourceManager::CreateInstance(void)
316 static _ResourceManager pManager;
317 pRsrcMgr = &pManager;
318 _CanvasImpl::SetThemeInfoCallback(_GetDefaultForegroundColor, _GetDefaultBackgroundColor);
321 _ResourceManager::_ResourceManager(void)
322 : __pStringLoader(null)
323 , __pTransformer(null)
324 , __appBasePortraitMode("")
325 , __appBaseLandscapeMode("")
326 , __targetPortraitMode("")
327 , __targetLandscapeMode("")
328 , __defaultPortraitMode(L"720x1280")
329 , __defaultLandscapeMode(L"1280x720")
332 , __appliedUserTheme(false)
333 , __initializeFeedback(false)
335 , __appBaseHeight(-1)
339 , __feedbackStatus(_RESOURCE_FEEDBACK_STATUS_INIT)
340 , __feedbackAcquireCount(0)
341 , __pFallbackList(null)
343 __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT] = null;
344 __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE] = null;
345 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT] = null;
346 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE] = null;
348 int appBaseWidth = DEFAULT_SCREEN_WIDTH;
349 int appBaseHeight = DEFAULT_SCREEN_HEIGHT;
351 result r = E_SUCCESS;
353 int appLogicalResolution = _CoordinateSystem::GetInstance()->GetLogicalResolutionInt();
355 if (_CreateCoordinateTransformer(__pTransformer,DEFAULT_SCREEN_WIDTH, _CoordinateSystem::GetInstance()->GetLogicalBaseScreenSize(),
356 Dimension(appLogicalResolution, appLogicalResolution), _CoordinateSystem::GetInstance()->GetPhysicalBaseScreenSize()) != E_SUCCESS)
361 r = Tizen::System::_SystemInfoImpl::GetSysInfo(L"http://tizen.org/feature/screen.dpi", __deviceDPI);
362 SysTryReturn(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] system error occurred");
364 switch(appLogicalResolution)
380 appBaseHeight = 1280;
383 r = Tizen::System::_SystemInfoImpl::GetSysInfo("http://tizen.org/feature/screen.width", appBaseWidth);
384 SysTryReturn(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] system error occurred");
385 r = Tizen::System::_SystemInfoImpl::GetSysInfo("http://tizen.org/feature/screen.height", appBaseHeight);
386 SysTryReturn(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] system error occurred");
389 __appBaseWidth = appBaseWidth;
390 __appBaseHeight = appBaseHeight;
392 __appBasePortraitMode.Append(appBaseWidth);
393 __appBasePortraitMode.Append(L"x");
394 __appBasePortraitMode.Append(appBaseHeight);
396 __appBaseLandscapeMode.Append(appBaseHeight);
397 __appBaseLandscapeMode.Append(L"x");
398 __appBaseLandscapeMode.Append(appBaseWidth);
401 r = Tizen::System::_SystemInfoImpl::GetSysInfo("http://tizen.org/feature/screen.width", _width);
402 SysTryReturn(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] system error occurred");
403 r = Tizen::System::_SystemInfoImpl::GetSysInfo("http://tizen.org/feature/screen.height", _height);
404 SysTryReturn(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] system error occurred");
406 __targetWidth = _width;
407 __targetHeight = _height;
408 __targetPortraitMode.Append(_width);
409 __targetPortraitMode.Append(L"x");
410 __targetPortraitMode.Append(_height);
412 __targetLandscapeMode.Append(_height);
413 __targetLandscapeMode.Append(L"x");
414 __targetLandscapeMode.Append(_width);
416 Dimension dim = _CoordinateSystemUtils::InverseTransform(Dimension(_Screen::GetWidth(), _Screen::GetHeight()));
417 __logicalWidth = dim.width;
418 __logicalHeight = dim.height;
419 LoadThemeInformation(__systemTheme, __userTheme);
421 __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT] = new (std::nothrow) MapContainer();
422 SysTryReturnVoidResult(NID_UI, __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT], E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
423 __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->SetResolution(__appBasePortraitMode);
424 if (!(InitializeTheme(*__pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT])))
428 __pStringLoader = new (std::nothrow) StringLoader();
429 SysTryReturnVoidResult(NID_UI, __pStringLoader, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
433 _ResourceManager::InitializeTheme(MapContainer& mapContainer)
436 String themeFile(L"");
437 mapContainer.CreateMap(RESOURCE_TYPE_SHAPE);
438 mapContainer.CreateMap(RESOURCE_TYPE_FIXED_VALUE);
439 mapContainer.CreateMap(RESOURCE_TYPE_DIMENSION);
440 mapContainer.CreateMap(RESOURCE_TYPE_IMAGE);
441 mapContainer.CreateMap(RESOURCE_TYPE_COLOR);
442 mapContainer.CreateMap(RESOURCE_TYPE_ANIMATION);
443 mapContainer.SetResolution(__appBasePortraitMode);
444 themeFile = String(L"/usr/share/osp/themes/"+__systemTheme + ".xml");
445 ConfigParser* pParser = new (std::nothrow) ConfigParser();
446 SysTryReturn(NID_UI, pParser, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
447 r = pParser->Parse(themeFile, mapContainer);
448 LoadConfig(__appBasePortraitMode, mapContainer, __appBaseWidth, __appBaseHeight);
449 if (__userTheme.GetLength() > 0)
451 themeFile = String(_AppInfo::GetAppRootPath()+L"res/themes/" +__userTheme + L"/" +__userTheme + ".xml");
452 r = pParser->Parse(themeFile, mapContainer);
459 _ResourceManager::LoadConfig(const String& resolution, MapContainer& mapContainer, int width, int height)
461 _ICoordinateSystemTransformer* pTransformer = _CoordinateSystem::GetTransformerN(__appBaseWidth, _CoordinateSystem::GetInstance()->GetLogicalBaseScreenSize(),
462 Dimension(width, height), BASE_SCREEN_SIZE_NORMAL);
466 _SCREEN_HEIGHT_ = pTransformer->Transform(__logicalHeight);
470 _SCREEN_HEIGHT_ = __logicalHeight;
473 SysLog(NID_UI, "_SCREEN_HEIGHT_ : %d, resolution : %ls", _SCREEN_HEIGHT_, resolution.GetPointer());
474 int count = ConfigLoader::GetInstance()->GetInitFuncCount();
475 for (int i = 0; i < count; i++)
477 _Init_Func func = null;
478 ConfigLoader::GetInstance()->GetInitFunc(i, func);
481 func(mapContainer, resolution);
488 _ResourceManager::DoPostInitialization(void)
490 if (_AppInfo::IsOspCompat())
492 SysLog(NID_UI, "Compatibility symbols are loaded.");
498 _ResourceManager::GetMapContainer(MapContainerType type)
500 MapContainer* pContainer = null;
503 case MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT:
504 pContainer = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT];
506 case MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE:
507 if (__pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE])
509 pContainer = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE];
513 pContainer = new (std::nothrow) MapContainer();
514 SysTryReturn(NID_UI, pContainer, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
515 pContainer->SetResolution(__appBaseLandscapeMode);
516 pContainer->CreateMap(RESOURCE_TYPE_SHAPE);
517 pContainer->CreateMap(RESOURCE_TYPE_DIMENSION);
518 pContainer->CreateMap(RESOURCE_TYPE_FIXED_VALUE);
519 LoadConfig(__appBaseLandscapeMode, *pContainer, __appBaseWidth, __appBaseHeight);
520 __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE] = pContainer;
523 case MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT:
524 if (__pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT])
526 pContainer = __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT];
530 if(__defaultPortraitMode == __appBasePortraitMode)
532 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT] = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT];
533 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE] = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE];
534 pContainer = __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT];
538 pContainer = new (std::nothrow) MapContainer();
539 SysTryReturn(NID_UI, pContainer, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
540 pContainer->SetResolution(__defaultPortraitMode);
541 pContainer->CreateMap(RESOURCE_TYPE_SHAPE);
542 pContainer->CreateMap(RESOURCE_TYPE_DIMENSION);
543 pContainer->CreateMap(RESOURCE_TYPE_FIXED_VALUE);
544 LoadConfig(__defaultPortraitMode, *pContainer, DEFAULT_SCREEN_WIDTH, DEFAULT_SCREEN_HEIGHT);
545 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT] = pContainer;
549 case MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE:
550 if (__pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE])
552 pContainer = __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE];
556 if(__defaultPortraitMode == __appBasePortraitMode)
558 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT] = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT];
559 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE] = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE];
560 pContainer = __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE];
564 pContainer = new (std::nothrow) MapContainer();
565 SysTryReturn(NID_UI, pContainer, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
566 pContainer->SetResolution(__defaultLandscapeMode);
567 pContainer->CreateMap(RESOURCE_TYPE_SHAPE);
568 pContainer->CreateMap(RESOURCE_TYPE_DIMENSION);
569 pContainer->CreateMap(RESOURCE_TYPE_FIXED_VALUE);
570 LoadConfig(__defaultLandscapeMode, *pContainer, DEFAULT_SCREEN_WIDTH, DEFAULT_SCREEN_HEIGHT);
571 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE] = pContainer;
581 _ResourceManager::~_ResourceManager(void)
583 delete __pStringLoader;
584 __pStringLoader = null;
585 delete __pTransformer;
586 __pTransformer = null;
587 delete __pFallbackList;
588 __pFallbackList = null;
589 bool deleteDefaultMap = true;
590 if (__pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT] == __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT])
592 deleteDefaultMap = false;
594 delete __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT];
595 __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT] = null;
596 delete __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE];
597 __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE] = null;
599 if (deleteDefaultMap)
601 delete __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT];
602 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT] = null;
603 delete __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE];
604 __pMapContainer[MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE] = null;
607 if (__initializeFeedback)
609 if(feedback_deinitialize() != FEEDBACK_ERROR_NONE)
616 _ResourceManager::ReloadTheme(Tizen::Base::String& themeName, bool userdefine)
620 __userTheme = themeName;
624 __systemTheme = themeName;
629 _ResourceManager::GetBitmapInternalN(const String& fileName, BitmapPixelFormat pixelFormat, _ControlOrientation orientation, Bitmap*& pBitmap)
632 Bitmap* pTempBitmap = null;
633 int foundFolderWidth = 0;
634 String fullName = FindImagePath(fileName, foundFolderWidth);
635 if(foundFolderWidth == __targetWidth)
637 pTempBitmap = new (std::nothrow) Bitmap;
638 SysTryReturn(NID_UI, pTempBitmap, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Propagating.", GetErrorMessage(r));
639 r = _BitmapImpl::GetInstance(*pTempBitmap)->Construct(fullName, pixelFormat);
640 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
641 pBitmap = pTempBitmap;
646 if (_BitmapImpl::HasNinePatchedBitmapTag(fileName))
648 pTempBitmap = new (std::nothrow) Bitmap;
649 SysTryReturn(NID_UI, pTempBitmap, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Propagating.", GetErrorMessage(r));
650 r = _BitmapImpl::GetInstance(*pTempBitmap)->Construct(fullName, pixelFormat);
651 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
652 pBitmap = pTempBitmap;
657 ByteBuffer* pImageBuffer = null;
660 MediaPixelFormat format = ConvertBitmapPixelFormatToMediaPixelFormat(pixelFormat);
661 pImageBuffer = _ImageDecoder::DecodeToBufferN(fullName, format, imageWidth, imageHeight);
664 pTempBitmap = _BitmapImpl::GetNonScaledBitmapN(*pImageBuffer, Dimension(imageWidth, imageHeight), pixelFormat);
667 if(pTempBitmap != null)
669 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pTempBitmap))
671 pBitmap = pTempBitmap;
676 float scaleFactor = (float)((float)__targetWidth/(float)foundFolderWidth);
678 r = pTempBitmap->Scale(Dimension(imageWidth*scaleFactor, imageHeight*scaleFactor));
681 pBitmap = pTempBitmap;
698 _ResourceManager::GetBitmapN(const String& bitmapId, BitmapPixelFormat pixelFormat, _ControlOrientation orientation, Bitmap*& pBitmap)
701 String* pFileName = null;
702 r = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->GetImageMap()->GetValue(bitmapId, pFileName);
705 r = GetBitmapInternalN(*pFileName, pixelFormat, orientation, pBitmap);
711 _ResourceManager::GetString(const String& stringId, String& string)
713 return __pStringLoader->GetString(stringId, string);
717 _ResourceManager::GetColor(const String& colorId, Color& color)
720 Color* pColor = null;
721 r = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->GetColorMap()->GetValue(colorId, pColor);
730 _ResourceManager::GetDimension(const String& dimensionId, _ControlOrientation orientation, Dimension& dimension)
732 result r = E_SUCCESS;
735 FloatDimension* pDimension = null;
736 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
738 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT)->GetDimensionMap()->GetValue(dimensionId, pDimension);
741 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE)->GetDimensionMap()->GetValue(dimensionId, pDimension);
746 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE)->GetDimensionMap()->GetValue(dimensionId, pDimension);
749 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT)->GetDimensionMap()->GetValue(dimensionId, pDimension);
754 dim.SetSize(pDimension->width, pDimension->height);
759 r = GetDefaultShapeWithScaling(dimensionId, orientation, dim);
771 _ResourceManager::GetDimension(const Tizen::Base::String& dimensionId, _ControlOrientation orientation, Tizen::Graphics::FloatDimension& dimension)
773 result r = E_SUCCESS;
774 FloatDimension dim(0, 0);
776 FloatDimension* pDimension = null;
777 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
779 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT)->GetDimensionMap()->GetValue(dimensionId, pDimension);
782 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE)->GetDimensionMap()->GetValue(dimensionId, pDimension);
787 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE)->GetDimensionMap()->GetValue(dimensionId, pDimension);
790 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT)->GetDimensionMap()->GetValue(dimensionId, pDimension);
800 r = GetDefaultShapeWithScaling(dimensionId, orientation, dim);
812 _ResourceManager::GetAnimationN(const String& animationId, ArrayList*& pList)
814 ResourceAnimationFrameList* pFrameList = null;
815 AnimationFrame* pFrame = null;
816 Bitmap* pBitmap = null;
818 result r = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->GetAnimationMap()->GetValue(animationId, pFrameList);
819 SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM,"System error is occured.");
821 if (pFrameList == null)
825 Tizen::Base::Collection::LinkedListT<ResourceAnimationFrame>* pAnimationList = static_cast<Tizen::Base::Collection::LinkedListT<ResourceAnimationFrame>* >(pFrameList->GetAnimationList());
826 if (pAnimationList == null)
830 int count = pAnimationList->GetCount();
835 pList = new (std::nothrow) ArrayList();
837 for (; i < count ; i++)
839 ResourceAnimationFrame frame;
840 r = pAnimationList->GetAt(i, frame);
841 SysTryCatch(NID_UI, r == E_SUCCESS, , E_SYSTEM,"System error is occured.");
842 r = GetBitmapInternalN(frame.__fileName, BITMAP_PIXEL_FORMAT_ARGB8888, _CONTROL_ORIENTATION_PORTRAIT, pBitmap);
843 SysTryCatch(NID_UI, r == E_SUCCESS, , E_SYSTEM,"System error is occured.");
844 pFrame = new (std::nothrow) AnimationFrame(*pBitmap, frame.__duration);
858 _ResourceManager::GetShape(const String& shapeId, _ControlOrientation orientation, int& value)
860 result r = E_SUCCESS;
863 Float* pFloat = null;
864 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
866 r = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->GetShapeMap()->GetValue(shapeId, pFloat);
869 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE)->GetShapeMap()->GetValue(shapeId, pFloat);
874 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE)->GetShapeMap()->GetValue(shapeId, pFloat);
877 r = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->GetShapeMap()->GetValue(shapeId, pFloat);
883 outValue = pFloat->ToInt();
888 r = GetDefaultShapeWithScaling(shapeId, orientation, outValue);
900 _ResourceManager::GetShape(const Tizen::Base::String& shapeId, _ControlOrientation orientation, float& value)
902 result r = E_SUCCESS;
905 Float* pFloat = null;
906 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
908 r = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->GetShapeMap()->GetValue(shapeId, pFloat);
911 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE)->GetShapeMap()->GetValue(shapeId, pFloat);
916 r = GetMapContainer(MAP_CONTAINER_TYPE_APP_BASE_LANDSCAPE)->GetShapeMap()->GetValue(shapeId, pFloat);
919 r = __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->GetShapeMap()->GetValue(shapeId, pFloat);
925 outValue = pFloat->ToFloat();
930 r = GetDefaultShapeWithScaling(shapeId, orientation, outValue);
941 _ResourceManager::GetFixedValue(const String& fixedValueId, _ControlOrientation orientation, int& value)
943 result r = E_SUCCESS;
944 Float* pFloat = null;
945 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
947 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetFixedValueMap()->GetValue(fixedValueId, pFloat);
951 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetFixedValueMap()->GetValue(fixedValueId, pFloat);
956 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetFixedValueMap()->GetValue(fixedValueId, pFloat);
959 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetFixedValueMap()->GetValue(fixedValueId, pFloat);
965 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
967 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetShapeMap()->GetValue(fixedValueId, pFloat);
970 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetShapeMap()->GetValue(fixedValueId, pFloat);
975 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetShapeMap()->GetValue(fixedValueId, pFloat);
978 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetShapeMap()->GetValue(fixedValueId, pFloat);
985 value = pFloat->ToInt();
992 _ResourceManager::GetFixedValue(const Tizen::Base::String& fixedValueId, _ControlOrientation orientation, float& value)
994 result r = E_SUCCESS;
995 Float* pFloat = null;
996 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
998 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetFixedValueMap()->GetValue(fixedValueId, pFloat);
1002 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetFixedValueMap()->GetValue(fixedValueId, pFloat);
1007 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetFixedValueMap()->GetValue(fixedValueId, pFloat);
1010 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetFixedValueMap()->GetValue(fixedValueId, pFloat);
1016 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
1018 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetShapeMap()->GetValue(fixedValueId, pFloat);
1021 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetShapeMap()->GetValue(fixedValueId, pFloat);
1026 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetShapeMap()->GetValue(fixedValueId, pFloat);
1029 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetShapeMap()->GetValue(fixedValueId, pFloat);
1036 value = pFloat->ToFloat();
1043 _ResourceManager::IsCustomColor(const Tizen::Base::String& colorId)
1045 return __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->GetColorMap()->IsUserThemeItem(colorId);
1048 _ResourceManager::IsCustomBitmap(const Tizen::Base::String& bitmapId)
1050 return __pMapContainer[MAP_CONTAINER_TYPE_APP_BASE_PORTRAIT]->GetImageMap()->IsUserThemeItem(bitmapId);
1054 _ResourceManager::PlayFeedback(_ResourceFeedbackPattern pattern)
1056 if (unlikely(__initializeFeedback == false))
1058 feedback_error_e error = (feedback_error_e)feedback_initialize();
1059 if(error != FEEDBACK_ERROR_NONE)
1063 __initializeFeedback = true;
1065 if (__feedbackStatus == _RESOURCE_FEEDBACK_STATUS_PLAYED)
1067 SysLog(NID_UI, "feedback is already played.");
1070 feedback_pattern_e playPattern = Convert_ResourceFeedbackPatternTofeedback_pattern_e(pattern);
1071 __feedbackStatus = _RESOURCE_FEEDBACK_STATUS_PLAYED;
1072 int r = feedback_play(playPattern);
1073 if (r == FEEDBACK_ERROR_NONE)
1075 SysLog(NID_UI, "It succeeded to play feedback.");
1080 SysLog(NID_UI, "It failed to play feedback.");
1087 _ResourceManager::GetDefaultShapeWithScaling(const String& shapeId, _ControlOrientation orientation, int& integer)
1089 result r = E_SUCCESS;
1090 Float* pFloat = null;
1091 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
1093 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetShapeMap()->GetValue(shapeId, pFloat);
1096 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetShapeMap()->GetValue(shapeId, pFloat);
1101 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetShapeMap()->GetValue(shapeId, pFloat);
1104 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetShapeMap()->GetValue(shapeId, pFloat);
1109 integer = pFloat->ToInt();
1114 int temp = __pTransformer->Transform(integer);
1115 if (temp == 0 && integer > 0)
1128 _ResourceManager::GetDefaultShapeWithScaling(const Tizen::Base::String& shapeId, _ControlOrientation orientation, Tizen::Graphics::FloatDimension& dimension)
1130 result r = E_SUCCESS;
1131 FloatDimension dim(0,0);
1132 FloatDimension* pDimension = null;
1133 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
1135 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetDimensionMap()->GetValue(shapeId, pDimension);
1138 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetDimensionMap()->GetValue(shapeId, pDimension);
1143 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetDimensionMap()->GetValue(shapeId, pDimension);
1146 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetDimensionMap()->GetValue(shapeId, pDimension);
1151 dimension = __pTransformer->Transform(*pDimension);
1158 _ResourceManager::GetDefaultShapeWithScaling(const Tizen::Base::String& shapeId, _ControlOrientation orientation, float& outValue)
1160 result r = E_SUCCESS;
1161 Float* pFloat = null;
1163 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
1165 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetShapeMap()->GetValue(shapeId, pFloat);
1168 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetShapeMap()->GetValue(shapeId, pFloat);
1173 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetShapeMap()->GetValue(shapeId, pFloat);
1176 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetShapeMap()->GetValue(shapeId, pFloat);
1182 outValue = pFloat->ToFloat();
1183 outValue = __pTransformer->Transform(outValue);
1190 _ResourceManager::GetDefaultShapeWithScaling(const String& shapeId, _ControlOrientation orientation, Dimension& dimension)
1192 result r = E_SUCCESS;
1194 FloatDimension* pDimension = null;
1195 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
1197 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetDimensionMap()->GetValue(shapeId, pDimension);
1200 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetDimensionMap()->GetValue(shapeId, pDimension);
1205 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_LANDSCAPE)->GetDimensionMap()->GetValue(shapeId, pDimension);
1208 r = GetMapContainer(MAP_CONTAINER_TYPE_DEFAULT_PORTRAIT)->GetDimensionMap()->GetValue(shapeId, pDimension);
1213 dim.SetSize(pDimension->width, pDimension->height);
1218 Dimension temp = __pTransformer->Transform(dim);
1219 if (temp.width == 0 && dim.width > 0)
1223 if (temp.height == 0 && dim.height > 0)
1233 _ResourceManager::LoadThemeInformation(String& systemTheme, String& userTheme)
1235 AppId appId = _AppInfo::GetPackageId();
1237 pList = _PackageManagerImpl::GetInstance()->GetUiThemeListN(appId);
1241 IMapEnumerator* pMapEnum = pList->GetMapEnumeratorN();
1242 while (pMapEnum->MoveNext() == E_SUCCESS)
1244 String* pKey = static_cast<String*> (pMapEnum->GetKey());
1245 String* pValue = static_cast<String*> (pMapEnum->GetValue());
1248 if (key == L"systemtheme")
1250 systemTheme = *pValue;
1251 systemTheme.ToLowerCase();
1253 if (key == L"userdefinedtheme")
1255 userTheme = *pValue;
1260 pList->RemoveAll(true);
1263 if (systemTheme.GetLength() < 1)
1265 systemTheme = L"black";
1271 _ResourceManager::GetThemeName(String& systemTheme, String& userTheme) const
1273 systemTheme = __systemTheme;
1274 userTheme = __userTheme;
1278 _ResourceManager::SetSystemColor(void)
1281 Color* pColor = null;
1282 Color* (*GetSystemColor)(const String&) = null;
1284 handle = dlopen ("libosp-compat.so", RTLD_LAZY);
1289 GetSystemColor = reinterpret_cast<Color*(*)(const String&)>(dlsym(handle, "_GetSystemColor"));
1290 if (dlerror() != NULL)
1295 pColor = GetSystemColor(L"TITLE_TEXT");
1298 GET_COLOR_CONFIG(HEADER::TITLE_TEXT_NORMAL, *pColor);
1301 pColor = GetSystemColor(L"BODY_TEXT");
1304 GET_COLOR_CONFIG(BUTTON::TEXT_NORMAL, *pColor);
1307 pColor = GetSystemColor(L"FOREGROUND");
1310 GET_COLOR_CONFIG(BASIC::foreground, *pColor);
1313 pColor = GetSystemColor(L"BACKGROUND");
1316 GET_COLOR_CONFIG(BASIC::background, *pColor);
1319 pColor = GetSystemColor(L"LIST_BACKGROUND");
1322 GET_COLOR_CONFIG(FORM::BG_NORMAL, *pColor);
1325 pColor = GetSystemColor(L"FORM_BACKGROUND");
1328 GET_COLOR_CONFIG(FORM::BG_NORMAL, *pColor);
1331 pColor = GetSystemColor(L"FORM_GROUP_BACKGROUND");
1334 GET_COLOR_CONFIG(PANEL::GROUPED_STYLE_BG_NORMAL, *pColor);
1337 pColor = GetSystemColor(L"POPUP_BACKGROUND");
1340 GET_COLOR_CONFIG(POPUP::BG_NORMAL, *pColor);
1343 pColor = GetSystemColor(L"GROUP_ITEM_TEXT");
1346 GET_COLOR_CONFIG(CHECKBUTTON::TEXT_NORMAL, *pColor);
1349 pColor = GetSystemColor(L"LIST_ITEM_TEXT");
1352 GET_COLOR_CONFIG(LISTVIEW::ITEM_TEXT_NORMAL, *pColor);
1355 pColor = GetSystemColor(L"LIST_ITEM_PRESSED_TEXT");
1358 GET_COLOR_CONFIG(LISTVIEW::ITEM_TEXT_PRESSED, *pColor);
1361 pColor = GetSystemColor(L"LIST_ITEM_HIGHLIGHTED_TEXT");
1364 GET_COLOR_CONFIG(LISTVIEW::ITEM_TEXT_HIGHLIGHTED, *pColor);
1373 _ResourceManager::GetDensityDirectory(const String& directoryName, float& scaleFactor)
1375 float denominator = 0.0;
1376 float numerator = 0.0;
1377 if(!(directoryName.StartsWith(L"screen-density",0)))
1382 if (__deviceDPI >= DPI_FOR_XHIGH)
1386 else if (__deviceDPI >= DPI_FOR_HIGH)
1390 else if (__deviceDPI >= DPI_FOR_MIDDLE)
1394 else if (__deviceDPI < DPI_FOR_MIDDLE && __deviceDPI > DPI_FOR_LOW)
1403 if(directoryName.Contains(L"xhigh"))
1407 else if(directoryName.Contains(L"high"))
1411 else if(directoryName.Contains(L"middle"))
1415 else if(directoryName.Contains(L"low"))
1424 scaleFactor = numerator / denominator;
1429 _ResourceManager::GetResolutionDirectory(const String& directoryName, float& scaleFactor)
1431 if(!(directoryName.Contains(L"0")))
1437 if(directoryName.IndexOf(L"x", 0, index) != E_SUCCESS)
1443 if(directoryName.SubString(0, index - 1, width))
1445 int denominatorInt = 0;
1446 float denominator = 0;
1447 float numerator = 0;
1448 if(Integer::Parse(width, denominatorInt) == E_SUCCESS)
1450 denominator = (float)denominatorInt;
1451 numerator = __targetWidth;
1452 scaleFactor = numerator / denominator;
1460 _ResourceManager::FindImagePath(const String& fileName, int& foundFolderWidth)
1463 String fullName(L"");
1464 ResourceFallbackItem* pItem = null;
1466 if(__userTheme.GetLength() > 0)
1468 String resDirectory = _AppInfo::GetAppRootPath() + L"res/themes/"+__userTheme;
1469 if(__pFallbackList == null)
1471 __pFallbackList = new (std::nothrow) ArrayListT<ResourceFallbackItem*>;
1472 SysTryReturn(NID_UI, __pFallbackList, L"", E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1474 result r = dir.Construct(resDirectory);
1477 DirEnumerator* pDirEnum = dir.ReadN();
1478 if (pDirEnum != null)
1480 while (pDirEnum->MoveNext() == E_SUCCESS)
1482 DirEntry entry = pDirEnum->GetCurrentDirEntry();
1483 if(entry.IsDirectory())
1485 float scaleFactor = 0;
1486 String directoryName = entry.GetName();
1487 if(GetDensityDirectory(directoryName, scaleFactor))
1489 pItem = new (std::nothrow) ResourceFallbackItem;
1490 SysTryCatch(NID_UI, pItem, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1491 pItem->scaleFactor = scaleFactor;
1492 pItem->directoryName = directoryName;
1493 __pFallbackList->Add(pItem);
1495 else if(GetResolutionDirectory(directoryName, scaleFactor))
1497 pItem = new (std::nothrow) ResourceFallbackItem;
1498 SysTryCatch(NID_UI, pItem, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed.");
1499 pItem->scaleFactor = scaleFactor;
1500 pItem->directoryName = directoryName;
1501 __pFallbackList->Add(pItem);
1505 ResourceFallbackItemComparer<ResourceFallbackItem*> comparer;
1506 __pFallbackList->Sort(comparer);
1509 for(int i = 0 ; i < __pFallbackList->GetCount() ; i++)
1511 ResourceFallbackItem* pItem;
1512 if(__pFallbackList->GetAt(i,pItem) == E_SUCCESS)
1514 if(pItem->scaleFactor < 1.001 && pItem->scaleFactor > 0.999)
1516 __pFallbackList->RemoveAt(i);
1517 __pFallbackList->InsertAt(pItem,0);
1518 if(pItem->directoryName.Contains(L"0"))
1527 for(int i = 0 ; i <__pFallbackList->GetCount() ; i++)
1529 ResourceFallbackItem* pItem;
1530 __pFallbackList->GetAt(i,pItem);
1531 fullName = resDirectory + L"/" + pItem->directoryName + L"/" + fileName;
1532 if (File::IsFileExist(fullName))
1535 foundFolderWidth = __targetWidth / pItem->scaleFactor;
1536 if(foundFolderWidth > __targetWidth)
1538 if( foundFolderWidth < __targetWidth + 3)
1540 foundFolderWidth = __targetWidth;
1545 if( foundFolderWidth >__targetWidth - 3)
1547 foundFolderWidth = __targetWidth;
1556 fullName = String(L"/usr/share/osp/bitmaps/" + __targetPortraitMode+ "/" + __systemTheme + L"/" + fileName);
1557 if (File::IsFileExist(fullName))
1560 foundFolderWidth = __targetWidth;
1564 fullName = String(L"/usr/share/osp/bitmaps/" + __defaultPortraitMode+ "/" + __systemTheme + L"/" + fileName);
1565 if (File::IsFileExist(fullName))
1568 foundFolderWidth = DEFAULT_SCREEN_WIDTH;
1575 fullName = String(L"/usr/share/osp/bitmaps/" + __targetPortraitMode + "/" + fileName);
1576 if (File::IsFileExist(fullName))
1579 foundFolderWidth = __targetWidth;
1583 fullName = String(L"/usr/share/osp/bitmaps/" + __defaultPortraitMode+ "/" + fileName);
1584 if (File::IsFileExist(fullName))
1587 foundFolderWidth = DEFAULT_SCREEN_WIDTH;
1601 delete __pFallbackList;
1602 __pFallbackList = null;
1607 _ResourceManager::AcquireFeedback(void)
1609 ++__feedbackAcquireCount;
1613 _ResourceManager::ReleaseFeedback(void)
1615 --__feedbackAcquireCount;
1616 if(__feedbackAcquireCount == 0)
1618 __feedbackStatus = _RESOURCE_FEEDBACK_STATUS_INIT;