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 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 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; } } } }