From 922fb8c8e2d96d62aad708a79e6b62b1c2a62e3f Mon Sep 17 00:00:00 2001 From: "jungmin76.park" Date: Mon, 22 Apr 2013 17:51:50 +0900 Subject: [PATCH] allow RequestUpdate() can update web appwidget, initialize appwidget when appwidget popup is created Change-Id: I34f337435816423856756fb68517bad8e8a1245f Signed-off-by: jungmin76.park --- inc/FShellAppWidgetProviderInfo.h | 1 + src/FShell_AppWidgetProviderInfoImpl.cpp | 7 +- src/FShell_AppWidgetProviderManagerImpl.cpp | 106 +++++++++++++++++++------- src/inc/FShell_AppWidgetProviderManagerImpl.h | 1 + 4 files changed, 85 insertions(+), 30 deletions(-) diff --git a/inc/FShellAppWidgetProviderInfo.h b/inc/FShellAppWidgetProviderInfo.h index 90756c2..3d13eed 100644 --- a/inc/FShellAppWidgetProviderInfo.h +++ b/inc/FShellAppWidgetProviderInfo.h @@ -189,6 +189,7 @@ private: // AppWidgetProviderInfo& operator =(const AppWidgetProviderInfo& rhs); + private: class _AppWidgetProviderInfoImpl* __pAppWidgetProviderInfoImpl; diff --git a/src/FShell_AppWidgetProviderInfoImpl.cpp b/src/FShell_AppWidgetProviderInfoImpl.cpp index fd9ef39..dd50eb6 100644 --- a/src/FShell_AppWidgetProviderInfoImpl.cpp +++ b/src/FShell_AppWidgetProviderInfoImpl.cpp @@ -123,14 +123,14 @@ _AppWidgetProviderInfoImpl::GetPrivilegeLevel(const AppId& appId) { Package::_PackageManagerImpl* pPkg = Package::_PackageManagerImpl::GetInstance(); - SysTryReturn(NID_APP, pPkg != null, -1, E_INVALID_STATE, "Invalid PackageManager instance."); + SysTryReturn(NID_APP, pPkg != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageManager instance."); Package::PackageInfo* pInfo = null; pInfo = pPkg->GetPackageInfoN(_AppInfo::GetPackageId()); - SysTryReturn(NID_APP, pInfo != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); + SysTryReturn(NID_APP, pInfo != null, _API_VISIBILITY_PUBLIC, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); const Package::_PackageInfoImpl* pPkgInfo = Package::_PackageInfoImpl::GetInstance(pInfo); - SysTryReturnResult(NID_APP, pPkgInfo != null, E_INVALID_STATE, "Invalid PackageInfo instance."); + SysTryReturn(NID_APP, pPkgInfo != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageInfo instance."); return pPkgInfo->GetApiVisibility(); } @@ -190,6 +190,7 @@ _AppWidgetProviderInfoImpl::GetSizeInfoListN() const if( IsValidSize(__appId, size.width, size.height) == false ) { + SysLog(NID_SHELL, "%fx%f is invalid size.", size.width, size.height); continue; } diff --git a/src/FShell_AppWidgetProviderManagerImpl.cpp b/src/FShell_AppWidgetProviderManagerImpl.cpp index 55c8e80..0c368c5 100644 --- a/src/FShell_AppWidgetProviderManagerImpl.cpp +++ b/src/FShell_AppWidgetProviderManagerImpl.cpp @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include #include @@ -36,6 +38,7 @@ #include #include #include +#include #include #include @@ -80,13 +83,16 @@ const char APPWIDGET_POPUP_PREFIX[] = "http://tizen.org/appcontrol/appwidgetpopu const String ARG_KEY_INSTANCE_ID = L"_InstanceId"; const String ARG_KEY_PROVIDER_NAME = L"_ProviderName"; const String ARG_KEY_USER_INFO = L"_UserInfo"; +const String ARG_KEY_X = L"_X"; +const String ARG_KEY_Y = L"_Y"; const String ARG_KEY_WIDTH = L"_Width"; const String ARG_KEY_HEIGHT = L"_Height"; +const String ARG_KEY_POPUP_WIDTH = L"_PopupWidth"; +const String ARG_KEY_POPUP_HEIGHT = L"_PopupHeight"; const String ARG_KEY_ARGUMENT = L"_Argument"; const String ARG_KEY_EVENT_TYPE = L"_EventType"; const String ARG_KEY_TIME_STAMP = L"_TimeStamp"; -const String ARG_KEY_X = L"_X"; -const String ARG_KEY_Y = L"_Y"; + } _AppWidgetProviderManagerImpl::_AppWidgetProviderManagerImpl() @@ -131,7 +137,7 @@ _AppWidgetProviderManagerImpl::Construct() _ServiceAppImpl* pServiceAppImpl = _ServiceAppImpl::GetInstance(); if( pServiceAppImpl) { - pServiceAppImpl->SetLifeDurationEventListener(this); + pServiceAppImpl->SetAppTerminatingInternalEventListener(this); } SysLog(NID_SHELL, "Exit."); @@ -203,6 +209,27 @@ _AppWidgetProviderManagerImpl::SetAppWidgetPopupEventListener(_IAppWidgetTouchEv return E_SUCCESS; } + +bool +_AppWidgetProviderManagerImpl::IsPackagedWithTPK(const Tizen::App::AppId& appId) +{ + String packageId = _PackageManagerImpl::GetPackageIdByAppId(appId); + PackageInfo* pInfo = _PackageManagerImpl::GetInstance()->GetPackageInfoN(packageId); + SysTryReturn(NID_APP, pInfo != null, false, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()) ); + + const _PackageInfoImpl* pPkgInfo = _PackageInfoImpl::GetInstance(pInfo); + SysTryReturn(NID_APP, pPkgInfo != null, false, E_SYSTEM, "Invalid PackageInfo instance."); + + static const String TPK_TYPE = L"tpk"; + if( pPkgInfo && pPkgInfo->GetAppType() == TPK_TYPE ) + { + SysLog(NID_SHELL, "tpk app."); + return true; + } + SysLog(NID_SHELL, "not tpk app."); + return false; +} + result _AppWidgetProviderManagerImpl::RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& argument) { @@ -217,13 +244,30 @@ _AppWidgetProviderManagerImpl::RequestUpdate(const Tizen::App::AppId& appId, con // //TODO: optimizing for local request // } // else + + if( IsPackagedWithTPK(appId) == true) { _AppWidgetManagerProxy* pProxy = _AppWidgetManagerProxy::GetInstance(); SysTryReturnResult(NID_SHELL, pProxy, E_SYSTEM, "Failed to get proxy instance!"); return pProxy->RequestUpdate(appId, providerName, argument); } - + else + { + String providerId; + if( providerName.IsEmpty()) + { + providerId = appId; + } + else + { + providerId = appId + "." + providerName; + } + unique_ptr pPkgName(_StringConverter::CopyToCharArrayN(providerId)); + int ret = livebox_service_trigger_update(pPkgName.get(), null, null, null, 0); + SysTryReturnResult(NID_SHELL, ret == LB_STATUS_SUCCESS || ret == LB_STATUS_ERROR_CANCEL, E_SYSTEM, "Failed to invoke livebox_service_trigger_update() with reason(%d)", ret); + return E_SUCCESS; + } } result @@ -370,36 +414,36 @@ _AppWidgetProviderManagerImpl::OnAppControlRequestReceived(RequestId reqId, cons SysLog(NID_SHELL, "id(%ls), name(%ls), param(%ls)", pInstanceId->GetPointer(), pName->GetPointer(), pParam->GetPointer()); - if(operationId.StartsWith(APPWIDGET_POPUP_PREFIX, 0) == true) - { - SysTryReturnVoidResult(NID_SHELL, __pAppWidgetPopupProviderFactory, E_FAILURE, "[E_FAILURE] __pAppWidgetPopupProviderFactory is null"); - HandleAppWidgetPopupRequest(operationId, pArgs); - } - else + if(this->ContainsAppWidget(*pInstanceId) == false) { - if(this->ContainsAppWidget(*pInstanceId) == false) - { - SysLog(NID_SHELL, "no appwidget instance, creating.."); + SysLog(NID_SHELL, "no appwidget instance, creating.."); - int width = 0; - const String* pValue = dynamic_cast(pArgs->GetValue(ARG_KEY_WIDTH)); - SysTryReturnVoidResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_WIDTH.GetPointer() ); - Integer::Parse(*pValue, width); + int width = 0; + const String* pValue = dynamic_cast(pArgs->GetValue(ARG_KEY_WIDTH)); + SysTryReturnVoidResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_WIDTH.GetPointer() ); + Integer::Parse(*pValue, width); - int height = 0; - pValue = dynamic_cast(pArgs->GetValue(ARG_KEY_HEIGHT)); - SysTryReturnVoidResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_HEIGHT.GetPointer() ); - Integer::Parse(*pValue, height); + int height = 0; + pValue = dynamic_cast(pArgs->GetValue(ARG_KEY_HEIGHT)); + SysTryReturnVoidResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_HEIGHT.GetPointer() ); + Integer::Parse(*pValue, height); - this->CreateAppWidget( *pName, *pInstanceId, width, height, *pParam); + this->CreateAppWidget( *pName, *pInstanceId, width, height, *pParam); - if(operationId == APPWIDGET_ON_RESIZE) - { - SysLog(NID_SHELL, "operation is resize, but appwidget is already recreated with new size, so OnSize won't be called."); - return; - } + if(operationId == APPWIDGET_ON_RESIZE) + { + SysLog(NID_SHELL, "operation is resize, but appwidget is already recreated with new size, so OnSize won't be called."); + return; } + } + if(operationId.StartsWith(APPWIDGET_POPUP_PREFIX, 0) == true) + { + SysTryReturnVoidResult(NID_SHELL, __pAppWidgetPopupProviderFactory, E_FAILURE, "[E_FAILURE] __pAppWidgetPopupProviderFactory is null"); + HandleAppWidgetPopupRequest(operationId, pArgs); + } + else + { SysTryReturnVoidResult(NID_SHELL, __pAppWidgetFactory, E_FAILURE, "[E_FAILURE] __pAppWidgetFactory is null"); HandleAppWidgetRequest(operationId, pArgs); } @@ -668,6 +712,10 @@ _AppWidgetProviderManagerImpl::CreateAppWidgetPopupProvider(const String& instan AppWidgetPopup* pAppWidgetFrame = pPd->GetAppWidgetPopup(); SysTryReturnResult(NID_SHELL, pAppWidgetFrame, E_INVALID_OPERATION, "[E_INVALID_OPERATION] AppWidgetPopup should be set using AppWidgetPopupProvider::SetAppWidgetPopup()"); + _ServiceAppImpl* pServiceAppImpl = _ServiceAppImpl::GetInstance(); + SysAssert(pServiceAppImpl); + pServiceAppImpl->PauseLifeDurationTimer(); + return E_SUCCESS; } @@ -683,6 +731,10 @@ _AppWidgetProviderManagerImpl::DestroyAppWidgetPopupProvider(const String& insta __pAppWidgetPopupProvider = null; } + _ServiceAppImpl* pServiceAppImpl = _ServiceAppImpl::GetInstance(); + SysAssert(pServiceAppImpl); + pServiceAppImpl->ResumeLifeDurationTimer(); + return E_SUCCESS; } diff --git a/src/inc/FShell_AppWidgetProviderManagerImpl.h b/src/inc/FShell_AppWidgetProviderManagerImpl.h index feb8c75..9a2ef72 100644 --- a/src/inc/FShell_AppWidgetProviderManagerImpl.h +++ b/src/inc/FShell_AppWidgetProviderManagerImpl.h @@ -105,6 +105,7 @@ private: static result CheckCertificate(const Tizen::App::AppId& localAppId, const Tizen::App::AppId& remoteAppId); static bool IsSamePackage(const Tizen::App::AppId& appId1, const Tizen::App::AppId& appId2); + static bool IsPackagedWithTPK(const Tizen::App::AppId& appId); virtual void OnApplicationLaunched(const Tizen::App::AppId& appId, int pid) {} virtual void OnApplicationTerminated(const Tizen::App::AppId& appId, int pid); -- 2.7.4