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

Commit 594c3fc4 authored by Ameer Armaly's avatar Ameer Armaly Committed by Automerger Merge Worker
Browse files

[DO NOT MERGE] AccessibilityInputFilter: retain service gesture detection...

[DO NOT MERGE] AccessibilityInputFilter: retain service gesture detection state when rebuilding. am: 1c9c8b93 am: a03a785b

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2230468



Change-Id: Icaca9edda5886b8e28e62c580f1512c9de32f3a7
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 0efafb45 a03a785b
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -176,6 +176,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ

    private boolean mSendMotionEvents;

    private SparseArray<Boolean> mServiceDetectsGestures = new SparseArray<>(0);
    boolean mRequestFilterKeyEvents;

    boolean mRetrieveInteractiveWindows;
@@ -2344,9 +2345,17 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
    }

    public void setServiceDetectsGesturesEnabled(int displayId, boolean mode) {
        mServiceDetectsGestures.put(displayId, mode);
        mSystemSupport.setServiceDetectsGesturesEnabled(displayId, mode);
    }

    public boolean isServiceDetectsGesturesEnabled(int displayId) {
        if (mServiceDetectsGestures.contains(displayId)) {
            return mServiceDetectsGestures.get(displayId);
        }
        return false;
    }

    public void requestTouchExploration(int displayId) {
        mSystemSupport.requestTouchExploration(displayId);
    }
+9 −2
Original line number Diff line number Diff line
@@ -176,6 +176,8 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo

    private int mEnabledFeatures;

    // Display-specific features
    private SparseArray<Boolean> mServiceDetectsGestures = new SparseArray<>();
    private final SparseArray<EventStreamState> mMouseStreamStates = new SparseArray<>(0);

    private final SparseArray<EventStreamState> mTouchScreenStreamStates = new SparseArray<>(0);
@@ -458,7 +460,9 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo

        final Context displayContext = mContext.createDisplayContext(display);
        final int displayId = display.getDisplayId();

        if (!mServiceDetectsGestures.contains(displayId)) {
            mServiceDetectsGestures.put(displayId, false);
        }
        if ((mEnabledFeatures & FLAG_FEATURE_AUTOCLICK) != 0) {
            if (mAutoclickController == null) {
                mAutoclickController = new AutoclickController(
@@ -481,6 +485,7 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
            if ((mEnabledFeatures & FLAG_SEND_MOTION_EVENTS) != 0) {
                explorer.setSendMotionEventsEnabled(true);
            }
            explorer.setServiceDetectsGestures(mServiceDetectsGestures.get(displayId));
            addFirstEventHandler(displayId, explorer);
            mTouchExplorer.put(displayId, explorer);
        }
@@ -565,7 +570,8 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
            mTouchExplorer.remove(displayId);
        }

        final MagnificationGestureHandler handler = mMagnificationGestureHandler.get(displayId);
        final MagnificationGestureHandler handler =
                mMagnificationGestureHandler.get(displayId);
        if (handler != null) {
            handler.onDestroy();
            mMagnificationGestureHandler.remove(displayId);
@@ -897,6 +903,7 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
        if (mTouchExplorer.contains(displayId)) {
            mTouchExplorer.get(displayId).setServiceDetectsGestures(mode);
        }
        mServiceDetectsGestures.put(displayId, mode);
    }

    public void requestTouchExploration(int displayId) {
+25 −10
Original line number Diff line number Diff line
@@ -1722,31 +1722,34 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
    }

    private boolean scheduleNotifyMotionEvent(MotionEvent event) {
        boolean result = false;
        int displayId = event.getDisplayId();
        synchronized (mLock) {
            AccessibilityUserState state = getCurrentUserStateLocked();
            for (int i = state.mBoundServices.size() - 1; i >= 0; i--) {
                AccessibilityServiceConnection service = state.mBoundServices.get(i);
                if (service.mRequestTouchExplorationMode) {
                if (service.isServiceDetectsGesturesEnabled(displayId)) {
                    service.notifyMotionEvent(event);
                    return true;
                    result = true;
                }
            }
        }
        return false;
        return result;
    }

    private boolean scheduleNotifyTouchState(int displayId, int touchState) {
        boolean result = false;
        synchronized (mLock) {
            AccessibilityUserState state = getCurrentUserStateLocked();
            for (int i = state.mBoundServices.size() - 1; i >= 0; i--) {
                AccessibilityServiceConnection service = state.mBoundServices.get(i);
                if (service.mRequestTouchExplorationMode) {
                if (service.isServiceDetectsGesturesEnabled(displayId)) {
                    service.notifyTouchState(displayId, touchState);
                    return true;
                    result = true;
                }
            }
        }
        return false;
        return result;
    }

    private void notifyClearAccessibilityCacheLocked() {
@@ -2302,7 +2305,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                if (userState.isTwoFingerPassthroughEnabledLocked()) {
                    flags |= AccessibilityInputFilter.FLAG_REQUEST_2_FINGER_PASSTHROUGH;
                }
            }
            if (userState.isFilterKeyEventsEnabledLocked()) {
                flags |= AccessibilityInputFilter.FLAG_FEATURE_FILTER_KEY_EVENTS;
            }
@@ -2315,6 +2317,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            if (userState.isPerformGesturesEnabledLocked()) {
                flags |= AccessibilityInputFilter.FLAG_FEATURE_INJECT_MOTION_EVENTS;
            }

            if (flags != 0) {
                if (!mHasInputFilter) {
                    mHasInputFilter = true;
@@ -2330,6 +2333,17 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                    if (mHasInputFilter) {
                        mHasInputFilter = false;
                        mInputFilter.setUserAndEnabledFeatures(userState.mUserId, 0);
                        if (userState.isTouchExplorationEnabledLocked()) {
                            // Service gesture detection is turned on and off on a per-display
                            // basis.
                            final ArrayList<Display> displays = getValidDisplayList();
                            for (Display display : displays) {
                                int displayId = display.getDisplayId();
                                boolean mode = userState.isServiceDetectsGesturesEnabled(displayId);
                                mInputFilter.setServiceDetectsGesturesEnabled(displayId, mode);
                            }
                        }
                    }
                    inputFilter = null;
                    setInputFilter = true;
                }
@@ -4305,6 +4319,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub

    private void setServiceDetectsGesturesInternal(int displayId, boolean mode) {
        synchronized (mLock) {
            getCurrentUserStateLocked().setServiceDetectsGesturesEnabled(displayId, mode);
            if (mHasInputFilter && mInputFilter != null) {
                mInputFilter.setServiceDetectsGesturesEnabled(displayId, mode);
            }
+13 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseIntArray;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.IAccessibilityManagerClient;
@@ -118,6 +119,7 @@ class AccessibilityUserState {
    private boolean mRequestMultiFingerGestures;
    private boolean mRequestTwoFingerPassthrough;
    private boolean mSendMotionEventsEnabled;
    private SparseArray<Boolean> mServiceDetectsGestures = new SparseArray<>(0);
    private int mUserInteractiveUiTimeout;
    private int mUserNonInteractiveUiTimeout;
    private int mNonInteractiveUiTimeout = 0;
@@ -987,4 +989,15 @@ class AccessibilityUserState {
        mFocusStrokeWidth = strokeWidth;
        mFocusColor = color;
    }

    public void setServiceDetectsGesturesEnabled(int displayId, boolean mode) {
        mServiceDetectsGestures.put(displayId, mode);
    }

    public boolean isServiceDetectsGesturesEnabled(int displayId) {
        if (mServiceDetectsGestures.contains(displayId)) {
            return mServiceDetectsGestures.get(displayId);
        }
        return false;
    }
}