Skip to content

Commit d948b26

Browse files
Prompt the user to enable accessibility to Termux API if not already done
1 parent 17a32f1 commit d948b26

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

app/src/main/java/com/termux/api/apis/AccessibilityAPI.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,28 @@
3131

3232
import 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+
3442
public 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

Comments
 (0)