新增 手势监听功能(效果不佳不启用)
This commit is contained in:
@@ -58,15 +58,6 @@ module = (typeof module === 'undefined') ? {} : module;
|
||||
|
||||
Module._load = function _load(file, parent, core, main) {
|
||||
return NativeRequire.require(file);
|
||||
var module = new Module(file, parent, core);
|
||||
var body = readFile(module.filename, module.core);
|
||||
var dir = new File(module.filename).getParent();
|
||||
var func = new Function('exports', 'module', 'require', '__filename', '__dirname', body);
|
||||
func.apply(module,
|
||||
[module.exports, module, module.require, module.filename, dir]);
|
||||
module.loaded = true;
|
||||
module.main = main;
|
||||
return module.exports;
|
||||
};
|
||||
|
||||
Module.runMain = function runMain(main) {
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.stardust.autojs.core.accessibility
|
||||
|
||||
import android.accessibilityservice.AccessibilityServiceInfo
|
||||
import android.os.Build
|
||||
import com.stardust.autojs.core.pref.Pref
|
||||
import com.stardust.view.accessibility.AccessibilityService
|
||||
|
||||
class AccessibilityService : AccessibilityService() {
|
||||
|
||||
override fun onServiceConnected() {
|
||||
val serviceInfo = serviceInfo
|
||||
if (Pref.isStableModeEnabled) {
|
||||
serviceInfo.flags = serviceInfo.flags and AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS.inv()
|
||||
} else {
|
||||
serviceInfo.flags = serviceInfo.flags or AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
if (Pref.isGestureObservingEnabled) {
|
||||
serviceInfo.flags = serviceInfo.flags or AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE
|
||||
} else {
|
||||
serviceInfo.flags = serviceInfo.flags and AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE.inv()
|
||||
}
|
||||
}
|
||||
setServiceInfo(serviceInfo)
|
||||
super.onServiceConnected()
|
||||
|
||||
}
|
||||
}
|
||||
18
autojs/src/main/java/com/stardust/autojs/core/pref/Pref.kt
Normal file
18
autojs/src/main/java/com/stardust/autojs/core/pref/Pref.kt
Normal file
@@ -0,0 +1,18 @@
|
||||
package com.stardust.autojs.core.pref
|
||||
|
||||
import android.preference.PreferenceManager
|
||||
import com.stardust.app.GlobalAppContext
|
||||
|
||||
object Pref {
|
||||
private val preferences = PreferenceManager.getDefaultSharedPreferences(GlobalAppContext.get())
|
||||
|
||||
val isStableModeEnabled: Boolean
|
||||
get() {
|
||||
return preferences.getBoolean("key_stable_mode", false)
|
||||
}
|
||||
|
||||
val isGestureObservingEnabled: Boolean
|
||||
get() {
|
||||
return preferences.getBoolean("key_gesture_observing", false)
|
||||
}
|
||||
}
|
||||
@@ -126,7 +126,7 @@ public class RhinoJavaScriptEngine extends JavaScriptEngine {
|
||||
Collections.singletonList(new File("/").toURI()));
|
||||
new RequireBuilder()
|
||||
.setModuleScriptProvider(new SoftCachingModuleScriptProvider(provider))
|
||||
.setSandboxed(false)
|
||||
.setSandboxed(true)
|
||||
.createRequire(context, scope)
|
||||
.install(scope);
|
||||
|
||||
|
||||
@@ -7,7 +7,9 @@ import android.graphics.Point;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.provider.Settings;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import com.stardust.autojs.R;
|
||||
@@ -23,6 +25,7 @@ import com.stardust.notification.NotificationListenerService;
|
||||
import com.stardust.autojs.runtime.exception.ScriptException;
|
||||
import com.stardust.autojs.core.inputevent.InputEventObserver;
|
||||
import com.stardust.autojs.core.inputevent.TouchObserver;
|
||||
import com.stardust.util.MapBuilder;
|
||||
import com.stardust.view.accessibility.AccessibilityNotificationObserver;
|
||||
import com.stardust.view.accessibility.AccessibilityService;
|
||||
import com.stardust.view.accessibility.KeyInterceptor;
|
||||
@@ -30,16 +33,35 @@ import com.stardust.view.accessibility.NotificationListener;
|
||||
import com.stardust.view.accessibility.OnKeyListener;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/7/18.
|
||||
*/
|
||||
|
||||
public class Events extends EventEmitter implements OnKeyListener, TouchObserver.OnTouchEventListener, NotificationListener, AccessibilityNotificationObserver.ToastListener {
|
||||
public class Events extends EventEmitter implements OnKeyListener, TouchObserver.OnTouchEventListener, NotificationListener, AccessibilityNotificationObserver.ToastListener, AccessibilityService.GestureListener {
|
||||
|
||||
private static final String PREFIX_KEY_DOWN = "__key_down__#";
|
||||
private static final String PREFIX_KEY_UP = "__key_up__#";
|
||||
private static final Map<Integer, String> GESTURES = new MapBuilder<Integer, String>()
|
||||
.put(AccessibilityService.GESTURE_SWIPE_UP, "up")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_DOWN, "down")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_LEFT, "left")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_RIGHT, "right")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_LEFT_AND_RIGHT, "left_right")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_RIGHT_AND_LEFT, "right_left")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_UP_AND_DOWN, "up_down")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_DOWN_AND_UP, "down_up")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_LEFT_AND_UP, "left_up")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_LEFT_AND_DOWN, "left_down")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_RIGHT_AND_UP, "right_up")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_RIGHT_AND_DOWN, "right_down")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_UP_AND_LEFT, "up_left")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_UP_AND_RIGHT, "up_right")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_DOWN_AND_LEFT, "down_left")
|
||||
.put(AccessibilityService.GESTURE_SWIPE_DOWN_AND_RIGHT, "down_right")
|
||||
.build();
|
||||
|
||||
private AccessibilityBridge mAccessibilityBridge;
|
||||
private Context mContext;
|
||||
@@ -50,6 +72,7 @@ public class Events extends EventEmitter implements OnKeyListener, TouchObserver
|
||||
private Loopers mLoopers;
|
||||
private Handler mHandler;
|
||||
private boolean mListeningNotification = false;
|
||||
private boolean mListeningGesture = false;
|
||||
private boolean mListeningToast = false;
|
||||
private ScriptRuntime mScriptRuntime;
|
||||
private volatile boolean mInterceptsAllKey = false;
|
||||
@@ -222,6 +245,21 @@ public class Events extends EventEmitter implements OnKeyListener, TouchObserver
|
||||
mAccessibilityBridge.getNotificationObserver().addToastListener(this);
|
||||
}
|
||||
|
||||
public void observeGesture() {
|
||||
ScriptRuntime.requiresApi(Build.VERSION_CODES.O);
|
||||
if (mListeningGesture) {
|
||||
return;
|
||||
}
|
||||
AccessibilityService service = getAccessibilityService();
|
||||
if ((service.getServiceInfo().flags & AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE) == 0) {
|
||||
throw new ScriptException(mContext.getString(R.string.text_should_enable_gesture_observing));
|
||||
}
|
||||
service.getGestureEventDispatcher().addListener(this);
|
||||
ensureHandler();
|
||||
mLoopers.waitWhenIdle(true);
|
||||
mListeningGesture = true;
|
||||
}
|
||||
|
||||
public Events onNotification(Object listener) {
|
||||
on("notification", listener);
|
||||
return this;
|
||||
@@ -260,6 +298,12 @@ public class Events extends EventEmitter implements OnKeyListener, TouchObserver
|
||||
}
|
||||
mKeyInterceptor = null;
|
||||
}
|
||||
if (mListeningGesture) {
|
||||
AccessibilityService service = mAccessibilityBridge.getService();
|
||||
if (service != null) {
|
||||
service.getGestureEventDispatcher().removeListener(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -297,4 +341,13 @@ public class Events extends EventEmitter implements OnKeyListener, TouchObserver
|
||||
mHandler.post(() -> emit("toast", toast));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGesture(int gestureId) {
|
||||
mHandler.post(() -> {
|
||||
String gesture = GESTURES.get(gestureId);
|
||||
if (gesture != null) {
|
||||
emit("gesture", gesture);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<string name="text_accessibility_service_description">使脚本自动操作(点击、长按、滑动等)所需,若关闭则只能执行不涉及自动操作的脚本。</string>
|
||||
<string name="_app_name">AutoJs</string>
|
||||
<string name="text_should_enable_key_observing">按键监听未启用,请在软件设置中开启</string>
|
||||
<string name="text_should_enable_gesture_observing">手势监听未启用,请在软件设置中开启</string>
|
||||
<string name="no_write_settings_permissin">沒有修改系統设置权限</string>
|
||||
<string name="exception_notification_service_disabled">通知服务未运行,请重新启用通知权限</string>
|
||||
<string name="text_requires_app_version_to_run_the_script" formatted="true">本脚本需要Auto.js版本号%d以上才能运行</string>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
android:canPerformGestures="true"
|
||||
android:canRequestEnhancedWebAccessibility="true"
|
||||
android:canRequestFilterKeyEvents="true"
|
||||
android:canRequestTouchExplorationMode="true"
|
||||
android:canRetrieveWindowContent="true"
|
||||
android:description="@string/text_accessibility_service_description"
|
||||
android:notificationTimeout="0"/>
|
||||
Reference in New Issue
Block a user