function UIWrapper() {
}
var ui = new UIWrapper();
/**
* 显示Toast信息
* @param msg 信息
*/
UIWrapper.prototype.toast = function (msg) {
if (uiWrapper == null) {
return null;
}
uiWrapper.toast(msg);
};
/**
* 读取IEC包中的res文件夹某个文件资源,并变成android的Bitmap对象返回
* @param path res文件夹中的资源文件路径
* @return {null|Bitmap} 图像对象或者null
*/
UIWrapper.prototype.resResAsBitmap = function (path) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.resResAsBitmap(path);
};
/**
* 读取IEC包中的res文件夹某个文件资源,并变成android的Drawable对象返回
* @param path res文件夹中的资源文件路径
* @return {null|Drawable} 图像对象或者null
*/
UIWrapper.prototype.resResAsDrawable = function (path) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.resResAsDrawable(path);
};
/**
* 调试日志打印
* @param msg 打印的消息
*/
UIWrapper.prototype.logd = function (msg) {
if (uiWrapper == null) {
return null;
}
uiWrapper.logd(msg);
};
/**
* 脚本是否处于暂停中
* 适配 EC 10.0.0+
* @return {boolean} true 代表脚本处于暂停中
*/
UIWrapper.prototype.isScriptPause = function () {
if (uiWrapper == null) {
return false;
}
return uiWrapper.isScriptPause();
}
/**
* 显示脚本暂停控制悬浮窗
* 适配EC 10.0.0+
*/
UIWrapper.prototype.showScriptCtrlFloatView = function () {
uiWrapper.showScriptCtrlFloatView();
}
/**
* 关闭脚本暂停控制悬浮窗
* 适配EC 10.0.0+
*/
UIWrapper.prototype.closeScriptCtrlFloatView = function () {
uiWrapper.closeScriptCtrlFloatView();
}
/**
* 设置脚本暂停或者继续
* 适配 EC 10.0.0+
* @param pause true 代表暂停脚本,false代表继续
* @param timeout 自动恢复时间单位毫秒,0 代表不自动恢复,等待外部交互后恢复,大于0代表到了时间自动恢复运行
* @return {boolean} true 代表脚本处于暂停中,false 代表继续运行中
*/
UIWrapper.prototype.setScriptPause = function (pause, timeout) {
if (uiWrapper == null) {
return false;
}
uiWrapper.setScriptPause(pause, timeout);
return uiWrapper.isScriptPause();
}
/**
* 创建一个布局并设置到当前的页面中
* @param name tab标签的名称
* @param content 可以是layout文件夹中的文件名称,也可以直接是xml文件的内容
* @return {boolean} true代表成功, false代表失败
*/
UIWrapper.prototype.layout = function (name, content) {
if (uiWrapper == null) {
return null;
}
var r = uiWrapper.layout(name, content);
this.setUIvar();
return r;
};
/**
* 解析布局并返回
* @param content 可以是layout文件夹中的文件名称,也可以直接是xml文件的内容
* @return {null|View} android的View对象,解析有问题就是null
*/
UIWrapper.prototype.parseView = function (content) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.parseView(content);
};
/**
* 通过tag查找到一个视图
* @param tag 标签值
* @return {null|View} android原生的View对象
*/
UIWrapper.prototype.findViewByTag = function (tag) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.findViewByTag(tag);
};
/**
* 设置事件
* @param view 要设置事件的视图,可以是事件的tag值
* @param eventType 时间类型: click:点击,checkedChange:单选和多选按钮的选中状态改变事件,itemClick:列表的项目点击,itemSelected:列表的项目选中
* @param eventCallback 事件回调函数
* @return {boolean} true代表设置成功, false代表设置失败
*/
UIWrapper.prototype.setEvent = function (view, eventType, eventCallback) {
if (uiWrapper == null || view == null) {
return false;
}
if (typeof view == 'string') {
view = this.findViewByTag(view);
}
if (eventType === "click") {
return uiWrapper.setClickEvent(view, eventCallback);
}
if (eventType === "checkedChange") {
return uiWrapper.setCheckedChangeEvent(view, eventCallback);
}
if (eventType === "itemClick") {
return uiWrapper.setItemClickEvent(view, eventCallback);
}
if (eventType === "itemSelected") {
return uiWrapper.setItemSelectedEvent(view, eventCallback);
}
return false;
};
UIWrapper.prototype.setUIvar = function () {
this.resetUIVar();
}
/**
* 存储数据到存储区中,脚本可以使用
* @param key 键
* @param value 值
* @return {boolean} true成功 false失败
*/
UIWrapper.prototype.putShareData = function (key, value) {
return uiWrapper.putShareData2(key, value);
}
/**
* 从存储区获取在UI模块存储的数据
* @param key 键
* @return {null|*} 存储的数据
*/
UIWrapper.prototype.getShareData = function (key) {
return uiWrapper.getShareData2(key);
}
/**
* 清理所有存储区的数据
* @return {boolean} true 或者 false
*/
UIWrapper.prototype.clearAllShareData = function () {
return uiWrapper.clearAllShareData();
}
/**
* 将所有的tag转换成UI的对象直接调用
*/
UIWrapper.prototype.resetUIVar = function () {
if (this.getActivity() == null) {
return null;
}
var tags = uiWrapper.findAllTags();
if (tags == null || tags == "") {
return null;
}
tags = JSON.parse(tags);
if (tags != null) {
for (var i = 0; i < tags.length; i++) {
ui[tags[i]] = this.findViewByTag(tags[i]);
}
}
};
/**
* 取得当前的activity对象
* @return {null|Activity} 对象或者null
*/
UIWrapper.prototype.getActivity = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.getActivity();
};
/**
*
* @return {null|Context}
*/
UIWrapper.prototype.getContext = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.getContext();
};
/**
* 取得当前的Handler对象
* @return {null|Handler} 对象或者null
*/
UIWrapper.prototype.getHandler = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.getHandler();
};
/**
* 取得当前的根视图对象,因为有可能是多标签的页面,返回的有可能是个集合
* @return {null|View[]} 对象列表
*/
UIWrapper.prototype.getRootView = function () {
if (uiWrapper == null) {
return null;
}
var ls = uiWrapper.getRootView();
if (ls == null) {
return null;
}
var r = [];
for (var i = 0; i < ls.size(); i++) {
var va = ls.get(i);
r.push(va);
}
return r;
};
/**
* 启动脚本
* @return {boolean} true代表成功 false代表失败
*/
UIWrapper.prototype.start = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.start();
};
/**
* 是否有浮窗权限
* @return {boolean} true代表有权限 false代表无权限
*/
UIWrapper.prototype.hasFloatViewPermission = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.hasFloatViewPermission();
};
/**
* 异步请求浮窗权限
* @param timeout 超时时间
* @param callback 回调函数
* @return {boolean} true代表有权限 false代表无权限
*/
UIWrapper.prototype.requestFloatViewPermissionAsync = function (timeout, callback) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.requestFloatViewPermissionAsync(timeout, callback);
};
/**
* 取得所有UI配置
* @return {null|string} JSON字符串
*/
UIWrapper.prototype.getConfigJSON = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.getConfigJSON();
};
/**
* 取得单个UI配置项
* @param key 配置的key
* @return {null|string} 字符串
*/
UIWrapper.prototype.getConfig = function (key) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.getConfig(key);
};
/**
* 打开EC的系统设置
* @return {boolean} true代表成功 false代表失败
*/
UIWrapper.prototype.openECSystemSetting = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.openECSystemSetting();
};
/**
* 保存UI参数值
* @param key UI的key
* @param value UI的值
* @return {boolean} true代表成功 false代表失败
*/
UIWrapper.prototype.saveConfig = function (key, value) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.saveConfig(key, value);
};
/**
* 移出所有保存的UI参数值
* @return {boolean} true代表成功 false代表失败
*/
UIWrapper.prototype.removeAllUIConfig = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.removeAllUIConfig();
};
/**
* 根据设置的tag,保存所有配置
* @return {boolean} true 保存成功,false 保存失败
*/
UIWrapper.prototype.saveAllConfig = function () {
if (uiWrapper == null) {
return false;
}
return uiWrapper.saveAllConfig();
};
/**
* 设置视图的值
* @param tagOrView 视图的tag或者视图对象
* @param value 值,字符串或者是布尔型
* @return {boolean} true代表成功 false代表失败
*/
UIWrapper.prototype.setViewValue = function (tagOrView, value) {
if (uiWrapper == null) {
return;
}
return uiWrapper.setViewValue(tagOrView, value);
}
/**
* 取得视图的值
* @param tagOrView 视图的tag或者视图对象
* @return {null|boolean|string|number|*} 字符串或者布尔型
*/
UIWrapper.prototype.getViewValue = function (tagOrView) {
if (uiWrapper == null) {
return null;
}
var x = uiWrapper.getViewValue(tagOrView);
try {
x = JSON.parse(x);
var type = x["type"] + "";
var value = x["value"] + "";
if (type === "string") {
} else if (type === "boolean") {
if (value === "true") {
return true;
} else {
return false;
}
} else if (type === "int") {
return parseInt(value);
} else if (type === "float") {
return parseFloat(value);
}
return value;
} catch (e) {
}
return null;
};
/**
* 是否是无障碍运行模式
* @return {boolean} true 是 false 否
*/
UIWrapper.prototype.isAccMode = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.isAccMode();
};
/**
* 是否是代理运行模式
* @return {boolean} true 是 false 否
*/
UIWrapper.prototype.isAgentMode = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.isAgentMode();
};
/**
* 自动化服务是否正常
* @return {boolean} true 是 false 否
*/
UIWrapper.prototype.isServiceOk = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.isServiceOk();
};
/**
* 设置运行模式
* @param mode 1 代表是代理模式 2 代表无障碍模式
* @return {boolean} true 是 false 否
*/
UIWrapper.prototype.setRunningMode = function (mode) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.setRunningMode(mode);
};
/**
* 设置EC的系统参数
* @param params map形式例如 {"running_mode":"无障碍"},
* {
* "node_service":"需要",
* "proxy_service":"不需要",
* "running_mode":"无障碍",
* "auto_start_service":"是",
* "daemon_service":"是",
* "volume_start_tc":"否",
* "log_float_window":"否",
* "ctrl_float_window":"否"
* }
* 参数解释有:
* node_service : 是否需要启动节点获取服务 值有 需要,不需要两种
* proxy_service : 是否需要启动底层代理服务 值有 需要,不需要两种
* running_mode : 手势执行服务 值有 无障碍,代理两种
* auto_start_service : 开机启动服务 值有 是,否 两种
* daemon_service : 守护服务 值有 是,否 两种
* volume_start_tc : 音量键启停 值有 是,否 两种
* log_float_window : 日志悬浮窗展示 值有 是,否 两种
* ctrl_float_window : 启停控制悬浮窗展示 值有 是,否 两种
*
* @return {boolean} true 是 false 否
*/
UIWrapper.prototype.setECSystemConfig = function (params) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.setECSystemConfig(JSON.stringify(params));
};
/**
* 启动环境
* @return {boolean} true代表启动成功,false代表启动失败
*/
UIWrapper.prototype.startEnv = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.startEnv();
};
/**
* 设置代理模式下获取节点方式
* 该方法仅对代理模式生效
* 该方法在启动代理服务之前调用,使用2和3 可以减少检测的特征
* 1的方式会出现 ruru检测出 AccessibilityManager.isEnabled,2和其他的方式不会出现
* 1的方式节点能力交强,2节点功能较弱,0和3 就没有节点功能
* @param support 1 类似无障碍一样的方式, 2 shell dump的的方式,3或者0 不开启节点服务
* @return {boolean} true
*/
UIWrapper.prototype.setAgentSupportNode = function (support) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.setAgentSupportNode(support+"");
};
/**
* 开启一个定时任务
* @param tag
* @param execTime 定时时间格式: 2020-04-17 19:20:00,或者直接是秒数字,例如 3,代表3秒后
* @param cancelBeforeRunning 是否取消之前的任务
* @return {number} jobid
*/
UIWrapper.prototype.startJob = function (tag, execTime, cancelBeforeRunning) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.startJob(tag, execTime, cancelBeforeRunning);
};
/**
* 取消所有的定时任务
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.cancelAllJob = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.cancelAllJob();
};
/**
* 取消指定标签的任务
* @param tag 标签
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.cancelJob = function (tag) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.cancelJob(tag);
};
/**
* 获取所有定时任务TAG
* @return {null|string} JSON字符串
*/
UIWrapper.prototype.getAllJobTag = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.getAllJobTag();
};
/**
* 停止当前运行的测试任务
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.stopTask = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.stopTask();
};
/**
* 显示日志浮窗
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.showLogWindow = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.showLogWindow();
};
/**
* 关闭日志浮窗
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.closeLogWindow = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.closeLogWindow();
};
/**
* 新增启停浮窗按钮
* @param tag 按钮的标签
* @param icon 按钮的图标路径,工程中的res/文件下的图片,例如填写 res/a.png
* @param width 按钮的宽度,单位是dp,系统按钮是36
* @param height 按钮的高度,单位是dp,系统按钮是36
* @param index 按钮的加入索引,-1代表往后添加,0代表的是加入到第一位
* @param onClickListener 按钮的点击回调
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.addCtrlView = function (tag, icon, width, height, index, onClickListener) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.addCtrlView(tag, icon, width, height, index, onClickListener);
};
/**
* 更新启停浮窗按钮
* @param tag 按钮的标签
* @param icon 按钮的图标路径,工程中的res/文件下的图片,例如填写 res/a.png
* @param onClickListener 按钮的点击回调
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.updateCtrlView = function (tag, icon, onClickListener) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.updateCtrlView(tag, icon, onClickListener);
};
/**
* 删除启停浮窗按钮
* @param tag 按钮的标签,默认都有main_page_ctrl: 主页,log_window_ctrl:日志窗口控制,script_status_ctrl:脚本启停,log_close_ctrl: 日志框关闭
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.removeCtrlView = function (tag) {
if (uiWrapper == null) {
return null;
}
return uiWrapper.removeCtrlView(tag);
};
/**
* 删除所有启停浮窗按钮
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.removeAllCtrlView = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.removeAllCtrlView();
};
/**
* 重置启停浮窗按钮
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.resetDefaultCtrlView = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.resetDefaultCtrlView();
};
/**
* 显示启停浮窗
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.showCtrlWindow = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.showCtrlWindow();
};
/**
* 关闭启停浮窗
* @return {boolean} true代表成功,false代表失败
*/
UIWrapper.prototype.closeCtrlWindow = function () {
if (uiWrapper == null) {
return null;
}
return uiWrapper.closeCtrlWindow();
};
/**
* 异步启动环境
* @param callback
*/
UIWrapper.prototype.startEnvAsync = function (callback) {
if (uiWrapper == null) {
return;
}
uiWrapper.startEnvAsync(callback);
};
/**
* 监听UI所在的activity事件
* @param eventType 事件类型,分别为:onResume:Activity恢复时, onPause: Activity暂停时, onStop:Activity停止时, onDestroy:Activity销毁时
* @param callback 回调函数
*/
UIWrapper.prototype.onActivityEvent = function (eventType, callback) {
if (uiWrapper == null) {
return;
}
if ("onActivityResult" == eventType) {
uiWrapper.setActivityResultEvent(eventType, callback);
} else {
uiWrapper.setActivityEvent(eventType, callback);
}
};
/**
* 打开一个activity,通过map参数
* @param map 例如{"action":""},key的固定只有
* action,
* uri,pkg,className,flag,其他的都是参数了
* @return {boolean} true 代表成功,false 代表失败
*/
UIWrapper.prototype.openActivity = function (map) {
if (uiWrapper == null) {
return;
}
map = JSON.stringify(map);
return uiWrapper.openActivity(map);
};
/**
* alert,弹窗
* @param map 例如{"title":""},key的固定只有
* title 标题
* msg: 消息
* cancelText: 取消按钮文字
* okText: 确定按钮文字
* cancelable: 是否可取消
* @param okBtnCallback 点击确认按钮的回调
* @param cancelBtnCallback 点击取消按钮的回调
* @param dismissListener 对话框消失的回调
* @return {boolean} true 代表成功,false 代表失败
*/
UIWrapper.prototype.alert = function (map, okBtnCallback, cancelBtnCallback, dismissListener) {
if (uiWrapper == null) {
return;
}
map = JSON.stringify(map);
return uiWrapper.alert(map, okBtnCallback, cancelBtnCallback, dismissListener);
};
/**
* inputDialog 输入框弹窗
* @param map 例如{"title":""},key的固定只有
* title 标题
* msg: 消息
* cancelText: 取消按钮文字
* okText: 确定按钮文字
* cancelable: 是否可取消
* @param okBtnCallback 点击确认按钮的回调
* @param cancelBtnCallback 点击取消按钮的回调
* @param dismissListener 对话框消失的回调
* @return {boolean} true 代表成功,false 代表失败
*/
UIWrapper.prototype.inputDialog = function (map, okBtnCallback, cancelBtnCallback, dismissListener) {
if (uiWrapper == null) {
return;
}
map = JSON.stringify(map);
return uiWrapper.inputDialog(map, okBtnCallback, cancelBtnCallback, dismissListener);
};
/**
* 自定义对话框
* @param params 例如{"cancelable":""},key的固定只有
* fullScreen 是否全屏
* cancelable: 是否可取消
* @param view 原生的视图
* @param onViewBind 视图绑定时候回调函数
* @param dismissListener 对话框消失的回调
* @return {boolean} true 代表成功,false 代表失败
*/
UIWrapper.prototype.customDialog = function (params, view, onViewBind, dismissListener) {
if (uiWrapper == null) {
return;
}
return uiWrapper.customDialog(JSON.stringify(params), view, onViewBind, dismissListener);
};
/**
* 在主线程进行运行函数,相当于 getHandler.post
* @param delayTime 延迟时间,单位毫秒,如果是0就是理解执行
* @param callback 回调
*/
UIWrapper.prototype.run = function (delayTime, callback) {
if (uiWrapper == null) {
return;
}
return uiWrapper.run(delayTime, callback);
};
/**
* 向网页中注入一个JS函数,H5可以调用该函数,以实现脚本和HTML的互通扩展
* @param funcName 注入的函数名称
* @param callback 回调
* @return {boolean} true 代表成功,false 代表失败
*/
UIWrapper.prototype.registeH5Function = function (funcName, callback) {
if (uiWrapper == null) {
return;
}
return uiWrapper.registeH5Function(funcName, callback);
};
/**
* 取消向网页中注入一个JS函数
* @param funcName 注入的函数名称
* @return {boolean} true 代表成功,false 代表失败
*/
UIWrapper.prototype.unregisteH5Function = function (funcName) {
if (uiWrapper == null) {
return;
}
return uiWrapper.unregisteH5Function(funcName);
};
/**
* 设置加载网页的webview组件组件类型,默认是X5浏览器
* @param type 1:系统自带的webview, 2:X5浏览器
* @return {boolean} true 代表成功,false 代表失败
*/
UIWrapper.prototype.setWebViewType = function (type) {
if (uiWrapper == null) {
return;
}
return uiWrapper.setWebViewType(type);
};
/**
* 脚本是否正在运行
* @return {boolean} true 代表成功,false 代表失败
*/
UIWrapper.prototype.isScriptRunning = function () {
if (uiWrapper == null) {
return;
}
return uiWrapper.isScriptRunning();
};