fix(autojs): bridges.call() convert boolean to java.lang.Boolean
This commit is contained in:
@@ -24,44 +24,7 @@ runtime.init();
|
||||
global.device = runtime.device;
|
||||
|
||||
//设置JavaScriptBridges用于与Java层的交互和数据转换
|
||||
runtime.bridges.setBridges({
|
||||
call: function(func, target, args){
|
||||
var arr = [];
|
||||
var len = args.length;
|
||||
for(var i = 0; i < len; i++){
|
||||
arr.push(args[i]);
|
||||
}
|
||||
return func.apply(target, arr);
|
||||
},
|
||||
asArray: function(list){
|
||||
var arr = [];
|
||||
for(var i = 0; i < list.size(); i++){
|
||||
arr.push(list.get(i));
|
||||
}
|
||||
for(var key in list){
|
||||
if(typeof(key) == 'number')
|
||||
continue;
|
||||
var v = list[key];
|
||||
if(typeof(v) == 'function'){
|
||||
arr[key] = v.bind(list);
|
||||
}else{
|
||||
arr[key] = v;
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
},
|
||||
toArray: function(iterable){
|
||||
var iterator = iterable.iterator();
|
||||
var arr = [];
|
||||
while(iterator.hasNext()){
|
||||
arr.push(iterator.next());
|
||||
}
|
||||
return arr;
|
||||
},
|
||||
toString: function(o){
|
||||
return String(o);
|
||||
}
|
||||
});
|
||||
runtime.bridges.setBridges(require('__bridges__.js'));
|
||||
|
||||
//一些内部函数
|
||||
global.__asGlobal__ = function(obj, functions){
|
||||
@@ -88,8 +51,9 @@ runtime.init();
|
||||
}
|
||||
};
|
||||
|
||||
//初始化一般模块
|
||||
//初始化全局函数
|
||||
require("__globals__")(runtime, global);
|
||||
//初始化一般模块
|
||||
(function(scope){
|
||||
var modules = ['app', 'automator', 'console', 'dialogs', 'io', 'selector', 'shell', 'web', 'ui',
|
||||
"images", "timers", "threads", "events", "engines", "RootAutomator", "http", "storages", "floaty",
|
||||
|
||||
63
autojs/src/main/assets/modules/__bridges__.js
Normal file
63
autojs/src/main/assets/modules/__bridges__.js
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
var bridges = {};
|
||||
|
||||
bridges.call = function (func, target, args) {
|
||||
var arr = [];
|
||||
var len = args.length;
|
||||
for (var i = 0; i < len; i++) {
|
||||
arr.push(wrap(args[i]));
|
||||
}
|
||||
return func.apply(target, arr);
|
||||
};
|
||||
|
||||
function wrap(value){
|
||||
if(!(typeof(value) == 'object' && 'getClass' in value && util.isFunction(value.getClass))){
|
||||
return value;
|
||||
}
|
||||
var c = value.getClass();
|
||||
if(!('getName' in c && util.isFunction(c.getName))){
|
||||
return value;
|
||||
}
|
||||
var name = c.getName();
|
||||
if(name == 'java.lang.Boolean'){
|
||||
return Boolean(value);
|
||||
}
|
||||
//TODO: is is necessary?
|
||||
if(name == 'java.lang.Integer' || name == 'java.lang.Long' || name == 'java.lang.Double'
|
||||
|| name == 'java.lang.Float'){
|
||||
return Number(value);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
bridges.asArray = function (list) {
|
||||
var arr = [];
|
||||
for (var i = 0; i < list.size(); i++) {
|
||||
arr.push(list.get(i));
|
||||
}
|
||||
for (var key in list) {
|
||||
if (typeof (key) == 'number')
|
||||
continue;
|
||||
var v = list[key];
|
||||
if (typeof (v) == 'function') {
|
||||
arr[key] = v.bind(list);
|
||||
} else {
|
||||
arr[key] = v;
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
};
|
||||
bridges.toArray = function (iterable) {
|
||||
var iterator = iterable.iterator();
|
||||
var arr = [];
|
||||
while (iterator.hasNext()) {
|
||||
arr.push(iterator.next());
|
||||
}
|
||||
return arr;
|
||||
};
|
||||
bridges.toString = function (o) {
|
||||
return String(o);
|
||||
};
|
||||
|
||||
|
||||
module.exports = bridges;
|
||||
@@ -119,9 +119,7 @@ module.exports = function(__runtime__, scope){
|
||||
"negative": {method: "negativeText"},
|
||||
"negativeColor": {adapter: parseColor},
|
||||
"cancelable": null,
|
||||
"canceledOnTouchOutside": null,
|
||||
"checkBoxPrompt": null,
|
||||
"checkBoxChecked": null
|
||||
"canceledOnTouchOutside": null
|
||||
};
|
||||
|
||||
dialogs.build = function(properties){
|
||||
@@ -133,16 +131,16 @@ module.exports = function(__runtime__, scope){
|
||||
applyDialogProperty(builder, name, properties[name]);
|
||||
}
|
||||
applyOtherDialogProperties(builder, properties);
|
||||
return ui.run(()=> builder.build());
|
||||
return ui.run(()=> builder.buildDialog());
|
||||
}
|
||||
|
||||
function applyDialogProperty(builder, name, value){
|
||||
if(!propertySetters.hasOwnProperty(name)){
|
||||
return;
|
||||
}
|
||||
var propertySetter = propertySetters[name];
|
||||
if(propertySetter == null){
|
||||
propertySetter = {method: name};
|
||||
var propertySetter = propertySetters[name] || {};
|
||||
if(propertySetter.method == undefined){
|
||||
propertySetter.method = name;
|
||||
}
|
||||
if(propertySetter.adapter){
|
||||
value = propertySetter.adapter(value);
|
||||
@@ -155,25 +153,28 @@ module.exports = function(__runtime__, scope){
|
||||
builder.input(wrapNonNullString(properties.inputHint), wrapNonNullString(properties.inputPrefill),
|
||||
function(dialog, input){
|
||||
input = input.toString();
|
||||
dialog.emit("input_change", dialog, input);
|
||||
}, true);
|
||||
builder.emit("input_change", dialog, input);
|
||||
})
|
||||
.alwaysCallInputCallback();
|
||||
}
|
||||
if(properties.items != undefined){
|
||||
var itemsSelectMode = properties.itemSelectMode;
|
||||
var itemsSelectMode = properties.itemsSelectMode;
|
||||
if(itemsSelectMode == undefined || itemsSelectMode == 'select'){
|
||||
builder.itemsCallback(function(dialog, view, position, text){
|
||||
dialog.emit("item_select", position, text.toString(), dialog);
|
||||
});
|
||||
}else if(itemsSelectMode == 'singleChoice'){
|
||||
}else if(itemsSelectMode == 'single'){
|
||||
builder.itemsCallbackSingleChoice(properties.itemsSelectedIndex == undefined ? -1 : properties.itemsSelectedIndex,
|
||||
function(dialog, view, which, text){
|
||||
dialog.emit("single_choice", which, text.toString(), dialog)
|
||||
dialog.emit("single_choice", which, text.toString(), dialog);
|
||||
return true;
|
||||
});
|
||||
}else if(itemsSelectMode == 'multiChoice'){
|
||||
builder.itemsCallbackMultiChoice(properties.itemsSelectedIndex == undefined ? -1 : properties.itemsSelectedIndex,
|
||||
}else if(itemsSelectMode == 'multi'){
|
||||
builder.itemsCallbackMultiChoice(properties.itemsSelectedIndex == undefined ? null : properties.itemsSelectedIndex,
|
||||
function(dialog, view, indices, texts){
|
||||
dialog.emit("multi_choice", toJsArray(indices, (l, i)=> parseInt(l.get(i)),
|
||||
toJsArray(texts, (l, i)=> l.get(i).toString())), dialog);
|
||||
return true;
|
||||
});
|
||||
}else{
|
||||
throw new Error("unknown itemsSelecteMode " + itemsSelectMode);
|
||||
@@ -182,8 +183,14 @@ module.exports = function(__runtime__, scope){
|
||||
if(properties.progress != undefined){
|
||||
var progress = properties.progress;
|
||||
var indeterminate = (progress.max == -1);
|
||||
builder.progress(indeterminate, progress.max, progress.showMinMax);
|
||||
builder.progressIndeterminateStyle(progress.horizontal);
|
||||
builder.progress(indeterminate, progress.max, !!progress.showMinMax);
|
||||
builder.progressIndeterminateStyle(!!progress.horizontal);
|
||||
}
|
||||
if(properties.checkBoxPrompt != undefined || properties.checkBoxChecked != undefined){
|
||||
builder.checkBoxPrompt(wrapNonNullString(properties.checkBoxPrompt), !!properties.checkBoxChecked,
|
||||
function(view, checked){
|
||||
builder.emit("check", checked, builder.getDialog());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user