//
/**
- * @file FShell_AppWidgetInfoImpl.cpp
- * @brief This is the implementation for the _AppWidgetInfoImpl class.
+ * @file FShell_AppWidgetProviderInfoImpl.cpp
+ * @brief This is the implementation for the _AppWidgetProviderInfoImpl class.
*/
#include <unique_ptr.h>
#include <FBase.h>
#include <FBaseSysLog.h>
#include <FBase_StringConverter.h>
+#include <FApp_AppInfo.h>
+#include <FAppPkg_PackageManagerImpl.h>
+#include <FAppPkg_PackageInfoImpl.h>
#include <FShellAppWidgetProviderInfo.h>
#include <FShellAppWidgetSizeInfo.h>
#include "FShell_AppWidgetManagerImpl.h"
namespace Tizen { namespace Shell {
-
+using namespace Tizen::App;
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
using namespace Tizen::Graphics;
return __isDefault;
}
+int
+_AppWidgetProviderInfoImpl::GetPrivilegeLevel(const AppId& appId)
+{
+
+ Package::_PackageManagerImpl* pPkg = Package::_PackageManagerImpl::GetInstance();
+ SysTryReturn(NID_APP, pPkg != null, -1, 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()));
+
+ const Package::_PackageInfoImpl* pPkgInfo = Package::_PackageInfoImpl::GetInstance(pInfo);
+ SysTryReturnResult(NID_APP, pPkgInfo != null, E_INVALID_STATE, "Invalid PackageInfo instance.");
+
+ return pPkgInfo->GetApiVisibility();
+}
+
+bool
+_AppWidgetProviderInfoImpl::IsValidSize(const AppId& appId, int w, int h)
+{
+ if (appId.StartsWith("com.samsung.", 0) == true)
+ {
+ return true;
+ }
+
+// static const int UNIT_SIZE_BASE = 175;
+ static const int UNIT_SIZE_2 = 354;// UNIT_SIZE_BASE*n + 4*(n-1)
+// static const int UNIT_SIZE_4 = 712;
+
+ int privilegeLevel = GetPrivilegeLevel(appId);
+ if( privilegeLevel == _API_VISIBILITY_PUBLIC || privilegeLevel == _API_VISIBILITY_PARTNER)
+ {
+ if( h > UNIT_SIZE_2 || w > UNIT_SIZE_2)
+ {
+ return false;
+ }
+ }
+ /*else if( size.height > UNIT_SIZE_4 || size.width > UNIT_SIZE_4)
+ {
+ return false;
+ }*/
+ return true;
+}
+
Tizen::Base::Collection::IList*
_AppWidgetProviderInfoImpl::GetSizeInfoListN() const
{
- const int SUPPORTED_SIZE_TYPE_MAX = 6;
+ static const int MAX_SUPPORTED_SIZE_TYPE = 6;//TODO: check this value.
- int supportedSizeCount = SUPPORTED_SIZE_TYPE_MAX;
- int widthArray[SUPPORTED_SIZE_TYPE_MAX];
- int heightArray[SUPPORTED_SIZE_TYPE_MAX];
+ int supportedSizeCount = MAX_SUPPORTED_SIZE_TYPE;
+ int widthArray[MAX_SUPPORTED_SIZE_TYPE];
+ int heightArray[MAX_SUPPORTED_SIZE_TYPE];
std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(__providerId));
livebox_service_get_supported_sizes(pPackageId.get(), &supportedSizeCount , widthArray, heightArray);
{
size.SetSize(widthArray[i], heightArray[i]);
previewImagePath = livebox_service_preview(pPackageId.get(), livebox_service_size_type(static_cast<int>(size.width), static_cast<int>(size.height) ) );
+
+ if( IsValidSize(__appId, size.width, size.height) == false )
+ {
+ continue;
+ }
+
std::unique_ptr<AppWidgetSizeInfo> pAppWidgetSizeInfo(_AppWidgetSizeInfoImpl::CreateAppWidgetSizeInfo(size, previewImagePath) );
SysTryReturn(NID_SHELL, pAppWidgetSizeInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate memory for AppWidgetSizeInfo." );
pSizes->Add( *pAppWidgetSizeInfo.release() );
namespace Tizen { namespace Shell
{
+using namespace std;
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
using namespace Tizen::App;
static _AppWidgetProviderManagerImpl* __pAppWidgetManagerImpl = null;
if( __pAppWidgetManagerImpl == null)
{
- __pAppWidgetManagerImpl = new (std::nothrow)_AppWidgetProviderManagerImpl;
+ __pAppWidgetManagerImpl = new (nothrow)_AppWidgetProviderManagerImpl;
SysTryReturn(NID_SHELL, __pAppWidgetManagerImpl, null, E_OUT_OF_MEMORY, "Allocating new _AppWidgetManagerProxy failed.");
result r = __pAppWidgetManagerImpl->Construct();
__touchEventListeners.Construct();
Tizen::App::_AppImpl::GetInstance()->SetAppControlProviderInternalEventListener(this);
+ _ServiceAppImpl::GetInstance()->SetLifeDurationEventListener(this);
SysLog(NID_SHELL, "Exit.");
return E_SUCCESS;
package_manager_compare_result_type_e res;
- std::unique_ptr<char[]> pLocalAppId(_StringConverter::CopyToCharArrayN(localAppId));
- std::unique_ptr<char[]> pRemoteAppId(_StringConverter::CopyToCharArrayN(remoteAppId));
+ unique_ptr<char[]> pLocalAppId(_StringConverter::CopyToCharArrayN(localAppId));
+ unique_ptr<char[]> pRemoteAppId(_StringConverter::CopyToCharArrayN(remoteAppId));
int ret = package_manager_compare_app_cert_info(pLocalAppId.get(), pRemoteAppId.get(), &res);
SysTryReturnResult(NID_SHELL, ret == 0, E_SYSTEM, "Failed to check the certificate: %d", ret);
String iconPath = pPackageInfo->GetAppMenuIconPath();
delete pPackageInfo;
- std::unique_ptr<char[]> pProviderId(_StringConverter::CopyToCharArrayN(providerId));
- std::unique_ptr<char[]> pName(_StringConverter::CopyToCharArrayN(text));
- std::unique_ptr<char[]> pContent(_StringConverter::CopyToCharArrayN(userInfo));
- std::unique_ptr<char[]> pIcon(_StringConverter::CopyToCharArrayN(iconPath));
+ unique_ptr<char[]> pProviderId(_StringConverter::CopyToCharArrayN(providerId));
+ unique_ptr<char[]> pName(_StringConverter::CopyToCharArrayN(text));
+ unique_ptr<char[]> pContent(_StringConverter::CopyToCharArrayN(userInfo));
+ unique_ptr<char[]> pIcon(_StringConverter::CopyToCharArrayN(iconPath));
int ret = add_to_home_livebox(pProviderId.get(), pName.get(), LIVEBOX_TYPE_DEFAULT, pContent.get(), pIcon.get(), -1.0l, true, AddAppWidgetCallback, this);
- SysTryReturnResult(NID_SHELL, ret != SHORTCUT_ERROR_COMM, E_CONNECTION_FAILED, "[E_CONNECTION_FAILED] failed to add_to_home_livebox");
- SysTryReturnResult(NID_SHELL, ret == SHORTCUT_SUCCESS, E_SYSTEM, "[E_SYSTEM] failed to add_to_home_livebox (%s)", strerror(r));
+ SysTryReturnResult(NID_SHELL, ret != SHORTCUT_ERROR_COMM, E_CONNECTION_FAILED, "Failed to add_to_home_livebox");
+ SysTryReturnResult(NID_SHELL, ret == SHORTCUT_SUCCESS, E_SYSTEM, "[E_SYSTEM] Failed to add_to_home_livebox (%s)", strerror(r));
return E_SUCCESS;
}
if( pAppWidgetProvider != null)
{
+ pAppWidgetProvider->OnAppWidgetProviderRemoved();
+ pAppWidgetProvider->OnAppWidgetProviderTerminating();
delete pAppWidgetProvider;
}
{
SysLog(NID_SHELL, "instanceId(%ls)", instanceId.GetPointer());
- if( __pAppWidgetPopupProvider != null)
+ if( __pAppWidgetPopupProvider )
{
__pAppWidgetPopupProvider->OnAppWidgetPopupProviderTerminating();
delete __pAppWidgetPopupProvider;
return pProxy->RequestSyncSharedMemoryForPD(instanceId);
}
+void
+_AppWidgetProviderManagerImpl::OnApplicationTerminated(const AppId& appId, int pid)
+{
+ ///////////////////////////////////////////////
+ // This listener is called when life duration is expired
+ ///////////////////////////////////////////////
+
+ AppWidgetProvider* pAppWidgetProvider;
+ unique_ptr<IMapEnumeratorT< Tizen::Base::String, Tizen::Shell::AppWidgetProvider*> > pMapEnum(__appwidgetProviders.GetMapEnumeratorN() );
+ while (pMapEnum->MoveNext() == E_SUCCESS)
+ {
+ pAppWidgetProvider = null;
+
+ pMapEnum->GetValue(pAppWidgetProvider);
+ if( pAppWidgetProvider )
+ {
+ pAppWidgetProvider->OnAppWidgetProviderTerminating();
+ delete pAppWidgetProvider;
+ }
+ }
+ __appwidgetProviders.RemoveAll();
+}
+
}} // Tizen::Shell
/**
* @file FShell_AppWidgetProviderInfoImpl.h
- * @brief This is the header file for the _AppWidgetInfoImpl class.
+ * @brief This is the header file for the _AppWidgetProviderInfoImpl class.
*
- * This header file contains the declarations of the _AppWidgetInfoImpl class.
+ * This header file contains the declarations of the _AppWidgetProviderInfoImpl class.
*/
#ifndef _FSHELL_INTERNAL_APPWIDGET_PROVIDER_INFO_IMPL_H_
static AppWidgetProviderInfo* GetAppWidgetProviderInfoN(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, bool isDefault);
static _AppWidgetProviderInfoImpl* GetImpl(const AppWidgetProviderInfo& appwidgetProviderInfo);
+ static int GetPrivilegeLevel(const Tizen::App::AppId& appId);
+ static bool IsValidSize(const Tizen::App::AppId& appId, int w, int h);
private:
/**
#include <FBaseColIMap.h>
#include <FAppTypes.h>
#include <FAppIAppControlProviderEventListener.h>
+#include <FApp_IAppEventListener.h>
namespace Tizen { namespace Shell {
class _OSP_EXPORT_ _AppWidgetProviderManagerImpl
: public Tizen::App::IAppControlProviderEventListener
+ , public Tizen::App::_IAppEventListener
, public Tizen::Base::Object
{
public:
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);
+ virtual void OnApplicationLaunched(const Tizen::App::AppId& appId, int pid) {}
+ virtual void OnApplicationTerminated(const Tizen::App::AppId& appId, int pid);
+
private:
// for AppWidget
IAppWidgetProviderFactory* __pAppWidgetFactory;