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

Commit 06a9fdc4 authored by John Spurlock's avatar John Spurlock Committed by Android (Google) Code Review
Browse files

Merge "A11y: Use a backstop dialog timeout when a11y is enabled." into mnc-dev

parents c2b40926 f09838be
Loading
Loading
Loading
Loading
+16 −16
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.volume;
package com.android.systemui.volume;


import static android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
import static android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
import static android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_GENERIC;


import android.accessibilityservice.AccessibilityServiceInfo;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.animation.LayoutTransition;
import android.animation.LayoutTransition;
@@ -422,17 +423,15 @@ public class VolumeDialog {


    protected void rescheduleTimeoutH() {
    protected void rescheduleTimeoutH() {
        mHandler.removeMessages(H.DISMISS);
        mHandler.removeMessages(H.DISMISS);
        int timeout = -1;
        final int timeout = computeTimeoutH();
        if (!mAccessibility.mFeedbackEnabled) {
            timeout = computeTimeoutH();
        mHandler.sendMessageDelayed(mHandler
        mHandler.sendMessageDelayed(mHandler
                .obtainMessage(H.DISMISS, Events.DISMISS_REASON_TIMEOUT, 0), timeout);
                .obtainMessage(H.DISMISS, Events.DISMISS_REASON_TIMEOUT, 0), timeout);
        }
        if (D.BUG) Log.d(TAG, "rescheduleTimeout " + timeout + " " + Debug.getCaller());
        if (D.BUG) Log.d(TAG, "rescheduleTimeout " + timeout + " " + Debug.getCaller());
        mController.userActivity();
        mController.userActivity();
    }
    }


    private int computeTimeoutH() {
    private int computeTimeoutH() {
        if (mAccessibility.mFeedbackEnabled) return 20000;
        if (mSafetyWarning != null) return 5000;
        if (mSafetyWarning != null) return 5000;
        if (mExpanded || mExpanding) return 5000;
        if (mExpanded || mExpanding) return 5000;
        if (mActiveStream == AudioManager.STREAM_MUSIC) return 1500;
        if (mActiveStream == AudioManager.STREAM_MUSIC) return 1500;
@@ -959,7 +958,7 @@ public class VolumeDialog {
        }
        }
    }
    }


    private final class Accessibility {
    private final class Accessibility extends AccessibilityDelegate {
        private AccessibilityManager mMgr;
        private AccessibilityManager mMgr;
        private boolean mFeedbackEnabled;
        private boolean mFeedbackEnabled;


@@ -976,14 +975,7 @@ public class VolumeDialog {
                    updateFeedbackEnabled();
                    updateFeedbackEnabled();
                }
                }
            });
            });
            mDialogView.setAccessibilityDelegate(new AccessibilityDelegate() {
            mDialogView.setAccessibilityDelegate(this);
                @Override
                public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child,
                        AccessibilityEvent event) {
                    rescheduleTimeoutH();
                    return super.onRequestSendAccessibilityEvent(host, child, event);
                }
            });
            mMgr.addAccessibilityStateChangeListener(new AccessibilityStateChangeListener() {
            mMgr.addAccessibilityStateChangeListener(new AccessibilityStateChangeListener() {
                @Override
                @Override
                public void onAccessibilityStateChanged(boolean enabled) {
                public void onAccessibilityStateChanged(boolean enabled) {
@@ -993,15 +985,23 @@ public class VolumeDialog {
            updateFeedbackEnabled();
            updateFeedbackEnabled();
        }
        }


        @Override
        public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child,
                AccessibilityEvent event) {
            rescheduleTimeoutH();
            return super.onRequestSendAccessibilityEvent(host, child, event);
        }

        private void updateFeedbackEnabled() {
        private void updateFeedbackEnabled() {
            mFeedbackEnabled = computeFeedbackEnabled();
            mFeedbackEnabled = computeFeedbackEnabled();
        }
        }


        private boolean computeFeedbackEnabled() {
        private boolean computeFeedbackEnabled() {
            // are there any enabled non-generic a11y services?
            final List<AccessibilityServiceInfo> services =
            final List<AccessibilityServiceInfo> services =
                    mMgr.getEnabledAccessibilityServiceList(FEEDBACK_ALL_MASK);
                    mMgr.getEnabledAccessibilityServiceList(FEEDBACK_ALL_MASK);
            for (AccessibilityServiceInfo asi : services) {
            for (AccessibilityServiceInfo asi : services) {
                if ((asi.feedbackType & FEEDBACK_ALL_MASK) != 0) {
                if (asi.feedbackType != 0 && asi.feedbackType != FEEDBACK_GENERIC) {
                    return true;
                    return true;
                }
                }
            }
            }