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

Commit

Permalink
add Extra options to createInstance (#1943)
Browse files Browse the repository at this point in the history
* Add extra options to Create instance

* Merge libweexjss.so

* Do not exec switchInteractionLog
  • Loading branch information
Darin726 authored and YorkShen committed Dec 20, 2018
1 parent acf7227 commit 5d33cd7
Show file tree
Hide file tree
Showing 18 changed files with 73 additions and 35 deletions.
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

0 comments on commit 5d33cd7

Please sign in to comment.