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

@@ -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()) {