allow RequestUpdate() can update web appwidget, initialize appwidget when appwidget...
authorjungmin76.park <jungmin76.park@samsung.com>
Mon, 22 Apr 2013 08:51:50 +0000 (17:51 +0900)
committerjungmin76.park <jungmin76.park@samsung.com>
Tue, 23 Apr 2013 00:37:06 +0000 (09:37 +0900)
Change-Id: I34f337435816423856756fb68517bad8e8a1245f
Signed-off-by: jungmin76.park <jungmin76.park@samsung.com>
inc/FShellAppWidgetProviderInfo.h
src/FShell_AppWidgetProviderInfoImpl.cpp
src/FShell_AppWidgetProviderManagerImpl.cpp
src/inc/FShell_AppWidgetProviderManagerImpl.h

index 90756c2..3d13eed 100644 (file)
@@ -189,6 +189,7 @@ private:
        //
        AppWidgetProviderInfo& operator =(const AppWidgetProviderInfo& rhs);
 
+
 private:
     class _AppWidgetProviderInfoImpl* __pAppWidgetProviderInfoImpl;
 
index fd9ef39..dd50eb6 100644 (file)
@@ -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;
                }
 
index 55c8e80..0c368c5 100644 (file)
@@ -25,6 +25,8 @@
 #include <string.h>
 #include <package_manager.h>
 #include <shortcut.h>
+#include <livebox-errno.h>
+#include <livebox-service.h>
 
 #include <FBaseSysLog.h>
 #include <FBase.h>
@@ -36,6 +38,7 @@
 #include <FApp_AppImpl.h>
 #include <FApp_ServiceAppImpl.h>
 #include <FAppPkg_PackageManagerImpl.h>
+#include <FAppPkg_PackageInfoImpl.h>
 #include <FBase_StringConverter.h>
 #include <FSec_AccessController.h>
 
@@ -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<char[]> 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<const String*>(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<const String*>(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<const String*>(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<const String*>(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;
 }
 
index feb8c75..9a2ef72 100644 (file)
@@ -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);