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

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

Merge "Indicate when accessibility services have stopped" into pi-dev

parents f9dade02 6cd554f3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -4434,6 +4434,10 @@
    <string name="accessibility_summary_state_enabled">On</string>
    <!-- Preference's state when disabled. -->
    <string name="accessibility_summary_state_disabled">Off</string>
    <!-- Accessibility service's preference's state when enabled but not running (like maybe it crashed). -->
    <string name="accessibility_summary_state_stopped">Not working. Tap for info.</string>
    <!-- Accessibility service's description when enabled but not running (like maybe it crashed). -->
    <string name="accessibility_description_state_stopped">This service is malfunctioning.</string>
    <!-- Title for the preference to show a tile for a particular feature in the Quick Settings pane. [CHAR LIMIT=NONE] -->
    <string name="enable_quick_setting">Show in Quick Settings</string>
+35 −29
Original line number Diff line number Diff line
@@ -211,7 +211,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
    private SwitchPreference mToggleDisableAnimationsPreference;
    private SwitchPreference mToggleMasterMonoPreference;
    private ListPreference mSelectLongPressTimeoutPreference;
    private Preference mNoServicesMessagePreference;
    private Preference mCaptioningPreferenceScreen;
    private Preference mDisplayMagnificationPreferenceScreen;
    private Preference mFontSizePreferenceScreen;
@@ -495,12 +494,12 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements

        List<AccessibilityServiceInfo> installedServices =
                accessibilityManager.getInstalledAccessibilityServiceList();
        List<AccessibilityServiceInfo> enabledServiceInfos = accessibilityManager
                .getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
        Set<ComponentName> enabledServices = AccessibilityUtils.getEnabledServicesFromSettings(
                getActivity());
        List<String> permittedServices = mDpm.getPermittedAccessibilityServices(
                UserHandle.myUserId());
        final boolean accessibilityEnabled = Settings.Secure.getInt(getContentResolver(),
                Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1;

        PreferenceCategory downloadedServicesCategory =
                mCategoryToPrefCategoryMap.get(CATEGORY_DOWNLOADED_SERVICES);
@@ -513,7 +512,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
            final AccessibilityServiceInfo info = installedServices.get(i);
            final ResolveInfo resolveInfo = info.getResolveInfo();

            RestrictedPreference preference =
            final RestrictedPreference preference =
                    new RestrictedPreference(downloadedServicesCategory.getContext());
            final String title = resolveInfo.loadLabel(getPackageManager()).toString();

@@ -524,16 +523,26 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
                icon = resolveInfo.loadIcon(getPackageManager());
            }

            ServiceInfo serviceInfo = resolveInfo.serviceInfo;
            String packageName = serviceInfo.packageName;
            ComponentName componentName = new ComponentName(packageName, serviceInfo.name);
            final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
            final String packageName = serviceInfo.packageName;
            final ComponentName componentName = new ComponentName(packageName, serviceInfo.name);

            preference.setKey(componentName.flattenToString());

            preference.setTitle(title);
            Utils.setSafeIcon(preference, icon);
            final boolean serviceEnabled = accessibilityEnabled
                    && enabledServices.contains(componentName);
            final boolean serviceEnabled = enabledServices.contains(componentName);
            String description = info.loadDescription(getPackageManager());
            if (TextUtils.isEmpty(description)) {
                description = getString(R.string.accessibility_service_default_description);
            }

            if (serviceEnabled && AccessibilityUtils.hasServiceCrashed(
                    packageName, serviceInfo.name, enabledServiceInfos)) {
                // Update the summaries for services that have crashed.
                preference.setSummary(R.string.accessibility_summary_state_stopped);
                description = getString(R.string.accessibility_description_state_stopped);
            } else {
                final String serviceState = serviceEnabled ?
                        getString(R.string.accessibility_summary_state_enabled) :
                        getString(R.string.accessibility_summary_state_disabled);
@@ -543,12 +552,14 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
                        serviceState, serviceSummary);
                preference.setSummary((TextUtils.isEmpty(serviceSummary)) ? serviceState
                        : stateSummaryCombo);
            }

            // Disable all accessibility services that are not permitted.
            boolean serviceAllowed =
            final boolean serviceAllowed =
                    permittedServices == null || permittedServices.contains(packageName);
            if (!serviceAllowed && !serviceEnabled) {
                EnforcedAdmin admin = RestrictedLockUtils.checkIfAccessibilityServiceDisallowed(
                final EnforcedAdmin admin =
                        RestrictedLockUtils.checkIfAccessibilityServiceDisallowed(
                                getActivity(), packageName, UserHandle.myUserId());
                if (admin != null) {
                    preference.setDisabledByAdmin(admin);
@@ -562,19 +573,14 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
            preference.setFragment(ToggleAccessibilityServicePreferenceFragment.class.getName());
            preference.setPersistent(true);

            Bundle extras = preference.getExtras();
            final Bundle extras = preference.getExtras();
            extras.putString(EXTRA_PREFERENCE_KEY, preference.getKey());
            extras.putBoolean(EXTRA_CHECKED, serviceEnabled);
            extras.putString(EXTRA_TITLE, title);
            extras.putParcelable(EXTRA_RESOLVE_INFO, resolveInfo);

            String description = info.loadDescription(getPackageManager());
            if (TextUtils.isEmpty(description)) {
                description = getString(R.string.accessibility_service_default_description);
            }
            extras.putString(EXTRA_SUMMARY, description);

            String settingsClassName = info.getSettingsActivityName();
            final String settingsClassName = info.getSettingsActivityName();
            if (!TextUtils.isEmpty(settingsClassName)) {
                extras.putString(EXTRA_SETTINGS_TITLE,
                        getString(R.string.accessibility_menu_item_settings));
@@ -595,7 +601,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements

        // If the user has not installed any additional services, hide the category.
        if (downloadedServicesCategory.getPreferenceCount() == 0) {
            PreferenceScreen screen = getPreferenceScreen();
            final PreferenceScreen screen = getPreferenceScreen();
            screen.removePreference(downloadedServicesCategory);
        }
    }