From: Sunggyu Choi Date: Mon, 26 Jan 2015 10:44:56 +0000 (+0900) Subject: [application] added new apis related with app-control X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~564^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cf5424ba9c271bbb0065b9c3b6a120362ea09f6d;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [application] added new apis related with app-control [Verification] Not Available TC. every method verified with self made app Change-Id: I44a85b4f666bbfc38a012c8e22d842ed0ce6e22d Signed-off-by: Sunggyu Choi --- diff --git a/src/application/application.cc b/src/application/application.cc index f3859f3b..85919d28 100644 --- a/src/application/application.cc +++ b/src/application/application.cc @@ -17,19 +17,13 @@ namespace application { Application::Application() { } -Application::Application(const ApplicationPtr app) { - context_id_ = app->get_context_id(); -} - Application::~Application() { } void Application::Hide() { - } void Application::Exit() { - } std::string Application::get_context_id() { @@ -44,16 +38,16 @@ ApplicationInformationPtr Application::get_app_info() const { return app_info_; } -void Application::set_app_info(ApplicationInformationPtr& app_info) { +void Application::set_app_info(const ApplicationInformationPtr& app_info) { app_info_ = app_info; } const picojson::value& Application::Value() { - if (!app_info_->IsValid()) { LoggerD("WebApiAPIErrors::UNKNOWN_ERR"); picojson::object obj; - obj["error"] = picojson::value(static_cast(WebApiAPIErrors::UNKNOWN_ERR)); + obj["error"] = + picojson::value(static_cast(WebApiAPIErrors::UNKNOWN_ERR)); value_ = picojson::value(obj); } else { picojson::object obj; @@ -62,8 +56,9 @@ const picojson::value& Application::Value() { obj["contextId"] = picojson::value(context_id_); value_ = picojson::value(obj); } - return value_; + return value_; } -} // namespace application -} // namespace extension + +} // namespace application +} // namespace extension diff --git a/src/application/application.gyp b/src/application/application.gyp index 97775bfa..0ccb6d6e 100644 --- a/src/application/application.gyp +++ b/src/application/application.gyp @@ -26,6 +26,8 @@ 'application_control.h', 'application_controldata.cc', 'application_controldata.h', + 'requested_application_control.cc', + 'requested_application_control.h', ], 'includes': [ '../common/pkg-config.gypi', diff --git a/src/application/application.h b/src/application/application.h index 6fbd23ab..257606cb 100644 --- a/src/application/application.h +++ b/src/application/application.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef APPLICATION_APPLICATION_H_ -#define APPLICATION_APPLICATION_H_ +#ifndef SRC_APPLICATION_APPLICATION_H_ +#define SRC_APPLICATION_APPLICATION_H_ #include #include @@ -19,20 +19,19 @@ typedef std::shared_ptr ApplicationPtr; class Application { public: Application(); - Application(const ApplicationPtr); ~Application(); void Hide(); void Exit(); - + const picojson::value& Value(); bool IsValid() const; std::string get_context_id(); void set_context_id(const std::string& context_id); - + ApplicationInformationPtr get_app_info() const; - void set_app_info(ApplicationInformationPtr &appInfo); + void set_app_info(const ApplicationInformationPtr &appInfo); private: std::string context_id_; @@ -42,7 +41,8 @@ class Application { picojson::object error_; picojson::value value_; }; -} // namespace application -} // namespace extension -#endif // APPLICATION_APPLICATION_H_ +} // namespace application +} // namespace extension + +#endif // SRC_APPLICATION_APPLICATION_H_ diff --git a/src/application/application_api.js b/src/application/application_api.js index 79476780..2b59ea24 100644 --- a/src/application/application_api.js +++ b/src/application/application_api.js @@ -98,7 +98,8 @@ ApplicationManager.prototype.kill = function(contextId) { nativeParam['contextId'] = args.contextId; try { - var syncResult = callNativeWithCallback('ApplicationManager_kill', nativeParam, function(result) { + var syncResult = + callNativeWithCallback('ApplicationManager_kill', nativeParam, function(result) { if (result.status == 'success') { if (args.successCallback) { args.successCallback(); @@ -130,7 +131,8 @@ ApplicationManager.prototype.launch = function(id) { } try { - var syncResult = callNativeWithCallback('ApplicationManager_launch', nativeParam, function(result) { + var syncResult = + callNativeWithCallback('ApplicationManager_launch', nativeParam, function(result) { if (result.status == 'success') { if (args.successCallback) { args.successCallback(); @@ -153,39 +155,42 @@ ApplicationManager.prototype.launchAppControl = function(appControl) { {'name': 'id', 'type': types_.STRING, optional: true, nullable: true}, {'name': 'successCallback', 'type': types_.FUNCTION, optional: true, nullable: true}, {'name': 'errorCallback', 'type': types_.FUNCTION, optional: true, nullable: true}, - {'name': 'replyCallback', 'type': types_.LISTENER, 'values': ['onsuccess', 'onfailure'], optional: true, nullable: true} + {'name': 'replyCallback', 'type': types_.LISTENER, 'values': ['onsuccess', 'onfailure'], + optional: true, nullable: true} ]); var nativeParam = { }; if (args['id']) { + console.log(args.id); nativeParam['id'] = args.id; } if (args['appControl']) { nativeParam['appControl'] = args.appControl; } try { - var syncResult = callNativeWithCallback('ApplicationManager_launchAppControl', nativeParam, function(result) { + var syncResult = + callNativeWithCallback('ApplicationManager_launchAppControl', nativeParam, function(ret) { // In case of reply, can have onsuccess or onfailure with result.status // It should be checked first of all - if (result.type == 'onsuccess') { + if (ret.type == 'onsuccess') { if (args.replyCallback) { - args.replyCallback.onsuccess(result.data); + args.replyCallback.onsuccess(ret.data); } } - else if (result.type == 'onfailure') { + else if (ret.type == 'onfailure') { if (args.replyCallback) { args.replyCallback.onfailure(); } } - else if (result.status == 'success') { + else if (ret.status == 'success') { if (args.successCallback) { args.successCallback(); } } - else if (result.status == 'error') { + else if (ret.status == 'error') { if (args.errorCallback) { - args.errorCallback(result.error); + args.errorCallback(ret.error); } } }); @@ -207,7 +212,8 @@ ApplicationManager.prototype.findAppControl = function(appControl, successCallba nativeParam['appControl'] = args.appControl; } try { - var syncResult = callNativeWithCallback('ApplicationManager_findAppControl', nativeParam, function(result) { + var syncResult = + callNativeWithCallback('ApplicationManager_findAppControl', nativeParam, function(result) { if (result.status == 'success') { args.successCallback(result.informationArray, result.appControl); } else if (result.status == 'error') { @@ -230,9 +236,17 @@ ApplicationManager.prototype.getAppsContext = function(successCallback) { var nativeParam = { }; try { - var syncResult = callNativeWithCallback('ApplicationManager_getAppsContext', nativeParam, function(result) { + var syncResult = + callNativeWithCallback('ApplicationManager_getAppsContext', nativeParam, function(result) { if (result.status == 'success') { - args.successCallback(result.contexts); + var returnArray = new Array(); + for (var index = 0; index < result.contexts.length; index++) { + var appContext = new ApplicationContext(); + SetReadOnlyProperty(appContext, 'id', result.contexts[index].id); + SetReadOnlyProperty(appContext, 'appId', result.contexts[index].appId); + returnArray.push(appContext); + } + args.successCallback(returnArray); } else if (result.status == 'error') { if (args.errorCallback) { @@ -277,9 +291,25 @@ ApplicationManager.prototype.getAppsInfo = function(successCallback) { var nativeParam = { }; try { - var syncResult = callNativeWithCallback('ApplicationManager_getAppsInfo', nativeParam, function(result) { + var syncResult = + callNativeWithCallback('ApplicationManager_getAppsInfo', nativeParam, function(result) { if (result.status == 'success') { - args.successCallback(result.informationArray); + // args.successCallback(result.informationArray); + var returnArray = new Array(); + for (var i = 0; i < result.informationArray.length; i++) { + var appInfo = new ApplicationInformation(); + SetReadOnlyProperty(appInfo, 'id', result.informationArray[i].id); + SetReadOnlyProperty(appInfo, 'name', result.informationArray[i].name); + SetReadOnlyProperty(appInfo, 'iconPath', result.informationArray[i].iconPath); + SetReadOnlyProperty(appInfo, 'version', result.informationArray[i].version); + SetReadOnlyProperty(appInfo, 'show', result.informationArray[i].show); + SetReadOnlyProperty(appInfo, 'categories', result.informationArray[i].categories); + SetReadOnlyProperty(appInfo, 'installDate', result.informationArray[i].installDate); + SetReadOnlyProperty(appInfo, 'size', result.informationArray[i].size); + SetReadOnlyProperty(appInfo, 'packageId', result.informationArray[i].packageId); + returnArray.push(appInfo); + } + args.successCallback(returnArray); } else if (result.status == 'error') { if (args.errorCallback) { @@ -397,21 +427,23 @@ ApplicationManager.prototype.getAppMetaData = function() { ApplicationManager.prototype.addAppInfoEventListener = function(eventCallback) { var args = validator_.validateArgs(arguments, [ - {'name': 'eventCallback', 'type': types_.LISTENER, 'values': ['oninstalled', 'onupdated', 'onuninstalled']} + {'name': 'eventCallback', 'type': types_.LISTENER, + 'values': ['oninstalled', 'onupdated', 'onuninstalled']} ]); - var nativeParam = { + var param = { }; try { - var syncResult = callNativeWithCallback('ApplicationManager_addAppInfoEventListener', nativeParam, function(result) { - if (result.type == 'oninstalled') { - args.eventCallback.oninstalled(result.info); + var syncResult = + callNativeWithCallback('ApplicationManager_addAppInfoEventListener', param, function(ret) { + if (ret.type == 'oninstalled') { + args.eventCallback.oninstalled(ret.info); } - if (result.type == 'onupdated') { - args.eventCallback.onupdated(result.info); + if (ret.type == 'onupdated') { + args.eventCallback.onupdated(ret.info); } - if (result.type == 'onuninstalled') { - args.eventCallback.onuninstalled(result.id); + if (ret.type == 'onuninstalled') { + args.eventCallback.onuninstalled(ret.id); } }); } catch (e) { @@ -467,8 +499,8 @@ Application.prototype.getRequestedAppControl = function() { } var returnObject = new RequestedApplicationControl(); - SetReadOnlyProperty(returnObject, 'appControl', returnObject.appControl); // read only property - SetReadOnlyProperty(returnObject, 'callerAppId', returnObject.callerAppId); // read only property + SetReadOnlyProperty(returnObject, 'appControl', syncResult.appControl); // read only property + SetReadOnlyProperty(returnObject, 'callerAppId', syncResult.callerAppId); // read only property return returnObject; }; @@ -506,7 +538,8 @@ tizen.ApplicationControl = function(operation, uri, mime, category, data) { 'operation': { writable: true, enumerable: true, value: operation }, 'uri': { writable: true, enumerable: true, value: uri === undefined ? null : uri }, 'mime': { writable: true, enumerable: true, value: mime === undefined ? null : mime }, - 'category': { writable: true, enumerable: true, value: category === undefined ? null : category }, + 'category': { writable: true, enumerable: true, + value: category === undefined ? null : category }, 'data': { writable: true, enumerable: true, value: data } }); @@ -529,6 +562,8 @@ RequestedApplicationControl.prototype.replyResult = function() { if (args['data']) { nativeParam['data'] = args.data; } + if (this.callerAppId) + nativeParam['callerAppId'] = this.callerAppId; try { var syncResult = callNative('RequestedApplicationControl_replyResult', nativeParam); } catch (e) { @@ -537,7 +572,10 @@ RequestedApplicationControl.prototype.replyResult = function() { }; RequestedApplicationControl.prototype.replyFailure = function() { - + var nativeParam = { + }; + if (this.callerAppId) + nativeParam['callerAppId'] = this.callerAppId; try { var syncResult = callNative('RequestedApplicationControl_replyFailure', nativeParam); } catch (e) { diff --git a/src/application/application_certificate.cc b/src/application/application_certificate.cc index eb0e25fc..c59889f2 100644 --- a/src/application/application_certificate.cc +++ b/src/application/application_certificate.cc @@ -13,11 +13,6 @@ namespace extension { namespace application { ApplicationCertificate::ApplicationCertificate() { - -} - -ApplicationCertificate::ApplicationCertificate(const ApplicationCertificatePtr app) { - } ApplicationCertificate::~ApplicationCertificate() { @@ -52,6 +47,6 @@ std::string ApplicationCertificate::get_cert_value() const { void ApplicationCertificate::set_cert_value(const std::string& cert_value) { cert_value_ = cert_value; } - -} // namespace application -} // namespace extension + +} // namespace application +} // namespace extension diff --git a/src/application/application_certificate.h b/src/application/application_certificate.h index 35973485..21a9ef0c 100644 --- a/src/application/application_certificate.h +++ b/src/application/application_certificate.h @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef APPLICATION_APPLICATION_CERTIFICATE_H_ -#define APPLICATION_APPLICATION_CERTIFICATE_H_ +#ifndef SRC_APPLICATION_APPLICATION_CERTIFICATE_H_ +#define SRC_APPLICATION_APPLICATION_CERTIFICATE_H_ #include #include +#include #include "common/picojson.h" #include "tizen/tizen.h" @@ -18,12 +19,12 @@ class ApplicationCertificate; typedef std::shared_ptr ApplicationCertificatePtr; typedef std::vector ApplicationCertificateArray; -typedef std::shared_ptr ApplicationCertificateArrayPtr; +typedef std::shared_ptr + ApplicationCertificateArrayPtr; class ApplicationCertificate { public: ApplicationCertificate(); - ApplicationCertificate(const ApplicationCertificatePtr); ~ApplicationCertificate(); const picojson::value& Value(); @@ -31,10 +32,9 @@ class ApplicationCertificate { std::string get_cert_type() const; void set_cert_type(const std::string& cert_type); - + std::string get_cert_value() const; void set_cert_value(const std::string& cert_value); - private: std::string cert_type_; @@ -44,7 +44,8 @@ class ApplicationCertificate { picojson::object error_; picojson::value value_; }; -} // namespace application -} // namespace extension -#endif // APPLICATION_APPLICATION_CERTIFICATE_H_ +} // namespace application +} // namespace extension + +#endif // SRC_APPLICATION_APPLICATION_CERTIFICATE_H_ diff --git a/src/application/application_context.cc b/src/application/application_context.cc index 0c2fd477..c8254401 100644 --- a/src/application/application_context.cc +++ b/src/application/application_context.cc @@ -13,16 +13,10 @@ namespace extension { namespace application { ApplicationContext::ApplicationContext() { - -} - -ApplicationContext::ApplicationContext(const ApplicationContextPtr app) { - } ApplicationContext::ApplicationContext(const std::string& context_id) : context_id_(context_id) { - } ApplicationContext::~ApplicationContext() { @@ -57,6 +51,6 @@ std::string ApplicationContext::get_app_id() { void ApplicationContext::set_app_id(const std::string& app_id) { app_id_ = app_id; } - -} // namespace application -} // namespace extension + +} // namespace application +} // namespace extension diff --git a/src/application/application_context.h b/src/application/application_context.h index 182c32c2..6aeaf67c 100644 --- a/src/application/application_context.h +++ b/src/application/application_context.h @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef APPLICATION_APPLICATION_CONTEXT_H_ -#define APPLICATION_APPLICATION_CONTEXT_H_ +#ifndef SRC_APPLICATION_APPLICATION_CONTEXT_H_ +#define SRC_APPLICATION_APPLICATION_CONTEXT_H_ #include #include +#include #include "common/picojson.h" #include "tizen/tizen.h" @@ -24,8 +25,7 @@ typedef std::shared_ptr ApplicationContextArrayPtr; class ApplicationContext { public: ApplicationContext(); - ApplicationContext(const std::string& context_id); - ApplicationContext(const ApplicationContextPtr); + explicit ApplicationContext(const std::string& context_id); ~ApplicationContext(); const picojson::value& Value(); @@ -33,10 +33,9 @@ class ApplicationContext { std::string get_context_id(); void set_context_id(const std::string& context_id); - + std::string get_app_id(); void set_app_id(const std::string& app_id); - private: std::string context_id_; @@ -46,7 +45,8 @@ class ApplicationContext { picojson::object error_; picojson::value value_; }; -} // namespace application -} // namespace extension -#endif // APPLICATION_APPLICATION_CONTEXT_H_ +} // namespace application +} // namespace extension + +#endif // SRC_APPLICATION_APPLICATION_CONTEXT_H_ diff --git a/src/application/application_control.cc b/src/application/application_control.cc index b4c9e608..d57d3faf 100644 --- a/src/application/application_control.cc +++ b/src/application/application_control.cc @@ -13,11 +13,6 @@ namespace extension { namespace application { ApplicationControl::ApplicationControl() { - -} - -ApplicationControl::ApplicationControl(const ApplicationControlPtr app) { - } ApplicationControl::~ApplicationControl() { @@ -36,7 +31,7 @@ const picojson::value& ApplicationControl::Value() { datas_array.push_back((*it)->Value()); } data_["data"] = datas; - + value_ = picojson::value(data_); } return value_; @@ -82,13 +77,15 @@ ApplicationControlDataArray ApplicationControl::get_data_array() const { return data_array_; } -void ApplicationControl::set_data_array(const ApplicationControlDataArray& data_array) { +void ApplicationControl::set_data_array + (const ApplicationControlDataArray& data_array) { data_array_ = data_array; } -void ApplicationControl::add_data_array(const ApplicationControlDataPtr& data_ptr) { +void ApplicationControl::add_data_array + (const ApplicationControlDataPtr& data_ptr) { data_array_.push_back(data_ptr); } -} // namespace application -} // namespace extension +} // namespace application +} // namespace extension diff --git a/src/application/application_control.h b/src/application/application_control.h index f356e653..9d96be28 100644 --- a/src/application/application_control.h +++ b/src/application/application_control.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef APPLICATION_APPLICATION_CONTROL_H_ -#define APPLICATION_APPLICATION_CONTROL_H_ +#ifndef SRC_APPLICATION_APPLICATION_CONTROL_H_ +#define SRC_APPLICATION_APPLICATION_CONTROL_H_ #include #include @@ -11,7 +11,7 @@ #include "common/picojson.h" #include "tizen/tizen.h" -#include "application_controldata.h" +#include "application/application_controldata.h" namespace extension { namespace application { @@ -22,7 +22,6 @@ typedef std::shared_ptr ApplicationControlPtr; class ApplicationControl { public: ApplicationControl(); - ApplicationControl(const ApplicationControlPtr); ~ApplicationControl(); const picojson::value& Value(); @@ -51,7 +50,8 @@ class ApplicationControl { picojson::object error_; picojson::value value_; }; -} // namespace application -} // namespace extension -#endif // APPLICATION_APPLICATION_CONTROL_H_ +} // namespace application +} // namespace extension + +#endif // SRC_APPLICATION_APPLICATION_CONTROL_H_ diff --git a/src/application/application_controldata.cc b/src/application/application_controldata.cc index 09ade8e9..558a4145 100644 --- a/src/application/application_controldata.cc +++ b/src/application/application_controldata.cc @@ -13,11 +13,6 @@ namespace extension { namespace application { ApplicationControlData::ApplicationControlData() { - -} - -ApplicationControlData::ApplicationControlData(const ApplicationControlDataPtr app) { - } ApplicationControlData::~ApplicationControlData() { @@ -32,7 +27,7 @@ const picojson::value& ApplicationControlData::Value() { values_array.push_back(picojson::value(*it)); } data_["value"] = values; - + value_ = picojson::value(data_); } return value_; @@ -54,7 +49,8 @@ std::vector ApplicationControlData::get_ctr_value() const { return ctr_value_; } -void ApplicationControlData::set_ctr_value(const std::vector &ctr_values) { +void ApplicationControlData::set_ctr_value + (const std::vector &ctr_values) { ctr_value_ = ctr_values; } @@ -64,5 +60,5 @@ void ApplicationControlData::add_ctr_value(const std::string& ctr_value) { -} // namespace application -} // namespace extension +} // namespace application +} // namespace extension diff --git a/src/application/application_controldata.h b/src/application/application_controldata.h index bdfe9b6e..a9371dd9 100644 --- a/src/application/application_controldata.h +++ b/src/application/application_controldata.h @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef APPLICATION_APPLICATION_CONTROLDATA_H_ -#define APPLICATION_APPLICATION_CONTROLDATA_H_ +#ifndef SRC_APPLICATION_APPLICATION_CONTROLDATA_H_ +#define SRC_APPLICATION_APPLICATION_CONTROLDATA_H_ #include #include +#include #include "common/picojson.h" #include "tizen/tizen.h" @@ -18,12 +19,12 @@ class ApplicationControlData; typedef std::shared_ptr ApplicationControlDataPtr; typedef std::vector ApplicationControlDataArray; -typedef std::shared_ptr ApplicationControlDataArrayPtr; +typedef std::shared_ptr + ApplicationControlDataArrayPtr; class ApplicationControlData { public: ApplicationControlData(); - ApplicationControlData(const ApplicationControlDataPtr); ~ApplicationControlData(); const picojson::value& Value(); @@ -31,7 +32,7 @@ class ApplicationControlData { std::string get_ctr_key() const; void set_ctr_key(const std::string& ctr_key); - + std::vector get_ctr_value() const; void set_ctr_value(const std::vector& ctr_values); void add_ctr_value(const std::string& ctr_value); @@ -44,7 +45,8 @@ class ApplicationControlData { picojson::object error_; picojson::value value_; }; -} // namespace application -} // namespace extension -#endif // APPLICATION_APPLICATION_CONTROLDATA_H_ +} // namespace application +} // namespace extension + +#endif // SRC_APPLICATION_APPLICATION_CONTROLDATA_H_ diff --git a/src/application/application_extension.cc b/src/application/application_extension.cc index 3ad1aab8..04bfc57d 100644 --- a/src/application/application_extension.cc +++ b/src/application/application_extension.cc @@ -14,10 +14,9 @@ extern const char kSource_application_api[]; common::Extension* CreateExtension() { - std::string app_id = common::Extension::GetRuntimeVariable("app_id", 64); LoggerD("app_id: %s", app_id.c_str()); - + if (app_id.empty()) { LoggerD("Application extension will not be created."); return NULL; @@ -34,7 +33,7 @@ ApplicationExtension::ApplicationExtension(const std::string& app_id) { const char* entry_points[] = { "tizen.ApplicationControlData", "tizen.ApplicationControl", NULL}; - SetExtraJSEntryPoints(entry_points); + SetExtraJSEntryPoints(entry_points); } ApplicationExtension::~ApplicationExtension() {} diff --git a/src/application/application_extension.h b/src/application/application_extension.h index c14b23ef..965e2c56 100644 --- a/src/application/application_extension.h +++ b/src/application/application_extension.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef APPLICATION_APPLICATION_EXTENSION_H_ -#define APPLICATION_APPLICATION_EXTENSION_H_ +#ifndef SRC_APPLICATION_APPLICATION_EXTENSION_H_ +#define SRC_APPLICATION_APPLICATION_EXTENSION_H_ #include @@ -20,4 +20,4 @@ class ApplicationExtension : public common::Extension { virtual common::Instance* CreateInstance(); }; -#endif // APPLICATION_APPLICATION_EXTENSION_H_ +#endif // SRC_APPLICATION_APPLICATION_EXTENSION_H_ diff --git a/src/application/application_information.cc b/src/application/application_information.cc index 73bcf682..bff26202 100644 --- a/src/application/application_information.cc +++ b/src/application/application_information.cc @@ -5,6 +5,7 @@ #include "application/application_information.h" #include +#include #include "common/logger.h" #include "tizen/tizen.h" @@ -13,15 +14,9 @@ namespace extension { namespace application { ApplicationInformation::ApplicationInformation() { - -} - -ApplicationInformation::ApplicationInformation(const ApplicationInformationPtr app) { - } ApplicationInformation::~ApplicationInformation() { - } std::string ApplicationInformation::get_app_id() const { @@ -77,10 +72,10 @@ double ApplicationInformation::get_install_date() const { } void ApplicationInformation::set_install_date(const time_t &install_date) { - install_date_ = (double)(install_date); + install_date_ = static_cast(install_date); - // pkgmgrinfo_pkginfo_get_installed_time() returns installed time by using int type - // but, it can't have millisecond value fully + // pkgmgrinfo_pkginfo_get_installed_time() returns installed time + // by using int type. but, it can't have millisecond value fully install_date_ = install_date_ * 1000; } @@ -88,16 +83,17 @@ std::vector ApplicationInformation::get_categories() const { return categories_; } -void ApplicationInformation::set_categories(const std::vector &categories) { +void ApplicationInformation::set_categories + (const std::vector &categories) { categories_ = categories; } void ApplicationInformation::add_categories(const std::string &category) { - categories_.push_back(category); + categories_.push_back(category); } void ApplicationInformation::set_size(const int &size) { - size_ = (double)size; + size_ = static_cast(size); } double ApplicationInformation::get_size() const { @@ -121,7 +117,7 @@ const picojson::value& ApplicationInformation::Value() { data_["categories"] = categories; LoggerD("size: %f", size_); data_["size"] = picojson::value(size_); - + value_ = picojson::value(data_); } return value_; @@ -131,5 +127,5 @@ bool ApplicationInformation::IsValid() const { return error_.empty(); } -} // namespace application -} // namespace extension +} // namespace application +} // namespace extension diff --git a/src/application/application_information.h b/src/application/application_information.h index 8393638f..baa44d4d 100644 --- a/src/application/application_information.h +++ b/src/application/application_information.h @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef APPLICATION_APPLICATION_INFORMATION_H_ -#define APPLICATION_APPLICATION_INFORMATION_H_ +#ifndef SRC_APPLICATION_APPLICATION_INFORMATION_H_ +#define SRC_APPLICATION_APPLICATION_INFORMATION_H_ #include #include +#include #include "common/picojson.h" @@ -17,12 +18,12 @@ class ApplicationInformation; typedef std::shared_ptr ApplicationInformationPtr; typedef std::vector ApplicationInformationArray; -typedef std::shared_ptr ApplicationInformationArrayPtr; +typedef std::shared_ptr + ApplicationInformationArrayPtr; class ApplicationInformation { public: ApplicationInformation(); - ApplicationInformation(const ApplicationInformationPtr); ~ApplicationInformation(); const picojson::value& Value(); @@ -47,7 +48,7 @@ class ApplicationInformation { void add_categories(const std::string &category); void set_size(const int& size); double get_size() const; - + private: std::string app_id_; std::string name_; @@ -64,7 +65,7 @@ class ApplicationInformation { picojson::value value_; }; -} // namespace application -} // namespace extension +} // namespace application +} // namespace extension -#endif // APPLICATION_APPLICATION_INFORMATION_H_ +#endif // SRC_APPLICATION_APPLICATION_INFORMATION_H_ diff --git a/src/application/application_instance.cc b/src/application/application_instance.cc index 63d595c2..109a2593 100644 --- a/src/application/application_instance.cc +++ b/src/application/application_instance.cc @@ -4,43 +4,37 @@ #include "application/application_instance.h" -#include -#include -#include -#include +// To get pid #include #include #include -#include - // to launch app by aul #include // to get package name by appid #include -#include - -// To get cert information from package -#include -#include +#include // To get app size and installed time #include #include -// To get ppid -#include +#include +#include +#include +#include +#include #include "common/logger.h" #include "common/picojson.h" #include "common/platform_exception.h" #include "common/task-queue.h" -#include "application.h" -#include "application_context.h" -#include "application_control.h" +#include "application/application.h" +#include "application/application_context.h" +#include "application/application_control.h" namespace extension { namespace application { @@ -49,10 +43,24 @@ namespace { // The privileges that required in Application API const std::string kPrivilegeApplication = ""; -} // namespace - -using namespace common; -using namespace extension::application; +} // namespace + +using common::PlatformException; +using common::UnknownException; +using common::TypeMismatchException; +using common::IOException; +using common::ServiceNotAvailableException; +using common::SecurityException; +using common::NetworkException; +using common::NotSupportedException; +using common::NotFoundException; +using common::InvalidAccessException; +using common::AbortException; +using common::QuotaExceededException; +using common::InvalidStateException; +using common::InvalidModificationException; +using common::InvalidValuesException; +using common::TaskQueue; static ApplicationInformationPtr get_app_info(pkgmgrinfo_appinfo_h handle); @@ -61,33 +69,52 @@ ApplicationInstance::ApplicationInstance(const std::string& app_id) { watch_id_ = 0; app_id_ = app_id; - using namespace std::placeholders; - #define REGISTER_SYNC(c,x) \ + using std::placeholders::_1; + using std::placeholders::_2; + #define REGISTER_SYNC(c, x) \ RegisterSyncHandler(c, std::bind(&ApplicationInstance::x, this, _1, _2)); - REGISTER_SYNC("ApplicationManager_getAppCerts", ApplicationManagerGetappcerts); - REGISTER_SYNC("Application_getRequestedAppControl", ApplicationGetrequestedappcontrol); - REGISTER_SYNC("ApplicationManager_addAppInfoEventListener", ApplicationManagerAddappinfoeventlistener); - REGISTER_SYNC("ApplicationManager_getAppMetaData", ApplicationManagerGetappmetadata); - REGISTER_SYNC("ApplicationManager_launchAppControl", ApplicationManagerLaunchappcontrol); - REGISTER_SYNC("ApplicationManager_removeAppInfoEventListener", ApplicationManagerRemoveappinfoeventlistener); - REGISTER_SYNC("ApplicationManager_getAppInfo", ApplicationManagerGetappinfo); - REGISTER_SYNC("ApplicationManager_getAppSharedURI", ApplicationManagerGetappshareduri); - REGISTER_SYNC("RequestedApplicationControl_replyResult", RequestedApplicationControlReplyresult); - REGISTER_SYNC("ApplicationManager_kill", ApplicationManagerKill); - REGISTER_SYNC("ApplicationManager_getAppsInfo", ApplicationManagerGetappsinfo); - REGISTER_SYNC("ApplicationManager_launch", ApplicationManagerLaunch); - REGISTER_SYNC("Application_hide", ApplicationHide); - REGISTER_SYNC("ApplicationManager_getAppsContext", ApplicationManagerGetappscontext); - REGISTER_SYNC("ApplicationManager_getAppContext", ApplicationManagerGetappcontext); - REGISTER_SYNC("RequestedApplicationControl_replyFailure", RequestedApplicationControlReplyfailure); - REGISTER_SYNC("Application_exit", ApplicationExit); - REGISTER_SYNC("ApplicationManager_getCurrentApplication", ApplicationManagerGetcurrentapplication); - REGISTER_SYNC("ApplicationManager_findAppControl", ApplicationManagerFindappcontrol); + REGISTER_SYNC("ApplicationManager_getAppCerts", + AppMgrGetAppCerts); + REGISTER_SYNC("Application_getRequestedAppControl", + AppGetRequestedAppControl); + REGISTER_SYNC("ApplicationManager_addAppInfoEventListener", + AppMgrAddAppInfoEventListener); + REGISTER_SYNC("ApplicationManager_getAppMetaData", + AppMgrGetAppMetaData); + REGISTER_SYNC("ApplicationManager_launchAppControl", + AppMgrLaunchAppControl); + REGISTER_SYNC("ApplicationManager_removeAppInfoEventListener", + AppMgrRemoveAppInfoEventListener); + REGISTER_SYNC("ApplicationManager_getAppInfo", + AppMgrGetAppInfo); + REGISTER_SYNC("ApplicationManager_getAppSharedURI", + AppMgrGetAppSharedURI); + REGISTER_SYNC("RequestedApplicationControl_replyResult", + RequestedAppControlReplyResult); + REGISTER_SYNC("ApplicationManager_kill", + AppMgrKill); + REGISTER_SYNC("ApplicationManager_getAppsInfo", + AppMgrGetAppsInfo); + REGISTER_SYNC("ApplicationManager_launch", + AppMgrLaunch); + REGISTER_SYNC("Application_hide", + AppHide); + REGISTER_SYNC("ApplicationManager_getAppsContext", + AppMgrGetAppsContext); + REGISTER_SYNC("ApplicationManager_getAppContext", + AppMgrGetAppContext); + REGISTER_SYNC("RequestedApplicationControl_replyFailure", + RequestedAppControlReplyFailure); + REGISTER_SYNC("Application_exit", + AppExit); + REGISTER_SYNC("ApplicationManager_getCurrentApplication", + AppMgrGetCurrentApplication); + REGISTER_SYNC("ApplicationManager_findAppControl", + AppMgrFindAppControl); #undef REGISTER_SYNC } ApplicationInstance::~ApplicationInstance() { - LoggerD("Destructor of ApplicationInstance called."); } @@ -115,7 +142,7 @@ struct CallbackInfo { char error_msg[256]; char id[256]; int callback_id; - picojson::object data; + picojson::object data; }; static picojson::value GetAppError(int type, const char* msg) { @@ -152,7 +179,8 @@ static picojson::value GetAppError(int type, const char* msg) { } static void ReplyAsync(ApplicationInstance* instance, - int callback_id, bool isSuccess, picojson::object& param, int err_id, const char* err_msg) { + int callback_id, bool isSuccess, picojson::object& param, + int err_id, const char* err_msg) { param["callbackId"] = picojson::value(static_cast(callback_id)); if (isSuccess) { param["status"] = picojson::value("success"); @@ -160,7 +188,7 @@ static void ReplyAsync(ApplicationInstance* instance, param.insert(std::make_pair("status", picojson::value("error"))); param.insert(std::make_pair("error", GetAppError(err_id, err_msg))); } - + picojson::value result = picojson::value(param); char print_buf[300] = {0}; snprintf(print_buf, sizeof(print_buf), result.serialize().c_str()); @@ -170,7 +198,8 @@ static void ReplyAsync(ApplicationInstance* instance, // Callback of 'app_manager_foreach_app_context' // Used by 'getAppsContext' -static bool app_manager_app_context_callback(app_context_h app_context, void *user_data) { +static bool app_manager_app_context_callback(app_context_h app_context, + void *user_data) { int ret = 0; char *app_id = NULL; @@ -206,7 +235,8 @@ static bool app_manager_app_context_callback(app_context_h app_context, void *us app_context_ptr->set_app_id(app_id); app_context_ptr->set_context_id(context_id); - ApplicationContextArray* app_context_array_ptr = (ApplicationContextArray*)user_data; + ApplicationContextArray* app_context_array_ptr = + reinterpret_cast(user_data); app_context_array_ptr->push_back(app_context_ptr); if (app_id) @@ -229,7 +259,8 @@ static int get_app_installed_size(const char* app_id) { if (pc == NULL) { LoggerE("Failed to create pkgmgr client"); } else { - size = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, PM_GET_TOTAL_SIZE, pc, NULL, package_id, NULL, NULL, NULL); + size = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, + PM_GET_TOTAL_SIZE, pc, NULL, package_id, NULL, NULL, NULL); if (size < 0) { LoggerE("Failed to get installed size"); } @@ -243,12 +274,13 @@ static int get_app_installed_size(const char* app_id) { } LoggerD("Get app size: %s[%d]", app_id, size); - return size; + return size; } // Callback from 'app_control_foreach_app_matched' // Used by 'findAppControl' -static bool app_control_app_matched_callback(app_control_h service, const char *appid, void *user_data) { +static bool app_control_app_matched_callback(app_control_h service, + const char *appid, void *user_data) { if (appid == NULL) { LoggerD("appid is NULL"); return false; @@ -263,18 +295,22 @@ static bool app_control_app_matched_callback(app_control_h service, const char * ApplicationInformationPtr app_info_ptr = get_app_info(handle); pkgmgrinfo_appinfo_destroy_appinfo(handle); - ApplicationInformationArray* app_info_array = (ApplicationInformationArray*)user_data; + ApplicationInformationArray* app_info_array = + reinterpret_cast(user_data); + app_info_array->push_back(app_info_ptr); } return true; } -static bool app_control_extra_data_callback(app_control_h service, const char* key, void* user_data) { +static bool app_control_extra_data_callback(app_control_h service, + const char* key, void* user_data) { int ret = 0; - LoggerD("Handing extra data"); + LoggerD("Handing extra data"); - ApplicationControlDataArray* app_ctr_data_array = (ApplicationControlDataArray*)user_data; + ApplicationControlDataArray* app_ctr_data_array = + reinterpret_cast(user_data); bool is_array = false; ret = app_control_is_extra_data_array(service, key, &is_array); @@ -303,7 +339,8 @@ static bool app_control_extra_data_callback(app_control_h service, const char* k } } - ApplicationControlDataPtr app_control_data(new ApplicationControlData()); + ApplicationControlDataPtr app_control_data( + new ApplicationControlData()); app_control_data->set_ctr_key(key_str); app_control_data->set_ctr_value(val_array); app_ctr_data_array->push_back(app_control_data); @@ -317,19 +354,19 @@ static bool app_control_extra_data_callback(app_control_h service, const char* k break; } case APP_CONTROL_ERROR_INVALID_PARAMETER: - LoggerE("app_control_get_extra_data retuns APP_CONTROL_ERROR_INVALID_PARAMETER"); + LoggerE("get_extra_data retuns ERROR_INVALID_PARAMETER"); break; case APP_CONTROL_ERROR_KEY_NOT_FOUND: - LoggerE("app_control_get_extra_data retuns APP_CONTROL_ERROR_KEY_NOT_FOUND"); + LoggerE("get_extra_data retuns ERROR_KEY_NOT_FOUND"); break; case APP_CONTROL_ERROR_OUT_OF_MEMORY: - LoggerE("app_control_get_extra_data retuns APP_CONTROL_ERROR_OUT_OF_MEMORY"); + LoggerE("get_extra_data retuns ERROR_OUT_OF_MEMORY"); break; default: - LoggerE("app_control_get_extra_data retuns Error"); + LoggerE("get_extra_data retuns Unknown Error"); break; } - } else { // (!is_array) + } else { // (!is_array) LoggerD("extra data is not array"); char *value = NULL; @@ -356,16 +393,16 @@ static bool app_control_extra_data_callback(app_control_h service, const char* k break; } case APP_CONTROL_ERROR_INVALID_PARAMETER: - LoggerE("app_control_get_extra_data retuns APP_CONTROL_ERROR_INVALID_PARAMETER"); + LoggerE("get_extra_data retuns ERROR_INVALID_PARAMETER"); break; case APP_CONTROL_ERROR_KEY_NOT_FOUND: - LoggerE("app_control_get_extra_data retuns APP_CONTROL_ERROR_KEY_NOT_FOUND"); + LoggerE("get_extra_data retuns ERROR_KEY_NOT_FOUND"); break; case APP_CONTROL_ERROR_OUT_OF_MEMORY: - LoggerE("app_control_get_extra_data retuns APP_CONTROL_ERROR_OUT_OF_MEMORY"); + LoggerE("get_extra_data retuns ERROR_OUT_OF_MEMORY"); break; default: - LoggerE("app_control_get_extra_data retuns Error"); + LoggerE("get_extra_data retuns Known Error"); break; } } @@ -374,31 +411,30 @@ static bool app_control_extra_data_callback(app_control_h service, const char* k // Callback of 'app_control_send_launch_request' // Used by 'launchAppControl' -static void app_control_reply_callback(app_control_h request, app_control_h reply, - app_control_result_e result, void *user_data) { - - CallbackInfo* info = (CallbackInfo*)user_data; +static void app_control_reply_callback(app_control_h request, + app_control_h reply, app_control_result_e result, void *user_data) { + CallbackInfo* info = reinterpret_cast(user_data); if (result == APP_CONTROL_RESULT_SUCCEEDED) { - LoggerD("APP_CONTROL_RESULT_SUCCEEDED"); // create new service object to store result. - ApplicationControlDataArrayPtr app_ctr_data_array(new ApplicationControlDataArray()); + ApplicationControlDataArrayPtr app_ctr_data_array_ptr( + new ApplicationControlDataArray()); int result = app_control_foreach_extra_data(reply, - app_control_extra_data_callback, app_ctr_data_array.get()); + app_control_extra_data_callback, app_ctr_data_array_ptr.get()); if (result == APP_CONTROL_ERROR_NONE) { - LoggerD("Getting extra data is succeeded."); + LoggerD("Getting extra data is succeeded."); } else { LoggerD("Getting extra data is failed."); } - + picojson::value replied_data = picojson::value(picojson::array()); picojson::array& replied_data_array = replied_data.get(); - for (int i = 0; i < app_ctr_data_array->size(); i++) { - ApplicationControlDataPtr ctr_data_ptr = app_ctr_data_array->at(i); + for (int i = 0; i < app_ctr_data_array_ptr->size(); i++) { + ApplicationControlDataPtr ctr_data_ptr = app_ctr_data_array_ptr->at(i); replied_data_array.push_back(ctr_data_ptr->Value()); } @@ -409,13 +445,15 @@ static void app_control_reply_callback(app_control_h request, app_control_h repl data.insert(std::make_pair("data", replied_data)); ReplyAsync(info->instance, info->callback_id, true, data, 0, NULL); - } else if (result == APP_CONTROL_RESULT_FAILED || APP_CONTROL_RESULT_CANCELED) { + } else if (result == APP_CONTROL_RESULT_FAILED || + result == APP_CONTROL_RESULT_CANCELED) { LoggerD("APP_CONTROL_RESULT_FAILED or CANCELED"); // ReplyAsync picojson::object data; data.insert(std::make_pair("type", picojson::value("onfailure"))); - ReplyAsync(info->instance, info->callback_id, false, data, APP_ERROR_ABORT, "Failed or Canceled"); + ReplyAsync(info->instance, info->callback_id, false, data, + APP_ERROR_ABORT, "Failed or Canceled"); } if (info) @@ -428,7 +466,7 @@ static char* getPackageByAppId(const char* app_id) { char* pkgName; int ret = 0; - // TODO: gPkgIdMapInited + // TODO(sunggyu.choi): gPkgIdMapInited ret = app_manager_get_app_info(app_id, &handle); if (ret < 0) { @@ -454,16 +492,18 @@ static int category_cb(const char *category, void *user_data) { if (category == NULL) return true; - ApplicationInformation* appInfo = (ApplicationInformation*)user_data; + ApplicationInformation* appInfo = + reinterpret_cast(user_data); appInfo->add_categories(category); return true; } -static bool package_certificate_cb(package_info_h handle, package_cert_type_e cert_type, const char *cert_value, void *user_data) { +static bool package_certificate_cb(package_info_h handle, + package_cert_type_e cert_type, const char *cert_value, void *user_data) { ApplicationCertificatePtr cert(new ApplicationCertificate()); std::string cert_type_name; - switch(cert_type) { + switch (cert_type) { case PACKAGE_INFO_AUTHOR_ROOT_CERT: cert_type_name = "AUTHOR_ROOT"; break; @@ -501,7 +541,9 @@ static bool package_certificate_cb(package_info_h handle, package_cert_type_e ce std::string cert_type_value = cert_value; cert->set_cert_value(cert_type_value); - ApplicationCertificateArray *certs = (ApplicationCertificateArray*)user_data; + ApplicationCertificateArray *certs = + reinterpret_cast(user_data); + certs->push_back(cert); return true; } @@ -536,7 +578,8 @@ static ApplicationInformationPtr get_app_info(pkgmgrinfo_appinfo_h handle) { app_info->set_icon_path(icon_path); } - ret = pkgmgrinfo_appinfo_foreach_category(handle, category_cb, (void*)app_info.get()); + ret = pkgmgrinfo_appinfo_foreach_category(handle, category_cb, + reinterpret_cast(app_info.get())); if (ret != PMINFO_R_OK) { LoggerD("Fail to get categories"); } @@ -587,7 +630,8 @@ static ApplicationInformationPtr get_app_info(pkgmgrinfo_appinfo_h handle) { return app_info; } -static int app_meta_data_cb(const char *meta_key, const char *meta_value, void *user_data) { +static int app_meta_data_cb(const char *meta_key, const char *meta_value, + void *user_data) { if ((meta_key == NULL) || (meta_value == NULL)) { LoggerE("meta_key or meta_value is null"); return 0; @@ -601,16 +645,19 @@ static int app_meta_data_cb(const char *meta_key, const char *meta_value, void * std::string value = meta_value; meta_data->set_meta_value(value); - ApplicationMetaDataArray* meta_data_array = (ApplicationMetaDataArray*)user_data; + ApplicationMetaDataArray* meta_data_array = + reinterpret_cast(user_data); meta_data_array->push_back(meta_data); return 0; } -static int installed_app_info_cb(pkgmgrinfo_appinfo_h handle, void *user_data) { +static int installed_app_info_cb(pkgmgrinfo_appinfo_h handle, + void *user_data) { LoggerD("ENTER"); ApplicationInformationPtr app_info = get_app_info(handle); - ApplicationInformationArray *app_info_array = (ApplicationInformationArray*)user_data; + ApplicationInformationArray* app_info_array = + reinterpret_cast(user_data); app_info_array->push_back(app_info); return 0; } @@ -619,16 +666,16 @@ static int installed_app_info_cb(pkgmgrinfo_appinfo_h handle, void *user_data) { // Used by 'kill' static void app_manager_app_context_event_callback(app_context_h app_context, app_context_event_e event, void *user_data) { - - CallbackInfo* info = (CallbackInfo*)user_data; + CallbackInfo* info = + reinterpret_cast(user_data); int ret = 0; LoggerD("context_id: %s, callback_id: %d", info->id, info->callback_id); - if(event != APP_CONTEXT_EVENT_TERMINATED) { + if (event != APP_CONTEXT_EVENT_TERMINATED) { picojson::object data; info->error_type = APP_ERROR_UNKNOWN; - sprintf(info->error_msg, "Not terminated."); - ReplyAsync(info->instance, info->callback_id, + snprintf(info->error_msg, sizeof(info->error_msg), "Not terminated."); + ReplyAsync(info->instance, info->callback_id, false, data, info->error_type, info->error_msg); } else { picojson::object data; @@ -640,10 +687,10 @@ static void app_manager_app_context_event_callback(app_context_h app_context, free(info); } -static gboolean getappsinfo_callback_thread_completed(const std::shared_ptr& user_data) -{ +static gboolean getappsinfo_callback_thread_completed( + const std::shared_ptr& user_data) { LoggerD("Entered"); - + if (user_data->is_success) { ReplyAsync(user_data->instance, user_data->callback_id, true, user_data->data, 0, NULL); @@ -655,12 +702,14 @@ static gboolean getappsinfo_callback_thread_completed(const std::shared_ptr& user_data) -{ +static void* getappsinfo_callback_thread( + const std::shared_ptr& user_data) { LoggerD("Entered."); - ApplicationInformationArrayPtr app_info_array_ptr(new ApplicationInformationArray()); + ApplicationInformationArrayPtr app_info_array_ptr( + new ApplicationInformationArray()); - int ret = pkgmgrinfo_appinfo_get_installed_list(installed_app_info_cb, app_info_array_ptr.get()); + int ret = pkgmgrinfo_appinfo_get_installed_list(installed_app_info_cb, + app_info_array_ptr.get()); if (ret == PMINFO_R_OK) { LoggerE("pkgmgrinfo_appinfo_get_installed_list: ERROR_NONE"); user_data->is_success = true; @@ -673,22 +722,21 @@ static void* getappsinfo_callback_thread(const std::shared_ptr& us apps_infos_array.push_back(app_info_ptr->Value()); } - user_data->data.insert(std::make_pair("informationArray", apps_infos)); - + user_data->data.insert(std::make_pair("informationArray", apps_infos)); } else { LoggerE("pkgmgrinfo_appinfo_get_installed_list: ERROR"); user_data->error_type = APP_ERROR_UNKNOWN; - sprintf(user_data->error_msg, "Unknown"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), "Unknown"); user_data->is_success = false; - } + } } -static gboolean getappsctx_callback_thread_completed(const std::shared_ptr& user_data) -{ +static gboolean getappsctx_callback_thread_completed( + const std::shared_ptr& user_data) { LoggerD("Entered"); - + if (user_data->is_success) { ReplyAsync(user_data->instance, user_data->callback_id, true, user_data->data, 0, NULL); @@ -697,90 +745,93 @@ static gboolean getappsctx_callback_thread_completed(const std::shared_ptrinstance, user_data->callback_id, false, data, user_data->error_type, user_data->error_msg); } - return true; + return true; } -static void* getappsctx_callback_thread(const std::shared_ptr& user_data) -{ +static void* getappsctx_callback_thread( + const std::shared_ptr& user_data) { LoggerD("Entered."); - ApplicationContextArrayPtr app_context_array_ptr(new ApplicationContextArray()); + ApplicationContextArrayPtr app_context_array_ptr( + new ApplicationContextArray()); - int ret = app_manager_foreach_app_context(app_manager_app_context_callback, app_context_array_ptr.get()); + int ret = app_manager_foreach_app_context(app_manager_app_context_callback, + app_context_array_ptr.get()); if (ret == APP_MANAGER_ERROR_NONE) { LoggerE("app_manager_foreach_app_context error: ERROR_NONE"); user_data->is_success = true; picojson::value apps_contexts = picojson::value(picojson::array()); - picojson::array& apps_contexts_array = apps_contexts.get(); + picojson::array& apps_contexts_array = + apps_contexts.get(); for (int i = 0; i < app_context_array_ptr->size(); i++) { ApplicationContextPtr app_ctx_ptr = app_context_array_ptr->at(i); apps_contexts_array.push_back(app_ctx_ptr->Value()); } - user_data->data.insert(std::make_pair("contexts", apps_contexts)); + user_data->data.insert(std::make_pair("contexts", apps_contexts)); } else { LoggerE("app_manager_foreach_app_context error: ERROR"); if (ret == APP_MANAGER_ERROR_INVALID_PARAMETER) { user_data->error_type = APP_ERROR_TYPE_MISMATCH; - sprintf(user_data->error_msg, "Invalid parameter"); - } else if(ret == APP_MANAGER_ERROR_PERMISSION_DENIED) { + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "Invalid parameter"); + } else if (ret == APP_MANAGER_ERROR_PERMISSION_DENIED) { user_data->error_type = APP_ERROR_ABORT; - sprintf(user_data->error_msg, "Permission denied"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "Permission denied"); } else { user_data->error_type = APP_ERROR_UNKNOWN; - sprintf(user_data->error_msg, "Unknown"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "Unknown"); } user_data->is_success = false; - } + } } -static gboolean callback_thread_completed(const std::shared_ptr& user_data) -{ +static gboolean callback_thread_completed + (const std::shared_ptr& user_data) { LoggerD("Entered"); picojson::object data; - - if (user_data->is_success) { + if (user_data->is_success) { ReplyAsync(user_data->instance, user_data->callback_id, true, data, 0, NULL); } else { ReplyAsync(user_data->instance, user_data->callback_id, false, data, user_data->error_type, user_data->error_msg); } - return true; + return true; } -static gboolean find_callback_thread_completed(const std::shared_ptr& user_data) -{ +static gboolean find_callback_thread_completed + (const std::shared_ptr& user_data) { LoggerD("Entered"); picojson::object data; - - if (user_data->is_success) { + if (user_data->is_success) { ReplyAsync(user_data->instance, user_data->callback_id, true, user_data->data, 0, NULL); } else { ReplyAsync(user_data->instance, user_data->callback_id, false, data, user_data->error_type, user_data->error_msg); } - return true; + return true; } -static void* callback_thread(const std::shared_ptr& user_data) -{ +static void* callback_thread + (const std::shared_ptr& user_data) { LoggerD("Entered. currently, nothing to do"); - } -static gboolean launch_completed(const std::shared_ptr& user_data) -{ +static gboolean launch_completed + (const std::shared_ptr& user_data) { LoggerD("Entered"); picojson::object data; - + if (user_data->is_success) { ReplyAsync(user_data->instance, user_data->callback_id, true, data, 0, NULL); @@ -788,14 +839,14 @@ static gboolean launch_completed(const std::shared_ptr& user_data) ReplyAsync(user_data->instance, user_data->callback_id, false, data, user_data->error_type, user_data->error_msg); } - return true; + return true; } -static void* launch_thread(const std::shared_ptr& user_data) -{ +static void* launch_thread(const std::shared_ptr& user_data) { int ret; - LoggerD("app_id: %s, callback_id: %d", user_data->id, user_data->callback_id); + LoggerD("app_id: %s, callback_id: %d", user_data->id, + user_data->callback_id); ret = aul_open_app(user_data->id); if (ret < 0) { @@ -821,12 +872,12 @@ static void* launch_thread(const std::shared_ptr& user_data) } user_data->is_success = false; user_data->error_type = type; - sprintf(user_data->error_msg, msg.c_str()); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), msg.c_str()); } else { LoggerD("Success to launch."); - user_data->is_success = true; + user_data->is_success = true; } -} +} #define CHECK_EXIST(args, name, out) \ if (!args.contains(name)) {\ @@ -834,20 +885,19 @@ static void* launch_thread(const std::shared_ptr& user_data) return;\ } -void ApplicationInstance::ApplicationManagerGetcurrentapplication(const picojson::value& args, picojson::object& out) { - +void ApplicationInstance::AppMgrGetCurrentApplication( + const picojson::value& args, picojson::object& out) { try { ApplicationPtr app = GetCurrentApplication(app_id_); LoggerD("context id = %s", app->get_context_id().c_str()); ReportSuccess(app->Value(), out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerKill(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrKill(const picojson::value& args, + picojson::object& out) { CHECK_EXIST(args, "callbackId", out) int callback_id = static_cast(args.get("callbackId").get()); @@ -859,14 +909,13 @@ void ApplicationInstance::ApplicationManagerKill(const picojson::value& args, pi try { Kill(context_id, callback_id); ReportSuccess(out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerLaunch(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrLaunch(const picojson::value& args, + picojson::object& out) { CHECK_EXIST(args, "callbackId", out) int callback_id = static_cast(args.get("callbackId").get()); @@ -878,61 +927,34 @@ void ApplicationInstance::ApplicationManagerLaunch(const picojson::value& args, try { Launch(id, callback_id); ReportSuccess(out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerLaunchappcontrol(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrLaunchAppControl(const picojson::value& args, + picojson::object& out) { CHECK_EXIST(args, "callbackId", out) int callback_id = static_cast(args.get("callbackId").get()); - std::string id; // app id is optional - if (args.contains("id")) + std::string id; // app id is optional + if (args.contains("id")) { id = args.get("id").get(); - - LoggerD("app_id = %s", id.c_str()); - + LoggerD("app_id = %s", id.c_str()); + } LoggerD("callbackId = %d", callback_id); - //LoggerD("args = %s", args.serialize().c_str()); - /* example: args.serialize().c_str() - args = -{ - "appControl": - { - "category":null, - "data":[ - { - "key":"images1", - "value":["first1","second1"] - }, - { - "key":"images2", - "value":["first2","second2"] - } - ], - "mime":"image\/*", - "operation":"http:\/\/tizen.org\/appcontrol\/operation\/pick", - "uri":null - }, - "callbackId":0 -} - */ - ApplicationControlPtr app_ctr_ptr(new ApplicationControl()); picojson::value app_control = args.get("appControl"); std::string operation = app_control.get("operation").get(); app_ctr_ptr->set_operation(operation); LoggerD("operation: %s", operation.c_str()); - + if (app_control.contains("uri")) { if (app_control.get("uri").is() == false) { std::string uri = app_control.get("uri").get(); - app_ctr_ptr->set_uri(uri); + app_ctr_ptr->set_uri(uri); } else { LoggerD("uri is null"); } @@ -941,7 +963,7 @@ void ApplicationInstance::ApplicationManagerLaunchappcontrol(const picojson::val if (app_control.contains("mime")) { if (app_control.get("mime").is() == false) { std::string mime = app_control.get("mime").get(); - app_ctr_ptr->set_mime(mime); + app_ctr_ptr->set_mime(mime); } else { LoggerD("mime is null"); } @@ -950,23 +972,25 @@ void ApplicationInstance::ApplicationManagerLaunchappcontrol(const picojson::val if (app_control.contains("category")) { if (app_control.get("category").is() == false) { std::string category = app_control.get("category").get(); - app_ctr_ptr->set_category(category); + app_ctr_ptr->set_category(category); } else { LoggerD("category is null"); } } - std::vector data_array = app_control.get("data").get(); + std::vector data_array = + app_control.get("data").get(); for (int i = 0; i < data_array.size(); i++) { ApplicationControlDataPtr ctr_data_ptr(new ApplicationControlData()); picojson::value each_data = data_array.at(i); std::string key = each_data.get("key").get(); - LoggerD("%d: key = %s", i, key.c_str()); + LoggerD("%d: key = %s", i, key.c_str()); ctr_data_ptr->set_ctr_key(key); - - std::vector values = each_data.get("value").get(); + + std::vector values = + each_data.get("value").get(); for (int j = 0; j < values.size(); j++) { std::string val = values.at(i).to_str(); @@ -976,18 +1000,17 @@ void ApplicationInstance::ApplicationManagerLaunchappcontrol(const picojson::val app_ctr_ptr->add_data_array(ctr_data_ptr); } - + try { LaunchAppControl(app_ctr_ptr, id, callback_id); ReportSuccess(out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerFindappcontrol(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrFindAppControl(const picojson::value& args, + picojson::object& out) { CHECK_EXIST(args, "callbackId", out) int callback_id = static_cast(args.get("callbackId").get()); @@ -999,11 +1022,11 @@ void ApplicationInstance::ApplicationManagerFindappcontrol(const picojson::value std::string operation = app_control.get("operation").get(); app_ctr_ptr->set_operation(operation); LoggerD("operation: %s", operation.c_str()); - + if (app_control.contains("uri")) { if (app_control.get("uri").is() == false) { std::string uri = app_control.get("uri").get(); - app_ctr_ptr->set_uri(uri); + app_ctr_ptr->set_uri(uri); } else { LoggerD("uri is null"); } @@ -1012,7 +1035,7 @@ void ApplicationInstance::ApplicationManagerFindappcontrol(const picojson::value if (app_control.contains("mime")) { if (app_control.get("mime").is() == false) { std::string mime = app_control.get("mime").get(); - app_ctr_ptr->set_mime(mime); + app_ctr_ptr->set_mime(mime); } else { LoggerD("mime is null"); } @@ -1021,23 +1044,25 @@ void ApplicationInstance::ApplicationManagerFindappcontrol(const picojson::value if (app_control.contains("category")) { if (app_control.get("category").is() == false) { std::string category = app_control.get("category").get(); - app_ctr_ptr->set_category(category); + app_ctr_ptr->set_category(category); } else { LoggerD("category is null"); } } - std::vector data_array = app_control.get("data").get(); + std::vector data_array = + app_control.get("data").get(); for (int i = 0; i < data_array.size(); i++) { ApplicationControlDataPtr ctr_data_ptr(new ApplicationControlData()); picojson::value each_data = data_array.at(i); std::string key = each_data.get("key").get(); - LoggerD("%d: key = %s", i, key.c_str()); + LoggerD("%d: key = %s", i, key.c_str()); ctr_data_ptr->set_ctr_key(key); - - std::vector values = each_data.get("value").get(); + + std::vector values = + each_data.get("value").get(); for (int j = 0; j < values.size(); j++) { std::string val = values.at(i).to_str(); @@ -1047,18 +1072,17 @@ void ApplicationInstance::ApplicationManagerFindappcontrol(const picojson::value app_ctr_ptr->add_data_array(ctr_data_ptr); } - + try { FindAppControl(app_ctr_ptr, callback_id); ReportSuccess(out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerGetappscontext(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrGetAppsContext(const picojson::value& args, + picojson::object& out) { CHECK_EXIST(args, "callbackId", out) int callback_id = static_cast(args.get("callbackId").get()); @@ -1066,16 +1090,15 @@ void ApplicationInstance::ApplicationManagerGetappscontext(const picojson::value try { GetAppsContext(callback_id); ReportSuccess(out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerGetappcontext(const picojson::value& args, picojson::object& out) { - +void ApplicationInstance::AppMgrGetAppContext(const picojson::value& args, + picojson::object& out) { LoggerD("ENTER"); + std::string context_id; if (args.contains("contextId")) { LoggerD("ENTER2"); @@ -1094,12 +1117,11 @@ void ApplicationInstance::ApplicationManagerGetappcontext(const picojson::value& ReportSuccess(picojson::value(app_ctx->Value()), out); } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerGetappsinfo(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrGetAppsInfo(const picojson::value& args, + picojson::object& out) { CHECK_EXIST(args, "callbackId", out) int callback_id = static_cast(args.get("callbackId").get()); @@ -1107,14 +1129,13 @@ void ApplicationInstance::ApplicationManagerGetappsinfo(const picojson::value& a try { GetAppsInfo(callback_id); ReportSuccess(out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerGetappinfo(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrGetAppInfo(const picojson::value& args, + picojson::object& out) { std::string id; if (args.contains("id")) { id = args.get("id").get(); @@ -1131,15 +1152,13 @@ void ApplicationInstance::ApplicationManagerGetappinfo(const picojson::value& ar try { ApplicationInformationPtr app_info_ptr = GetAppInfo(id); ReportSuccess(app_info_ptr->Value(), out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } - } -void ApplicationInstance::ApplicationManagerGetappcerts(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrGetAppCerts(const picojson::value& args, + picojson::object& out) { std::string id; if (args.contains("id")) { id = args.get("id").get(); @@ -1164,14 +1183,13 @@ void ApplicationInstance::ApplicationManagerGetappcerts(const picojson::value& a cert_data_array.push_back(cert_data_ptr->Value()); } ReportSuccess(cert_data, out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerGetappshareduri(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrGetAppSharedURI(const picojson::value& args, + picojson::object& out) { std::string id; if (args.contains("id")) { id = args.get("id").get(); @@ -1188,14 +1206,13 @@ void ApplicationInstance::ApplicationManagerGetappshareduri(const picojson::valu try { const std::string& ret = GetAppSharedURI(id); ReportSuccess(picojson::value(ret), out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerGetappmetadata(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrGetAppMetaData(const picojson::value& args, + picojson::object& out) { std::string id; if (args.contains("id")) { id = args.get("id").get(); @@ -1220,118 +1237,352 @@ void ApplicationInstance::ApplicationManagerGetappmetadata(const picojson::value meta_data_array.push_back(meta_data_ptr->Value()); } ReportSuccess(meta_data, out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerAddappinfoeventlistener(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrAddAppInfoEventListener( + const picojson::value& args, picojson::object& out) { CHECK_EXIST(args, "callbackId", out) int callback_id = static_cast(args.get("callbackId").get()); try { - const double ret = static_cast(AddAppInfoEventListener(callback_id)); + const double ret = + static_cast(AddAppInfoEventListener(callback_id)); ReportSuccess(picojson::value(ret), out); - } catch (const common::PlatformException& err) { + } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationManagerRemoveappinfoeventlistener(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppMgrRemoveAppInfoEventListener( + const picojson::value& args, picojson::object& out) { CHECK_EXIST(args, "watchId", out) - long watch_id = static_cast(args.get("watchId").get()); + int watch_id = static_cast(args.get("watchId").get()); try { RemoveAppInfoEventListener(watch_id); ReportSuccess(out); } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationExit(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppExit(const picojson::value& args, + picojson::object& out) { LoggerD("Hide is called"); try { - //Blink - //IPCSupport::Instance().Post(IPCMsg::MsgExitApp(), "" ); - IPCMessageSupport::sendAsyncMessageToUiProcess(IPCMessageSupport::TIZEN_EXIT, NULL, NULL, NULL); + // webkit + // IPCSupport::Instance().Post(IPCMsg::MsgExitApp(), "" ); + // Blink + IPCMessageSupport::sendAsyncMessageToUiProcess( + IPCMessageSupport::TIZEN_EXIT, NULL, NULL, NULL); ReportSuccess(out); } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationHide(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppHide(const picojson::value& args, + picojson::object& out) { LoggerD("Hide is called"); - - try { - //Blink - //IPCSupport::Instance().Post(IPCMsg::MsgHideApp(), "" ); - IPCMessageSupport::sendAsyncMessageToUiProcess(IPCMessageSupport::TIZEN_HIDE, NULL, NULL, NULL); + try { + // webkit + // IPCSupport::Instance().Post(IPCMsg::MsgHideApp(), "" ); + // Blink + IPCMessageSupport::sendAsyncMessageToUiProcess( + IPCMessageSupport::TIZEN_HIDE, NULL, NULL, NULL); ReportSuccess(out); } catch (const PlatformException& err) { ReportError(err, out); - } catch (...) { - ReportError(out); } } -void ApplicationInstance::ApplicationGetrequestedappcontrol(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::AppGetRequestedAppControl( + const picojson::value& args, picojson::object& out) { + try { + RequestedApplicationControlPtr req_app_ctr_ptr = GetRequestedAppControl(); + ReportSuccess(req_app_ctr_ptr->Value(), out); + } catch (const PlatformException& err) { + ReportError(err, out); + } +} + +void ApplicationInstance::RequestedAppControlReplyResult( + const picojson::value& args, picojson::object& out) { + ApplicationControlDataArrayPtr app_ctr_data_array_ptr( + new ApplicationControlDataArray()); + std::string caller_app_id; + if (args.contains("callerAppId")) { + caller_app_id = args.get("callerAppId").get(); + } else { + ReportError(InvalidValuesException("unidentified caller"), out); + return; + } + + if (args.contains("data")) { + picojson::array data_array = args.get("data").get(); + int size = data_array.size(); + LoggerD("size = %d", size); + for (int i = 0; i < size; i++) { + ApplicationControlDataPtr app_ctr_data_ptr(new ApplicationControlData()); - // implement it + picojson::value& ctr_data = data_array.at(i); + std::string key = ctr_data.get("key").get(); + app_ctr_data_ptr->set_ctr_key(key); + + picojson::array value_array = + ctr_data.get("value").get(); + int value_size = value_array.size(); + + LoggerD("value size = %d", value_size); + for (int j = 0; j < value_size; j++) { + picojson::value& value_data = value_array.at(i); + std::string value = value_data.get(); + LoggerD("value: %s", value.c_str()); + app_ctr_data_ptr->add_ctr_value(value); + } + app_ctr_data_array_ptr->push_back(app_ctr_data_ptr); + } + } + try { + ReplyResult(caller_app_id, app_ctr_data_array_ptr); + ReportSuccess(out); + } catch (const PlatformException& err) { + ReportError(err, out); + } +} +void ApplicationInstance::RequestedAppControlReplyFailure( + const picojson::value& args, picojson::object& out) { + std::string caller_app_id; + if (args.contains("callerAppId")) { + caller_app_id = args.get("callerAppId").get(); + } else { + ReportError(InvalidValuesException("unidentified caller"), out); + return; + } - // if success - // ReportSuccess(out); - // if error - // ReportError(out); + try { + ReplyFailure(caller_app_id); + ReportSuccess(out); + } catch (const PlatformException& err) { + ReportError(err, out); + } } -void ApplicationInstance::RequestedApplicationControlReplyresult(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::ReplyResult(const std::string& caller_app_id, + ApplicationControlDataArrayPtr app_ctr_data_array_ptr) { + app_control_h reply; + app_control_create(&reply); + + if (!app_ctr_data_array_ptr->empty()) { + const char** arr = NULL; + + int size = app_ctr_data_array_ptr->size(); + LoggerD("size: %d", size); + for (size_t i = 0; i < size; i++) { + std::vector value_array = + app_ctr_data_array_ptr->at(i)->get_ctr_value(); + arr = (const char**) calloc (sizeof(char*), value_array.size()); + + if (arr != NULL) { + for (size_t j = 0; j < value_array.size(); j++) { + arr[j] = value_array.at(j).c_str(); + LoggerD("[index: %d][value: %s]", j, arr[j]); + } + } + const char* key = app_ctr_data_array_ptr->at(i)->get_ctr_key().c_str(); + LoggerD("key: %s", key); + app_control_add_extra_data_array(reply, key, arr, value_array.size()); + if (arr) { + free(arr); + } + } + } else { + LoggerE("[replyResult] app_ctr_data_array_ptr is empty"); + } + std::map::iterator it = + reply_map_.find(caller_app_id); + if (it == reply_map_.end()) { + LoggerE("caller handle is not found"); + throw NotFoundException("caller handle is not found"); + } + + bool running = false; + int ret = app_manager_is_running(caller_app_id.c_str(), &running); + if ((ret != APP_MANAGER_ERROR_NONE) || !running) { + LoggerE("caller is not running"); + throw NotFoundException("Cannot find caller"); + } - // implement it + ret = app_control_reply_to_launch_request(reply, it->second, + APP_CONTROL_RESULT_SUCCEEDED); + if (ret != APP_CONTROL_ERROR_NONE) { + LoggerE("Cannot find caller"); + throw NotFoundException("Cannot find caller"); + } + reply_map_.erase(it); - // if success - // ReportSuccess(out); - // if error - // ReportError(out); + app_control_destroy(reply); } -void ApplicationInstance::RequestedApplicationControlReplyfailure(const picojson::value& args, picojson::object& out) { +void ApplicationInstance::ReplyFailure(const std::string& caller_app_id) { + app_control_h reply; + app_control_create(&reply); + std::map::iterator it = + reply_map_.find(caller_app_id); + if (it == reply_map_.end()) { + LoggerE("caller handle is not found"); + throw NotFoundException("caller handle is not found"); + } - // implement it + bool running = false; + int ret = app_manager_is_running(caller_app_id.c_str(), &running); + if ((ret != APP_MANAGER_ERROR_NONE) || !running) { + LoggerE("caller is not running"); + app_control_destroy(reply); + throw NotFoundException("Cannot find caller"); + } + ret = app_control_reply_to_launch_request(reply, it->second, + APP_CONTROL_RESULT_FAILED); + if (ret != APP_CONTROL_ERROR_NONE) { + LoggerE("Cannot find caller"); + app_control_destroy(reply); + throw NotFoundException("Cannot find caller"); + } - // if success - // ReportSuccess(out); - // if error - // ReportError(out); + reply_map_.erase(it); + + app_control_destroy(reply); +} + +/* +// debug code: start +static void iterate_bundle_foreach(const char *key, const int type, + const keyval_t *kv, void *data) { + LoggerD("key : %s, type : %d ", key, type); } +// debug code: end +*/ + +RequestedApplicationControlPtr ApplicationInstance::GetRequestedAppControl() { + std::string bundle_str = + common::Extension::GetRuntimeVariable("encoded_bundle", 1024); + if (bundle_str.empty()) { + LoggerE("Getting encoded_bundle is failed"); + throw UnknownException("Gettng encoded_bundle is failed"); + } + + app_control_h service = NULL; + char* tmp_str = NULL; + bundle* request_bundle = bundle_decode((bundle_raw*)bundle_str.c_str(), + bundle_str.length()); + if (request_bundle == NULL) { + throw UnknownException("Decoding bundle is failed"); + } + +/* +// debug code: start + bundle_foreach(request_bundle, iterate_bundle_foreach, NULL); +// debug code: end +*/ + + int ret = app_control_create_event(request_bundle, &service); + if (ret != APP_CONTROL_ERROR_NONE) { + LoggerE("Fail to create event"); + bundle_free(request_bundle); + throw UnknownException("Failed to create event"); + } + bundle_free(request_bundle); + + ApplicationControlPtr app_ctr_ptr(new ApplicationControl()); + + ret = app_control_get_operation(service, &tmp_str); + if (ret == APP_CONTROL_ERROR_NONE && tmp_str != NULL) { + app_ctr_ptr->set_operation(tmp_str); + free(tmp_str); + tmp_str = NULL; + } + + ret = app_control_get_uri(service, &tmp_str); + if (ret == APP_CONTROL_ERROR_NONE && tmp_str != NULL) { + app_ctr_ptr->set_uri(tmp_str); + free(tmp_str); + tmp_str = NULL; + } + + ret = app_control_get_mime(service, &tmp_str); + if (ret == APP_CONTROL_ERROR_NONE && tmp_str != NULL) { + app_ctr_ptr->set_mime(tmp_str); + free(tmp_str); + tmp_str = NULL; + } + + ret = app_control_get_category(service, &tmp_str); + if (ret == APP_CONTROL_ERROR_NONE && tmp_str != NULL) { + app_ctr_ptr->set_category(tmp_str); + free(tmp_str); + tmp_str = NULL; + } + + ApplicationControlDataArrayPtr app_ctr_data_array_ptr( + new ApplicationControlDataArray()); + ret = app_control_foreach_extra_data(service, + app_control_extra_data_callback, app_ctr_data_array_ptr.get()); + if (ret != APP_CONTROL_ERROR_NONE) { + LoggerE("app_control_foreach_extra_data fail"); + throw UnknownException("Getting extra data is failed"); + } else { + app_ctr_ptr->set_data_array(*(app_ctr_data_array_ptr.get())); + } + + RequestedApplicationControlPtr req_app_ctr_ptr( + new RequestedApplicationControl()); + req_app_ctr_ptr->set_app_control(*(app_ctr_ptr.get())); + + // add caller id + ret = app_control_get_caller(service, &tmp_str); + if (ret == APP_CONTROL_ERROR_NONE && tmp_str != NULL) { + req_app_ctr_ptr->set_caller_app_id(tmp_str); + free(tmp_str); + tmp_str = NULL; + } else { + LoggerE("Failed to get caller application ID"); + throw NotFoundException("Failed to get caller application ID"); + } + + std::pair::iterator, bool> result = + reply_map_.insert( + std::map::value_type( + req_app_ctr_ptr->get_caller_app_id(), service)); + if (result.second) { + LoggerD("Adding item succeeded"); + } else { + LoggerD("Adding item failed"); + } -ApplicationPtr ApplicationInstance::GetCurrentApplication(const std::string app_id) { + return req_app_ctr_ptr; +} - LoggerD("app_id: %s", app_id.c_str()); +ApplicationPtr ApplicationInstance::GetCurrentApplication( + const std::string app_id) { + LoggerD("app_id: %s", app_id.c_str()); pkgmgrinfo_appinfo_h handle; int ret = pkgmgrinfo_appinfo_get_appinfo(app_id.c_str(), &handle); if (ret != PMINFO_R_OK) { LoggerE("Fail to get appInfo"); - throw UnknownException("pkgmgrinfo_appinfo_get_appinfo error : unknown error"); + throw UnknownException("get_appinfo error : unknown error"); } ApplicationInformationPtr app_info_ptr = get_app_info(handle); @@ -1343,20 +1594,20 @@ ApplicationPtr ApplicationInstance::GetCurrentApplication(const std::string app_ LoggerD("set appinfo to application"); { - int pid = getpid(); // DO NOT USE getppid(); + int pid = getpid(); // DO NOT USE getppid(); LoggerD("context id = %d", pid); std::stringstream sstr; sstr << pid; app_ptr->set_context_id(sstr.str()); } - + return app_ptr; } -ApplicationInformationPtr ApplicationInstance::GetAppInfo(const std::string app_id) { - - LoggerD("app_id: %s", app_id.c_str()); +ApplicationInformationPtr ApplicationInstance::GetAppInfo( + const std::string app_id) { + LoggerD("app_id: %s", app_id.c_str()); pkgmgrinfo_appinfo_h handle; int ret = pkgmgrinfo_appinfo_get_appinfo(app_id.c_str(), &handle); @@ -1386,7 +1637,8 @@ void ApplicationInstance::Kill(const std::string context_id, int callback_id) { throw InvalidValuesException("Given context id is wrong."); } - // if kill request is come for current context, throw InvalidValueException by spec + // if kill request is come for current context, + // throw InvalidValueException by spec if (pid == getpid()) { LoggerE("Given context id is same with me."); throw InvalidValuesException("Given context id is same with me."); @@ -1402,20 +1654,20 @@ void ApplicationInstance::Kill(const std::string context_id, int callback_id) { std::string app_id = app_id_cstr; free(app_id_cstr); - app_context_h appContext; - ret = app_manager_get_app_context (app_id.c_str(), &appContext); + app_context_h app_context; + ret = app_manager_get_app_context(app_id.c_str(), &app_context); if (ret != APP_MANAGER_ERROR_NONE) { LoggerE("Error while getting app context"); throw NotFoundException("Error while getting app context"); } - + CallbackInfo* info = new CallbackInfo; info->instance = this; - sprintf(info->id, "%s", context_id.c_str()); + snprintf(info->id, sizeof(info->id), "%s", context_id.c_str()); info->callback_id = callback_id; - // TODO thread - ret = app_manager_set_app_context_event_cb(app_manager_app_context_event_callback, (void*)info); + ret = app_manager_set_app_context_event_cb( + app_manager_app_context_event_callback, reinterpret_cast(info)); if (ret != APP_MANAGER_ERROR_NONE) { if (info) free(info); @@ -1423,14 +1675,13 @@ void ApplicationInstance::Kill(const std::string context_id, int callback_id) { throw InvalidValuesException("Error while registering app context event"); } - ret = app_manager_terminate_app(appContext); + ret = app_manager_terminate_app(app_context); if (ret != APP_MANAGER_ERROR_NONE) { if (info) free(info); LoggerE("Error while terminating app"); throw InvalidValuesException("Error while terminating app"); } - } void ApplicationInstance::Launch(const std::string app_id, int callback_id) { @@ -1441,13 +1692,16 @@ void ApplicationInstance::Launch(const std::string app_id, int callback_id) { auto user_data = std::shared_ptr(new CallbackInfo); user_data->instance = this; - sprintf(user_data->id, "%s", app_id.c_str()); + snprintf(user_data->id, sizeof(user_data->id), "%s", app_id.c_str()); user_data->callback_id = callback_id; - common::TaskQueue::GetInstance().Queue(launch_thread, launch_completed, user_data); + common::TaskQueue::GetInstance().Queue( + launch_thread, launch_completed, user_data); } -void ApplicationInstance::LaunchAppControl(const ApplicationControlPtr& app_ctr_ptr, const std::string& app_id, const int& callback_id) { +void ApplicationInstance::LaunchAppControl( + const ApplicationControlPtr& app_ctr_ptr, const std::string& app_id, + const int& callback_id) { std::string operation = app_ctr_ptr->get_operation(); if (operation.empty()) { LoggerE("operation is mandatory field."); @@ -1461,7 +1715,8 @@ void ApplicationInstance::LaunchAppControl(const ApplicationControlPtr& app_ctr_ } if (app_id.empty() == false) { - ret = app_control_set_app_id(service, app_id_.c_str()); + LoggerD("set_app_id: %s", app_id.c_str()); + ret = app_control_set_app_id(service, app_id.c_str()); if (ret != APP_CONTROL_ERROR_NONE) { throw UnknownException("Setting app_id is failed."); } @@ -1473,7 +1728,7 @@ void ApplicationInstance::LaunchAppControl(const ApplicationControlPtr& app_ctr_ if (ret != APP_CONTROL_ERROR_NONE) { throw InvalidValuesException("operation is invalid parameter"); } - + std::string uri = app_ctr_ptr->get_uri(); if (!uri.empty()) { ret = app_control_set_uri(service, uri.c_str()); @@ -1503,45 +1758,52 @@ void ApplicationInstance::LaunchAppControl(const ApplicationControlPtr& app_ctr_ info->callback_id = callback_id; LoggerD("Try to launch..."); - ret = app_control_send_launch_request(service, app_control_reply_callback, (void*)info); - + ret = app_control_send_launch_request(service, + app_control_reply_callback, reinterpret_cast(info)); + auto user_data = std::shared_ptr(new CallbackInfo); user_data->instance = this; user_data->callback_id = callback_id; - if(ret != APP_CONTROL_ERROR_NONE) { + if (ret != APP_CONTROL_ERROR_NONE) { switch (ret) { case APP_CONTROL_ERROR_INVALID_PARAMETER: - LoggerD("launch_request is failed. APP_CONTROL_ERROR_INVALID_PARAMETER"); + LoggerD("launch_request is failed. ERROR_INVALID_PARAMETER"); user_data->error_type = APP_ERROR_TYPE_MISMATCH; - sprintf(user_data->error_msg, "launch_request is failed. INVALID_PARAMETER"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "launch_request is failed. INVALID_PARAMETER"); break; case APP_CONTROL_ERROR_OUT_OF_MEMORY: - LoggerD("launch_request is failed. APP_CONTROL_ERROR_OUT_OF_MEMORY"); + LoggerD("launch_request is failed. ERROR_OUT_OF_MEMORY"); user_data->error_type = APP_ERROR_UNKNOWN; - sprintf(user_data->error_msg, "launch_request is failed. OUT_OF_MEMORY"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "launch_request is failed. OUT_OF_MEMORY"); break; case APP_CONTROL_ERROR_LAUNCH_REJECTED: - LoggerD("launch_request is failed. APP_CONTROL_ERROR_LAUNCH_REJECTED"); + LoggerD("launch_request is failed. ERROR_LAUNCH_REJECTED"); user_data->error_type = APP_ERROR_ABORT; - sprintf(user_data->error_msg, "launch_request is failed. LAUNCH_REJECTED"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "launch_request is failed. LAUNCH_REJECTED"); break; case APP_CONTROL_ERROR_APP_NOT_FOUND: - LoggerD("launch_request is failed. APP_CONTROL_ERROR_APP_NOT_FOUND"); + LoggerD("launch_request is failed. ERROR_APP_NOT_FOUND"); user_data->error_type = APP_ERROR_NOT_FOUND; - sprintf(user_data->error_msg, "launch_request is failed. NOT_FOUND"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "launch_request is failed. NOT_FOUND"); break; default: LoggerD("launch_request is failed."); user_data->error_type = APP_ERROR_UNKNOWN; - sprintf(user_data->error_msg, "launch_request is failed. UNKNOWN"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "launch_request is failed. UNKNOWN"); break; } user_data->is_success = false; } else { user_data->is_success = true; } - common::TaskQueue::GetInstance().Queue(callback_thread, callback_thread_completed, user_data); + common::TaskQueue::GetInstance().Queue( + callback_thread, callback_thread_completed, user_data); ret = app_control_destroy(service); if (ret != APP_CONTROL_ERROR_NONE) { @@ -1549,7 +1811,8 @@ void ApplicationInstance::LaunchAppControl(const ApplicationControlPtr& app_ctr_ } } -void ApplicationInstance::FindAppControl(const ApplicationControlPtr& app_ctr_ptr, const int& callback_id) { +void ApplicationInstance::FindAppControl( + const ApplicationControlPtr& app_ctr_ptr, const int& callback_id) { std::string operation = app_ctr_ptr->get_operation(); if (operation.empty()) { LoggerE("operation is mandatory field."); @@ -1566,7 +1829,7 @@ void ApplicationInstance::FindAppControl(const ApplicationControlPtr& app_ctr_pt if (ret != APP_CONTROL_ERROR_NONE) { throw InvalidValuesException("operation is invalid parameter"); } - + std::string uri = app_ctr_ptr->get_uri(); if (!uri.empty()) { ret = app_control_set_uri(service, uri.c_str()); @@ -1590,15 +1853,19 @@ void ApplicationInstance::FindAppControl(const ApplicationControlPtr& app_ctr_pt throw InvalidValuesException("category is invalid parameter"); } } - + auto user_data = std::shared_ptr(new CallbackInfo); user_data->instance = this; user_data->callback_id = callback_id; - - ApplicationInformationArrayPtr app_info_array_ptr(new ApplicationInformationArray()); + + ApplicationInformationArrayPtr app_info_array_ptr( + new ApplicationInformationArray()); LoggerD("Try to find..."); - ret = app_control_foreach_app_matched(service, app_control_app_matched_callback, (void*)app_info_array_ptr.get()); + ret = app_control_foreach_app_matched(service, + app_control_app_matched_callback, + reinterpret_cast(app_info_array_ptr.get())); + if (ret == APP_CONTROL_ERROR_NONE) { LoggerE("app_control_foreach_app_matched: ERROR_NONE"); user_data->is_success = true; @@ -1613,21 +1880,24 @@ void ApplicationInstance::FindAppControl(const ApplicationControlPtr& app_ctr_pt // ReplyAsync user_data->data.insert(std::make_pair("informationArray", app_infos)); - user_data->data.insert(std::make_pair("appControl", app_ctr_ptr->Value())); + user_data->data.insert(std::make_pair("appControl", app_ctr_ptr->Value())); - } else if (ret == APP_CONTROL_ERROR_INVALID_PARAMETER) { - LoggerD("launch_request is failed. APP_CONTROL_ERROR_INVALID_PARAMETER"); + } else if (ret == APP_CONTROL_ERROR_INVALID_PARAMETER) { + LoggerD("launch_request is failed. ERROR_INVALID_PARAMETER"); user_data->error_type = APP_ERROR_TYPE_MISMATCH; - sprintf(user_data->error_msg, "launch_request is failed. INVALID_PARAMETER"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "launch_request is failed. INVALID_PARAMETER"); user_data->is_success = false; } else { LoggerD("launch_request is failed. UNKNOWN"); user_data->error_type = APP_ERROR_UNKNOWN; - sprintf(user_data->error_msg, "launch_request is failed. OUT_OF_MEMORY"); + snprintf(user_data->error_msg, sizeof(user_data->error_msg), + "launch_request is failed. OUT_OF_MEMORY"); user_data->is_success = false; } - - common::TaskQueue::GetInstance().Queue(callback_thread, find_callback_thread_completed, user_data); + + common::TaskQueue::GetInstance().Queue(callback_thread, + find_callback_thread_completed, user_data); ret = app_control_destroy(service); if (ret != APP_CONTROL_ERROR_NONE) { @@ -1636,26 +1906,27 @@ void ApplicationInstance::FindAppControl(const ApplicationControlPtr& app_ctr_pt } void ApplicationInstance::GetAppsContext(const int& callback_id) { - auto user_data = std::shared_ptr(new CallbackInfo); user_data->instance = this; user_data->callback_id = callback_id; - common::TaskQueue::GetInstance().Queue(getappsctx_callback_thread, getappsctx_callback_thread_completed, user_data); - + common::TaskQueue::GetInstance().Queue( + getappsctx_callback_thread, getappsctx_callback_thread_completed, + user_data); } void ApplicationInstance::GetAppsInfo(const int& callback_id) { - auto user_data = std::shared_ptr(new CallbackInfo); user_data->instance = this; user_data->callback_id = callback_id; - common::TaskQueue::GetInstance().Queue(getappsinfo_callback_thread, getappsinfo_callback_thread_completed, user_data); - + common::TaskQueue::GetInstance().Queue( + getappsinfo_callback_thread, getappsinfo_callback_thread_completed, + user_data); } -ApplicationContextPtr ApplicationInstance::GetAppContext(const std::string context_id) { +ApplicationContextPtr ApplicationInstance::GetAppContext( + const std::string context_id) { int ret = 0; LoggerD("contextId: %s", context_id.c_str()); @@ -1668,8 +1939,7 @@ ApplicationContextPtr ApplicationInstance::GetAppContext(const std::string conte std::stringstream sstr; sstr << pid; cur_ctx_id = sstr.str(); - } - else { + } else { std::stringstream(context_id) >> pid; if (pid <= 0) { LoggerE("Given context_id is wrong"); @@ -1687,35 +1957,35 @@ ApplicationContextPtr ApplicationInstance::GetAppContext(const std::string conte } switch (ret) { case APP_MANAGER_ERROR_INVALID_PARAMETER: - LoggerE("app_manager_get_app_id error : invalid parameter"); - throw NotFoundException("app_manager_get_app_id error : invalid parameter"); + LoggerE("get_app_id error : invalid parameter"); + throw NotFoundException("get_app_id error : invalid parameter"); case APP_MANAGER_ERROR_NO_SUCH_APP: - LoggerE("app_manager_get_app_id error : no such app"); - throw NotFoundException("app_manager_get_app_id error : no such app"); + LoggerE("get_app_id error : no such app"); + throw NotFoundException("get_app_id error : no such app"); case APP_MANAGER_ERROR_DB_FAILED: - LoggerE("app_manager_get_app_id error : db failed"); - throw NotFoundException("app_manager_get_app_id error : db failed"); + LoggerE("get_app_id error : db failed"); + throw NotFoundException("get_app_id error : db failed"); case APP_MANAGER_ERROR_OUT_OF_MEMORY: - LoggerE("app_manager_get_app_id error : out of memory"); - throw NotFoundException("app_manager_get_app_id error : out of memory"); + LoggerE("get_app_id error : out of memory"); + throw NotFoundException("get_app_id error : out of memory"); default: - LoggerE("app_manager_get_app_id error"); - throw UnknownException("app_manager_get_app_id error : unknown error"); + LoggerE("get_app_id known error"); + throw UnknownException("get_app_id error : unknown error"); } } - + ApplicationContextPtr app_context(new ApplicationContext()); app_context->set_app_id(app_id); app_context->set_context_id(cur_ctx_id); - if(app_id) + if (app_id) free(app_id); return app_context; } -ApplicationCertificateArrayPtr ApplicationInstance::GetAppCertificate(const std::string app_id) { - +ApplicationCertificateArrayPtr ApplicationInstance::GetAppCertificate( + const std::string app_id) { int ret = 0; char* package = getPackageByAppId(app_id.c_str()); if (package == NULL) { @@ -1723,7 +1993,7 @@ ApplicationCertificateArrayPtr ApplicationInstance::GetAppCertificate(const std: throw NotFoundException("Can not get package"); } - // TODO: gPkgIdMapInited + // TODO(sunggyu.choi): gPkgIdMapInited package_info_h pkg_info; int result = 0; result = package_info_create(package, &pkg_info); @@ -1734,7 +2004,7 @@ ApplicationCertificateArrayPtr ApplicationInstance::GetAppCertificate(const std: ApplicationCertificateArrayPtr cert_array(new ApplicationCertificateArray()); result = package_info_foreach_cert_info(pkg_info, package_certificate_cb, - (void*) cert_array.get()); + reinterpret_cast(cert_array.get())); if ((result != PACKAGE_MANAGER_ERROR_NONE) && (result != PACKAGE_MANAGER_ERROR_IO_ERROR)) { throw UnknownException("Can not get package cert info"); @@ -1743,7 +2013,8 @@ ApplicationCertificateArrayPtr ApplicationInstance::GetAppCertificate(const std: return cert_array; } -ApplicationMetaDataArrayPtr ApplicationInstance::GetAppMetaData(const std::string id) { +ApplicationMetaDataArrayPtr ApplicationInstance::GetAppMetaData( + const std::string id) { std::string app_id = id; int ret = 0; @@ -1754,7 +2025,8 @@ ApplicationMetaDataArrayPtr ApplicationInstance::GetAppMetaData(const std::strin } ApplicationMetaDataArrayPtr metaDataArray(new ApplicationMetaDataArray()); - ret = pkgmgrinfo_appinfo_foreach_metadata(handle, app_meta_data_cb, (void*) metaDataArray.get()); + ret = pkgmgrinfo_appinfo_foreach_metadata(handle, app_meta_data_cb, + reinterpret_cast(metaDataArray.get())); if (ret != PMINFO_R_OK) { LoggerE("pkgmgrinfo_appinfo_metadata_filter_foreach() failed"); pkgmgrinfo_appinfo_destroy_appinfo(handle); @@ -1766,14 +2038,13 @@ ApplicationMetaDataArrayPtr ApplicationInstance::GetAppMetaData(const std::strin } std::string ApplicationInstance::GetAppSharedURI(const std::string app_id) { - #define TIZENAPIS_APP_FILE_SCHEME "file://" #define TIZENAPIS_APP_SLASH "/" #define TIZENAPIS_APP_SHARED "shared" app_info_h handle; char* pkg_name = NULL; - + int ret = app_manager_get_app_info(app_id.c_str(), &handle); if (ret != APP_ERROR_NONE) { LoggerD("Fail to get appinfo"); @@ -1804,7 +2075,8 @@ std::string ApplicationInstance::GetAppSharedURI(const std::string app_id) { throw UnknownException("Fail to get root path"); } - std::string sharedURI = TIZENAPIS_APP_FILE_SCHEME + std::string(root_path) + TIZENAPIS_APP_SLASH + TIZENAPIS_APP_SHARED + TIZENAPIS_APP_SLASH; + std::string sharedURI = TIZENAPIS_APP_FILE_SCHEME + std::string(root_path) + + TIZENAPIS_APP_SLASH + TIZENAPIS_APP_SHARED + TIZENAPIS_APP_SLASH; free(pkg_name); pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h); @@ -1813,26 +2085,25 @@ std::string ApplicationInstance::GetAppSharedURI(const std::string app_id) { } int ApplicationInstance::AddAppInfoEventListener(const int& callback_id) { - if (manager_handle_ != NULL) { - LoggerD("AppListChanged callback is already registered. watch_id_ = %d", watch_id_); - throw UnknownException("Listener is already registered."); + LoggerD("AppListChanged callback is already registered. watch_id_ = %d", + watch_id_); + throw UnknownException("Listener is already registered."); } - LoggerD("pkgmgr_client_new() ----1----"); manager_handle_ = pkgmgr_client_new(PC_LISTENING); - LoggerD("pkgmgr_client_new() ----2----"); if (manager_handle_ == NULL) { throw UnknownException("Error while registering listener to pkgmgr"); } - pkgmgr_client_listen_status(manager_handle_, app_list_changed_cb, this); + pkgmgr_client_listen_status(manager_handle_, app_list_changed_cb, this); callback_id_list_.push_back(callback_id); return get_watch_id_and_increase(); } -int ApplicationInstance::app_list_changed_cb(int id, const char *type, const char *package, const char *key, const char *val, const void *msg, void *data) -{ +int ApplicationInstance::app_list_changed_cb(int id, const char *type, + const char *package, const char *key, const char *val, const void *msg, + void *data) { static app_info_event_e event_type; LoggerD("ENTERED"); @@ -1853,7 +2124,8 @@ int ApplicationInstance::app_list_changed_cb(int id, const char *type, const cha LoggerE("Cannot create package info"); } - ret = package_info_foreach_app_from_package(package_info, PACKAGE_INFO_ALLAPP, app_callback, data); + ret = package_info_foreach_app_from_package(package_info, + PACKAGE_INFO_ALLAPP, app_callback, data); if (ret != PACKAGE_MANAGER_ERROR_NONE) { LoggerE("failed while getting appids"); } @@ -1871,7 +2143,9 @@ int ApplicationInstance::app_list_changed_cb(int id, const char *type, const cha if (event_type >= 0) { if (data != NULL) { LoggerD("end & ok is called: package = %s", package); - ApplicationInstance* app_instance = (ApplicationInstance*)data; + // ApplicationInstance* app_instance = (ApplicationInstance*)data; + ApplicationInstance* app_instance = + reinterpret_cast(data); app_instance->ReplyAppListChangedCallback(event_type, package, data); } } @@ -1880,42 +2154,46 @@ int ApplicationInstance::app_list_changed_cb(int id, const char *type, const cha return APP_MANAGER_ERROR_NONE; } -bool ApplicationInstance::app_callback(package_info_app_component_type_e comp_type, const char *app_id, void *user_data) -{ +bool ApplicationInstance::app_callback( + package_info_app_component_type_e comp_type, const char *app_id, + void *user_data) { LoggerD("ENTERED"); - if(app_id == NULL) { - LoggerE("Callback is called. but no package name is passed. skip this request"); + if (app_id == NULL) { + LoggerE("Callback is called. but no package name is passed"); return true; } - if(user_data == NULL) { + if (user_data == NULL) { LoggerE("user data is not exist. skip this request"); return true; } LoggerD("app_id = %s", app_id); - ApplicationInstance* app_instance = (ApplicationInstance*)user_data; + ApplicationInstance* app_instance = + reinterpret_cast(user_data); app_instance->app_list_.push_back(app_id); return true; } -void ApplicationInstance::ReplyAppListChangedCallback(app_info_event_e event_type, const char* pkg_id, void* user_data) { - LoggerD("ENTERED"); +void ApplicationInstance::ReplyAppListChangedCallback( + app_info_event_e event_type, const char* pkg_id, void* user_data) { + LoggerD("ENTERED"); - ApplicationInstance* app_instance = (ApplicationInstance*)user_data; + ApplicationInstance* app_instance = + reinterpret_cast(user_data); if (event_type == APP_INFO_EVENT_UNINSTALLED) { for (size_t i = 0; i < app_list_.size(); i++) { - // onuninstalled LoggerD("onuninstalled: %d of %d", i, app_list_.size()); std::string app_id = app_list_.at(i); for (size_t j = 0; j < callback_id_list_.size(); j++) { int callback_id = callback_id_list_.at(j); - LoggerD("%d th callback_id(%d) of %d", j, callback_id, callback_id_list_.size()); + LoggerD("%d th callback_id(%d) of %d", j, callback_id, + callback_id_list_.size()); picojson::object data; data.insert(std::make_pair("type", picojson::value("onuninstalled"))); data.insert(std::make_pair("id", picojson::value(app_id))); @@ -1931,8 +2209,9 @@ void ApplicationInstance::ReplyAppListChangedCallback(app_info_event_e event_typ return; } - // app_callback is called immediately - ret = package_info_foreach_app_from_package(package_info, PACKAGE_INFO_ALLAPP, app_callback, user_data); + // app_callback is called immediately + ret = package_info_foreach_app_from_package(package_info, + PACKAGE_INFO_ALLAPP, app_callback, user_data); if (ret != PACKAGE_MANAGER_ERROR_NONE) { LoggerE("failed while getting appids"); package_info_destroy(package_info); @@ -1945,7 +2224,7 @@ void ApplicationInstance::ReplyAppListChangedCallback(app_info_event_e event_typ } for (size_t i = 0; i < app_list_.size(); i++) { - switch(event_type) { + switch (event_type) { case APP_INFO_EVENT_INSTALLED: { // oninstalled @@ -1956,10 +2235,13 @@ void ApplicationInstance::ReplyAppListChangedCallback(app_info_event_e event_typ for (size_t j = 0; j < callback_id_list_.size(); j++) { int callback_id = callback_id_list_.at(j); - LoggerD("%d th callback_id(%d) of %d", j, callback_id, callback_id_list_.size()); + LoggerD("%d th callback_id(%d) of %d", j, callback_id, + callback_id_list_.size()); picojson::object data; - data.insert(std::make_pair("type", picojson::value("oninstalled"))); - data.insert(std::make_pair("info", picojson::value(app_info_ptr->Value()))); + data.insert(std::make_pair("type", + picojson::value("oninstalled"))); + data.insert(std::make_pair("info", + picojson::value(app_info_ptr->Value()))); ReplyAsync(this, callback_id, true, data, 0, NULL); } } @@ -1974,10 +2256,13 @@ void ApplicationInstance::ReplyAppListChangedCallback(app_info_event_e event_typ for (size_t j = 0; j < callback_id_list_.size(); j++) { int callback_id = callback_id_list_.at(j); - LoggerD("%d th callback_id(%d) of %d", j, callback_id, callback_id_list_.size()); + LoggerD("%d th callback_id(%d) of %d", j, callback_id, + callback_id_list_.size()); picojson::object data; - data.insert(std::make_pair("type", picojson::value("onupdated"))); - data.insert(std::make_pair("info", picojson::value(app_info_ptr->Value()))); + data.insert(std::make_pair("type", + picojson::value("onupdated"))); + data.insert(std::make_pair("info", + picojson::value(app_info_ptr->Value()))); ReplyAsync(this, callback_id, true, data, 0, NULL); } } @@ -1993,8 +2278,8 @@ void ApplicationInstance::ReplyAppListChangedCallback(app_info_event_e event_typ app_list_.clear(); } -void ApplicationInstance::RemoveAppInfoEventListener(long watch_id) { - LoggerD("RemoveAppInfoEventListener called. watch_id = %d", watch_id); +void ApplicationInstance::RemoveAppInfoEventListener(int watch_id) { + LoggerD("watch_id = %d", watch_id); if (manager_handle_ == NULL) { LoggerE("Listener is not added before."); @@ -2017,5 +2302,5 @@ int ApplicationInstance::get_watch_id_and_increase() { } #undef CHECK_EXIST -} // namespace application -} // namespace extension +} // namespace application +} // namespace extension diff --git a/src/application/application_instance.h b/src/application/application_instance.h index 3f0f26fc..226c3e39 100644 --- a/src/application/application_instance.h +++ b/src/application/application_instance.h @@ -2,84 +2,113 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef APPLICATION_APPLICATION_INSTANCE_H_ -#define APPLICATION_APPLICATION_INSTANCE_H_ +#ifndef SRC_APPLICATION_APPLICATION_INSTANCE_H_ +#define SRC_APPLICATION_APPLICATION_INSTANCE_H_ -#include "common/extension.h" - -#include -#include +// to handle app-control +#include +#include +#include +// to get package name bye appid #include + +// to get cert info from package #include #include -#include "application.h" -#include "application_context.h" -#include "application_metadata.h" -#include "application_certificate.h" -#include "application_control.h" +#include +#include +#include +#include +#include "common/extension.h" +#include "application/application.h" +#include "application/application_context.h" +#include "application/application_metadata.h" +#include "application/application_certificate.h" +#include "application/application_control.h" +#include "application/requested_application_control.h" namespace extension { namespace application { class ApplicationInstance - : public common::ParsedInstance { + : public common::ParsedInstance { public: - ApplicationInstance(const std::string& app_id); + explicit ApplicationInstance(const std::string& app_id); virtual ~ApplicationInstance(); private: - - void ApplicationManagerGetcurrentapplication(const picojson::value& args, picojson::object& out); - void ApplicationManagerKill(const picojson::value& args, picojson::object& out); - void ApplicationManagerLaunch(const picojson::value& args, picojson::object& out); - void ApplicationManagerLaunchappcontrol(const picojson::value& args, picojson::object& out); - void ApplicationManagerFindappcontrol(const picojson::value& args, picojson::object& out); - void ApplicationManagerGetappscontext(const picojson::value& args, picojson::object& out); - void ApplicationManagerGetappcontext(const picojson::value& args, picojson::object& out); - void ApplicationManagerGetappsinfo(const picojson::value& args, picojson::object& out); - void ApplicationManagerGetappinfo(const picojson::value& args, picojson::object& out); - void ApplicationManagerGetappcerts(const picojson::value& args, picojson::object& out); - void ApplicationManagerGetappshareduri(const picojson::value& args, picojson::object& out); - void ApplicationManagerGetappmetadata(const picojson::value& args, picojson::object& out); - void ApplicationManagerAddappinfoeventlistener(const picojson::value& args, picojson::object& out); - void ApplicationManagerRemoveappinfoeventlistener(const picojson::value& args, picojson::object& out); - void ApplicationExit(const picojson::value& args, picojson::object& out); - void ApplicationHide(const picojson::value& args, picojson::object& out); - void ApplicationGetrequestedappcontrol(const picojson::value& args, picojson::object& out); - void RequestedApplicationControlReplyresult(const picojson::value& args, picojson::object& out); - void RequestedApplicationControlReplyfailure(const picojson::value& args, picojson::object& out); + void AppMgrGetCurrentApplication(const picojson::value& args, + picojson::object& out); + void AppMgrKill(const picojson::value& args, picojson::object& out); + void AppMgrLaunch(const picojson::value& args, picojson::object& out); + void AppMgrLaunchAppControl(const picojson::value& args, + picojson::object& out); + void AppMgrFindAppControl(const picojson::value& args, + picojson::object& out); + void AppMgrGetAppsContext(const picojson::value& args, + picojson::object& out); + void AppMgrGetAppContext(const picojson::value& args, picojson::object& out); + void AppMgrGetAppsInfo(const picojson::value& args, picojson::object& out); + void AppMgrGetAppInfo(const picojson::value& args, picojson::object& out); + void AppMgrGetAppCerts(const picojson::value& args, picojson::object& out); + void AppMgrGetAppSharedURI(const picojson::value& args, + picojson::object& out); + void AppMgrGetAppMetaData(const picojson::value& args, + picojson::object& out); + void AppMgrAddAppInfoEventListener(const picojson::value& args, + picojson::object& out); + void AppMgrRemoveAppInfoEventListener(const picojson::value& args, + picojson::object& out); + void AppExit(const picojson::value& args, picojson::object& out); + void AppHide(const picojson::value& args, picojson::object& out); + void AppGetRequestedAppControl(const picojson::value& args, + picojson::object& out); + void RequestedAppControlReplyResult(const picojson::value& args, + picojson::object& out); + void RequestedAppControlReplyFailure(const picojson::value& args, + picojson::object& out); + RequestedApplicationControlPtr GetRequestedAppControl(); + void ReplyResult(const std::string& caller_app_id, + ApplicationControlDataArrayPtr app_ctr_data_array_ptr); + void ReplyFailure(const std::string& caller_app_id); ApplicationPtr GetCurrentApplication(const std::string app_id); ApplicationInformationPtr GetAppInfo(const std::string app_id); void GetAppsInfo(const int& callback_id); void Kill(const std::string context_id, int callback_id); void Launch(const std::string app_id, int callback_id); - void LaunchAppControl(const ApplicationControlPtr& app_ctr_ptr, const std::string& app_id, const int& callback_id); - void FindAppControl(const ApplicationControlPtr& app_ctr_ptr, const int& callback_id); + void LaunchAppControl(const ApplicationControlPtr& app_ctr_ptr, + const std::string& app_id, const int& callback_id); + void FindAppControl(const ApplicationControlPtr& app_ctr_ptr, + const int& callback_id); void GetAppsContext(const int& callback_id); ApplicationContextPtr GetAppContext(const std::string context_id); ApplicationCertificateArrayPtr GetAppCertificate(const std::string app_id); ApplicationMetaDataArrayPtr GetAppMetaData(const std::string app_id); std::string GetAppSharedURI(std::string app_id); int AddAppInfoEventListener(const int& callback_id); - static bool app_callback(package_info_app_component_type_e comp_type, const char *app_id, void *user_data); - static int app_list_changed_cb(int id, const char *type, const char *package, const char *key, const char *val, const void *msg, void *data); - void ReplyAppListChangedCallback(app_info_event_e event_type, const char *pkg_id, void *user_data); - void RemoveAppInfoEventListener(long watch_id); + static bool app_callback(package_info_app_component_type_e comp_type, + const char *app_id, void *user_data); + static int app_list_changed_cb(int id, const char *type, const char *package, + const char *key, const char *val, const void *msg, void *data); + void ReplyAppListChangedCallback(app_info_event_e event_type, + const char *pkg_id, void *user_data); + void RemoveAppInfoEventListener(int watch_id); int get_watch_id_and_increase(); - + std::string app_id_; pkgmgr_client* manager_handle_; std::vector callback_id_list_; int watch_id_; std::vector app_list_; + std::map reply_map_; }; -} // namespace application -} // namespace extension +} // namespace application +} // namespace extension -#endif // APPLICATION_APPLICATION_INSTANCE_H_ +#endif // SRC_APPLICATION_APPLICATION_INSTANCE_H_ diff --git a/src/application/application_metadata.cc b/src/application/application_metadata.cc index 37eb189d..4014bf7c 100644 --- a/src/application/application_metadata.cc +++ b/src/application/application_metadata.cc @@ -13,11 +13,6 @@ namespace extension { namespace application { ApplicationMetaData::ApplicationMetaData() { - -} - -ApplicationMetaData::ApplicationMetaData(const ApplicationMetaDataPtr app) { - } ApplicationMetaData::~ApplicationMetaData() { @@ -52,6 +47,6 @@ std::string ApplicationMetaData::get_meta_value() const { void ApplicationMetaData::set_meta_value(const std::string& meta_value) { meta_value_ = meta_value; } - -} // namespace application -} // namespace extension + +} // namespace application +} // namespace extension diff --git a/src/application/application_metadata.h b/src/application/application_metadata.h index 65dda6de..53920b5c 100644 --- a/src/application/application_metadata.h +++ b/src/application/application_metadata.h @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef APPLICATION_APPLICATION_METADATA_H_ -#define APPLICATION_APPLICATION_METADATA_H_ +#ifndef SRC_APPLICATION_APPLICATION_METADATA_H_ +#define SRC_APPLICATION_APPLICATION_METADATA_H_ #include #include +#include #include "common/picojson.h" #include "tizen/tizen.h" @@ -23,7 +24,6 @@ typedef std::shared_ptr ApplicationMetaDataArrayPtr; class ApplicationMetaData { public: ApplicationMetaData(); - ApplicationMetaData(const ApplicationMetaDataPtr); ~ApplicationMetaData(); const picojson::value& Value(); @@ -31,10 +31,9 @@ class ApplicationMetaData { std::string get_meta_key() const; void set_meta_key(const std::string& meta_key); - + std::string get_meta_value() const; void set_meta_value(const std::string& meta_value); - private: std::string meta_key_; @@ -44,7 +43,8 @@ class ApplicationMetaData { picojson::object error_; picojson::value value_; }; -} // namespace application -} // namespace extension -#endif // APPLICATION_APPLICATION_METADATA_H_ +} // namespace application +} // namespace extension + +#endif // SRC_APPLICATION_APPLICATION_METADATA_H_ diff --git a/src/application/requested_application_control.cc b/src/application/requested_application_control.cc new file mode 100644 index 00000000..7cfb078f --- /dev/null +++ b/src/application/requested_application_control.cc @@ -0,0 +1,59 @@ +// Copyright 2014 Samsung Electronics Co, Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "application/requested_application_control.h" + +#include + +#include "common/logger.h" +#include "tizen/tizen.h" + +namespace extension { +namespace application { + +RequestedApplicationControl::RequestedApplicationControl() { +} + +RequestedApplicationControl::~RequestedApplicationControl() { +} + +const picojson::value& RequestedApplicationControl::Value() { + LoggerD("caller_app_id_: %s", caller_app_id_.c_str()); + data_["callerAppId"] = picojson::value(caller_app_id_); + data_["appControl"] = picojson::value(app_control_.Value()); + + value_ = picojson::value(data_); + + return value_; +} + +bool RequestedApplicationControl::IsValid() const { + return error_.empty(); +} + +std::string RequestedApplicationControl::get_caller_app_id() const { + return caller_app_id_; +} + +void RequestedApplicationControl:: + set_caller_app_id(const std::string& caller_app_id) { + caller_app_id_ = caller_app_id; + LoggerD("caller_app_id: %s", caller_app_id.c_str()); +} + +ApplicationControl& RequestedApplicationControl::get_app_control() { + return app_control_; +} + +void RequestedApplicationControl:: + set_app_control(const ApplicationControl& app_control) { + app_control_.set_operation(app_control.get_operation()); + app_control_.set_uri(app_control.get_uri()); + app_control_.set_mime(app_control.get_mime()); + app_control_.set_category(app_control.get_category()); + app_control_.set_data_array(app_control.get_data_array()); +} + +} // namespace application +} // namespace extension diff --git a/src/application/requested_application_control.h b/src/application/requested_application_control.h new file mode 100644 index 00000000..07b7c3ef --- /dev/null +++ b/src/application/requested_application_control.h @@ -0,0 +1,49 @@ +// Copyright 2014 Samsung Electronics Co, Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef SRC_APPLICATION_REQUESTED_APPLICATION_CONTROL_H_ +#define SRC_APPLICATION_REQUESTED_APPLICATION_CONTROL_H_ + +#include +#include + +#include "common/picojson.h" +#include "tizen/tizen.h" + +#include "application/application_control.h" + +namespace extension { +namespace application { + +class RequestedApplicationControl; +typedef std::shared_ptr + RequestedApplicationControlPtr; + +class RequestedApplicationControl { + public: + RequestedApplicationControl(); + ~RequestedApplicationControl(); + + const picojson::value& Value(); + bool IsValid() const; + + std::string get_caller_app_id() const; + void set_caller_app_id(const std::string& caller_app_id); + + ApplicationControl& get_app_control(); + void set_app_control(const ApplicationControl& app_control); + + private: + std::string caller_app_id_; + ApplicationControl app_control_; + + picojson::object data_; + picojson::object error_; + picojson::value value_; +}; + +} // namespace application +} // namespace extension + +#endif // SRC_APPLICATION_REQUESTED_APPLICATION_CONTROL_H_