diff --git a/app/src/main/assets/help/documentation/图片与图色处理.md b/app/src/main/assets/help/documentation/图片与图色处理.md index e370f366..93a53379 100644 --- a/app/src/main/assets/help/documentation/图片与图色处理.md +++ b/app/src/main/assets/help/documentation/图片与图色处理.md @@ -47,7 +47,7 @@ images是图片与图色处理的工具。包括获取图片某点颜色,保 * 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) diff --git a/app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md b/app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md index 722898a4..26d4a53a 100644 --- a/app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md +++ b/app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md @@ -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() 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 2b017c34..f5e0bb0c 100644 --- a/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java +++ b/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java @@ -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 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() { diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/common/ProgressDialog.java b/app/src/main/java/com/stardust/scriptdroid/ui/common/ProgressDialog.java new file mode 100644 index 00000000..f7fe0413 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/common/ProgressDialog.java @@ -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(); + } + +} 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 c98d92a8..a4f324d9 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 @@ -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()) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 517fee27..191ae18b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -209,6 +209,8 @@ 放弃录制 布局抓取失败,请关闭悬浮窗后动一下页面重试 没有相应,要强制停止吗 + 使用root权限开启失败 + 处理中 diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java index dacce47b..e10d8b4f 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java @@ -2,7 +2,8 @@ package com.stardust.autojs.runtime.api; import android.support.annotation.NonNull; -import com.stardust.autojs.runtime.ScriptStopException; + +import com.stardust.autojs.runtime.ScriptException; import java.util.ArrayList; import java.util.HashMap; @@ -38,7 +39,7 @@ public class EventEmitter { private void ensureListenersNotAtLimit() { if (mMaxListeners != 0 && mListenersMap.size() >= mMaxListeners) { - throw new ScriptStopException(new TooManyListenersException("max = " + mMaxListeners)); + throw new ScriptException(new TooManyListenersException("max = " + mMaxListeners)); } } 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 36c533f7..97356ab6 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 @@ -8,7 +8,7 @@ import android.util.SparseArray; import android.view.KeyEvent; import com.stardust.autojs.runtime.AccessibilityBridge; -import com.stardust.autojs.runtime.ScriptStopException; +import com.stardust.autojs.runtime.ScriptException; import com.stardust.autojs.runtime.record.inputevent.TouchObserver; import com.stardust.view.accessibility.AccessibilityService; import com.stardust.view.accessibility.OnKeyListener; @@ -53,12 +53,12 @@ public class Events extends EventEmitter implements OnKeyListener, TouchObserver mAccessibilityBridge.ensureServiceEnabled(); AccessibilityService service = mAccessibilityBridge.getService(); if (service == null) - throw new ScriptStopException(); + throw new ScriptException(); service.getOnKeyObserver().addListener(this); } private void ensureHandler() { - if(mHandler == null){ + if (mHandler == null) { mHandler = new Handler(); } } diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Loopers.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Loopers.java index e0676af4..e64b0ec4 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Loopers.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Loopers.java @@ -82,7 +82,7 @@ public class Loopers { } public static void prepare() { - if(Looper.myLooper() == Looper.getMainLooper()) + if (Looper.myLooper() == Looper.getMainLooper()) return; if (Looper.myLooper() == null) Looper.prepare(); 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 2c373246..7d9170dc 100644 --- a/automator/src/main/java/com/stardust/view/accessibility/AccessibilityService.java +++ b/automator/src/main/java/com/stardust/view/accessibility/AccessibilityService.java @@ -150,12 +150,15 @@ public class AccessibilityService extends android.accessibilityservice.Accessibi return false; } - public static void waitForEnabled(long timeOut) { + public static boolean waitForEnabled(long timeOut) { + if (instance != null) + return true; LOCK.lock(); try { - ENABLED.await(timeOut, TimeUnit.MILLISECONDS); + return ENABLED.await(timeOut, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { e.printStackTrace(); + return false; } finally { LOCK.unlock(); }