3131
3232import android .content .ContentResolver ;
3333
34+ import android .provider .Settings ;
35+
36+ import android .view .accessibility .AccessibilityManager ;
37+ import android .accessibilityservice .AccessibilityServiceInfo ;
38+ import android .content .pm .ServiceInfo ;
39+ import java .util .List ;
40+ import android .accessibilityservice .AccessibilityService ;
41+
3442public class AccessibilityAPI {
3543
3644 private static final String LOG_TAG = "AccessibilityAPI" ;
3745
3846 public static void onReceive (TermuxApiReceiver apiReceiver , final Context context , Intent intent ) {
3947 Logger .logDebug (LOG_TAG , "onReceive" );
4048
49+ boolean isAccessibilityEnabled = isAccessibilityServiceEnabled (context , TermuxAccessibilityService .class );
50+ if (!isAccessibilityEnabled ) {
51+ Intent accessibilityIntent = new Intent (Settings .ACTION_ACCESSIBILITY_SETTINGS );
52+ accessibilityIntent .addFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
53+ context .startActivity (accessibilityIntent );
54+ }
55+
4156 ResultReturner .returnData (apiReceiver , intent , out -> {
4257 final ContentResolver contentResolver = context .getContentResolver ();
4358 if (intent .hasExtra ("dump" )) {
@@ -49,6 +64,20 @@ else if (intent.hasExtra("click")) {
4964 });
5065 }
5166
67+ // [The Stack Overflow answer 14923144](https://stackoverflow.com/a/14923144)
68+ public static boolean isAccessibilityServiceEnabled (Context context , Class <? extends AccessibilityService > service ) {
69+ AccessibilityManager am = (AccessibilityManager ) context .getSystemService (Context .ACCESSIBILITY_SERVICE );
70+ List <AccessibilityServiceInfo > enabledServices = am .getEnabledAccessibilityServiceList (AccessibilityServiceInfo .FEEDBACK_ALL_MASK );
71+
72+ for (AccessibilityServiceInfo enabledService : enabledServices ) {
73+ ServiceInfo enabledServiceInfo = enabledService .getResolveInfo ().serviceInfo ;
74+ if (enabledServiceInfo .packageName .equals (context .getPackageName ()) && enabledServiceInfo .name .equals (service .getName ()))
75+ return true ;
76+ }
77+
78+ return false ;
79+ }
80+
5281 private static void click (int x , int y ) {
5382 Path swipePath = new Path ();
5483 swipePath .moveTo (x , y );
0 commit comments