Loading services/java/com/android/server/accessibility/AccessibilityInputFilter.java +20 −7 Original line number Diff line number Diff line Loading @@ -56,6 +56,13 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo */ static final int FLAG_FEATURE_TOUCH_EXPLORATION = 0x00000002; /** * Flag for enabling the filtering key events feature. * * @see #setEnabledFeatures(int) */ static final int FLAG_FEATURE_FILTER_KEY_EVENTS = 0x00000004; private final Runnable mProcessBatchedEventsRunnable = new Runnable() { @Override public void run() { Loading Loading @@ -101,6 +108,8 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo private boolean mKeyEventSequenceStarted; private boolean mFilterKeyEvents; AccessibilityInputFilter(Context context, AccessibilityManagerService service) { super(context.getMainLooper()); mContext = context; Loading Loading @@ -198,6 +207,10 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo } private void onKeyEvent(KeyEvent event, int policyFlags) { if (!mFilterKeyEvents) { super.onInputEvent(event, policyFlags); return; } if ((policyFlags & WindowManagerPolicy.FLAG_PASS_TO_USER) == 0) { mKeyEventSequenceStarted = false; super.onInputEvent(event, policyFlags); Loading Loading @@ -314,13 +327,6 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo } } void reset() { setEnabledFeatures(0); mKeyEventSequenceStarted = false; mMotionEventSequenceStarted = false; mHoverEventSequenceStarted = false; } private void enableFeatures() { mMotionEventSequenceStarted = false; mHoverEventSequenceStarted = false; Loading @@ -338,6 +344,9 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo mEventHandler = mTouchExplorer; } } if ((mEnabledFeatures & FLAG_FEATURE_FILTER_KEY_EVENTS) != 0) { mFilterKeyEvents = true; } } private void disableFeatures() { Loading @@ -352,6 +361,10 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo mScreenMagnifier = null; } mEventHandler = null; mKeyEventSequenceStarted = false; mMotionEventSequenceStarted = false; mHoverEventSequenceStarted = false; mFilterKeyEvents = false; } @Override Loading services/java/com/android/server/accessibility/AccessibilityManagerService.java +30 −12 Original line number Diff line number Diff line Loading @@ -1170,9 +1170,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { boolean setInputFilter = false; AccessibilityInputFilter inputFilter = null; synchronized (mLock) { // Accessibility enabled means at least one service is enabled. if (userState.mIsAccessibilityEnabled || userState.mIsDisplayMagnificationEnabled) { int flags = 0; if (userState.mIsDisplayMagnificationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_SCREEN_MAGNIFIER; } // Touch exploration without accessibility makes no sense. if (userState.mIsAccessibilityEnabled && userState.mIsTouchExplorationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_TOUCH_EXPLORATION; } if (userState.mIsFilterKeyEventsEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_FILTER_KEY_EVENTS; } if (flags != 0) { if (!mHasInputFilter) { mHasInputFilter = true; if (mInputFilter == null) { Loading @@ -1182,19 +1191,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { inputFilter = mInputFilter; setInputFilter = true; } int flags = 0; if (userState.mIsDisplayMagnificationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_SCREEN_MAGNIFIER; } // Touch exploration without accessibility makes no sense. if (userState.mIsAccessibilityEnabled && userState.mIsTouchExplorationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_TOUCH_EXPLORATION; } mInputFilter.setEnabledFeatures(flags); } else { if (mHasInputFilter) { mHasInputFilter = false; mInputFilter.reset(); mInputFilter.disableFeatures(); inputFilter = null; setInputFilter = true; } Loading Loading @@ -1263,6 +1264,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private void onUserStateChangedLocked(UserState userState) { updateLegacyCapabilities(userState); updateServicesLocked(userState); updateFilterKeyEventsLocked(userState); updateTouchExplorationLocked(userState); updateEnhancedWebAccessibilityLocked(userState); scheduleUpdateInputFilter(userState); Loading Loading @@ -1291,6 +1293,21 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } private void updateFilterKeyEventsLocked(UserState userState) { final int serviceCount = userState.mBoundServices.size(); for (int i = 0; i < serviceCount; i++) { Service service = userState.mBoundServices.get(i); if (service.mRequestFilterKeyEvents && (service.mAccessibilityServiceInfo.getCapabilities() & AccessibilityServiceInfo .CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS) != 0) { userState.mIsFilterKeyEventsEnabled = true; return; } } userState.mIsFilterKeyEventsEnabled = false; } private void updateServicesLocked(UserState userState) { if (userState.mIsAccessibilityEnabled) { manageServicesLocked(userState); Loading Loading @@ -2899,6 +2916,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { public boolean mIsTouchExplorationEnabled; public boolean mIsEnhancedWebAccessibilityEnabled; public boolean mIsDisplayMagnificationEnabled; public boolean mIsFilterKeyEventsEnabled; private Service mUiAutomationService; private IAccessibilityServiceClient mUiAutomationServiceClient; Loading Loading
services/java/com/android/server/accessibility/AccessibilityInputFilter.java +20 −7 Original line number Diff line number Diff line Loading @@ -56,6 +56,13 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo */ static final int FLAG_FEATURE_TOUCH_EXPLORATION = 0x00000002; /** * Flag for enabling the filtering key events feature. * * @see #setEnabledFeatures(int) */ static final int FLAG_FEATURE_FILTER_KEY_EVENTS = 0x00000004; private final Runnable mProcessBatchedEventsRunnable = new Runnable() { @Override public void run() { Loading Loading @@ -101,6 +108,8 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo private boolean mKeyEventSequenceStarted; private boolean mFilterKeyEvents; AccessibilityInputFilter(Context context, AccessibilityManagerService service) { super(context.getMainLooper()); mContext = context; Loading Loading @@ -198,6 +207,10 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo } private void onKeyEvent(KeyEvent event, int policyFlags) { if (!mFilterKeyEvents) { super.onInputEvent(event, policyFlags); return; } if ((policyFlags & WindowManagerPolicy.FLAG_PASS_TO_USER) == 0) { mKeyEventSequenceStarted = false; super.onInputEvent(event, policyFlags); Loading Loading @@ -314,13 +327,6 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo } } void reset() { setEnabledFeatures(0); mKeyEventSequenceStarted = false; mMotionEventSequenceStarted = false; mHoverEventSequenceStarted = false; } private void enableFeatures() { mMotionEventSequenceStarted = false; mHoverEventSequenceStarted = false; Loading @@ -338,6 +344,9 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo mEventHandler = mTouchExplorer; } } if ((mEnabledFeatures & FLAG_FEATURE_FILTER_KEY_EVENTS) != 0) { mFilterKeyEvents = true; } } private void disableFeatures() { Loading @@ -352,6 +361,10 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo mScreenMagnifier = null; } mEventHandler = null; mKeyEventSequenceStarted = false; mMotionEventSequenceStarted = false; mHoverEventSequenceStarted = false; mFilterKeyEvents = false; } @Override Loading
services/java/com/android/server/accessibility/AccessibilityManagerService.java +30 −12 Original line number Diff line number Diff line Loading @@ -1170,9 +1170,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { boolean setInputFilter = false; AccessibilityInputFilter inputFilter = null; synchronized (mLock) { // Accessibility enabled means at least one service is enabled. if (userState.mIsAccessibilityEnabled || userState.mIsDisplayMagnificationEnabled) { int flags = 0; if (userState.mIsDisplayMagnificationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_SCREEN_MAGNIFIER; } // Touch exploration without accessibility makes no sense. if (userState.mIsAccessibilityEnabled && userState.mIsTouchExplorationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_TOUCH_EXPLORATION; } if (userState.mIsFilterKeyEventsEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_FILTER_KEY_EVENTS; } if (flags != 0) { if (!mHasInputFilter) { mHasInputFilter = true; if (mInputFilter == null) { Loading @@ -1182,19 +1191,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { inputFilter = mInputFilter; setInputFilter = true; } int flags = 0; if (userState.mIsDisplayMagnificationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_SCREEN_MAGNIFIER; } // Touch exploration without accessibility makes no sense. if (userState.mIsAccessibilityEnabled && userState.mIsTouchExplorationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_TOUCH_EXPLORATION; } mInputFilter.setEnabledFeatures(flags); } else { if (mHasInputFilter) { mHasInputFilter = false; mInputFilter.reset(); mInputFilter.disableFeatures(); inputFilter = null; setInputFilter = true; } Loading Loading @@ -1263,6 +1264,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private void onUserStateChangedLocked(UserState userState) { updateLegacyCapabilities(userState); updateServicesLocked(userState); updateFilterKeyEventsLocked(userState); updateTouchExplorationLocked(userState); updateEnhancedWebAccessibilityLocked(userState); scheduleUpdateInputFilter(userState); Loading Loading @@ -1291,6 +1293,21 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } private void updateFilterKeyEventsLocked(UserState userState) { final int serviceCount = userState.mBoundServices.size(); for (int i = 0; i < serviceCount; i++) { Service service = userState.mBoundServices.get(i); if (service.mRequestFilterKeyEvents && (service.mAccessibilityServiceInfo.getCapabilities() & AccessibilityServiceInfo .CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS) != 0) { userState.mIsFilterKeyEventsEnabled = true; return; } } userState.mIsFilterKeyEventsEnabled = false; } private void updateServicesLocked(UserState userState) { if (userState.mIsAccessibilityEnabled) { manageServicesLocked(userState); Loading Loading @@ -2899,6 +2916,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { public boolean mIsTouchExplorationEnabled; public boolean mIsEnhancedWebAccessibilityEnabled; public boolean mIsDisplayMagnificationEnabled; public boolean mIsFilterKeyEventsEnabled; private Service mUiAutomationService; private IAccessibilityServiceClient mUiAutomationServiceClient; Loading