#include <FBaseDouble.h>
#include <FBaseColHashMap.h>
#include <FShellTypes.h>
+#include <FAppAppManager.h>
+#include <FSysRuntimeInfo.h>
#include <FIo_IpcClient.h>
#include <FShell_AppWidgetManagerIpcMessage.h>
#include "FShell_AppWidgetProviderManagerImpl.h"
namespace
{
-const char IPC_SERVER_NAME[] = "osp.shell.ipcserver.appwidgetmanager";
+static const wchar_t _APPID_OSP_APPWIDGET_SERVICE[] = L"gi2qxenosh.osp-appwidget-service";
+static const char IPC_SERVER_NAME[] = "osp.shell.ipcserver.appwidgetmanager";
};
using namespace Tizen::Io;
return __pAppWidgetProxy.get();
}
+bool IsSystemInitializing(void)
+{
+ static const wchar_t _BOOT_STATUS_KEY[] = L"http://tizen.org/runtime/system.status";
+ static const wchar_t _BOOT_STATUS_INITIALIZING[] = L"initializing";
+
+ String status;
+ Tizen::System::RuntimeInfo::GetValue(_BOOT_STATUS_KEY, status);
+
+ if (status == _BOOT_STATUS_INITIALIZING)
+ {
+ return true;
+ }
+
+ return false;
+}
+
result
_AppWidgetManagerProxy::Construct(void)
{
- SysLog(NID_SHELL, "Enter.");
+ bool isServiceRunning = Tizen::App::AppManager::GetInstance()->IsRunning(_APPID_OSP_APPWIDGET_SERVICE);
+ bool canConstruct = ( isServiceRunning || IsSystemInitializing() ) ? true : false;
+ if (canConstruct == false)
+ {
+ SysLog(NID_SHELL, "%ls is not running.", _APPID_OSP_APPWIDGET_SERVICE);
+ return E_SYSTEM;
+ }
std::unique_ptr<_IpcClient> pIpcClient(new (std::nothrow) _IpcClient() );
SysTryReturnResult(NID_SHELL, pIpcClient, E_OUT_OF_MEMORY, "_IpcClient creation failed.");
- const int MAX_TRY_COUNT = 2;
- const int TRY_SLEEP_TIME = 65;
+ result r = pIpcClient->Construct(IPC_SERVER_NAME, this);
+ SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "[%s] Failed to connect service.(%s)", GetErrorMessage(r), IPC_SERVER_NAME);
- int count = 0;
- while (true)
- {
- result r = pIpcClient->Construct(IPC_SERVER_NAME, this);
- if (r == E_SUCCESS)
- {
- SysLog(NID_APP, "Succeeded in connecting service(%s)", IPC_SERVER_NAME);
- __pIpcClient = pIpcClient.release();
- return E_SUCCESS;
- }
+ __pIpcClient = pIpcClient.release();
- SysTryReturn(NID_APP, ++count < MAX_TRY_COUNT, E_SYSTEM, r, "[%s] Failed to connect service.(%s)", GetErrorMessage(r), IPC_SERVER_NAME);
-
- Tizen::Base::Runtime::Thread::Sleep(TRY_SLEEP_TIME);
- }
-
- SysLog(NID_SHELL, "Exit.");
+ SysLog(NID_SHELL, "Succeeded in connecting service(%s)", IPC_SERVER_NAME);
return E_SUCCESS;
}
{
String packageId = _PackageManagerImpl::GetPackageIdByAppId(appId);
std::unique_ptr<PackageInfo> pInfo( _PackageManagerImpl::GetInstance()->GetPackageInfoN(packageId) );
- SysTryReturn(NID_APP, pInfo != null, false, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()) );
+ SysTryReturn(NID_SHELL, pInfo != null, false, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()) );
const _PackageInfoImpl* pPkgInfo = _PackageInfoImpl::GetInstance(pInfo.get());
- SysTryReturn(NID_APP, pPkgInfo != null, false, E_SYSTEM, "Invalid PackageInfo instance.");
+ SysTryReturn(NID_SHELL, pPkgInfo != null, false, E_SYSTEM, "Invalid PackageInfo instance.");
static const String TPK_TYPE = L"tpk";
if( pPkgInfo && pPkgInfo->GetAppType() == TPK_TYPE )
AppWidgetProvider* pAppWidgetProvider = null;
__appwidgetProviders.GetValue(instanceId, pAppWidgetProvider);
- result r = __appwidgetProviders.Remove(instanceId);
- SysLog(NID_SHELL, "%s", GetErrorMessage(r) );
+ __appwidgetProviders.Remove(instanceId);
if (pAppWidgetProvider != null)
{
_AppWidgetManagerEvent::FireImpl(Tizen::Base::Runtime::IEventListener& listener, const Tizen::Base::Runtime::IEventArg& arg)
{
_AppWidgetManagerEventListener* pListener = dynamic_cast<_AppWidgetManagerEventListener*>(&listener);
- SysTryReturnVoidResult(NID_APP, pListener != null, E_INVALID_STATE, "Invalid listener : listener(0x%x), arg(0x%x)", &listener, &arg);
+ SysTryReturnVoidResult(NID_SHELL, pListener != null, E_INVALID_STATE, "Invalid listener : listener(0x%x), arg(0x%x)", &listener, &arg);
const _AppWidgetManagerEventArg* pEventArg = dynamic_cast<const _AppWidgetManagerEventArg*>(&arg);
- SysTryReturnVoidResult(NID_APP, pEventArg != null, E_INVALID_STATE, "Invalid arg : listener(0x%x), arg(0x%x)", &listener, &arg);
+ SysTryReturnVoidResult(NID_SHELL, pEventArg != null, E_INVALID_STATE, "Invalid arg : listener(0x%x), arg(0x%x)", &listener, &arg);
pListener->OnAppWidgetManagerEventRecieved(pEventArg->GetOperation(), pEventArg->GetExtra());