Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec352ceb authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Link from accessibility usage dialog to individual service."

parents 8c9ce8b1 fa7cdc11
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
    <uses-permission android:name="android.permission.REQUEST_INCIDENT_REPORT_APPROVAL" />
    <uses-permission android:name="android.permission.APPROVE_INCIDENT_REPORTS" />
    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
    <uses-permission android:name="android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS" />

    <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28" />

+27 −9
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@ package com.android.packageinstaller.permission.ui;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
@@ -54,20 +56,26 @@ public final class ReviewAccessibilityServicesActivity extends FragmentActivity
            return;
        }

        AccessibilityManager accessibilityManager = getSystemService(
                AccessibilityManager.class);
        List<AccessibilityServiceInfo> services = accessibilityManager
                .getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);

        new AlertDialog.Builder(this)
                .setView(createDialogView())
                .setView(createDialogView(services))
                .setPositiveButton(R.string.ok, null)
                .setNeutralButton(R.string.settings, (dialog, which) ->
                        startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)))
                .setNeutralButton(R.string.settings, (dialog, which) -> {
                    if (services.size() == 1) {
                        startAccessibilityScreen(services.get(0).getResolveInfo().serviceInfo);
                    } else {
                        startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));
                    }
                })
                .setOnDismissListener((dialog) -> finish())
                .show();
    }

    private @NonNull View createDialogView() {
        AccessibilityManager accessibilityManager = getSystemService(
                AccessibilityManager.class);
        List<AccessibilityServiceInfo> services = accessibilityManager
                .getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
    private @NonNull View createDialogView(List<AccessibilityServiceInfo> services) {
        AppOpsManager appOpsManager = getSystemService(AppOpsManager.class);

        LayoutInflater layoutInflater = LayoutInflater.from(this);
@@ -76,7 +84,8 @@ public final class ReviewAccessibilityServicesActivity extends FragmentActivity
        int numServices = services.size();
        for (int i = 0; i < numServices; i++) {
            ResolveInfo resolveInfo = services.get(i).getResolveInfo();
            ApplicationInfo appInfo = resolveInfo.serviceInfo.applicationInfo;
            ServiceInfo serviceInfo = resolveInfo.serviceInfo;
            ApplicationInfo appInfo = serviceInfo.applicationInfo;
            CharSequence label = getLabel(resolveInfo);
            long lastAccessTime = getLastAccessTime(appInfo, appOpsManager);

@@ -123,6 +132,8 @@ public final class ReviewAccessibilityServicesActivity extends FragmentActivity
                                    Utils.getAbsoluteTimeString(this, lastAccessTime)));
                }

                itemView.setOnClickListener((v) -> startAccessibilityScreen(serviceInfo));

                servicesListView.addView(itemView);
            }
        }
@@ -130,6 +141,13 @@ public final class ReviewAccessibilityServicesActivity extends FragmentActivity
        return view;
    }

    private void startAccessibilityScreen(ServiceInfo serviceInfo) {
        Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_DETAILS_SETTINGS);
        intent.putExtra(Intent.EXTRA_COMPONENT_NAME,
                new ComponentName(serviceInfo.packageName, serviceInfo.name).flattenToString());
        startActivity(intent);
    }

    private @NonNull CharSequence getLabel(@NonNull ResolveInfo resolveInfo) {
        return BidiFormatter.getInstance().unicodeWrap(
                TextUtils.makeSafeForPresentation(