fix: lag when accessibility service switch toggled

This commit is contained in:
hyb1996
2017-07-31 21:28:13 +08:00
parent 6307d3aa96
commit f51d791d98
10 changed files with 75 additions and 14 deletions

View File

@@ -47,7 +47,7 @@ images是图片与图色处理的工具。包括获取图片某点颜色
* y \<y\> 要获取的像素的纵坐标。
返回图片image在点(x, y)处的像素的ARGB值。
该值的格式为0xAARRGGBB。也就是如果`var argb = images.pixel(image, x, y)`,那么可以通过`(argb & 0xFF000000) >> 24`获取透明度,通过`(argb & 0xFF0000) >> 16`获取R值通过`(argb & 0xFF000000) >> 24`获取G值等或者通过`images.alpha(argb)`, `images.red(argb)`等获取。
该值的格式为0xAARRGGBB。也就是如果`var argb = images.pixel(image, x, y)`,那么可以通过`(argb & 0xFF000000) >> 24`获取透明度,通过`(argb & 0xFF0000) >> 16`获取R值通过`(argb & 0xFF000000) >> 24`获取G值等或者通过`colors.alpha(argb)`, `colors.red(argb)`等获取。
### images.saveImage(image, path)

View File

@@ -6,7 +6,7 @@
### Tap(x, y)
点击位置(x, y), 您可以通过"开发者选项"开启指针位置来确定点击坐标。
### Swipe(x1, y1, x2, y2)
### Swipe(x1, y1, x2, y2, \[delay\])
滑动。从(x1, y1)位置滑动到(x2, y2)位置。
### Home()

View File

@@ -53,7 +53,8 @@ public class AccessibilityServiceTool {
"else\n" +
"enabled=$pkg:$enabled\n" +
"settings put secure enabled_accessibility_services $enabled\n" +
"fi";
"fi\n" +
"settings put secure accessibility_enabled 1";
public static boolean enableAccessibilityServiceByRoot(Class<? extends android.accessibilityservice.AccessibilityService> accessibilityService) {
String serviceName = App.getApp().getPackageName() + "/" + accessibilityService.getName();
@@ -62,9 +63,9 @@ public class AccessibilityServiceTool {
public static boolean enableAccessibilityServiceByRootAndWaitFor(long timeOut) {
if (enableAccessibilityServiceByRoot(AccessibilityService.class)) {
AccessibilityService.waitForEnabled(timeOut);
return AccessibilityService.waitForEnabled(timeOut);
}
return true;
return false;
}
public static void enableAccessibilityServiceByRootIfNeeded() {

View File

@@ -0,0 +1,28 @@
package com.stardust.scriptdroid.ui.common;
import android.content.Context;
import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.scriptdroid.R;
/**
* Created by Stardust on 2017/7/31.
*/
public class ProgressDialog {
private MaterialDialog mDialog;
public ProgressDialog(Context context) {
mDialog = new MaterialDialog.Builder(context)
.progress(true, 0)
.cancelable(false)
.content(R.string.text_on_progress)
.show();
}
public void dismiss() {
mDialog.dismiss();
}
}

View File

@@ -8,6 +8,7 @@ import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentActivity;
import android.support.v7.widget.SwitchCompat;
import android.widget.CompoundButton;
import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
@@ -17,6 +18,7 @@ import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.external.floatingwindow.HoverMenuManger;
import com.stardust.scriptdroid.external.floatingwindow.menu.HoverMenuService;
import com.stardust.scriptdroid.ui.common.ProgressDialog;
import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.scriptdroid.sublime.SublimePluginClient;
import com.stardust.scriptdroid.sublime.SublimePluginService;
@@ -117,7 +119,7 @@ public class SideMenuFragment extends android.support.v4.app.Fragment {
void setAutoOperateServiceEnable(CompoundButton button, boolean enable) {
boolean isAccessibilityServiceEnabled = AccessibilityService.isEnabled(App.getApp());
if (enable && !isAccessibilityServiceEnabled) {
AccessibilityServiceTool.enableAccessibilityService();
enableAccessibilityService();
} else if (!enable && isAccessibilityServiceEnabled) {
if (!AccessibilityService.disable()) {
AccessibilityServiceTool.goToAccessibilitySetting();
@@ -125,6 +127,30 @@ public class SideMenuFragment extends android.support.v4.app.Fragment {
}
}
private void enableAccessibilityService() {
if (!Pref.enableAccessibilityServiceByRoot()) {
AccessibilityServiceTool.goToAccessibilitySetting();
return;
}
final ProgressDialog progress = new ProgressDialog(getContext());
UnderuseExecutors.execute(new Runnable() {
@Override
public void run() {
final boolean succeed = AccessibilityServiceTool.enableAccessibilityServiceByRootAndWaitFor(4000);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (!succeed) {
Toast.makeText(getContext(), R.string.text_enable_accessibitliy_service_by_root_failed, Toast.LENGTH_SHORT).show();
AccessibilityServiceTool.goToAccessibilitySetting();
}
progress.dismiss();
}
});
}
});
}
@CheckedChange(R.id.sw_floating_window)
void setFloatingWindowEnable(CompoundButton button, boolean enable) {
if (enable && !HoverMenuManger.isHoverMenuShowing()) {

View File

@@ -209,6 +209,8 @@
<string name="text_discard_record">放弃录制</string>
<string name="text_inspect_failed">布局抓取失败,请关闭悬浮窗后动一下页面重试</string>
<string name="script_anr">没有相应,要强制停止吗</string>
<string name="text_enable_accessibitliy_service_by_root_failed">使用root权限开启失败</string>
<string name="text_on_progress">处理中</string>
<string-array name="record_control_keys">