From 405075757e318c7b362d1a67398bef00da7cd447 Mon Sep 17 00:00:00 2001
From: hyb1996 <946994919@qq.com>
Date: Mon, 14 Aug 2017 21:23:07 +0800
Subject: [PATCH] add: stable mode for AccessibilityService
---
app/src/main/AndroidManifest.xml | 13 ++++++++++
.../java/com/stardust/scriptdroid/Pref.java | 9 +++++++
.../accessibility/AccessibilityService.java | 25 +++++++++++++++++++
.../stardust/scriptdroid/autojs/AutoJs.java | 2 +-
.../tool/AccessibilityServiceTool.java | 18 +++++++------
.../scriptdroid/ui/main/MainActivity.java | 2 +-
.../scriptdroid/ui/main/SideMenuFragment.java | 4 +--
app/src/main/res/values/strings.xml | 6 +++++
app/src/main/res/xml/preferences.xml | 7 ++++++
autojs/src/main/AndroidManifest.xml | 11 --------
.../stardust/autojs/runtime/api/Events.java | 11 +++++---
autojs/src/main/res/values/strings.xml | 1 +
.../accessibility/AccessibilityService.java | 4 ---
13 files changed, 83 insertions(+), 30 deletions(-)
create mode 100644 app/src/main/java/com/stardust/scriptdroid/accessibility/AccessibilityService.java
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 48bcd78d..d699b9ca 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -247,6 +247,19 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/stardust/scriptdroid/Pref.java b/app/src/main/java/com/stardust/scriptdroid/Pref.java
index f6f08258..861303df 100644
--- a/app/src/main/java/com/stardust/scriptdroid/Pref.java
+++ b/app/src/main/java/com/stardust/scriptdroid/Pref.java
@@ -133,4 +133,13 @@ public class Pref {
return def().getString(getString(R.string.key_root_record_out_file_type), "binary")
.equals("binary");
}
+
+ public static boolean isObservingKeyEnabled() {
+ return def().getBoolean(getString(R.string.key_enable_observe_key), false);
+ }
+
+ public static boolean isStableModeEnabled() {
+ return def().getBoolean(getString(R.string.key_stable_mode), false);
+ }
+
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/accessibility/AccessibilityService.java b/app/src/main/java/com/stardust/scriptdroid/accessibility/AccessibilityService.java
new file mode 100644
index 00000000..4d311022
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/accessibility/AccessibilityService.java
@@ -0,0 +1,25 @@
+package com.stardust.scriptdroid.accessibility;
+
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+
+import com.stardust.scriptdroid.Pref;
+
+/**
+ * Created by Stardust on 2017/8/14.
+ */
+
+public class AccessibilityService extends com.stardust.view.accessibility.AccessibilityService {
+
+ @Override
+ protected void onServiceConnected() {
+ AccessibilityServiceInfo serviceInfo = getServiceInfo();
+ if (Pref.isStableModeEnabled()) {
+ serviceInfo.flags &= ~AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
+ } else {
+ serviceInfo.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
+ }
+ setServiceInfo(serviceInfo);
+ super.onServiceConnected();
+ }
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java
index be11468e..4e9a4fb3 100644
--- a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java
+++ b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java
@@ -182,7 +182,7 @@ public class AutoJs {
public void ensureAccessibilityServiceEnabled() {
if (AccessibilityService.getInstance() == null) {
String errorMessage = null;
- if (AccessibilityServiceUtils.isAccessibilityServiceEnabled(App.getApp(), AccessibilityService.class)) {
+ if (AccessibilityServiceTool.isAccessibilityServiceEnabled(App.getApp())) {
errorMessage = App.getApp().getString(R.string.text_auto_operate_service_enabled_but_not_running);
} else {
if (Pref.enableAccessibilityServiceByRoot()) {
diff --git a/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java b/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java
index f5e0bb0c..91f159da 100644
--- a/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java
+++ b/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java
@@ -3,16 +3,12 @@ package com.stardust.scriptdroid.tool;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.text.TextUtils;
-import android.widget.Toast;
-import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.scriptdroid.Pref;
-import com.stardust.scriptdroid.autojs.AutoJs;
-import com.stardust.util.UiHandler;
-import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.R;
import com.stardust.autojs.runtime.api.ProcessShell;
+import com.stardust.scriptdroid.accessibility.AccessibilityService;
import com.stardust.view.accessibility.AccessibilityServiceUtils;
import java.util.Locale;
@@ -23,9 +19,11 @@ import java.util.Locale;
public class AccessibilityServiceTool {
+ private static final Class sAccessibilityServiceClass = AccessibilityService.class;
+
public static void enableAccessibilityService() {
if (Pref.enableAccessibilityServiceByRoot()) {
- if (!enableAccessibilityServiceByRoot(AccessibilityService.class)) {
+ if (!enableAccessibilityServiceByRoot(sAccessibilityServiceClass)) {
goToAccessibilitySetting();
}
} else {
@@ -62,7 +60,7 @@ public class AccessibilityServiceTool {
}
public static boolean enableAccessibilityServiceByRootAndWaitFor(long timeOut) {
- if (enableAccessibilityServiceByRoot(AccessibilityService.class)) {
+ if (enableAccessibilityServiceByRoot(sAccessibilityServiceClass)) {
return AccessibilityService.waitForEnabled(timeOut);
}
return false;
@@ -71,7 +69,11 @@ public class AccessibilityServiceTool {
public static void enableAccessibilityServiceByRootIfNeeded() {
if (AccessibilityService.getInstance() == null)
if (Pref.enableAccessibilityServiceByRoot()) {
- AccessibilityServiceTool.enableAccessibilityServiceByRoot(AccessibilityService.class);
+ AccessibilityServiceTool.enableAccessibilityServiceByRoot(sAccessibilityServiceClass);
}
}
+
+ public static boolean isAccessibilityServiceEnabled(Context context) {
+ return AccessibilityServiceUtils.isAccessibilityServiceEnabled(context, sAccessibilityServiceClass);
+ }
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java
index 5c2d16d3..4895be0a 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java
@@ -153,7 +153,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
}
private void showAccessibilitySettingPromptIfDisabled() {
- if (!AccessibilityServiceUtils.isAccessibilityServiceEnabled(this, AccessibilityService.class)) {
+ if (!AccessibilityServiceTool.isAccessibilityServiceEnabled(this)) {
new NotAskAgainDialog.Builder(this, "Eating...love you...miss you...17.4.12")
.title(R.string.text_need_to_enable_accessibility_service)
.content(R.string.explain_accessibility_permission)
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java
index 5cf13a4c..7608062c 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java
@@ -83,7 +83,7 @@ public class SideMenuFragment extends android.support.v4.app.Fragment {
if (mAccessibilityServiceSwitch == null) {
return;
}
- final boolean checked = AccessibilityService.isEnabled(App.getApp());
+ final boolean checked = AccessibilityServiceTool.isAccessibilityServiceEnabled(App.getApp());
mAccessibilityServiceSwitch.post(new Runnable() {
@Override
public void run() {
@@ -118,7 +118,7 @@ public class SideMenuFragment extends android.support.v4.app.Fragment {
@CheckedChange(R.id.sw_accessibility_service)
void setAutoOperateServiceEnable(CompoundButton button, boolean enable) {
- boolean isAccessibilityServiceEnabled = AccessibilityService.isEnabled(App.getApp());
+ boolean isAccessibilityServiceEnabled = AccessibilityServiceTool.isAccessibilityServiceEnabled(App.getApp());
if (enable && !isAccessibilityServiceEnabled) {
enableAccessibilityService();
} else if (!enable && isAccessibilityServiceEnabled) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 334c2299..d3621d45 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -221,6 +221,12 @@
key_root_record_out_file_type
Root录制生成文件类型
binary
+ key_stable_mode
+ 开启后布局分析更稳定,但小部分脚本可能无法正常运行。重启无障碍服务生效
+ 稳定模式
+ key_enable_observe_key
+ 不启动则无法使用events的按键事件; 启用后软件崩溃等情况会造成按键失灵。重启无障碍服务生效
+ 启用按键监听
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 9abf3076..619146a2 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -58,6 +58,13 @@
android:key="@string/key_enable_accessibility_service_by_root"
android:summary="@string/summary_enable_accessibility_service_by_root"
android:title="@string/text_enable_accessibility_service_by_root"/>
+
+
+
diff --git a/autojs/src/main/AndroidManifest.xml b/autojs/src/main/AndroidManifest.xml
index ed63e9a6..2c32768d 100644
--- a/autojs/src/main/AndroidManifest.xml
+++ b/autojs/src/main/AndroidManifest.xml
@@ -7,18 +7,7 @@
>
-
-
-
-
-
-
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 8db25df6..fe436072 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
@@ -1,5 +1,6 @@
package com.stardust.autojs.runtime.api;
+import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Notification;
import android.content.Context;
import android.graphics.Point;
@@ -7,6 +8,7 @@ import android.os.Handler;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityEvent;
+import com.stardust.autojs.R;
import com.stardust.autojs.core.accessibility.AccessibilityBridge;
import com.stardust.autojs.runtime.ScriptBridges;
import com.stardust.autojs.runtime.exception.ScriptException;
@@ -49,13 +51,16 @@ public class Events extends EventEmitter implements OnKeyListener, TouchObserver
public void observeKey() {
if (mListeningKey)
return;
+ AccessibilityService service = mAccessibilityBridge.getService();
+ if (service == null)
+ throw new ScriptException("AccessibilityService = null");
+ if ((service.getServiceInfo().flags & AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS) == 0) {
+ throw new ScriptException(mContext.getString(R.string.text_should_enable_key_observing));
+ }
ensureHandler();
mLoopers.waitWhenIdle(true);
mListeningKey = true;
mAccessibilityBridge.ensureServiceEnabled();
- AccessibilityService service = mAccessibilityBridge.getService();
- if (service == null)
- throw new ScriptException();
service.getOnKeyObserver().addListener(this);
}
diff --git a/autojs/src/main/res/values/strings.xml b/autojs/src/main/res/values/strings.xml
index 0f292bdb..e69468de 100644
--- a/autojs/src/main/res/values/strings.xml
+++ b/autojs/src/main/res/values/strings.xml
@@ -14,6 +14,7 @@
没有悬浮窗权限
使脚本自动操作(点击、长按、滑动等)所需,若关闭则只能执行不涉及自动操作的脚本。
AutoJs
+ 按键监听未启用,请在软件设置中开启
diff --git a/automator/src/main/java/com/stardust/view/accessibility/AccessibilityService.java b/automator/src/main/java/com/stardust/view/accessibility/AccessibilityService.java
index 7d9170dc..6b16b4c8 100644
--- a/automator/src/main/java/com/stardust/view/accessibility/AccessibilityService.java
+++ b/automator/src/main/java/com/stardust/view/accessibility/AccessibilityService.java
@@ -52,10 +52,6 @@ public class AccessibilityService extends android.accessibilityservice.Accessibi
eventTypes.addAll(set);
}
- public static boolean isEnabled(Context context) {
- return AccessibilityServiceUtils.isAccessibilityServiceEnabled(context, AccessibilityService.class);
- }
-
public static AccessibilityService getInstance() {
return instance;
}