70 lines
2.7 KiB
Java
70 lines
2.7 KiB
Java
package com.stardust.view.accessibility;
|
|
|
|
import android.accessibilityservice.AccessibilityService;
|
|
import android.content.ComponentName;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.provider.Settings;
|
|
import android.text.TextUtils;
|
|
import android.widget.Toast;
|
|
|
|
import com.stardust.scriptdroid.App;
|
|
import com.stardust.scriptdroid.Pref;
|
|
import com.stardust.scriptdroid.R;
|
|
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
|
|
import com.stardust.scriptdroid.tool.Shell;
|
|
|
|
/**
|
|
* Created by Stardust on 2017/1/26.
|
|
*/
|
|
|
|
public class AccessibilityServiceUtils {
|
|
|
|
public static void goToAccessibilitySetting(Context context) {
|
|
if (Pref.isFirstGoToAccessibilitySetting()) {
|
|
Toast.makeText(context, context.getString(R.string.text_please_choose) + context.getString(R.string._app_name), Toast.LENGTH_LONG).show();
|
|
}
|
|
context.startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
|
}
|
|
|
|
public static boolean isAccessibilityServiceEnabled(Context context, Class<? extends AccessibilityService> accessibilityService) {
|
|
ComponentName expectedComponentName = new ComponentName(context, accessibilityService);
|
|
|
|
String enabledServicesSetting = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
|
|
if (enabledServicesSetting == null)
|
|
return false;
|
|
|
|
TextUtils.SimpleStringSplitter colonSplitter = new TextUtils.SimpleStringSplitter(':');
|
|
colonSplitter.setString(enabledServicesSetting);
|
|
|
|
while (colonSplitter.hasNext()) {
|
|
String componentNameString = colonSplitter.next();
|
|
ComponentName enabledService = ComponentName.unflattenFromString(componentNameString);
|
|
|
|
if (enabledService != null && enabledService.equals(expectedComponentName))
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static boolean enableAccessibilityServiceByRootAndWaitFor(Context context, Class<? extends AccessibilityService> accessibilityService, long timeout) {
|
|
Shell.execCommand("settings put secure enabled_accessibility_services %accessibility:"
|
|
+ context.getPackageName() + "/" + accessibilityService.getName(), true);
|
|
long millis = System.currentTimeMillis();
|
|
while (true) {
|
|
if (isAccessibilityServiceEnabled(context, accessibilityService))
|
|
return true;
|
|
try {
|
|
Thread.sleep(300);
|
|
} catch (InterruptedException e) {
|
|
e.printStackTrace();
|
|
}
|
|
if (System.currentTimeMillis() - millis >= timeout) {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|