From 8fc70caa7c36a246b513c885249c0e4b3df9fba8 Mon Sep 17 00:00:00 2001 From: Young Ik Cho Date: Thu, 11 Apr 2013 08:06:35 +0900 Subject: [PATCH] add AppControl internal functions Change-Id: I4eb75d3096db1c12fc0b5c98a7196b415db672fb Signed-off-by: Young Ik Cho --- src/app/FApp_AppControlImpl.cpp | 4 +- src/app/FApp_AppControlManager.cpp | 38 +++++++- src/app/FApp_AppControlRegistry.cpp | 174 +++++++++++++++++++++++++++++++++-- src/app/FApp_AppControlRegistry.h | 14 ++- src/app/inc/FApp_AppControlManager.h | 4 + 5 files changed, 223 insertions(+), 11 deletions(-) diff --git a/src/app/FApp_AppControlImpl.cpp b/src/app/FApp_AppControlImpl.cpp index eb6139a..080a101 100755 --- a/src/app/FApp_AppControlImpl.cpp +++ b/src/app/FApp_AppControlImpl.cpp @@ -416,7 +416,7 @@ _AppControlImpl::AppControlCbLegacy(void* data, _AppArg* pArg, _AppArg* pResArg, if (prop & _APPCONTROL_PROPERTY_ALIAS) { - _AppControlRegistry::_AppControlAliasEntry* pEntry = null; + const _AppControlRegistry::_AppControlAliasEntry* pEntry = null; pEntry = _AppControlRegistry::GetInstance()->GetReverseAppControlAliasEntry(provider, oId); if (pEntry) { @@ -481,7 +481,7 @@ _AppControlImpl::AppControlCb(void* data, _AppArg* pArg, _AppArg* pResArg, servi if (prop & _APPCONTROL_PROPERTY_ALIAS) { - _AppControlRegistry::_AppControlAliasEntry* pEntry = null; + const _AppControlRegistry::_AppControlAliasEntry* pEntry = null; pEntry = _AppControlRegistry::GetInstance()->GetReverseAppControlAliasEntry(provider, oId); if (pEntry) { diff --git a/src/app/FApp_AppControlManager.cpp b/src/app/FApp_AppControlManager.cpp index 09b5d33..efeb4b0 100644 --- a/src/app/FApp_AppControlManager.cpp +++ b/src/app/FApp_AppControlManager.cpp @@ -224,7 +224,7 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, int res, const IMap* p if (pInfo->property & _APPCONTROL_PROPERTY_ALIAS) { - _AppControlRegistry::_AppControlAliasEntry* pEntry = null; + const _AppControlRegistry::_AppControlAliasEntry* pEntry = null; pEntry = _AppControlRegistry::GetInstance()->GetReverseAppControlAliasEntry(aId, oId); if (pEntry) { @@ -385,6 +385,8 @@ _AppControlManager::LaunchPkg(_AppMessageImpl& msg, const char* pkg_name, const return r; } + + int _AppControlManager::Launch(_AppMessageImpl& msg, const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data) { @@ -438,6 +440,33 @@ _AppControlManager::Launch(_AppMessageImpl& msg, const char* pkg_name, const cha result +_AppControlManager::LaunchPkg(_AppMessageImpl& msg, const String& package, const String& opId, const String* pUri, const String* pMime, AppSvcResFn pCb, void* data) +{ + std::unique_ptr pPackage(_StringConverter::CopyToCharArrayN(package)); + std::unique_ptr pOperation(_StringConverter::CopyToCharArrayN(opId)); + + const char* pUriData = null; + if (pUri) + { + pUriData = _StringConverter::CopyToCharArrayN(*pUri); + } + + const char* pMimeData = null; + if (pMime) + { + pMimeData = _StringConverter::CopyToCharArrayN(*pMime); + } + + result r = LaunchPkg(msg, pPackage.get(), pOperation.get(), pMimeData, pUriData, pCb, data); + + delete [] pUriData; + delete [] pMimeData; + + return r; +} + + +result _AppControlManager::LaunchPkg(const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data) { _AppMessageImpl msg; @@ -794,4 +823,11 @@ _AppControlManager::IsAllowedAppControl(const wchar_t aTable[][2][64], int count return false; } + +AppId +_AppControlManager::GetAliasAppId(const AppId& appId) +{ + return _AppControlRegistry::GetInstance()->GetAliasAppId(appId); +} + }} // Tizen::App diff --git a/src/app/FApp_AppControlRegistry.cpp b/src/app/FApp_AppControlRegistry.cpp index e2b56bf..9ca8ef3 100644 --- a/src/app/FApp_AppControlRegistry.cpp +++ b/src/app/FApp_AppControlRegistry.cpp @@ -82,6 +82,8 @@ _AppControlRegistry::_AppControlRegistry(void) { __nativeList.Construct(); + __tizenList.Construct(); + __aliasList.Construct(); __aliasAppId.Construct(); @@ -106,6 +108,8 @@ _AppControlRegistry::GetInstance(void) __pSelf->LoadRegistry(); + __pSelf->LoadTizenAppControlRegistry(); + __pSelf->LoadLegacyList(); __pSelf->LoadAliasList(); @@ -255,6 +259,75 @@ _AppControlRegistry::LoadRegistry(void) } result +_AppControlRegistry::LoadTizenAppControlRegistry(void) +{ + _RegistryImpl reg; + + const String regPath = ACTL_DEFAULT_FILE; + + result r = reg.Construct(regPath, REG_OPEN_READ_ONLY, null); + SysTryReturn(NID_APP, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r)); + + const int secCount = reg.GetAllSectionCount(); + SysTryReturnResult(NID_APP, !(secCount <= 0), E_OBJ_NOT_FOUND, "Registry contains no data."); + + SysLog(NID_APP, "Loading %d sections from %ls", secCount, regPath.GetPointer()); + + int index = 0; + int size = 0; + //int num = 0; + String path; + + for (int i = 0; i < secCount; i++) + { + /////////////////////////////////////////////////////////////////////// + // appcontrol Id + String sec_name(reg.GetSectionName(i)); + sec_name.Trim(); + + if (sec_name.IsEmpty()) + { + continue; + } + +#if 0 + int public_open = 0; + + /////////////////////////////////////////////////////////////////////// + // Plubic + index = reg.GetEntryIndex(i, ACTL_REGISTRY_PUBLIC); + if (index >= 0) + { + size = sizeof(size); + num = 0; + + reg.GetEntryValue(i, index, REG_VALUE_TYPE_INT, &num, &size); + if (num == 1) + { + // public + public_open = 1; + } + } +#endif + + /////////////////////////////////////////////////////////////////////// + // Path + index = reg.GetEntryIndex(i, ACTL_REGISTRY_PATH); + if (index >= 0) + { + size = REG_VALUE_BUFFER_LEN; + reg.GetEntryValue(i, index, REG_VALUE_TYPE_STRING, &path, &size); + } + + __tizenList.Add(sec_name, path); + } + + SysLog(NID_APP, "Finished loading %d tizen AppControl entries", __tizenList.GetCount()); + + return E_SUCCESS; +} + +result _AppControlRegistry::LoadLegacyList(void) { _RegistryImpl reg; @@ -378,6 +451,80 @@ CATCH: AppControl* +_AppControlRegistry::GetTizenAppControlN(const String& aId, const String& oId) const +{ + const _AppControlAliasEntry* pEntry = null; + int count = 0; + + do + { + const _AppControlAliasEntry* pTempEntry = GetAppControlAliasEntry(aId, oId); + // number does not matter + if (count >= 5 || pTempEntry == null) + { + break; + } + + pEntry = pTempEntry; + count++; + } + while (true); + + + const String* pAppId = null; + const String* pOperation = null; + + if (count == 0) + { + // if count is 0, then no alias is found + pAppId = &aId; + pOperation = &oId; + } + else if (pEntry == null) + { + // no "TIZEN" AppControl + return null; + } + else + { + pAppId = &pEntry->provider2; + pOperation = &pEntry->operation2; + } + + SysAssert(pAppId != null); + SysAssert(pOperation != null); + + SysLog(NID_APP, "Found matching AppControl (%ls, %ls)", pAppId->GetPointer(), pOperation->GetPointer()); + + const String& soName = GetTizenAppControlProvider(*pAppId, *pOperation); + + if (soName.IsEmpty()) + { + SysLog(NID_APP, "No AppControl stub found for (%ls, %ls)", pAppId->GetPointer(), pOperation->GetPointer()); + return null; + } + + return _AppControlImpl::CreateN(soName, *pAppId, *pOperation, L"", _APPCONTROL_PROPERTY_PUBLIC | _APPCONTROL_PROPERTY_SLP); +} + + +String +_AppControlRegistry::GetTizenAppControlProvider(const String& appId, const String& oId) const +{ + String val; + result r = __tizenList.GetValue(appId, val); + if (r == E_SUCCESS) + { + SysLog(NID_APP, "Found TIZEN AppControl stub %ls for %ls.", val.GetPointer(), appId.GetPointer()); + return val; + } + + SysLog(NID_APP, "No platform AppControl and use custom AppControl instead."); + return L""; +} + + +AppControl* _AppControlRegistry::GetNativeAppControlN(const String& aId, const String& oId) const { std::unique_ptr< IEnumeratorT > pEnum(__nativeList.GetEnumeratorN()); @@ -487,7 +634,7 @@ _AppControlRegistry::FindAppControlListN(const String* pOid, const String* pUri, return pList; } -_AppControlRegistry::_AppControlAliasEntry* +const _AppControlRegistry::_AppControlAliasEntry* _AppControlRegistry::GetAppControlAliasEntry(const String& aId, const String& oId) const { std::unique_ptr< IEnumeratorT<_AppControlAliasEntry*> > pEnum(__aliasList.GetValuesN(aId)); @@ -512,7 +659,7 @@ _AppControlRegistry::GetAppControlAliasEntry(const String& aId, const String& oI return null; } -_AppControlRegistry::_AppControlAliasEntry* +const _AppControlRegistry::_AppControlAliasEntry* _AppControlRegistry::GetReverseAppControlAliasEntry(const String& aId, const String& oId) const { std::unique_ptr< IMapEnumeratorT > pEnum(__aliasList.GetMapEnumeratorN()); @@ -535,7 +682,7 @@ _AppControlRegistry::GetReverseAppControlAliasEntry(const String& aId, const Str AppControl* _AppControlRegistry::GetAliasAppControlN(const String& aId, const String& oId) const { - _AppControlAliasEntry* pEntry = GetAppControlAliasEntry(aId, oId); + const _AppControlAliasEntry* pEntry = GetAppControlAliasEntry(aId, oId); if (pEntry) { @@ -574,9 +721,9 @@ _AppControlRegistry::GetAppControlN(const String& appId, const String& operation String actualAppId = appId; if (appId.StartsWith(TIZEN_ALIAS_APPID_PREFIX, 0)) { - String tmp; - result r = __aliasAppId.GetValue(appId, tmp); - if (r == E_SUCCESS) + const String& tmp = GetAliasAppId(appId); + + if (tmp.IsEmpty()) { actualAppId = tmp; SysLog(NID_APP, "Found alias appId (%ls -> %ls).", appId.GetPointer(), tmp.GetPointer()); @@ -591,6 +738,21 @@ _AppControlRegistry::GetAppControlN(const String& appId, const String& operation return _AppControlImpl::CreateN(actualAppId, operationId, changeAppId); } + +AppId +_AppControlRegistry::GetAliasAppId(const AppId& appId) const +{ + String tmp; + result r = __aliasAppId.GetValue(appId, tmp); + if (r != E_SUCCESS) + { + tmp.Clear(); + } + + return tmp; +} + + AppId _AppControlRegistry::GetReverseAliasAppId(const AppId& appId) const { diff --git a/src/app/FApp_AppControlRegistry.h b/src/app/FApp_AppControlRegistry.h index 4b6e447..e953f4a 100644 --- a/src/app/FApp_AppControlRegistry.h +++ b/src/app/FApp_AppControlRegistry.h @@ -86,6 +86,8 @@ public: static _AppControlRegistry* GetInstance(void); + AppControl* GetTizenAppControlN(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const; + AppControl* GetNativeAppControlN(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const; AppControl* GetSlpAppControlN(const Tizen::Base::String& packageName, const Tizen::Base::String& oId) const; @@ -96,9 +98,11 @@ public: Tizen::Base::Collection::ArrayList* FindAppControlListN(const Tizen::Base::String* pOid, const Tizen::Base::String* pUri, const Tizen::Base::String* pMimeType, const Tizen::Base::String* pCategory) const; - _AppControlAliasEntry* GetAppControlAliasEntry(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const; + const _AppControlAliasEntry* GetAppControlAliasEntry(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const; + + const _AppControlAliasEntry* GetReverseAppControlAliasEntry(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const; - _AppControlAliasEntry* GetReverseAppControlAliasEntry(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const; + AppId GetAliasAppId(const AppId& appId) const; AppId GetReverseAliasAppId(const AppId& appId) const; @@ -109,13 +113,19 @@ private: result LoadRegistry(void); + result LoadTizenAppControlRegistry(void); + result LoadLegacyList(void); result LoadAliasList(void); + Tizen::Base::String GetTizenAppControlProvider(const Tizen::Base::String& appId, const Tizen::Base::String& opId) const; + private: AppControlList __nativeList; + AliasMapType __tizenList; + AppControlAliasList __aliasList; AliasMapType __aliasAppId; diff --git a/src/app/inc/FApp_AppControlManager.h b/src/app/inc/FApp_AppControlManager.h index 634b5b6..75f94ac 100644 --- a/src/app/inc/FApp_AppControlManager.h +++ b/src/app/inc/FApp_AppControlManager.h @@ -253,6 +253,8 @@ public: result LaunchPkg(_AppMessageImpl& msg, const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data); + result LaunchPkg(_AppMessageImpl& msg, const Tizen::Base::String& package, const Tizen::Base::String& opId, const Tizen::Base::String* pUri, const Tizen::Base::String* pMime, AppSvcResFn pCb, void* data); + int Launch(_AppMessageImpl& msg, const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data); result LaunchAppWithCondition(const AppId& appId, const Tizen::Base::String& condition, Tizen::Base::Collection::IList* pArgs); @@ -260,6 +262,8 @@ public: static bool IsAllowedAppControl(const wchar_t aTable[][2][64], int count, const Tizen::Base::String& aId, const Tizen::Base::String& oId); + static AppId GetAliasAppId(const AppId& appId); + static result GetMimeFromExt(const Tizen::Base::String& ext, Tizen::Base::String& out); void RemoveLaunchRequest(int req); -- 2.7.4