#include <package_manager.h>
#include <shortcut.h>
#include <livebox-errno.h>
+#include <provider_buffer.h>
#include <livebox-service.h>
#include <FBaseSysLog.h>
result
_AppWidgetProviderManagerImpl::SetAppWidgetProviderFactory(IAppWidgetProviderFactory& factory)
{
- result r = ValidateApplicationAttributeForAppWidget();
- SysTryReturnResult(NID_SHELL, !IsFailed(r), E_INVALID_OPERATION, "This application can't export AppWidget provider.");
+ result r = ValidateApplicationAttribute();
+ SysTryReturnResult(NID_SHELL, !IsFailed(r), E_INVALID_OPERATION, "The application's attribute does not meet the condition to provide AppWidget. 'LifeDuration' and 'UseUi' attribute should be specified in application manifest." );
__pAppWidgetFactory = &factory;
return E_SUCCESS;
const wchar_t USE_UI_KEY[] = L"UseUi";
const wchar_t USE_UI_VAL_TRUE[] = L"True";
const wchar_t LIFE_DURATION_KEY[] = L"LifeDuration";
+const wchar_t AUTO_RESTART_KEY[] = L"AutoRestart";
const int LIFE_DURATION_MIN = 30000;
result
-_AppWidgetProviderManagerImpl::ValidateApplicationAttributeForAppWidget(void)
+_AppWidgetProviderManagerImpl::ValidateApplicationAttribute(void)
{
+ static result res = E_UNKNOWN;
+ if(res != E_UNKNOWN )
+ {
+ return res;
+ }
+
+ res = E_SYSTEM;
unique_ptr<HashMapT<String, _AppFeatureInfoImpl*> > pInfo(_PackageManagerImpl::GetInstance()->GetPackageAppFeatureMapN(_AppInfo::GetPackageId(), _AppInfo::GetAppExecutableName()) );
SysTryReturnResult(NID_SHELL, pInfo.get(), E_SYSTEM, "Failed to invoke _PackageManagerImpl::GetPackageAppFeatureMapN()");
_AppFeatureInfoImpl* pFeature = null;
+ res = E_INVALID_OPERATION;
+ // UseUi
result r = pInfo->GetValue(USE_UI_KEY, pFeature);
SysTryReturnResult(NID_SHELL, !IsFailed(r), E_INVALID_OPERATION, "Can't find %ls attribute for the ServiceApp in package information.", USE_UI_KEY );
const String& useUi = pFeature->GetValue();
SysTryReturnResult(NID_SHELL, useUi == USE_UI_VAL_TRUE, E_INVALID_OPERATION, "%ls attribute value should be '%ls' to be an application that providing AppWidget, but value is %ls", USE_UI_KEY, USE_UI_VAL_TRUE, useUi.GetPointer() );
+ // LifeDuration
r = pInfo->GetValue(LIFE_DURATION_KEY, pFeature);
SysTryReturnResult(NID_SHELL, !IsFailed(r), E_INVALID_OPERATION, "Can't find %ls attribute for the ServiceApp in package information.", LIFE_DURATION_KEY );
int lifeDuration = 0;
r = Integer::Parse(lifeDurationValue, lifeDuration);
SysTryReturnResult(NID_SHELL, !IsFailed(r), E_INVALID_OPERATION, "Failed to parse %ls attribute for the ServiceApp in package information.", LIFE_DURATION_KEY );
-// SysTryReturnResult(NID_SHELL, lifeDuration <= LIFE_DURATION_MIN, E_INVALID_OPERATION, "%ls attribute value should be less than '%d' to be an application that providing AppWidget, but value is %d", LIFE_DURATION_KEY, LIFE_DURATION_MIN, lifeDuration );
+ SysTryReturnResult(NID_SHELL, lifeDuration <= LIFE_DURATION_MIN, E_INVALID_OPERATION, "%ls attribute value should be less than '%d' to be an application that providing AppWidget, but value is %d", LIFE_DURATION_KEY, LIFE_DURATION_MIN, lifeDuration );
+
+ // AutoRestart
+ r = pInfo->GetValue(AUTO_RESTART_KEY, pFeature);
+ if (!IsFailed(r))
+ {
+ String autoRestart = pFeature->GetValue();
+ autoRestart.ToLowerCase();
+ SysTryReturnResult(NID_SHELL, autoRestart != "true", E_INVALID_OPERATION, "It's not allowed that declaring 'AUTO_RESTART' attribute for AppWidget.");
+ }
_DeleteCollectionMapValue<String, _AppFeatureInfoImpl>(*pInfo);
- return E_SUCCESS;
+
+ res = E_SUCCESS;
+ return res;
}
result
_AppWidgetProviderManagerImpl::SetAppWidgetPopupProviderFactory(IAppWidgetPopupProviderFactory& factory)
{
- result r = ValidateApplicationAttributeForAppWidget();
- SysTryReturnResult(NID_SHELL, !IsFailed(r), E_INVALID_OPERATION, "This application can't export AppWidget provider.");
+ result r = ValidateApplicationAttribute();
+ SysTryReturnResult(NID_SHELL, !IsFailed(r), E_INVALID_OPERATION, "The application's attribute does not meet the condition to provide AppWidget. 'LifeDuration' and 'UseUi' attribute should be specified in application manifest.");
__pAppWidgetPopupProviderFactory = &factory;
return E_SUCCESS;
_AppWidgetProviderManagerImpl::CreateAppWidget(const String& name, const String& instanceId, int width, int height, const String& userInfo)
{
SysSecureLog(NID_SHELL, "instanceId(%ls), w:%d, h:%d, userInfo:%ls", instanceId.GetPointer(), width, height, userInfo.GetPointer());
- SysTryReturnResult(NID_SHELL, __pAppWidgetFactory, E_FAILURE, "__pAppWidgetFactory should not be null");
+ SysTryReturnResult(NID_SHELL, __pAppWidgetFactory, E_FAILURE, "__pAppWidgetFactory should not be null. Please make sure AppWidgetProviderManager::SetAppWidgetProviderFactory() is called in App::OnAppInitializing() and successed.");
if( ContainsAppWidget(instanceId))
{
SysTryReturnResult(NID_SHELL, pTouchEventListener, E_INVALID_STATE, "[E_INVALID_STATE]");
pTouchEventListener->OnTouchEventRecevied(eventType, timeStamp, x, y);
+ if( eventType == BUFFER_EVENT_UP)
+ {
+ _ServiceAppImpl* pServiceAppImpl = _ServiceAppImpl::GetInstance();
+ SysAssert(pServiceAppImpl);
+ pServiceAppImpl->ResetLifeDurationTimer();
+ }
return E_SUCCESS;
}