static const char BUNDLE_KEY_PREFIX_OSP[] = "__OSP_";
const char TIZEN_NOTIFICATION_DATA[] = "http://tizen.org/appcontrol/data/notification";
-static const char SAMSUNG_ACCOUNT_KEY_CLIENT_ID[] = "client_id";
-static const char SAMSUNG_ACCOUNT_KEY_CLIENT_SECRET[] = "client_secret";
-static const char SAMSUNG_ACCOUNT_KEY_SERVICE_CATEGORY[] = "service_category";
-
-static const char SMS_KEY_SERVICE_CALLER[] = "service_caller";
-static const char SMS_KEY_SERVICE_DATA[] = "service_data";
-
_AppArg::_AppArg(void)
: __pBundle(null)
SysLog(NID_APP, "argument is %s", p);
}
- String tmp;
- p = appsvc_get_data(pBundle, SMS_KEY_SERVICE_CALLER);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SMS_KEY_SERVICE_CALLER, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "service_caller is %s", p);
- }
-
- p = appsvc_get_data(pBundle, SMS_KEY_SERVICE_DATA);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SMS_KEY_SERVICE_DATA, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "service_data is set");
- }
-
- p = appsvc_get_data(pBundle, SAMSUNG_ACCOUNT_KEY_CLIENT_ID);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SAMSUNG_ACCOUNT_KEY_CLIENT_ID, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "client_id is %s", p);
- }
-
- p = appsvc_get_data(pBundle, SAMSUNG_ACCOUNT_KEY_CLIENT_SECRET);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SAMSUNG_ACCOUNT_KEY_CLIENT_SECRET, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "client_secret is %s", p);
- }
-
- p = appsvc_get_data(pBundle, SAMSUNG_ACCOUNT_KEY_SERVICE_CATEGORY);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SAMSUNG_ACCOUNT_KEY_SERVICE_CATEGORY, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "service_category is %s", p);
- }
-
return E_SUCCESS;
}
}
}
+
+void
+_AppArg::UpdateSubMode(bundle* pBundle)
+{
+ appsvc_add_data(pBundle, OSP_K_SUBMODE_CALLEE, "1");
+}
+
+
+bool
+_AppArg::IsSubMode(bundle* pBundle)
+{
+ const char* p = appsvc_get_data(pBundle, OSP_K_SUBMODE_CALLEE);
+ if (p && (strncmp(p, "1", sizeof(char)) == 0))
+ {
+ return true;
+ }
+
+ return false;
+}
+
+
int
_AppArg::GetRequestIdFromBundle(bundle* pBundle)
{
if (pNativeArg != null)
{
- pListener->OnAppControlEventReceivedN(pNativeArg->GetRequestId(), pNativeArg->GetResult(), pNativeArg->GetArgs());
+ pListener->OnAppControlEventReceivedN(pNativeArg->GetRequestId(), pNativeArg->GetResult(), pNativeArg->GetArgs(), pNativeArg->GetProperty());
return;
}
delete __pArg;
}
-_NativeAppControlEventArg::_NativeAppControlEventArg(int reqId, int res, IMap* pArg)
+_NativeAppControlEventArg::_NativeAppControlEventArg(int reqId, int res, IMap* pArg, int prop)
: __reqId(reqId)
, __result(res)
, __pArgs(null)
+ , __property(prop)
{
if (pArg == null)
{
_AppControlEventArg& operator =(const _AppControlEventArg& rhs);
private:
- int __reqId;
+ const int __reqId;
_AppArg* __pArg;
- int __result;
+ const int __result;
}; // _AppControlEventArg
/**
, public Tizen::Base::Runtime::IEventArg
{
public:
- _NativeAppControlEventArg(int reqId, int res, Tizen::Base::Collection::IMap* pArgs);
+ _NativeAppControlEventArg(int reqId, int res, Tizen::Base::Collection::IMap* pArgs, int prop);
virtual ~_NativeAppControlEventArg(void);
return __pArgs;
}
+ int GetProperty(void) const
+ {
+ return __property;
+ }
+
private:
- int __reqId;
- int __result;
+ const int __reqId;
+ const int __result;
Tizen::Base::Collection::IMap* __pArgs;
+ const int __property;
}; // _NativeAppControlEventArg
/**
, public Tizen::Base::Runtime::IEventArg
{
public:
- _AppControlResponseEventArg(IAppControlResponseListener* pResponseListener, _AppControlResponseType type, const AppId& appId, const Tizen::Base::String& operationId, result res, AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData, int reqId)
+ _AppControlResponseEventArg(IAppControlResponseListener* pResponseListener, _AppControlResponseType type, const AppId& appId, const Tizen::Base::String& operationId, result res, AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData, int reqId, bool isSubMode)
: __pResponseListener(pResponseListener)
, __type(type)
, __appId(appId.GetPointer())
, __appControlResult(appControlResult)
, __pExtraData(pExtraData)
, __reqId(reqId)
+ , __isSubMode(isSubMode)
{
}
return __reqId;
}
+ bool IsSubMode(void) const
+ {
+ return __isSubMode;
+ }
+
private:
_AppControlResponseEventArg(const _AppControlResponseEventArg& rhs);
private:
IAppControlResponseListener* __pResponseListener;
- _AppControlResponseType __type;
+ const _AppControlResponseType __type;
const AppId __appId;
const Tizen::Base::String __operationId;
- result __res;
- AppCtrlResult __appControlResult;
+ const result __res;
+ const AppCtrlResult __appControlResult;
const Tizen::Base::Collection::IMap* __pExtraData;
- int __reqId;
+ const int __reqId;
+ const bool __isSubMode;
}; // _AppControlEventArg
} } // Tizen::App
}
}
+ const bool isSubMode = _AppArg::IsSubMode(b);
+
std::unique_ptr<HashMap> pMap(pResArg->GetArgMapN());
ArrayList list(SingleObjectDeleter);
_AppArg::FillLegacyAppControlResult(list, res, pMap.get(), provider);
- _AppControlManager::InvokeLegacyAppControlCompleteListener(*pListener, provider, oId, &list);
+ _AppControlManager::InvokeLegacyAppControlCompleteListener(*pListener, provider, oId, &list, isSubMode);
return E_SUCCESS;
}
}
}
+ const bool isSubMode = _AppArg::IsSubMode(b);
+
std::unique_ptr<HashMap> pMap(pResArg->GetArgMapN());
AppCtrlResult ret = _AppControlManager::ConvertAppControlResultCode(res);
if (pResponseEvent != null)
{
- _AppControlResponseEventArg* pResponseEventArg = new (std::nothrow) _AppControlResponseEventArg(pListener, _APPCONTROL_RESPONSETYPE_COMPLETE, provider, oId, E_SUCCESS, ret, pMap.release(), reqId);
+ _AppControlResponseEventArg* pResponseEventArg = new (std::nothrow) _AppControlResponseEventArg(pListener, _APPCONTROL_RESPONSETYPE_COMPLETE, provider, oId, E_SUCCESS, ret, pMap.release(), reqId, isSubMode);
pResponseEvent->Fire(*pResponseEventArg);
SysLog(NID_APP, "OnAppControlCompleteResponseReceived, pResponseEvent is Fired");
}
else
{
- _AppControlManager::InvokeAppControlCompleteListener(*pListener, provider, oId, ret, pMap.get());
+ _AppControlManager::InvokeAppControlCompleteListener(*pListener, provider, oId, ret, pMap.get(), isSubMode);
}
return E_SUCCESS;
{
if(pEventArg->GetType() == _APPCONTROL_RESPONSETYPE_COMPLETE)
{
- _AppControlManager::InvokeAppControlCompleteListener(*pResponseListener, pEventArg->GetAppId(), pEventArg->GetOperationId(), pEventArg->GetAppControlResult(), pEventArg->GetExtraData());
+ _AppControlManager::InvokeAppControlCompleteListener(*pResponseListener, pEventArg->GetAppId(), pEventArg->GetOperationId(), pEventArg->GetAppControlResult(), pEventArg->GetExtraData(), pEventArg->IsSubMode());
_AppControlResponseEvent* pResponseEvent = null;
_AppControlManager::GetInstance()->GetAppControlResponseEventContainer()->GetValue(pEventArg->GetRequestId(), pResponseEvent);
if (pResponseEvent != null)
{
String oId(operationId);
- _AppControlResponseEventArg* pResponseEventArg = new (std::nothrow) _AppControlResponseEventArg(pListener, _APPCONTROL_RESPONSETYPE_START, actualAppId, oId, r, APP_CTRL_RESULT_SUCCEEDED, null, reqId);
+ _AppControlResponseEventArg* pResponseEventArg = new (std::nothrow) _AppControlResponseEventArg(pListener, _APPCONTROL_RESPONSETYPE_START, actualAppId, oId, r, APP_CTRL_RESULT_SUCCEEDED, null, reqId, false);
if (pResponseEventArg != null)
{
void
-_AppControlManager::InvokeAppControlCompleteListener(IAppControlResponseListener& listener, const AppId& appId, const String& op, AppCtrlResult res, const IMap* pExtraData)
+_AppControlManager::InvokeAppControlCompleteListener(IAppControlResponseListener& listener, const AppId& appId, const String& op, AppCtrlResult res, const IMap* pExtraData, bool isSubMode)
{
listener.OnAppControlCompleteResponseReceived(appId, op, res, pExtraData);
- //_AppImpl::GetInstance()->RaiseWindow();
- _AppImpl::GetInstance()->SendUserEvent(_APP_EVENT_RAISE, null, false);
+ if (!isSubMode)
+ {
+ _AppImpl::GetInstance()->SendUserEvent(_APP_EVENT_RAISE, null, false);
+ }
SysLog(NID_APP, "AppControl response finished.");
}
void
-_AppControlManager::InvokeLegacyAppControlCompleteListener(IAppControlEventListener& listener, const AppId& appId, const String& op, const IList* pList)
+_AppControlManager::InvokeLegacyAppControlCompleteListener(IAppControlEventListener& listener, const AppId& appId, const String& op, const IList* pList, bool isSubMode)
{
listener.OnAppControlCompleted(appId, op, pList);
- //_AppImpl::GetInstance()->RaiseWindow();
- _AppImpl::GetInstance()->SendUserEvent(_APP_EVENT_RAISE, null, false);
+ if (!isSubMode)
+ {
+ _AppImpl::GetInstance()->SendUserEvent(_APP_EVENT_RAISE, null, false);
+ }
SysLog(NID_APP, "Legacy AppControl response finished.");
}
// callback for in-process event handling
void
-_AppControlManager::OnAppControlEventReceivedN(int reqId, int res, const IMap* pArgs)
+_AppControlManager::OnAppControlEventReceivedN(int reqId, int res, const IMap* pArgs, int property)
{
SysLog(NID_APP, "Received request Id %d, res %d, args 0x%x", reqId, res, pArgs);
}
}
+ const bool isSubMode = (property & _APPCONTROL_PROPERTY_SUBMODE);
+
if (pInfo->isLegacy)
{
IAppControlEventListener* pListener = dynamic_cast<IAppControlEventListener*>(pInfo->pListener);
ArrayList list(SingleObjectDeleter);
_AppArg::FillLegacyAppControlResult(list, res, pArgs, aId);
- InvokeLegacyAppControlCompleteListener(*pListener, aId, oId, &list);
+ InvokeLegacyAppControlCompleteListener(*pListener, aId, oId, &list, isSubMode);
}
else
{
if (pResponseEvent != null)
{
- _AppControlResponseEventArg* pResponseEventArg = new (std::nothrow) _AppControlResponseEventArg(pListener, _APPCONTROL_RESPONSETYPE_COMPLETE, aId, oId, E_SUCCESS, static_cast<AppCtrlResult>(res), const_cast<IMap*> (pArgs), responseEventRequestId);
+ _AppControlResponseEventArg* pResponseEventArg = new (std::nothrow) _AppControlResponseEventArg(pListener, _APPCONTROL_RESPONSETYPE_COMPLETE, aId, oId, E_SUCCESS, static_cast<AppCtrlResult>(res), const_cast<IMap*> (pArgs), responseEventRequestId, isSubMode);
if (pResponseEventArg != null)
{
pResponseEvent->Fire(*pResponseEventArg);
}
else
{
- InvokeAppControlCompleteListener(*pListener, aId, oId, ConvertAppControlResultCode(res), pArgs);
+ InvokeAppControlCompleteListener(*pListener, aId, oId, ConvertAppControlResultCode(res), pArgs, isSubMode);
SysLog(NID_APP, "Listener called directly");
delete pArgs;
}
_AppControlManager::FinishAppControl(int reqId, int res, IMap* pMap)
{
SysLog(NID_APP, "req %d, res %d.", reqId, res);
- _NativeAppControlEventArg* pArg = new (std::nothrow) _NativeAppControlEventArg(reqId, res, pMap);
+ _NativeAppControlEventArg* pArg = new (std::nothrow) _NativeAppControlEventArg(reqId, res, pMap, _APPCONTROL_PROPERTY_SUBMODE);
SysTryReturnVoidResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Return argument allocation failure.");
SendAppControlEvent(*pArg);
}
else
{
- InvokeAppControlCompleteListener(*pResponseListener, pEventArg->GetAppId(), pEventArg->GetOperationId(), pEventArg->GetAppControlResult(), pEventArg->GetExtraData());
+ InvokeAppControlCompleteListener(*pResponseListener, pEventArg->GetAppId(), pEventArg->GetOperationId(), pEventArg->GetAppControlResult(), pEventArg->GetExtraData(), pEventArg->IsSubMode());
SysLog(NID_APP, "Listener called");
_AppControlResponseEvent* pResponseEvent = null;
#include "FApp_Aul.h"
#include "FApp_AppArg.h"
#include "FApp_AppImpl.h"
+#include "FApp_AppInfo.h"
#include "FApp_AppControlManager.h"
#include "FApp_AppControlProviderManagerImpl.h"
SysTryReturn(NID_APP, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
//resArg.Print();
- r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(0));
+ r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(0), _AppInfo::IsSubMode());
SysLog(NID_APP, "Sent AppControl event for %d.", reqId);
// erase _AppArg after sending the result back to the caller
}
//resArg.Print();
- r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(res));
+ r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(res), _AppInfo::IsSubMode());
SysLog(NID_APP, "Sent AppControl event for %d.", reqId);
// erase _AppArg after sending the result back to the caller
aul_app_get_pkgname_bypid(processId, pkgname, 255);
appId = _Aul::GetRealAppId(String(pkgname));
+
+ SysLog(NID_APP, "ActiveApp is %ls.", appId.GetPointer());
return E_SUCCESS;
}
#include "FAppPkg_PackageManagerImpl.h"
#include "FApp_Types.h"
#include "FApp_Aul.h"
+#include "FApp_AppArg.h"
#include "FApp_TemplateUtil.h"
}
result
-_Aul::SendResult(bundle* b, appsvc_result_val res)
+_Aul::SendResult(bundle* b, appsvc_result_val res, bool isSubMode)
{
// to skip error handling, of appsvc_send_result, use aul_send_service_result() directly.
//int ret = appsvc_send_result(b, res);
snprintf(tmp, 32, "%d", static_cast<int>(res));
appsvc_add_data(b, APP_SVC_K_RES_VAL, tmp);
+ if (isSubMode)
+ {
+ _AppArg::UpdateSubMode(b);
+ }
+
const int aul_ret = aul_send_service_result(b);
result r = GetConvertedResult(aul_ret, "SendResult");
_AppArg resultArg;
String* pDataId = null;
result r = E_SUCCESS;
- int ret = -1;
+ //int ret = -1;
_AppControlManager* pAppMgr = _AppControlManager::GetInstance();
SysTryReturnResult(NID_APP, pAppMgr, E_SYSTEM, "Failed to get instance.");
resultArg.UpdateKeyValue(OSP_K_DATACONTROL_PROTOCOL_VERSION, version);
//resultArg.Print();
- r = _Aul::SendResult(resultArg.GetBundle(), static_cast< appsvc_result_val >(0));
+ r = _Aul::SendResult(resultArg.GetBundle(), static_cast< appsvc_result_val >(0), false);
SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] Failed to send result.", GetErrorMessage(r));
// Erases _AppArg after sending the result back to the caller
#define OSP_K_COND "__OSP_COND_NAME__"
#define OSP_K_APPID "__OSP_APPID__"
#define OSP_K_REQUEST_ID "__OSP_REQUEST_ID__"
+#define OSP_K_SUBMODE_CALLEE "__OSP_SUB_CALLEE__"
#define OSP_K_APPCONTROL_INTERNAL_OPERATION "__OSP_APPCONTROL_INTERNAL_INTERNAL_OPERATION__"
#define OSP_K_DATACONTROL_PROVIDER "__OSP_DATACONTROL_PROVIDER__"
#define OSP_K_DATACONTROL_DATA "__OSP_DATACONTROL_DATA__"
static void UpdateKeyValue(bundle* b, const char* pKey, const Tizen::Base::String& value);
+ static void UpdateSubMode(bundle* b);
+
+ static bool IsSubMode(bundle* b);
+
static result UpdateWindowHandle(bundle* b, long handle);
static Tizen::Base::Collection::ArrayList* GetListN(bundle* b, const char* key);
_APPCONTROL_PROPERTY_OSP = 0x200,
_APPCONTROL_PROPERTY_ALIAS = 0x400,
_APPCONTROL_PROPERTY_APPID_CHANGE = 0x800,
+ _APPCONTROL_PROPERTY_SUBMODE = 0x1000,
};
class _OSP_EXPORT_ _AppControlImpl
_AppArg* pArg;
const LaunchCbType launchCb;
void* pUserData;
- const int property;
+ int property;
}; // _LaunchInfo
virtual void OnAppControlEventReceivedN(int reqId, _AppArg* pAppArg, int res);
- virtual void OnAppControlEventReceivedN(int reqId, int res, const Tizen::Base::Collection::IMap* pArgs);
+ virtual void OnAppControlEventReceivedN(int reqId, int res, const Tizen::Base::Collection::IMap* pArgs, int prop);
virtual void OnAppControlEventReceivedN(int reqId, const AppId& appId, const Tizen::Base::String& operationId);
static AppCtrlResult ConvertAppControlResultCode(int res);
- static void InvokeAppControlCompleteListener(IAppControlResponseListener& listener, const AppId& appId, const Tizen::Base::String& op, AppCtrlResult res, const Tizen::Base::Collection::IMap* pExtraData);
+ static void InvokeAppControlCompleteListener(IAppControlResponseListener& listener, const AppId& appId, const Tizen::Base::String& op, AppCtrlResult res, const Tizen::Base::Collection::IMap* pExtraData, bool isSubMode);
- static void InvokeLegacyAppControlCompleteListener(IAppControlEventListener& listener, const AppId& appId, const Tizen::Base::String& op, const Tizen::Base::Collection::IList* pList);
+ static void InvokeLegacyAppControlCompleteListener(IAppControlEventListener& listener, const AppId& appId, const Tizen::Base::String& op, const Tizen::Base::Collection::IList* pList, bool isSubMode);
private:
_OSP_LOCAL_ _AppControlManager(void);
static result TerminateApplicationByPid(int pid);
- static result SendResult(bundle* b, appsvc_result_val res);
+ static result SendResult(bundle* b, appsvc_result_val res, bool isSubMode);
static bool IsRunning(const Tizen::Base::String& appId);
virtual void OnAppControlEventReceivedN(int reqId, _AppArg* pArg, int res) = 0;
- virtual void OnAppControlEventReceivedN(int reqId, int res, const Tizen::Base::Collection::IMap* pArgs) = 0;
+ virtual void OnAppControlEventReceivedN(int reqId, int res, const Tizen::Base::Collection::IMap* pArgs, int prop) = 0;
virtual void OnAppControlEventReceivedN(int reqId, const AppId& appId, const Tizen::Base::String& operationId) = 0;
}; // _IAppControlSysEventListener