2 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.1 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://floralicense.org/license/
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file FShell_AppWidgetProviderInfoImpl.cpp
19 * @brief This is the implementation for the _AppWidgetProviderInfoImpl class.
22 #include <unique_ptr.h>
23 #include <livebox-service/livebox-service.h>
25 #include <FBaseSysLog.h>
26 #include <FBase_StringConverter.h>
27 #include <FApp_AppInfo.h>
29 #include <FAppPkg_PackageManagerImpl.h>
30 #include <FAppPkg_PackageInfoImpl.h>
31 #include <FShellAppWidgetProviderInfo.h>
32 #include <FShellAppWidgetSizeInfo.h>
33 #include "FShell_AppWidgetManagerImpl.h"
34 #include "FShell_AppWidgetProviderInfoImpl.h"
35 #include "FShell_AppWidgetSizeInfoImpl.h"
37 namespace Tizen { namespace Shell {
39 using namespace Tizen::App;
40 using namespace Tizen::Base;
41 using namespace Tizen::Base::Collection;
42 using namespace Tizen::Graphics;
45 _AppWidgetProviderInfoImpl::_AppWidgetProviderInfoImpl(const Tizen::App::AppId& appId, const Tizen::Base::String& name)
50 __providerId = _AppWidgetManagerImpl::MakeProviderName(appId, name);
52 std::unique_ptr<char[]> pProviderId(_StringConverter::CopyToCharArrayN(__providerId));
53 std::unique_ptr<char[]> pDisplayName(livebox_service_i18n_name(pProviderId.get(), null));
54 std::unique_ptr<char[]> pSetUpAppId(livebox_service_setup_appid(pProviderId.get()));
55 __displayName = pDisplayName.get();
56 __configurationAppControlAppId = pSetUpAppId.get();
58 SysSecureLog(NID_SHELL, "appId(%ls), name(%ls), providerId(%ls), displayName(%ls), configuration(%ls)", appId.GetPointer(), name.GetPointer(), __providerId.GetPointer(), __displayName.GetPointer(), __configurationAppControlAppId.GetPointer() );
61 /*_AppWidgetProviderInfoImpl::_AppWidgetProviderInfoImpl(const _AppWidgetProviderInfoImpl& rhs)
63 __appId = rhs.__appId;
65 __providerId = rhs.__providerId;
68 _AppWidgetProviderInfoImpl&
69 _AppWidgetProviderInfoImpl::operator =(const _AppWidgetProviderInfoImpl& rhs)
71 __appId = rhs.__appId;
73 __providerId = rhs.__providerId;
78 _AppWidgetProviderInfoImpl::~_AppWidgetProviderInfoImpl()
83 _AppWidgetProviderInfoImpl::GetAppId() const
89 _AppWidgetProviderInfoImpl::GetName() const
95 _AppWidgetProviderInfoImpl::GetDisplayName() const
97 /* std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(__providerId));
98 __displayName = livebox_service_i18n_name(pPackageId.get(), null);*/
103 _AppWidgetProviderInfoImpl::GetIconPath() const
105 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(__providerId));
106 String iconPath = livebox_service_i18n_icon(pPackageId.get(), null);
112 _AppWidgetProviderInfoImpl::GetConfigurationAppControlAppId() const
114 return __configurationAppControlAppId;
118 _AppWidgetProviderInfoImpl::IsDefault() const
124 _AppWidgetProviderInfoImpl::GetPrivilegeLevel(const AppId& appId)
127 Package::_PackageManagerImpl* pPkg = Package::_PackageManagerImpl::GetInstance();
128 SysTryReturn(NID_APP, pPkg != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageManager instance.");
130 String pkgId = Package::_PackageManagerImpl::GetPackageIdByAppId(appId);
131 SysTryReturn(NID_APP, !pkgId.IsEmpty(), _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid appId(%ls).", appId.GetPointer() );
133 Package::PackageInfo* pInfo = pPkg->GetPackageInfoN(pkgId);
134 SysTryReturn(NID_APP, pInfo != null, _API_VISIBILITY_PUBLIC, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
136 const Package::_PackageInfoImpl* pPkgInfo = Package::_PackageInfoImpl::GetInstance(pInfo);
137 SysTryReturn(NID_APP, pPkgInfo != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageInfo instance.");
139 return pPkgInfo->GetApiVisibility();
143 _AppWidgetProviderInfoImpl::IsValidSize(const AppId& appId, int w, int h)
145 if (appId.StartsWith("com.samsung.", 0) == true)
150 // static const int UNIT_SIZE_BASE = 175;
151 static const int UNIT_SIZE_2 = 354;// UNIT_SIZE_BASE*n + 4*(n-1)
152 // static const int UNIT_SIZE_4 = 712;
154 int privilegeLevel = GetPrivilegeLevel(appId);
155 if( privilegeLevel == _API_VISIBILITY_PUBLIC || privilegeLevel == _API_VISIBILITY_PARTNER)
157 if( h > UNIT_SIZE_2 || w > UNIT_SIZE_2)
159 SysLog(NID_SHELL, "%dx%d size is invalid for %d privilege", privilegeLevel);
163 /*else if( size.height > UNIT_SIZE_4 || size.width > UNIT_SIZE_4)
170 Tizen::Base::Collection::IList*
171 _AppWidgetProviderInfoImpl::GetSizeInfoListN() const
173 static const int MAX_SUPPORTED_SIZE_TYPE = 6;//TODO: check this value.
175 int supportedSizeCount = MAX_SUPPORTED_SIZE_TYPE;
176 int widthArray[MAX_SUPPORTED_SIZE_TYPE];
177 int heightArray[MAX_SUPPORTED_SIZE_TYPE];
179 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(__providerId));
180 livebox_service_get_supported_sizes(pPackageId.get(), &supportedSizeCount , widthArray, heightArray);
182 SysTryReturn(NID_SHELL, supportedSizeCount > 0, null, E_INVALID_ARG, "[E_INVALID_ARG] There is no appwidget of provider(%ls)",__providerId.GetPointer() );
184 std::unique_ptr<ArrayList> pSizes(new (std::nothrow) ArrayList);
185 SysTryReturn(NID_SHELL, pSizes, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate memory for ArrayList." );
188 FloatDimension size(0, 0);
189 String previewImagePath;
191 for(int i = 0; i < supportedSizeCount; i++)
193 size.SetSize(widthArray[i], heightArray[i]);
194 previewImagePath = livebox_service_preview(pPackageId.get(), livebox_service_size_type(static_cast<int>(size.width), static_cast<int>(size.height) ) );
196 if( IsValidSize(__appId, size.width, size.height) == false )
201 std::unique_ptr<AppWidgetSizeInfo> pAppWidgetSizeInfo(_AppWidgetSizeInfoImpl::CreateAppWidgetSizeInfo(size, previewImagePath) );
202 SysTryReturn(NID_SHELL, pAppWidgetSizeInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate memory for AppWidgetSizeInfo." );
203 pSizes->Add( *pAppWidgetSizeInfo.release() );
205 return pSizes.release();
208 AppWidgetProviderInfo*
209 _AppWidgetProviderInfoImpl::GetAppWidgetProviderInfoN(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName)
211 std::unique_ptr<char[]> pProviderId(_StringConverter::CopyToCharArrayN(_AppWidgetManagerImpl::MakeProviderName(appId, providerName)));
213 bool isDefault = livebox_service_is_primary(pProviderId.get());
214 return GetAppWidgetProviderInfoN(appId, providerName, isDefault);
217 AppWidgetProviderInfo*
218 _AppWidgetProviderInfoImpl::GetAppWidgetProviderInfoN(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, bool isDefault)
220 SysTryReturn(NID_SHELL, IsExist(appId, providerName) == true, null, E_APP_NOT_INSTALLED, "The application(%ls) is not installed.", appId.GetPointer());
222 AppWidgetProviderInfo* pInfo = new (std::nothrow) AppWidgetProviderInfo(appId, providerName);
223 SysTryReturn(NID_SHELL, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate memory for AppWidgetProviderInfo." );
225 _AppWidgetProviderInfoImpl::GetImpl(*pInfo)->__isDefault = isDefault;
231 _AppWidgetProviderInfoImpl::IsExist(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName)
233 SysTryReturn(NID_SHELL, Tizen::App::_Aul::IsInstalled(appId) == true, false, E_APP_NOT_INSTALLED, "The application(%ls) is not installed.", appId.GetPointer());
235 std::unique_ptr<char[]> pProviderId(_StringConverter::CopyToCharArrayN(_AppWidgetManagerImpl::MakeProviderName(appId, providerName)));
236 std::unique_ptr<char[]> pPackageId(livebox_service_appid(pProviderId.get()));
237 SysTryReturn(NID_SHELL, pPackageId.get(), false, E_APP_NOT_INSTALLED, "The application(%ls) is not installed.", appId.GetPointer());
242 _AppWidgetProviderInfoImpl*
243 _AppWidgetProviderInfoImpl::GetImpl(const AppWidgetProviderInfo& appwidgetProviderInfo)
245 return static_cast<_AppWidgetProviderInfoImpl*>(appwidgetProviderInfo.__pAppWidgetProviderInfoImpl);
248 } /* namespace AppWidget */
249 } /* namespace Samsung */