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_AppWidgetManagerService.cpp
19 * @brief This is the implementation for the AppWidgetManagerService class.
22 #include <unique_ptr.h>
27 #include <FBaseSysLog.h>
28 #include <FBaseColIList.h>
31 #include <FBaseComparerT.h>
32 #include <FApp_AppManagerImpl.h>
33 #include <FShell_AppWidgetManagerImpl.h>
34 #include <FIo_IpcServer.h>
35 #include <FBase_StringConverter.h>
37 #include "FShell_AppWidgetContext.h"
38 #include "FShell_AppWidgetPopupContext.h"
39 #include "FShell_AppWidgetManagerService.h"
40 #include "FShell_TemplateUtil.h"
42 namespace Tizen { namespace Shell { namespace App {
45 using namespace Tizen::App;
46 using namespace Tizen::Base;
47 using namespace Tizen::Base::Collection;
48 using namespace Tizen::Base::Runtime;
49 using namespace Tizen::Io;
50 using namespace Tizen::System;
51 using namespace Tizen::Shell::App;
55 static const char APPNAME_OSP_APPWIDGET_SERVICE[] = "osp-appwidget-service";
56 static const int TIMER_DURATION_PING = 120000;
57 //extern const int UPDATE_PERIOD_MSEC_MIN;
61 AppWidgetManagerService* AppWidgetManagerService::__pTheInstance = null;
63 AppWidgetManagerService::AppWidgetManagerService(void)
68 AppWidgetManagerService::~AppWidgetManagerService(void)
70 SysLog(NID_SHELL, "Enter.");
72 DeinitializeCoreDaemonEventReceiver();
73 SysLog(NID_SHELL, "Exit.");
76 AppWidgetManagerService*
77 AppWidgetManagerService::GetInstance(void)
79 if (__pTheInstance == null)
81 __pTheInstance = CreateInstance(APPNAME_OSP_APPWIDGET_SERVICE);
83 return __pTheInstance;
86 AppWidgetManagerService*
87 AppWidgetManagerService::CreateInstance(const char* pCoreDaemonId)
89 if (__pTheInstance == null)
91 __pTheInstance = new AppWidgetManagerService();
92 SysTryReturn(NID_SHELL, __pTheInstance != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
94 result r = __pTheInstance->Construct(pCoreDaemonId);
95 SysAssertf(!IsFailed(r), "Failed to construct AppWidgetManagerService");
96 SysLog(NID_SHELL, "AppWidgetManagerService is created.");
98 return __pTheInstance;
102 AppWidgetManagerService::Construct(const char* pCoreDaemonId)
104 result r = __appContextList.Construct();
105 SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute Construct.");
107 _AppWidgetManagerStub::StartIpcServer();
109 SettingInfo::AddSettingEventListener(*this);
111 return InitializeCoreDaemonEventReceiver(pCoreDaemonId);
115 AppWidgetManagerService::OnAppWidgetServiceConnected(struct event_arg *arg, void* data)
118 ret = provider_send_hello();
121 SysLog(NID_SHELL, "Success to be connected with master daemon");
122 AppWidgetManagerService::GetInstance()->StartPingTimer();
127 SysLog(NID_SHELL, "Failed to invoke provider_send_hello()");
133 AppWidgetManagerService::OnAppWidgetServiceCDisconnected(struct event_arg *arg, void* data)
135 SysLog(NID_SHELL, "Disconnected with master daemon");
140 AppWidgetManagerService::StartPingTimer(void)
142 result r = E_SUCCESS;
144 r = __pingTimer.Construct(*this);
145 SysTryReturnVoidResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "");
147 r = __pingTimer.StartAsRepeatable(TIMER_DURATION_PING);
148 SysTryReturnVoidResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "");
152 AppWidgetManagerService::OnTimerExpired(Timer& timer)
154 provider_send_ping();
158 AppWidgetManagerService::FindAppWidget(const AppId& appId, const String& instanceId) const
160 _AppContext* pAppContext = null;
161 result r = __appContextList.GetValue(appId, pAppContext);
162 SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "appId(%ls) is not found", appId.GetPointer() );
164 return pAppContext->FindAppWidget(instanceId);
168 AppWidgetManagerService::OnIpcClientConnected(const _IpcServer& server, int clientId)
170 String appId = server.GetClientApplicationId();
171 SysLog(NID_SHELL, "appId(%ls)", appId.GetPointer());
173 _AppContext* pAppContext = null;
174 __appContextList.GetValue(appId, pAppContext);
177 pAppContext->OnIpcConnected(clientId);
182 AppWidgetManagerService::OnIpcClientDisconnected(const _IpcServer& server, int clientId)
184 String appId = server.GetClientApplicationId();
185 SysLog(NID_SHELL, "appId(%ls)", appId.GetPointer());
187 _AppContext* pAppContext = null;
188 __appContextList.GetValue(appId, pAppContext);
191 pAppContext->OnIpcDisconnected();
196 AppWidgetManagerService::OnSettingChanged(Tizen::Base::String& key)
198 // const static wchar_t KEY_SETTING_FONT_SIZE[] = L"http://tizen.org/setting/font.size";
199 const static wchar_t KEY_SETTING_FONT_TYPE[] = L"http://tizen.org/setting/font.type";
200 const static wchar_t KEY_SETTING_LANGUAGE[] = L"http://tizen.org/setting/locale.language";
201 const static wchar_t KEY_SETTING_COUNTRY[] = L"http://tizen.org/setting/locale.country";
203 if( key == KEY_SETTING_FONT_TYPE
204 // || key == KEY_SETTING_FONT_SIZE
205 || key == KEY_SETTING_LANGUAGE
206 || key == KEY_SETTING_COUNTRY )
208 SysLog(NID_SHELL, "'%ls' is changed.", key.GetPointer() );
209 RequestUpdateAllSuspened();
214 AppWidgetManagerService::AddAppWidget(const Tizen::Base::String& userInfo, const Tizen::Base::String& providerId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority)
218 _AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, appId, providerName);
220 _AppContext* pAppContext = null;
221 bool containsKey = false;
222 __appContextList.ContainsKey(appId, containsKey);
223 if( containsKey == false)
225 pAppContext = new(std::nothrow) _AppContext(appId);
226 SysTryReturn(NID_SHELL, pAppContext, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
227 __appContextList.Add(appId, pAppContext);
231 __appContextList.GetValue(appId, pAppContext);
234 return pAppContext->AddAppWidget(userInfo, providerId, instanceId, width, height, period, priority);
237 ///////////////////////////////////////////////////////
238 // CoreDaemonEventReceiver implementation
239 ///////////////////////////////////////////////////////
241 AppWidgetManagerService::OnAppWidgetCreate(struct event_arg *arg, int *width, int *height, double *priority, void* data)
243 SysTryReturn(NID_SHELL, arg != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]");
244 SysTryReturn(NID_SHELL, arg->pkgname != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]");
245 SysTryReturn(NID_SHELL, arg->id != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]");
246 SysTryReturn(NID_SHELL, arg->type == event_arg::EVENT_NEW, -EPERM, E_SUCCESS, "invalid argument from master");
248 SysSecureLog(NID_SHELL, "providerId(%s) id(%s) content(%s) cluster(%s) category(%s)", arg->pkgname, arg->id, arg->info.lb_create.content, arg->info.lb_create.cluster, arg->info.lb_create.category);
249 AppWidgetManagerService* pAppWidgetService = AppWidgetManagerService::GetInstance();
250 // SysTryReturn (NID_SHELL, pAppWidgetService->FindAppWidget(ExtractAppId(arg->pkgname), arg->id) == null, -EBUSY, E_SUCCESS,"already exist");
252 const double default_priority = 1.0f;
253 _AppWidgetContext* pAppWidgetContext = pAppWidgetService->AddAppWidget(arg->info.lb_create.content, arg->pkgname, arg->id, arg->info.lb_create.width, arg->info.lb_create.height, arg->info.lb_create.period * 1000, default_priority);
255 *priority = pAppWidgetContext->GetPriority();
256 *height= pAppWidgetContext->GetHeight();
257 *width = pAppWidgetContext->GetWidth();
263 AppWidgetManagerService::OnAppWidgetUpdate(struct event_arg *arg, void* data)
265 bool isInstanceIdSpecified = (arg->id == null || strlen(arg->id) < 1) ? false : true;
266 if (isInstanceIdSpecified == false)
270 _AppWidgetManagerImpl::ExtractAppIdAndProviderName(arg->pkgname, appId, providerName);
272 AppWidgetManagerService::GetInstance()->RequestUpdate(appId, providerName, L"");
276 _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
277 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
279 pAppWidgetContext->OnUpdate(L"");
286 AppWidgetManagerService::OnAppWidgetDestroy(struct event_arg *arg, void* data)
288 SysTryReturn (NID_SHELL, arg->type == event_arg::EVENT_DELETE, -EPERM, E_SUCCESS, "invalid argument from master");
289 SysLog(NID_SHELL, "Enter");
291 _AppContext* pAppContext = null;
292 result r = AppWidgetManagerService::GetInstance()->__appContextList.GetValue(_AppWidgetHelper::ExtractAppId(arg->pkgname), pAppContext);
293 SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]");
295 pAppContext->RemoveAppWidget(arg->id);
297 SysLog(NID_SHELL, "Exit");
302 AppWidgetManagerService::OnAppWidgetPopupCreate(struct event_arg *arg, void* data)
304 SysTryReturn (NID_SHELL, arg->type == event_arg::EVENT_PD_CREATE, -EPERM, E_SUCCESS, "invalid argument from master");
305 SysSecureLog(NID_SHELL, "providerId(%s), id(%s), x(%d), y(%d), width(%f), height(%f), priority(%d)", arg->pkgname, arg->id, arg->info.pd_create.x, arg->info.pd_create.y, arg->info.pd_create.w, arg->info.pd_create.h);
307 _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
308 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
310 pAppWidgetContext->OnPopupCreated(arg->info.pd_create.x, arg->info.pd_create.y, arg->info.pd_create.w, arg->info.pd_create.h);
316 AppWidgetManagerService::OnAppWidgetPopupDestroy(struct event_arg *arg, void* data)
318 SysTryReturn (NID_SHELL, arg->type == event_arg::EVENT_PD_DESTROY, -EPERM, E_SUCCESS, "invalid argument from master");
319 _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
320 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
322 SysSecureLog(NID_SHELL, "providerId(%s), id(%s)", arg->pkgname, arg->id);
323 pAppWidgetContext->OnPopupDestoyed();
329 AppWidgetManagerService::OnAppWidgetBackground(struct event_arg *arg, void* data)
331 SysTryReturn(NID_SHELL, arg, 0, E_SUCCESS, "arg is null!");
333 _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
334 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , 0, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
336 SysSecureLog(NID_SHELL, "providerId(%s), id(%s)", arg->pkgname, arg->id);
337 pAppWidgetContext->OnBackground();
343 AppWidgetManagerService::OnAppWidgetBackgroundAll(struct event_arg *arg, void* data)
345 unique_ptr< IMapEnumeratorT<String, _AppContext*> > pAppContextEnum(AppWidgetManagerService::GetInstance()->__appContextList.GetMapEnumeratorN());
346 SysTryReturnResult(NID_SHELL, pAppContextEnum, E_SYSTEM, "Failed to invoke __appContextList.GetMapEnumeratorN()");
348 while (pAppContextEnum->MoveNext() == E_SUCCESS)
350 _AppContext* pAppContext = null;
351 pAppContextEnum->GetValue(pAppContext);
355 pAppContext->OnAppWidgetBackgroundAll();
363 AppWidgetManagerService::OnAppWidgetForeground(struct event_arg *pArg, void* pData)
365 SysTryReturn(NID_SHELL, pArg || pArg->id || pArg->pkgname, 0, E_SUCCESS, "pArg is null!");
366 SysSecureLog(NID_SHELL, "providerId(%s), id(%s)", pArg->pkgname, pArg->id);
368 _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(pArg->pkgname), pArg->id);
369 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", pArg->pkgname, pArg->id);
371 pAppWidgetContext->OnForeground();
377 AppWidgetManagerService::OnAppWidgetForegroundAll(struct event_arg *pArg, void* pData)
379 unique_ptr< IMapEnumeratorT<String, _AppContext*> > pAppContextEnum(AppWidgetManagerService::GetInstance()->__appContextList.GetMapEnumeratorN());
380 SysTryReturnResult(NID_SHELL, pAppContextEnum, E_SYSTEM, "Failed to invoke __appContextList.GetMapEnumeratorN()");
382 while (pAppContextEnum->MoveNext() == E_SUCCESS)
384 _AppContext* pAppContext = null;
385 pAppContextEnum->GetValue(pAppContext);
389 pAppContext->OnAppWidgetForegroundAll();
397 AppWidgetManagerService::OnAppWidgetClick(struct event_arg *arg, void* data)
399 SysTryReturn (NID_SHELL, arg->type == event_arg::EVENT_CLICKED, -EPERM, E_SUCCESS, "invalid argument from master");
400 SysTryReturn(NID_SHELL, arg != null, -EPERM, E_SUCCESS, "arg is null!");
401 SysSecureLog(NID_SHELL, "providerId(%s), id(%s), clicked.event(%s), clicked.x(%f), clicked.y(%f)", arg->pkgname, arg->id, arg->info.clicked.event, arg->info.clicked.x, arg->info.clicked.y);
407 AppWidgetManagerService::OnAppWidgetResize(struct event_arg *arg, void* data)
409 SysTryReturn(NID_SHELL, arg || arg->id || arg->pkgname, 0, E_SUCCESS, "arg is null!");
410 SysTryReturn (NID_SHELL, arg->type == event_arg::EVENT_RESIZE, -EPERM, E_SUCCESS, "invalid argument from master");
412 SysSecureLog(NID_SHELL, "providerId(%s), id(%s), resize.w(%d), resize.h(%d)", arg->pkgname, arg->id, arg->info.resize.w, arg->info.resize.h);
414 _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
415 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
417 pAppWidgetContext->OnResize(arg->info.resize.w, arg->info.resize.h);
423 AppWidgetManagerService::OnAppWidgetPeriodChanged(struct event_arg *arg, void* data)
425 SysTryReturn(NID_SHELL, arg != null, 0, E_SUCCESS, "arg is null!");
426 SysSecureLog(NID_SHELL, "providerId(%s), id(%s), width(%d), height(%d), priority(%d)", arg->pkgname, arg->id);
431 AppWidgetManagerService::OnAppWidgetRecreate(struct event_arg *arg, void* data)
433 SysTryReturn(NID_SHELL, arg != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]");
434 SysTryReturn(NID_SHELL, arg->pkgname != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]");
435 SysTryReturn(NID_SHELL, arg->id != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]");
436 SysTryReturn(NID_SHELL, arg->type == event_arg::EVENT_RENEW, -EPERM, E_SUCCESS, "invalid argument from master");
438 SysSecureLog(NID_SHELL, "providerId(%s) id(%s) content(%s) cluster(%s) category(%s)", arg->pkgname, arg->id, arg->info.lb_recreate.content, arg->info.lb_recreate.cluster, arg->info.lb_recreate.category);
440 AppWidgetManagerService* pAppWidgetManagerService = AppWidgetManagerService::GetInstance();
441 SysTryReturn(NID_SHELL, pAppWidgetManagerService != null, -EBUSY, E_SYSTEM, "Failed to get the instance for AppWidgetManagerService.");
443 const double default_priority = 1.0f;
444 _AppWidgetContext* pAppWidgetContext = pAppWidgetManagerService->AddAppWidget(arg->info.lb_create.content, arg->pkgname, arg->id, arg->info.lb_create.width, arg->info.lb_create.height, arg->info.lb_create.period * 1000, default_priority);
445 SysTryReturn(NID_SHELL, pAppWidgetContext != null, -EBUSY, E_SYSTEM, "Failed to add the appwidget.");
451 AppWidgetManagerService::InitializeCoreDaemonEventReceiver(const char *pCoreDaemonId)
453 SysTryReturnResult(NID_SHELL, pCoreDaemonId != null, E_INVALID_ARG, "pCoreDaemonId should not be null!");
455 struct event_handler cbs;
456 memset(&cbs, 0, sizeof(event_handler));
458 cbs.connected = OnAppWidgetServiceConnected,
459 cbs.disconnected = OnAppWidgetServiceCDisconnected,
460 cbs.pause = OnAppWidgetBackgroundAll,
461 cbs.resume = OnAppWidgetForegroundAll,
462 cbs.lb_pause = OnAppWidgetBackground,
463 cbs.lb_resume = OnAppWidgetForeground,
464 cbs.lb_create = OnAppWidgetCreate,
465 cbs.lb_destroy = OnAppWidgetDestroy,
466 cbs.update_content = OnAppWidgetUpdate,
467 cbs.pd_create = OnAppWidgetPopupCreate,
468 cbs.pd_destroy = OnAppWidgetPopupDestroy,
469 cbs.clicked = OnAppWidgetClick,
470 cbs.resize = OnAppWidgetResize,
471 cbs.set_period = OnAppWidgetPeriodChanged;
472 cbs.lb_recreate = OnAppWidgetRecreate;/* Recover from the fault of slave */
473 //cbs.content_event = OnAppWidgetContentEvent,
475 int ret = provider_init(null, pCoreDaemonId, &cbs, this);
476 SysTryReturnResult(NID_SHELL, ret == 0, E_SYSTEM, "provider_init failed.");
478 SysLog(NID_SHELL, "provider_init is invoked with (%s)", pCoreDaemonId);
483 AppWidgetManagerService::DeinitializeCoreDaemonEventReceiver(void)
489 ///////////////////////////////////////////////////////
490 // stub implementation
491 ///////////////////////////////////////////////////////
495 AppWidgetManagerService::RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& argument) const
497 _AppContext* pAppContext = null;
498 result r = __appContextList.GetValue(appId, pAppContext);
499 SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "appId(%ls) is not found", appId.GetPointer() );
501 return pAppContext->RequestUpdate(providerName, argument);
505 AppWidgetManagerService::RequestUpdateAllSuspened(void) const
507 unique_ptr< IMapEnumeratorT<String, _AppContext*> > pAppContextEnum(__appContextList.GetMapEnumeratorN());
508 SysTryReturnResult(NID_SHELL, pAppContextEnum, E_SYSTEM, "Failed to invoke __appContextList.GetMapEnumeratorN()");
510 while (pAppContextEnum->MoveNext() == E_SUCCESS)
512 _AppContext* pAppContext = null;
513 pAppContextEnum->GetValue(pAppContext);
515 if ( pAppContext && _AppManagerImpl::GetInstance()->IsRunning(pAppContext->GetAppId()) == false )
517 pAppContext->RequestUpdate(L"", L"");
522 SysLog(NID_SHELL, "Exit.");
527 AppWidgetManagerService::RequestUpdateInstance(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, const Tizen::Base::String& argument)
529 SysSecureLog(NID_SHELL, "%ls, %ls", instanceId.GetPointer(), argument.GetPointer() );
531 _AppWidgetContext* pAppWidgetContext = FindAppWidget(appId, instanceId);
532 SysTryReturnResult(NID_SHELL, pAppWidgetContext, E_OBJ_NOT_FOUND, "Failed to find the object(%ls).", instanceId.GetPointer());
534 pAppWidgetContext->OnUpdateAsync(argument);
539 AppWidgetManagerService::AcquireRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& bufferId)
541 _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
542 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
544 bufferId = pAppWidgetContext->AcquireRemoteBuffer(width, height);
545 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , bufferId != -1, "[E_SYSTEM] failed to AcquireRemoteBuffer for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
551 AppWidgetManagerService::AcquireRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& bufferId)
553 _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
554 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
556 _AppWidgetPopupContext* pPopupContext = pAppWidgetContext->GetAppWidgetPopup();
557 SysSecureTryReturnResult(NID_SHELL, pPopupContext , E_SYSTEM, "[E_SYSTEM] pPd is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
559 bufferId = pPopupContext->AcquireRemoteBuffer(width, height);
560 SysSecureTryReturnResult(NID_SHELL, bufferId != -1, E_SYSTEM, "Failed to AcquireRemoteBuffer for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
566 AppWidgetManagerService::SyncRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height)
568 _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
569 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
571 return pAppWidgetContext->SyncRemoteBuffer(width, height);
575 AppWidgetManagerService::SyncRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId)
577 _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
578 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
579 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext->GetAppWidgetPopup(), E_SYSTEM, "[E_SYSTEM] GetAppWidgetPopup() returns null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
581 return pAppWidgetContext->GetAppWidgetPopup()->SyncRemoteBuffer();
585 AppWidgetManagerService::ReleaseRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId)
591 AppWidgetManagerService::ReleaseRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId)
597 AppWidgetManagerService::RequestProviderCount(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int& providerCount)
599 SysLog(NID_SHELL, "ENTER");
601 _AppContext* pAppContext = null;
602 result r = __appContextList.GetValue(appId, pAppContext);
603 SysTryReturn(NID_SHELL, pAppContext, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]");
605 providerCount = pAppContext->GetProviderCount(appId);
607 r = pAppContext->RemoveAppWidget(instanceId, false);
608 SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute RemoveAppWidget.");
612 pAppContext->SendPendingEvent();
618 AppWidgetManagerService::SendResult(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, bool isSucceeded)
620 _AppContext* pAppContext = null;
621 result r = __appContextList.GetValue(appId, pAppContext);
622 SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "appId(%ls) is not found", appId.GetPointer() );
626 r = pAppContext->RemoveAppWidget(instanceId, false);
627 SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute RemoveAppWidget.");
629 else // for pending event excluding touch event.
631 SysLog(NID_SHELL, "SendResult is called[true].");
634 pAppContext->SendPendingEvent();
640 AppWidgetManagerService::SendAccessStatus(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int accessStatus)
642 _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
643 SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
645 return pAppWidgetContext->SendAccessStatus(accessStatus);
649 AppWidgetManagerService::OnUserEventReceivedN(RequestId reqId, IList* pArgs)
651 SysTryReturnVoidResult(NID_SHELL, pArgs != null, E_INVALID_STATE, "pArgs is null!.");
653 SysLog(NID_SHELL, "Enter.");
657 case LOCAL_EVENT_REQUEST_UPDATE:
659 _AppWidgetContext* pAppWidgetContext = dynamic_cast<_AppWidgetContext*>( pArgs->GetAt(0) );
660 SysTryReturnVoidResult(NID_SHELL, pAppWidgetContext != null, E_INVALID_STATE, "_AppWidget is null!.");
662 String* pArgument = dynamic_cast<String*>( pArgs->GetAt(1) );
663 SysTryReturnVoidResult(NID_SHELL, pArgument != null, E_INVALID_STATE, "pArgument is null!.");
665 pAppWidgetContext->OnUpdate(*pArgument);
674 SysAssertf(false, "Never get here!");
678 SysLog(NID_SHELL, "Exit.");
683 _AppWidgetHelper::ExtractAppId(const String& providerId)
685 int indexOfSecondDot = 0;
686 result r = providerId.IndexOf(".", 12, indexOfSecondDot);//"1234567890._"
687 SysTryReturn(NID_SHELL, !IsFailed(r), L"", E_INVALID_ARG, "[E_INVALID_ARG] Failed to get the index from providerId(%ls).", providerId.GetPointer() );
690 providerId.SubString(0, indexOfSecondDot, appId);
695 _AppWidgetHelper::ExtractProviderName(const String& providerId)
697 int indexOfSecondDot = 0;
698 result r = providerId.IndexOf(".", 12, indexOfSecondDot);//"1234567890._"
699 SysTryReturn(NID_SHELL, !IsFailed(r), L"", E_INVALID_ARG, "[E_INVALID_ARG] Failed to get the index from providerId(%ls).", providerId.GetPointer() );
702 providerId.SubString(indexOfSecondDot + 1, providerName);
706 }}} // Tizen::Shell::App