OSDN Git Service

Introduce settings for Automatic click when mouse pointer stops
authorToni Barzic <tbarzic@google.com>
Wed, 9 Sep 2015 19:30:41 +0000 (12:30 -0700)
committerToni Barzic <tbarzic@google.com>
Mon, 14 Sep 2015 21:59:26 +0000 (14:59 -0700)
Settings in question are:
- accessibility_autoclick_enabled -> Whether the feature is enabled
- accessibility_autoclick_delay -> Amount of time mouse pointer has to
    stay still before performing click

Enable/disabled AutoclickController event stream transformation (which
implements the feature) based on the accessibiilty_autoclick_enabled
value

BUG=23113412

Change-Id: I8178d10c09d86713bb4c725c95268a7c5f432eb4

core/java/android/provider/Settings.java
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java

index a038b0d..1cb7284 100644 (file)
@@ -4921,7 +4921,26 @@ public final class Settings {
                 "accessibility_display_daltonizer";
 
         /**
-         * The timout for considering a press to be a long press in milliseconds.
+         * Setting that specifies whether automatic click when the mouse pointer stops moving is
+         * enabled.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_AUTOCLICK_ENABLED =
+                "accessibility_autoclick_enabled";
+
+        /**
+         * Integer setting specifying amount of time in ms the mouse pointer has to stay still
+         * before performing click when {@link #ACCESSIBILITY_AUTOCLICK_ENABLED} is set.
+         *
+         * @see #ACCESSIBILITY_AUTOCLICK_ENABLED
+         * @hide
+         */
+        public static final String ACCESSIBILITY_AUTOCLICK_DELAY =
+                "accessibility_autoclick_delay";
+
+        /**
+         * The timeout for considering a press to be a long press in milliseconds.
          * @hide
          */
         public static final String LONG_PRESS_TIMEOUT = "long_press_timeout";
@@ -5785,6 +5804,8 @@ public final class Settings {
             SLEEP_TIMEOUT,
             DOUBLE_TAP_TO_WAKE,
             CAMERA_GESTURE_DISABLED,
+            ACCESSIBILITY_AUTOCLICK_ENABLED,
+            ACCESSIBILITY_AUTOCLICK_DELAY
         };
 
         /**
index 7051b52..91c3d48 100644 (file)
@@ -650,6 +650,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
             userState.mIsTouchExplorationEnabled = false;
             userState.mIsEnhancedWebAccessibilityEnabled = false;
             userState.mIsDisplayMagnificationEnabled = false;
+            userState.mIsAutoclickEnabled = false;
             userState.mInstalledServices.add(accessibilityServiceInfo);
             userState.mEnabledServices.clear();
             userState.mEnabledServices.add(sFakeAccessibilityServiceComponentName);
@@ -700,6 +701,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
             userState.mIsTouchExplorationEnabled = touchExplorationEnabled;
             userState.mIsEnhancedWebAccessibilityEnabled = false;
             userState.mIsDisplayMagnificationEnabled = false;
+            userState.mIsAutoclickEnabled = false;
             userState.mEnabledServices.clear();
             userState.mEnabledServices.add(service);
             userState.mBindingServices.clear();
@@ -1281,6 +1283,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
             if (userState.mIsFilterKeyEventsEnabled) {
                 flags |= AccessibilityInputFilter.FLAG_FEATURE_FILTER_KEY_EVENTS;
             }
+            if (userState.mIsAutoclickEnabled) {
+                flags |= AccessibilityInputFilter.FLAG_FEATURE_AUTOCLICK;
+            }
             if (flags != 0) {
                 if (!mHasInputFilter) {
                     mHasInputFilter = true;
@@ -1485,6 +1490,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
         somthingChanged |= readHighTextContrastEnabledSettingLocked(userState);
         somthingChanged |= readEnhancedWebAccessibilityEnabledChangedLocked(userState);
         somthingChanged |= readDisplayMagnificationEnabledSettingLocked(userState);
+        somthingChanged |= readAutoclickEnabledSettingLocked(userState);
         somthingChanged |= readDisplayColorAdjustmentSettingsLocked(userState);
         return somthingChanged;
     }
@@ -1523,6 +1529,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
         return false;
     }
 
+    private boolean readAutoclickEnabledSettingLocked(UserState userState) {
+        final boolean autoclickEnabled = Settings.Secure.getIntForUser(
+                mContext.getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED,
+                0, userState.mUserId) == 1;
+        if (autoclickEnabled != userState.mIsAutoclickEnabled) {
+            userState.mIsAutoclickEnabled = autoclickEnabled;
+            return true;
+        }
+        return false;
+    }
+
     private boolean readEnhancedWebAccessibilityEnabledChangedLocked(UserState userState) {
          final boolean enhancedWeAccessibilityEnabled = Settings.Secure.getIntForUser(
                 mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
@@ -1671,6 +1689,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
                 pw.append(", touchExplorationEnabled=" + userState.mIsTouchExplorationEnabled);
                 pw.append(", displayMagnificationEnabled="
                         + userState.mIsDisplayMagnificationEnabled);
+                pw.append(", autoclickEnabled=" + userState.mIsAutoclickEnabled);
                 if (userState.mUiAutomationService != null) {
                     pw.append(", ");
                     userState.mUiAutomationService.dump(fd, pw, args);
@@ -3777,6 +3796,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
         public boolean mIsTextHighContrastEnabled;
         public boolean mIsEnhancedWebAccessibilityEnabled;
         public boolean mIsDisplayMagnificationEnabled;
+        public boolean mIsAutoclickEnabled;
         public boolean mIsFilterKeyEventsEnabled;
         public boolean mHasDisplayColorAdjustment;
         public boolean mAccessibilityFocusOnlyInActiveWindow;
@@ -3841,6 +3861,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
             mIsTouchExplorationEnabled = false;
             mIsEnhancedWebAccessibilityEnabled = false;
             mIsDisplayMagnificationEnabled = false;
+            mIsAutoclickEnabled = false;
         }
 
         public void destroyUiAutomationService() {
@@ -3865,6 +3886,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
         private final Uri mDisplayMagnificationEnabledUri = Settings.Secure.getUriFor(
                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED);
 
+        private final Uri mAutoclickEnabledUri = Settings.Secure.getUriFor(
+                Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED);
+
         private final Uri mEnabledAccessibilityServicesUri = Settings.Secure.getUriFor(
                 Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
 
@@ -3897,6 +3921,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
                     false, this, UserHandle.USER_ALL);
             contentResolver.registerContentObserver(mDisplayMagnificationEnabledUri,
                     false, this, UserHandle.USER_ALL);
+            contentResolver.registerContentObserver(mAutoclickEnabledUri,
+                    false, this, UserHandle.USER_ALL);
             contentResolver.registerContentObserver(mEnabledAccessibilityServicesUri,
                     false, this, UserHandle.USER_ALL);
             contentResolver.registerContentObserver(
@@ -3938,6 +3964,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
                     if (readDisplayMagnificationEnabledSettingLocked(userState)) {
                         onUserStateChangedLocked(userState);
                     }
+                } else if (mAutoclickEnabledUri.equals(uri)) {
+                    if (readAutoclickEnabledSettingLocked(userState)) {
+                        onUserStateChangedLocked(userState);
+                    }
                 } else if (mEnabledAccessibilityServicesUri.equals(uri)) {
                     if (readEnabledAccessibilityServicesLocked(userState)) {
                         onUserStateChangedLocked(userState);