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>
28 #include <FAppPkg_PackageManagerImpl.h>
29 #include <FAppPkg_PackageInfoImpl.h>
30 #include <FShellAppWidgetProviderInfo.h>
31 #include <FShellAppWidgetSizeInfo.h>
32 #include "FShell_AppWidgetManagerImpl.h"
33 #include "FShell_AppWidgetProviderInfoImpl.h"
34 #include "FShell_AppWidgetSizeInfoImpl.h"
36 namespace Tizen { namespace Shell {
38 using namespace Tizen::App;
39 using namespace Tizen::Base;
40 using namespace Tizen::Base::Collection;
41 using namespace Tizen::Graphics;
44 _AppWidgetProviderInfoImpl::_AppWidgetProviderInfoImpl(const Tizen::App::AppId& appId, const Tizen::Base::String& name)
49 __providerId = _AppWidgetManagerImpl::MakeProviderName(appId, name);
51 std::unique_ptr<char[]> pProviderId(_StringConverter::CopyToCharArrayN(__providerId));
52 __displayName = livebox_service_i18n_name(pProviderId.get(), null);
53 __configurationAppControlAppId = livebox_service_setup_appid(pProviderId.get());
55 SysSecureLog(NID_SHELL, "appId(%ls), name(%ls), providerId(%ls), displayName(%ls), configuration(%ls)", appId.GetPointer(), name.GetPointer(), __providerId.GetPointer(), __displayName.GetPointer(), __configurationAppControlAppId.GetPointer() );
58 /*_AppWidgetProviderInfoImpl::_AppWidgetProviderInfoImpl(const _AppWidgetProviderInfoImpl& rhs)
60 __appId = rhs.__appId;
62 __providerId = rhs.__providerId;
65 _AppWidgetProviderInfoImpl&
66 _AppWidgetProviderInfoImpl::operator =(const _AppWidgetProviderInfoImpl& rhs)
68 __appId = rhs.__appId;
70 __providerId = rhs.__providerId;
75 _AppWidgetProviderInfoImpl::~_AppWidgetProviderInfoImpl()
80 _AppWidgetProviderInfoImpl::GetAppId() const
86 _AppWidgetProviderInfoImpl::GetName() const
92 _AppWidgetProviderInfoImpl::GetDisplayName() const
94 /* std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(__providerId));
95 __displayName = livebox_service_i18n_name(pPackageId.get(), null);*/
100 _AppWidgetProviderInfoImpl::GetIconPath() const
102 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(__providerId));
103 String iconPath = livebox_service_i18n_icon(pPackageId.get(), null);
109 _AppWidgetProviderInfoImpl::GetConfigurationAppControlAppId() const
111 return __configurationAppControlAppId;
115 _AppWidgetProviderInfoImpl::IsDefault() const
121 _AppWidgetProviderInfoImpl::GetPrivilegeLevel(const AppId& appId)
124 Package::_PackageManagerImpl* pPkg = Package::_PackageManagerImpl::GetInstance();
125 SysTryReturn(NID_APP, pPkg != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageManager instance.");
127 String pkgId = Package::_PackageManagerImpl::GetPackageIdByAppId(appId);
128 SysTryReturn(NID_APP, !pkgId.IsEmpty(), _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid appId(%ls).", appId.GetPointer() );
130 Package::PackageInfo* pInfo = pPkg->GetPackageInfoN(pkgId);
131 SysTryReturn(NID_APP, pInfo != null, _API_VISIBILITY_PUBLIC, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
133 const Package::_PackageInfoImpl* pPkgInfo = Package::_PackageInfoImpl::GetInstance(pInfo);
134 SysTryReturn(NID_APP, pPkgInfo != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageInfo instance.");
136 return pPkgInfo->GetApiVisibility();
140 _AppWidgetProviderInfoImpl::IsValidSize(const AppId& appId, int w, int h)
142 if (appId.StartsWith("com.samsung.", 0) == true)
147 // static const int UNIT_SIZE_BASE = 175;
148 static const int UNIT_SIZE_2 = 354;// UNIT_SIZE_BASE*n + 4*(n-1)
149 // static const int UNIT_SIZE_4 = 712;
151 int privilegeLevel = GetPrivilegeLevel(appId);
152 if( privilegeLevel == _API_VISIBILITY_PUBLIC || privilegeLevel == _API_VISIBILITY_PARTNER)
154 if( h > UNIT_SIZE_2 || w > UNIT_SIZE_2)
156 SysLog(NID_SHELL, "%dx%d size is invalid for %d privilege", privilegeLevel);
160 /*else if( size.height > UNIT_SIZE_4 || size.width > UNIT_SIZE_4)
167 Tizen::Base::Collection::IList*
168 _AppWidgetProviderInfoImpl::GetSizeInfoListN() const
170 static const int MAX_SUPPORTED_SIZE_TYPE = 6;//TODO: check this value.
172 int supportedSizeCount = MAX_SUPPORTED_SIZE_TYPE;
173 int widthArray[MAX_SUPPORTED_SIZE_TYPE];
174 int heightArray[MAX_SUPPORTED_SIZE_TYPE];
176 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(__providerId));
177 livebox_service_get_supported_sizes(pPackageId.get(), &supportedSizeCount , widthArray, heightArray);
179 SysTryReturn(NID_SHELL, supportedSizeCount > 0, null, E_INVALID_ARG, "[E_INVALID_ARG] There is no appwidget of provider(%ls)",__providerId.GetPointer() );
181 std::unique_ptr<ArrayList> pSizes(new (std::nothrow) ArrayList);
182 SysTryReturn(NID_SHELL, pSizes, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate memory for ArrayList." );
185 FloatDimension size(0, 0);
186 String previewImagePath;
188 for(int i = 0; i < supportedSizeCount; i++)
190 size.SetSize(widthArray[i], heightArray[i]);
191 previewImagePath = livebox_service_preview(pPackageId.get(), livebox_service_size_type(static_cast<int>(size.width), static_cast<int>(size.height) ) );
193 if( IsValidSize(__appId, size.width, size.height) == false )
198 std::unique_ptr<AppWidgetSizeInfo> pAppWidgetSizeInfo(_AppWidgetSizeInfoImpl::CreateAppWidgetSizeInfo(size, previewImagePath) );
199 SysTryReturn(NID_SHELL, pAppWidgetSizeInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate memory for AppWidgetSizeInfo." );
200 pSizes->Add( *pAppWidgetSizeInfo.release() );
202 return pSizes.release();
205 AppWidgetProviderInfo*
206 _AppWidgetProviderInfoImpl::GetAppWidgetProviderInfoN(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName)
208 std::unique_ptr<char[]> pProviderId(_StringConverter::CopyToCharArrayN(_AppWidgetManagerImpl::MakeProviderName(appId, providerName)));
210 bool isDefault = livebox_service_is_primary(pProviderId.get());
211 return GetAppWidgetProviderInfoN(appId, providerName, isDefault);
214 AppWidgetProviderInfo*
215 _AppWidgetProviderInfoImpl::GetAppWidgetProviderInfoN(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, bool isDefault)
217 AppWidgetProviderInfo* pInfo = new (std::nothrow) AppWidgetProviderInfo(appId, providerName);
218 SysTryReturn(NID_SHELL, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate memory for AppWidgetProviderInfo." );
220 _AppWidgetProviderInfoImpl::GetImpl(*pInfo)->__isDefault = isDefault;
225 _AppWidgetProviderInfoImpl*
226 _AppWidgetProviderInfoImpl::GetImpl(const AppWidgetProviderInfo& appwidgetProviderInfo)
228 return static_cast<_AppWidgetProviderInfoImpl*>(appwidgetProviderInfo.__pAppWidgetProviderInfoImpl);
231 } /* namespace AppWidget */
232 } /* namespace Samsung */