if (pInfo->property & _APPCONTROL_PROPERTY_ALIAS)
{
- _AppControlRegistry::_AppControlAliasEntry* pEntry = null;
+ const _AppControlRegistry::_AppControlAliasEntry* pEntry = null;
pEntry = _AppControlRegistry::GetInstance()->GetReverseAppControlAliasEntry(aId, oId);
if (pEntry)
{
return r;
}
+
+
int
_AppControlManager::Launch(_AppMessageImpl& msg, const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data)
{
result
+_AppControlManager::LaunchPkg(_AppMessageImpl& msg, const String& package, const String& opId, const String* pUri, const String* pMime, AppSvcResFn pCb, void* data)
+{
+ std::unique_ptr<char[]> pPackage(_StringConverter::CopyToCharArrayN(package));
+ std::unique_ptr<char[]> 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;
return false;
}
+
+AppId
+_AppControlManager::GetAliasAppId(const AppId& appId)
+{
+ return _AppControlRegistry::GetInstance()->GetAliasAppId(appId);
+}
+
}} // Tizen::App
{
__nativeList.Construct();
+ __tizenList.Construct();
+
__aliasList.Construct();
__aliasAppId.Construct();
__pSelf->LoadRegistry();
+ __pSelf->LoadTizenAppControlRegistry();
+
__pSelf->LoadLegacyList();
__pSelf->LoadAliasList();
}
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;
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<AppControl*> > pEnum(__nativeList.GetEnumeratorN());
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));
return null;
}
-_AppControlRegistry::_AppControlAliasEntry*
+const _AppControlRegistry::_AppControlAliasEntry*
_AppControlRegistry::GetReverseAppControlAliasEntry(const String& aId, const String& oId) const
{
std::unique_ptr< IMapEnumeratorT<String, _AppControlAliasEntry*> > pEnum(__aliasList.GetMapEnumeratorN());
AppControl*
_AppControlRegistry::GetAliasAppControlN(const String& aId, const String& oId) const
{
- _AppControlAliasEntry* pEntry = GetAppControlAliasEntry(aId, oId);
+ const _AppControlAliasEntry* pEntry = GetAppControlAliasEntry(aId, oId);
if (pEntry)
{
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());
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
{
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;
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;
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;
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);
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);