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

Commit fdfd0d85 authored by alanv's avatar alanv
Browse files

Only inject accessibility when speaking service enabled.

Bug: 6922883
Change-Id: I48d03a2da9bcf7375156c84219802bf20af4ddc6
parent 6624afe3
Loading
Loading
Loading
Loading
+23 −9
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.webkit;

import android.accessibilityservice.AccessibilityServiceInfo;
import android.animation.ObjectAnimator;
import android.annotation.Widget;
import android.app.ActivityManager;
@@ -1743,8 +1744,21 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
        event.setMaxScrollY(Math.max(convertedContentHeight - adjustedViewHeight, 0));
    }

    private boolean isAccessibilityEnabled() {
        return AccessibilityManager.getInstance(mContext).isEnabled();
    private boolean isAccessibilityInjectionEnabled() {
        final AccessibilityManager manager = AccessibilityManager.getInstance(mContext);
        if (!manager.isEnabled()) {
            return false;
        }

        // Accessibility scripts should be injected only when a speaking service
        // is enabled. This may need to change later to accommodate Braille.
        final List<AccessibilityServiceInfo> services = manager.getEnabledAccessibilityServiceList(
                AccessibilityServiceInfo.FEEDBACK_SPOKEN);
        if (services.isEmpty()) {
            return false;
        }

        return true;
    }

    private AccessibilityInjector getAccessibilityInjector() {
@@ -3930,7 +3944,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc

        // reset the flag since we set to true in if need after
        // loading is see onPageFinished(Url)
        if (isAccessibilityEnabled()) {
        if (isAccessibilityInjectionEnabled()) {
            getAccessibilityInjector().onPageStarted(url);
        }

@@ -3945,7 +3959,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
    /* package */ void onPageFinished(String url) {
        mZoomManager.onPageFinished(url);

        if (isAccessibilityEnabled()) {
        if (isAccessibilityInjectionEnabled()) {
            getAccessibilityInjector().onPageFinished(url);
        }
    }
@@ -4986,7 +5000,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
        }

        // See if the accessibility injector needs to handle this event.
        if (isAccessibilityEnabled()
        if (isAccessibilityInjectionEnabled()
                && getAccessibilityInjector().handleKeyEventIfNecessary(event)) {
            return true;
        }
@@ -5093,7 +5107,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
        }

        // See if the accessibility injector needs to handle this event.
        if (isAccessibilityEnabled()
        if (isAccessibilityInjectionEnabled()
                && getAccessibilityInjector().handleKeyEventIfNecessary(event)) {
            return true;
        }
@@ -5344,7 +5358,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
    public void onAttachedToWindow() {
        if (mWebView.hasWindowFocus()) setActive(true);

        if (isAccessibilityEnabled()) {
        if (isAccessibilityInjectionEnabled()) {
            getAccessibilityInjector().addAccessibilityApisIfNecessary();
        }

@@ -5357,7 +5371,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
        mZoomManager.dismissZoomPicker();
        if (mWebView.hasWindowFocus()) setActive(false);

        if (isAccessibilityEnabled()) {
        if (isAccessibilityInjectionEnabled()) {
            getAccessibilityInjector().removeAccessibilityApisIfNecessary();
        } else {
            // Ensure the injector is cleared if we're detaching from the window
@@ -7439,7 +7453,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                    break;

                case SELECTION_STRING_CHANGED:
                    if (isAccessibilityEnabled()) {
                    if (isAccessibilityInjectionEnabled()) {
                        getAccessibilityInjector()
                                .handleSelectionChangedIfNecessary((String) msg.obj);
                    }