Skip to content
This repository was archived by the owner on Jun 3, 2021. It is now read-only.

add Extra options to createInstance #1943

Merged
merged 3 commits into from
Dec 20, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified android/sdk/libs/armeabi-v7a/libweexjss.so
Binary file not shown.
Binary file modified android/sdk/libs/armeabi/libweexjss.so
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -1459,6 +1459,17 @@ private void invokeCreateInstance(@NonNull WXSDKInstance instance, Script templa
WXJSObject instanceObj = new WXJSObject(WXJSObject.String,
template.getContent());

Object extraOption = null;
if(options != null && options.containsKey("extraOption")) {
extraOption = options.get("extraOption");
options.remove("extraOption");
}

WXJSObject extraOptionObj = new WXJSObject(WXJSObject.JSON,
extraOption == null ? "{}"
: WXJsonUtils.fromObjectToJSONString(extraOption));


WXJSObject optionsObj = new WXJSObject(WXJSObject.JSON,
options == null ? "{}"
: WXJsonUtils.fromObjectToJSONString(options));
Expand Down Expand Up @@ -1496,7 +1507,7 @@ private void invokeCreateInstance(@NonNull WXSDKInstance instance, Script templa
}

WXJSObject[] args = {instanceIdObj, instanceObj, optionsObj,
dataObj, apiObj, renderStrategy};
dataObj, apiObj, renderStrategy, extraOptionObj};

instance.setTemplate(template.getContent());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,18 +142,19 @@ public static void switchInteractionLog(final boolean isOpen){
}
sOpenInteractionLog = isOpen;
//for jsfm && jsengin
WXBridgeManager.getInstance().post(new Runnable() {
@Override
public void run() {
WXJSObject[] args = {new WXJSObject(isOpen?1:0)};
WXBridgeManager.getInstance().invokeExecJS(
"",
null,
"switchInteractionLog",
args,
false);
}
});
//TODO wait for JSFramework
// WXBridgeManager.getInstance().post(new Runnable() {
// @Override
// public void run() {
// WXJSObject[] args = {new WXJSObject(isOpen?1:0)};
// WXBridgeManager.getInstance().invokeExecJS(
// "",
// null,
// "switchInteractionLog",
// args,
// false);
// }
// });
//for weex_core
WXBridgeManager.getInstance().registerCoreEnv("switchInteractionLog",String.valueOf(isOpen));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ namespace WeexCore {

int CoreSideInMultiProcess::CreateInstance(const char *instanceId, const char *func,
const char *script, const char *opts,
const char *initData, const char *extendsApi,
const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
const char* render_strategy) {
try {
std::unique_ptr<IPCSerializer> serializer(createIPCSerializer());
Expand All @@ -582,7 +582,10 @@ namespace WeexCore {
serializer->add(opts, strlen(opts));
serializer->add(initData, strlen(initData));
serializer->add(extendsApi, strlen(extendsApi));

for (auto it = params.begin(); it != params.end(); ++it) {
serializer->add((*it)->type->content, (*it)->type->length);
serializer->add((*it)->value->content, (*it)->value->length);
}
std::unique_ptr<IPCBuffer> buffer = serializer->finish();
std::unique_ptr<IPCResult> result = sender_->send(buffer.get());
if (result->getType() != IPCType::INT32) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ class CoreSideInMultiProcess : public PlatformBridge::CoreSide {
std::vector<VALUE_WITH_TYPE *> &params) override;
int CreateInstance(const char *instanceId, const char *func,
const char *script, const char *opts, const char *initData,
const char *extendsApi,
const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
const char *render_strategy) override;
std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId,
const char *script) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,9 +205,9 @@ std::unique_ptr<WeexJSResult> CoreSideInMultiSo::ExecJSWithResult(
int CoreSideInMultiSo::CreateInstance(const char *instanceId, const char *func,
const char *script, const char *opts,
const char *initData,
const char *extendsApi, const char* render_strategy) {
const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) {
return core_side_functions_->create_instance(instanceId, func, script, opts,
initData, extendsApi);
initData, extendsApi,params);
}

std::unique_ptr<WeexJSResult> CoreSideInMultiSo::ExecJSOnInstance(const char *instanceId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ class CoreSideInMultiSo : public PlatformBridge::CoreSide {
std::vector<VALUE_WITH_TYPE *> &params) override;
int CreateInstance(const char *instanceId, const char *func,
const char *script, const char *opts, const char *initData,
const char *extendsApi, const char* render_strategy) override;
const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) override;
std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId, const char *script) override;
int DestroyInstance(const char *instanceId) override;
int UpdateGlobalConfig(const char *config) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ void ScriptSideInMultiProcess::ExecJSWithCallback(

int ScriptSideInMultiProcess::CreateInstance(
const char *instanceId, const char *func, const char *script,
const char *opts, const char *initData, const char *extendsApi) {
const char *opts, const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) {
try {

if(sender_ == nullptr) {
Expand All @@ -449,7 +449,10 @@ int ScriptSideInMultiProcess::CreateInstance(
serializer->add(opts, strlen(opts));
serializer->add(initData, strlen(initData));
serializer->add(extendsApi, strlen(extendsApi));

for (auto it = params.begin(); it != params.end(); ++it) {
serializer->add((*it)->type->content, (*it)->type->length);
serializer->add((*it)->value->content, (*it)->value->length);
}
std::unique_ptr<IPCBuffer> buffer = serializer->finish();
std::unique_ptr<IPCResult> result = sender_->send(buffer.get());
if (result->getType() != IPCType::INT32) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class ScriptSideInMultiProcess : public ScriptBridge::ScriptSide {

int CreateInstance(const char *instanceId, const char *func,
const char *script, const char *opts, const char *initData,
const char *extendsApi) override;
const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) override;

std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId, const char *script) override;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,13 @@ void ScriptSideInMultiSo::ExecJSWithCallback(
int ScriptSideInMultiSo::CreateInstance(const char *instanceId,
const char *func, const char *script,
const char *opts, const char *initData,
const char *extendsApi) {
const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) {
if(script_side_functions_ == nullptr) {
LOGE("ScriptSideInMultiSo::CreateInstance script_side_functions_ is null");
return false;
}
return script_side_functions_->funcCreateInstance(instanceId, func, script,
opts, initData, extendsApi);
opts, initData, extendsApi,params);
}

std::unique_ptr<WeexJSResult> ScriptSideInMultiSo::ExecJSOnInstance(const char *instanceId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class ScriptSideInMultiSo : public ScriptBridge::ScriptSide {

int CreateInstance(const char *instanceId, const char *func,
const char *script, const char *opts, const char *initData,
const char *extendsApi) override;
const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) override;

std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId, const char *script) override;

Expand Down
25 changes: 22 additions & 3 deletions weex_core/Source/android/wrap/wx_bridge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,10 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
new WXJSObject(env, base::android::ScopedLocalJavaRef<jobject>(
env, env->GetObjectArrayElement(args, 5))
.Get()));

auto extraOptionString = base::android::ScopedLocalJavaRef<jstring>(
env, getJsonData(env, args, 6));

auto japi = arg4->GetData(env);
ScopedJStringUTF8 scoped_id(env, instanceId);
ScopedJStringUTF8 scoped_func(env, function);
Expand All @@ -519,7 +523,22 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
ScopedJStringUTF8 scoped_api(env, static_cast<jstring>(japi.Get()));
ScopedJStringUTF8 scoped_render_strategy(
env, static_cast<jstring>(render_strategy->GetData(env).Release()));

ScopedJStringUTF8 scoped_extra_option(env, extraOptionString.Get());

std::string err;
const std::string input = scoped_extra_option.getChars();
const json11::Json &json = json11::Json::parse(input, err);

const std::map<std::string, json11::Json> &data = json.object_items();
auto it = data.begin();
std::vector<INIT_FRAMEWORK_PARAMS*> params;
while (it != data.end()) {
INIT_FRAMEWORK_PARAMS *param = nullptr;
const std::string &string = it->second.string_value();
param = WeexCore::genInitFrameworkParams(it->first.c_str(),it->second.string_value().c_str());
params.push_back(param);
it++;
}
// If strategy is DATA_RENDER_BINARY, jscript is a jbyteArray, otherwise jstring
// TODO use better way
if (scoped_render_strategy.getChars() != nullptr
Expand All @@ -530,7 +549,7 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
->core_side()
->CreateInstance(scoped_id.getChars(), scoped_func.getChars(),
byte_array.getBytes(), byte_array.length(), scoped_opts.getChars(),
scoped_init_data.getChars(), scoped_api.getChars(),
scoped_init_data.getChars(), scoped_api.getChars(), params,
scoped_render_strategy.getChars());
} else {
ScopedJStringUTF8 scoped_script(env, static_cast<jstring>(jscript.Get()));
Expand All @@ -540,7 +559,7 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
->CreateInstance(scoped_id.getChars(), scoped_func.getChars(),
scoped_script.getChars(), strlen(scoped_script.getChars()),
scoped_opts.getChars(),
scoped_init_data.getChars(), scoped_api.getChars(),
scoped_init_data.getChars(), scoped_api.getChars(),params,
scoped_render_strategy.getChars());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
const char *script, int script_length,
const char *opts,
const char *initData,
const char *extendsApi,
const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
const char *render_strategy) {
// First check about DATA_RENDER mode
if (render_strategy != nullptr) {
Expand All @@ -440,12 +440,13 @@ int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
const_cast<std::map<std::string, json11::Json> &>(
opts_json.object_items());
opts_map["bundleType"] = "Vue";
std::vector<INIT_FRAMEWORK_PARAMS*> params;
WeexCoreManager::Instance()
->script_bridge()
->script_side()
->CreateInstance(instanceId.c_str(), func.c_str(), result,
opts_json.dump().c_str(), initData.c_str(),
extendsApi.c_str());
extendsApi.c_str(),params);
};
if (strcmp(render_strategy, "DATA_RENDER") == 0) {
auto node_manager =
Expand All @@ -467,7 +468,7 @@ int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
return WeexCoreManager::Instance()
->script_bridge()
->script_side()
->CreateInstance(instanceId, func, script, opts, initData, extendsApi);
->CreateInstance(instanceId, func, script, opts, initData, extendsApi, params);
}

std::unique_ptr<WeexJSResult> CoreSideInPlatform::ExecJSOnInstance(const char *instanceId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class CoreSideInPlatform : public PlatformBridge::CoreSide {
long callback_id) override;
int CreateInstance(const char *instanceId, const char *func,
const char *script, int script_length, const char *opts, const char *initData,
const char *extendsApi, const char* render_strategy) override;
const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) override;
std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId,
const char *script) override;
int DestroyInstance(const char *instanceId) override;
Expand Down
2 changes: 1 addition & 1 deletion weex_core/Source/core/bridge/platform_bridge.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ class PlatformBridge {
long callback_id) = 0;
virtual int CreateInstance(const char* instanceId, const char* func,
const char* script, int script_length, const char* opts,
const char* initData, const char* extendsApi,
const char* initData, const char* extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
const char* render_strategy) = 0;
virtual std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char* instanceId,
const char* script) = 0;
Expand Down
2 changes: 1 addition & 1 deletion weex_core/Source/core/bridge/script_bridge.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ class ScriptBridge {
virtual int CreateInstance(const char *instanceId, const char *func,
const char *script, const char *opts,
const char *initData,
const char *extendsApi) = 0;
const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) = 0;

virtual std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId,
const char *script) = 0;
Expand Down
2 changes: 1 addition & 1 deletion weex_core/Source/include/WeexApiHeader.h
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ typedef void(*FuncExeJSWithResultId)(const char *instanceId, const char *nameSpa
std::vector<VALUE_WITH_TYPE *> &params, long callback_id);

typedef int (*FuncCreateInstance)(const char *instanceId, const char *func, const char *script, const char *opts,
const char *initData, const char *extendsApi);
const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params);

typedef std::unique_ptr<WeexJSResult> (*FuncExeJSOnInstance)(const char *instanceId, const char *script);

Expand Down