sync with tizen_2.0
[platform/framework/native/appfw.git] / src / app / FApp_AppResourceImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.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
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
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.
16 //
17
18 /**
19  * @file        FApp_AppResourceImpl.cpp
20  * @brief       This is the implementation for the _AppResourceImpl class.
21  */
22
23 #include <FBaseObject.h>
24 #include <FBaseString.h>
25 #include <FBaseResult.h>
26 #include <FBaseSysLog.h>
27 #include <FAppAppResource.h>
28
29 #include <FBaseRt_LibraryImpl.h>
30
31 #include "FApp_AppResourceImpl.h"
32 #include "FApp_AppResourceString.h"
33 #include "FApp_AppManagerImpl.h"
34 #include "FApp_IAppResourceBitmap.h"
35
36 using namespace Tizen::Base;
37 using namespace Tizen::Base::Runtime;
38 using namespace Tizen::Io;
39 using namespace Tizen::Locales;
40 using namespace Tizen::System;
41
42 using namespace Tizen::Graphics;
43
44 namespace Tizen { namespace App
45 {
46
47 #define BITMAP_PIXEL_FORMAT_INVALID (BITMAP_PIXEL_FORMAT_MIN)
48
49 static _IAppResourceBitmap*(* p_Create_AppResourceBitmapInstanceN)(void) = null;
50 static _IAppResourceBitmap*(* p_Create_AppResourceBitmapInstanceByAppIdN)(const String& appId) = null;
51
52 _AppResourceImpl::_AppResourceImpl(void)
53         : __pAppResource(null)
54         , __p_AppResourceString(null)
55         , __p_IAppResourceBitmap(null)
56         , __isByAppId(false)
57 {
58 }
59
60
61 result
62 _AppResourceImpl::Construct(const Locale& locale)
63 {
64         return Construct();
65 }
66
67
68 result
69 _AppResourceImpl::Construct(void)
70 {
71         return E_SUCCESS;
72 }
73
74 result
75 _AppResourceImpl::Construct(const AppId& appId)
76 {
77         result r = E_SUCCESS;
78         if (__p_AppResourceString == null)
79         {
80                 __p_AppResourceString = new (std::nothrow) _AppResourceString();
81                 SysTryReturnResult(NID_APP, __p_AppResourceString != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]Failed to create String resource");
82
83                 r = __p_AppResourceString->Construct(appId);
84                 SysTryCatch(NID_APP, !IsFailed(r),  , r, "[%s] Failed to construct String resource", GetErrorMessage(r));
85         }
86
87         if (p_Create_AppResourceBitmapInstanceByAppIdN == null)
88         {
89                 _LibraryImpl& lib = _AppManagerImpl::GetInstance()->GetUiLibraryImpl();
90                 p_Create_AppResourceBitmapInstanceByAppIdN = reinterpret_cast<_IAppResourceBitmap*(*)(const String& appId)>(lib.GetProcAddress(L"_Create_IAppResourceBitmapInstanceByAppIdN"));
91                 SysTryCatch(NID_APP, p_Create_AppResourceBitmapInstanceByAppIdN != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to get Bitmap resource [%s].", GetErrorMessage(GetLastResult()));
92         }
93
94         if (__p_IAppResourceBitmap == null)
95         {
96                 __p_IAppResourceBitmap = p_Create_AppResourceBitmapInstanceByAppIdN(appId);
97                 SysTryCatch(NID_APP, __p_IAppResourceBitmap != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to get Bitmap resource.");
98         }
99
100         __isByAppId = true;
101         return E_SUCCESS;
102
103 CATCH:
104         delete __p_AppResourceString;
105         __p_AppResourceString = null;
106
107         return r;
108 }
109
110 _AppResourceImpl::~_AppResourceImpl(void)
111 {
112         delete __p_AppResourceString;
113         delete __p_IAppResourceBitmap;
114 }
115
116
117 result
118 _AppResourceImpl::GetString(const String& resourceId, String& loadedString)
119 {
120         result r = E_SUCCESS;
121
122         if ((__isByAppId == false) && (__p_AppResourceString == null))
123         {
124                 __p_AppResourceString = new (std::nothrow) _AppResourceString();
125                 SysTryReturnResult(NID_APP, __p_AppResourceString != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]Not enough memory.");
126
127                 r = __p_AppResourceString->Construct();
128                 SysTryCatch(NID_APP, !IsFailed(r), , r = E_SYSTEM, "[E_SYSTEM] Failed to get String resource.");
129         }
130
131         r = __p_AppResourceString->GetString(resourceId, loadedString);
132
133 CATCH:
134         return r;
135 }
136
137
138 Bitmap*
139 _AppResourceImpl::GetBitmapN(const String& imgFilePath, BitmapPixelFormat pixelFormat)
140 {
141         if (__isByAppId == false)
142         {
143                 if (p_Create_AppResourceBitmapInstanceN == null)
144                 {
145                         _LibraryImpl& lib = _AppManagerImpl::GetInstance()->GetUiLibraryImpl();
146                         p_Create_AppResourceBitmapInstanceN = reinterpret_cast<_IAppResourceBitmap*(*)(void)>(lib.GetProcAddress(L"_Create_IAppResourceBitmapInstanceN"));
147                         SysTryCatch(NID_APP, p_Create_AppResourceBitmapInstanceN != null, , E_SYSTEM, "[E_SYSTEM] Failed to get Bitmap resource [%s].", GetErrorMessage(GetLastResult()));
148                 }
149
150                 if (__p_IAppResourceBitmap == null)
151                 {
152                         __p_IAppResourceBitmap = p_Create_AppResourceBitmapInstanceN();
153                         SysTryCatch(NID_APP, __p_IAppResourceBitmap != null, , E_SYSTEM, "[E_SYSTEM] Failed to get Bitmap resource.");
154                 }
155         }
156
157         return __p_IAppResourceBitmap->GetBitmapN(imgFilePath, pixelFormat);
158
159 CATCH:
160         return null;
161 }
162
163
164 Bitmap*
165 _AppResourceImpl::GetBitmapN(const String& imgFilePath)
166 {
167         return GetBitmapN(imgFilePath, BITMAP_PIXEL_FORMAT_INVALID);
168 }
169
170
171 AppResource*
172 _AppResourceImpl::GetAppResource(void)
173 {
174         return __pAppResource;
175 }
176
177 _AppResourceImpl*
178 _AppResourceImpl::GetInstance(void)
179 {
180 //      return __pAppResource->__pAppResourceImpl;
181         return AppResource::GetInstance()->__pAppResourceImpl;
182 }
183
184 void
185 _AppResourceImpl::Reinitialize(void)
186 {
187         if (__p_AppResourceString != null)
188         {
189
190                 __p_AppResourceString->Initialize();
191         }
192         AppResource::Reinitialize();
193 }
194
195 void
196 _AppResourceImpl::Reinitialize(const AppId& appId)
197 {
198                 __p_AppResourceString->Initialize(appId);
199 }
200 } } // Tizen::App