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_AppWidgetManagerImpl.cpp
19 * @brief This is the implementation for the _AppWidgetManagerImpl class.
22 #include <unique_ptr.h>
25 #include <livebox-service/livebox-service.h>
27 #include <FBaseSysLog.h>
30 #include <FGrpDimension.h>
31 #include <FApp_AppImpl.h>
32 #include <FBase_StringConverter.h>
33 #include <FAppPkg_PackageManagerImpl.h>
35 #include <FShellAppWidgetProviderInfo.h>
36 #include <FShellAppWidgetProvider.h>
37 #include <FShellAppWidgetPopupProvider.h>
38 #include <FShellAppWidgetFrame.h>
39 #include <FShellAppWidgetPopup.h>
41 #include <FShellIAppWidgetRequestListener.h>
42 #include <FShellIAppWidgetProviderFactory.h>
43 #include <FShellIAppWidgetPopupProviderFactory.h>
45 #include <FShell_IAppWidgetTouchEventListener.h>
46 #include <FShell_TemplateUtil.h>
48 #include "FShell_ShortcutManagerImpl.h"
49 #include "FShell_AppWidgetManagerProxy.h"
50 #include "FShell_AppWidgetManagerImpl.h"
51 #include "FShell_AppWidgetProviderInfoImpl.h"
53 namespace Tizen { namespace Shell
56 using namespace Tizen::Base;
57 using namespace Tizen::Base::Collection;
58 using namespace Tizen::App;
59 using namespace Tizen::Graphics;
61 _AppWidgetManagerImpl::_AppWidgetManagerImpl()
62 :__pAppWidgetRequestEventListener(null)
64 SysLog(NID_SHELL, "");
67 _AppWidgetManagerImpl::~_AppWidgetManagerImpl()
69 SysLog(NID_SHELL, "");
70 livebox_service_fini();
73 _AppWidgetManagerImpl*
74 _AppWidgetManagerImpl::GetInstance()
76 static _AppWidgetManagerImpl* __pAppWidgetManagerImpl = null;
77 if( __pAppWidgetManagerImpl == null)
79 __pAppWidgetManagerImpl = new (std::nothrow)_AppWidgetManagerImpl;
80 SysTryReturn(NID_SHELL, __pAppWidgetManagerImpl, null, E_OUT_OF_MEMORY, "Allocating new _AppWidgetManagerProxy failed.");
82 result r = __pAppWidgetManagerImpl->Construct();
83 SysTryReturn(NID_SHELL, !IsFailed(r), null, r, "[%s] Propagating.", GetErrorMessage(r));
85 return __pAppWidgetManagerImpl;
89 _AppWidgetManagerImpl::Construct()
91 SysLog(NID_SHELL, "Enter.");
93 int ret = livebox_service_init();
94 SysTryReturnResult(NID_SHELL, ret == 0, E_SYSTEM, "[E_SYSTEM] Failed to invoke livebox_service_init, ret (%d)", ret);
96 SysLog(NID_SHELL, "Exit.");
100 // c style callback for livebox_service_get_pkglist
101 int GetAppWidgetProviderInfoCallback(const char *pPackageId, const char *pProviderId, int is_prime, void *data)
103 SysLog(NID_SHELL, "%s, %s, is_prime(%d)", pPackageId, pProviderId, is_prime);
105 IList* pAppWidgetProviderInfos = static_cast<IList*>(data);
106 SysTryReturn(NID_SHELL, pAppWidgetProviderInfos, 0, E_SYSTEM, "[E_SYSTEM] system error.");
108 String providerId(pProviderId);
111 _AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, appId, providerName);
113 AppWidgetProviderInfo* pInfo = _AppWidgetProviderInfoImpl::GetAppWidgetProviderInfoN(appId, providerName, is_prime);
114 pAppWidgetProviderInfos->Add(*pInfo);
119 Tizen::Base::Collection::IList*
120 _AppWidgetManagerImpl::GetAppWidgetProviderInfoListN()
122 std::unique_ptr<ArrayList> pAppWidgetProviders(new (std::nothrow) ArrayList());
123 SysTryReturn(NID_SHELL, pAppWidgetProviders.get(), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
125 pAppWidgetProviders->Construct();
126 int ret = livebox_service_get_pkglist(GetAppWidgetProviderInfoCallback, pAppWidgetProviders.get());
129 SysLog(NID_SHELL, "Failed to invoke livebox_service_get_pkglist, ret (%d)", ret);
132 if (pAppWidgetProviders->GetCount() <= 0)
137 return pAppWidgetProviders.release();
140 AppWidgetProviderInfo*
141 _AppWidgetManagerImpl::GetAppWidgetProviderInfoN(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName)
143 return _AppWidgetProviderInfoImpl::GetAppWidgetProviderInfoN(appId, providerName);
146 AppWidgetProviderInfo*
147 _AppWidgetManagerImpl::GetDefaultAppWidgetProviderInfoN(const Tizen::App::PackageId& packageId)
149 SysTryReturn(NID_SHELL, Tizen::App::Package::_PackageManagerImpl::GetInstance()->IsPackageInstalled(packageId) == true,
150 null, E_APP_NOT_INSTALLED,
151 "[E_APP_NOT_INSTALLED] The application package(%ls) is not installed.", packageId.GetPointer() );
153 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId) );
154 std::unique_ptr<char[]> pDefaultProviderId(livebox_service_pkgname(pPackageId.get()) );
155 SysTryReturn(NID_SHELL, pDefaultProviderId.get(), null, E_SUCCESS, "Specified package(%ls) has no default provider.", packageId.GetPointer() );
157 String providerId(pDefaultProviderId.get());
160 _AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, appId, providerName);
162 return _AppWidgetProviderInfoImpl::GetAppWidgetProviderInfoN(appId, providerName, true);
166 _AppWidgetManagerImpl::IsAppWidgetProviderDefault(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName)
168 std::unique_ptr<char[]> pProviderId(_StringConverter::CopyToCharArrayN(_AppWidgetManagerImpl::MakeProviderName(appId, providerName)));
169 return livebox_service_is_primary(pProviderId.get());
172 // c - style callback for shortcut_set_request_cb
173 int AppWidgetRequestHandlerCallback(const char* providerId, const char* text, int type, const char* content_info, const char* icon, int pid, double period, int allowDuplication, void *data)
175 SysLog(NID_SHELL, "Enter");
176 SysTryReturn(NID_SHELL, providerId, 0, E_SYSTEM, "[E_SYSTEM] providerId is null!");
178 _AppWidgetManagerImpl* pAppWidgetManager = static_cast<_AppWidgetManagerImpl*>(data);
179 SysTryReturn(NID_SHELL, pAppWidgetManager, 0, E_SYSTEM, "[E_SYSTEM] pAppWidgetManager is null!");
183 _AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, appId, providerName);
185 IAppWidgetRequestListener* pListener = _AppWidgetManagerImpl::GetInstance()->GetAddRequestListener();
186 SysTryReturn(NID_SHELL, pAppWidgetManager, 0, E_SYSTEM, "[E_SYSTEM] pListener is null!");
187 pListener->OnAppWidgetAddRequested(appId, providerName, text, content_info);
192 _AppWidgetManagerImpl::SetAppWidgetRequestListener(IAppWidgetRequestListener* pListener)
194 // int ret = shortcut_set_request_cb(AppWidgetRequestHandlerCallback, this );
195 // SysTryReturnResult(NID_SHELL, ret == 0, E_SYSTEM, "failed to shortcut_set_request_cb (%d)", ret);
196 _ShortcutManagerImpl::GetInstance()->SetAppWidgetRequestHandlerCallback(AppWidgetRequestHandlerCallback);
198 __pAppWidgetRequestEventListener = pListener;
202 IAppWidgetRequestListener*
203 _AppWidgetManagerImpl::GetAddRequestListener()
205 return __pAppWidgetRequestEventListener;
210 _AppWidgetManagerImpl::ExtractAppIdAndProviderName(const Tizen::Base::String& providerId, Tizen::App::AppId& appId, Tizen::Base::String& providerName)
214 if( providerId.StartsWith("com.samsung.", 0) == true)// for core livebox (plugin)
216 if( providerId.IndexOf(".", 13, index) == E_SUCCESS)//"com.samsung._"
218 providerId.SubString(0, index, appId);
219 providerId.SubString(index+1, providerName);
228 providerId.IndexOf(".", 12, index);//"1234567890._"
229 providerId.SubString(0, index, appId);
230 providerId.SubString(index+1, providerName);
237 _AppWidgetManagerImpl::MakeProviderName(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName)
239 if( providerName.IsEmpty() )
241 return appId;// some of core appwidget
246 return providerName;// web appwidget
250 providerId.Format(128, L"%ls.%ls", appId.GetPointer(), providerName.GetPointer() );// native appwidget