[Application] Add launchMode to launchAppControl
authorKamil Lysik <k.lysik@samsung.com>
Tue, 24 Mar 2015 10:08:38 +0000 (11:08 +0100)
committerRafal Galka <r.galka@samsung.com>
Wed, 8 Apr 2015 09:40:07 +0000 (18:40 +0900)
Due to change in native API, a change is proposed
to introduce launchMode into launchAppControl.

Change-Id: Iaeddec76be830fe1e465f02c4a46a7996abc0168
Signed-off-by: Kamil Lysik <k.lysik@samsung.com>
src/application/application_api.js
src/application/application_instance.cc

index 8c9ac78..104ded8 100644 (file)
@@ -9,6 +9,11 @@ var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
 var native_ = new xwalk.utils.NativeManager(extension);
 
+var ApplicationControlLaunchMode = {
+  SINGLE: 'SINGLE',
+  GROUP: 'GROUP'
+};
+
 function callNative(cmd, args) {
   var result = native_.callSync(cmd, args);
 
@@ -184,6 +189,9 @@ ApplicationManager.prototype.launchAppControl = function(appControl, id, success
   if (args['appControl']) {
     nativeParam['appControl'] = args.appControl;
   }
+  if (args.appControl['launchMode'] ) {
+      nativeParam['launchMode'] = args.appControl['launchMode'];
+  }
 
   //Try to find application
   try {
@@ -519,7 +527,7 @@ tizen.ApplicationControlData = function(key, value) {
   }
 };
 
-tizen.ApplicationControl = function(operation, uri, mime, category, data) {
+tizen.ApplicationControl = function(operation, uri, mime, category, data, launchMode) {
   if (this && this.constructor === tizen.ApplicationControl &&
       (typeof(operation) === 'string' || operation instanceof String)) {
 
@@ -528,6 +536,7 @@ tizen.ApplicationControl = function(operation, uri, mime, category, data) {
     defineReadWriteProperty(this, 'mime', mime);
     defineReadWriteProperty(this, 'category', category);
     defineReadWriteProperty(this, 'data', data);
+    defineReadWriteProperty(this, 'data', launchMode);
 
   } else {
     throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR);
index 7128cb0..bbbe515 100644 (file)
@@ -480,6 +480,7 @@ static char* getPackageByAppId(const char* app_id) {
     LoggerE("Fail to get pkgName");
     pkgName = NULL;
   }
+
   ret = app_info_destroy(handle);
   if (ret < 0) {
     LoggerE("Fail to get destory appinfo");
@@ -1060,13 +1061,17 @@ void ApplicationInstance::AppMgrLaunchAppControl(const picojson::value& args,
   CHECK_EXIST(args, "callbackId", out)
 
   int callback_id = static_cast<int>(args.get("callbackId").get<double>());
+  LoggerD("callbackId = %d", callback_id);
   std::string id;  // app id is optional
   if (args.contains("id")) {
     id = args.get("id").get<std::string>();
     LoggerD("app_id = %s", id.c_str());
   }
-  LoggerD("callbackId = %d", callback_id);
-
+  std::string launchMode;  // launch mode is optional
+  if (args.contains("launchMode")) {
+    launchMode = args.get("launchMode").get<std::string>();
+    LoggerD("launchMode = %s", launchMode.c_str());
+  }
   ApplicationControlPtr app_ctr_ptr(new ApplicationControl());
 
   picojson::value app_control = args.get("appControl");
@@ -1155,6 +1160,26 @@ void ApplicationInstance::AppMgrLaunchAppControl(const picojson::value& args,
     LoggerD("app_id is empty");
   }
 
+  if (!launchMode.empty()) {
+    app_control_launch_mode_e launch_mode;
+    if (launchMode == "SINGLE") {
+      launch_mode = APP_CONTROL_LAUNCH_MODE_SINGLE;
+    } else if (launchMode == "GROUP") {
+      launch_mode = APP_CONTROL_LAUNCH_MODE_SINGLE;
+    } else {
+      LoggerE("Invalid launch mode!");
+      ReportError(UnknownException("Invalid launch mode"), out);
+      app_control_destroy(service);
+      return;
+    }
+    ret = app_control_set_launch_mode(service, launch_mode);
+    if (ret != APP_CONTROL_ERROR_NONE) {
+      ReportError(UnknownException("Setting app_id is failed."), out);
+      app_control_destroy(service);
+      return;
+    }
+  }
+
   ret = app_control_set_operation(service, operation.c_str());
   if (ret != APP_CONTROL_ERROR_NONE) {
     ReportError(InvalidValuesException("operation is invalid parameter"), out);