From 3de96662c6a010c0bd8f7f1aaf38687970bf76fa Mon Sep 17 00:00:00 2001
From: hyb1996 <946994919@qq.com>
Date: Tue, 27 Feb 2018 17:59:12 +0800
Subject: [PATCH] docs: events, automator
---
app/src/main/assets/docs/app.html | 11 ++++++
app/src/main/assets/docs/events.html | 16 +++++++++
app/src/main/assets/docs/http.html | 4 +--
.../assets/docs/widgets-based-automation.html | 16 ++++++++-
app/src/main/assets/indices/all.json | 5 +++
.../src/main/assets/modules/__automator__.js | 15 ++++----
.../stardust/autojs/runtime/api/Events.java | 36 +++++++++++++++----
7 files changed, 87 insertions(+), 16 deletions(-)
diff --git a/app/src/main/assets/docs/app.html b/app/src/main/assets/docs/app.html
index 58e3e3ae..211eddbb 100644
--- a/app/src/main/assets/docs/app.html
+++ b/app/src/main/assets/docs/app.html
@@ -86,6 +86,7 @@
进阶: 意图Intentapp.startActivity("console");
进阶: 意图Intent#
Intent(意图) 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:
删除该按键的KeyUp(弹起)事件的所有监听。
+events.setKeyInterceptionEnabled([key, ]enabled)#
+设置按键屏蔽是否启用。所谓按键屏蔽指的是,屏蔽原有按键的功能,例如使得音量键不再能调节音量,但此时仍然能通过按键事件监听按键。
+如果不加参数key则会屏蔽所有按键。
+例如,调用events.setKeyInterceptionEnabled(true)会使系统的音量、Home、返回等键不再具有调节音量、回到主页、返回的作用,但此时仍然能通过按键事件监听按键。
+该函数通常于按键监听结合,例如想监听音量键并使音量键按下时不弹出音量调节框则为:
+events.setKeyInterceptionEnabled("volume_up", true);
+events.observeKey();
+events.onKeyDown("volume_up", ()=>{
+ log("音量上键被按下");
+});
+
只要有一个脚本屏蔽了某个按键,该按键便会被屏蔽;当脚本退出时,会自动解除所有按键屏蔽。
events.observeTouch()#
启用屏幕触摸监听。(需要root权限)
只有这个函数被成功执行后, 触摸事件的监听才有效。
diff --git a/app/src/main/assets/docs/http.html b/app/src/main/assets/docs/http.html
index 7f072d79..30d44950 100644
--- a/app/src/main/assets/docs/http.html
+++ b/app/src/main/assets/docs/http.html
@@ -118,8 +118,8 @@ http.get("www.baidu.com", {}, function(res, err){
console.error(err);
return;
}
- log("code = " + r.statusCode);
- log("html = " + r.body.string());
+ log("code = " + res.statusCode);
+ log("html = " + res.body.string());
});
如果要增加HTTP头部信息,则在options参数中添加,例如:
console.show();
diff --git a/app/src/main/assets/docs/widgets-based-automation.html b/app/src/main/assets/docs/widgets-based-automation.html
index 36a7fb67..d0dc5fec 100644
--- a/app/src/main/assets/docs/widgets-based-automation.html
+++ b/app/src/main/assets/docs/widgets-based-automation.html
@@ -76,6 +76,8 @@
auto.waitFor()#
+检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。
+auto.setMode(mode)#
+设置无障碍模式为mode。mode的可选值为:
+
+fast 快速模式。该模式下会启用控件缓存,从而选择器获取屏幕控件更快。对于需要快速的控件查看和操作的脚本可以使用该模式,一般脚本则没有必要使用该函数。
+normal 正常模式,默认。
+
+SimpleActionAutomator#
SimpleActionAutomator提供了一些模拟简单操作的函数,例如点击文字、模拟按键等。这些函数可以直接作为全局函数使用。
click(text[, i])#
diff --git a/app/src/main/assets/indices/all.json b/app/src/main/assets/indices/all.json
index 3fd07177..de6a4202 100644
--- a/app/src/main/assets/indices/all.json
+++ b/app/src/main/assets/indices/all.json
@@ -513,6 +513,11 @@
"url": "events.html#events_events_observekey",
"summary": "监听按键"
},
+ {
+ "key": "setKeyInterceptionEnabled",
+ "url": "events.html#events_events_setkeyinterceptionenabled_key_enabled",
+ "summary": "屏蔽按键"
+ },
{
"key": "observeTouch",
"url": "events.html#events_events_observetouch",
diff --git a/autojs/src/main/assets/modules/__automator__.js b/autojs/src/main/assets/modules/__automator__.js
index 19b3fa92..f90a8440 100644
--- a/autojs/src/main/assets/modules/__automator__.js
+++ b/autojs/src/main/assets/modules/__automator__.js
@@ -111,13 +111,8 @@ module.exports = function(runtime, global){
global.auto = function(mode){
if(mode){
- if(typeof(mode) !== "string"){
- throw new TypeError("mode should be a string");
- }
- mode = modes[mode.toLowerCase()];
+ global.auto.setMode(mode);
}
- mode = mode || 0;
- runtime.accessibilityBridge.setMode(mode);
runtime.accessibilityBridge.ensureServiceEnabled();
}
@@ -125,6 +120,14 @@ module.exports = function(runtime, global){
runtime.accessibilityBridge.waitForServiceEnabled();
}
+ global.auto.setMode = function(mode){
+ if(typeof(mode) !== "string"){
+ throw new TypeError("mode should be a string");
+ }
+ mode = modes[mode.toLowerCase()] || 0;
+ runtime.accessibilityBridge.setMode(mode);
+ }
+
global.__asGlobal__(runtime.automator, ['back', 'home', 'powerDialog', 'notifications', 'quickSettings', 'recents', 'splitScreen']);
global.__asGlobal__(automator, ['click', 'longClick', 'press', 'swipe', 'gesture', 'gestures', 'gestureAsync', 'gesturesAsync', 'scrollDown', 'scrollUp', 'input', 'setText']);
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java
index cc931e30..ec3c9e43 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java
@@ -9,8 +9,6 @@ import android.os.Handler;
import android.provider.Settings;
import android.support.annotation.RequiresApi;
import android.view.KeyEvent;
-import android.view.View;
-import android.view.ViewGroup;
import com.stardust.autojs.R;
import com.stardust.autojs.core.accessibility.AccessibilityBridge;
@@ -30,6 +28,9 @@ import com.stardust.view.accessibility.KeyInterceptor;
import com.stardust.view.accessibility.NotificationListener;
import com.stardust.view.accessibility.OnKeyListener;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* Created by Stardust on 2017/7/18.
*/
@@ -50,8 +51,9 @@ public class Events extends EventEmitter implements OnKeyListener, TouchObserver
private boolean mListeningNotification = false;
private boolean mListeningToast = false;
private ScriptRuntime mScriptRuntime;
- private volatile boolean mInterceptsKey = false;
+ private volatile boolean mInterceptsAllKey = false;
private KeyInterceptor mKeyInterceptor;
+ private Set mInterceptedKeys = new HashSet<>();
public Events(Context context, AccessibilityBridge accessibilityBridge, ScriptRuntime runtime) {
super(runtime.bridges);
@@ -105,13 +107,33 @@ public class Events extends EventEmitter implements OnKeyListener, TouchObserver
}
public void setKeyInterceptionEnabled(boolean enabled) {
- mInterceptsKey = enabled;
- if (mInterceptsKey && mKeyInterceptor == null) {
- mKeyInterceptor = event -> mInterceptsKey;
- getAccessibilityService().getKeyInterrupterObserver().addKeyInterrupter(mKeyInterceptor);
+ mInterceptsAllKey = enabled;
+ if (mInterceptsAllKey) {
+ ensureKeyInterceptor();
}
}
+ public void setKeyInterceptionEnabled(String key, boolean enabled) {
+ if (enabled) {
+ mInterceptedKeys.add(key);
+ ensureKeyInterceptor();
+ } else {
+ mInterceptedKeys.remove(key);
+ }
+ }
+
+ private void ensureKeyInterceptor() {
+ if (mKeyInterceptor != null)
+ return;
+ mKeyInterceptor = event -> {
+ if (mInterceptsAllKey)
+ return true;
+ String keyName = KeyEvent.keyCodeToString(event.getKeyCode()).substring(8).toLowerCase();
+ return mInterceptedKeys.contains(keyName);
+ };
+ getAccessibilityService().getKeyInterrupterObserver().addKeyInterrupter(mKeyInterceptor);
+ }
+
private AccessibilityService getAccessibilityService() {
mScriptRuntime.ensureAccessibilityServiceEnabled();
AccessibilityService service = mAccessibilityBridge.getService();