diff options
| author | 2015-12-14 15:58:41 -0800 | |
|---|---|---|
| committer | 2016-01-20 21:56:50 -0800 | |
| commit | a9e7a3bbe859a8416e54be28bd1f055df60074e5 (patch) | |
| tree | 2ab6c5453f8b055abb0cc36f3203ca39d32d0297 | |
| parent | 6a13e3be66340c8f408f985219450fec30bbea41 (diff) | |
Accessibility services can turn themselves off b/22514381
Added disableSelf() method to AccessibilityService
This newly added api used used in
https://googleplex-android-review.git.corp.google.com/#/c/833857/
Change-Id: I5fe60181058ef90dd496318cf270e0825bcc411a
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/accessibilityservice/AccessibilityService.java | 16 | ||||
| -rw-r--r-- | core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl | 2 | ||||
| -rw-r--r-- | services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java | 18 |
6 files changed, 39 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt index e75ab1c608d3..684a097524fd 100644 --- a/api/current.txt +++ b/api/current.txt @@ -2612,6 +2612,7 @@ package android.accessibilityservice { public abstract class AccessibilityService extends android.app.Service { ctor public AccessibilityService(); + method public final void disableSelf(); method public final boolean dispatchGesture(android.accessibilityservice.GestureDescription, android.accessibilityservice.AccessibilityService.GestureResultCallback, android.os.Handler); method public android.view.accessibility.AccessibilityNodeInfo findFocus(int); method public final android.accessibilityservice.AccessibilityService.MagnificationController getMagnificationController(); diff --git a/api/system-current.txt b/api/system-current.txt index 49ff9482a262..469d03e18b92 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -2714,6 +2714,7 @@ package android.accessibilityservice { public abstract class AccessibilityService extends android.app.Service { ctor public AccessibilityService(); + method public final void disableSelf(); method public final boolean dispatchGesture(android.accessibilityservice.GestureDescription, android.accessibilityservice.AccessibilityService.GestureResultCallback, android.os.Handler); method public android.view.accessibility.AccessibilityNodeInfo findFocus(int); method public final android.accessibilityservice.AccessibilityService.MagnificationController getMagnificationController(); diff --git a/api/test-current.txt b/api/test-current.txt index 68f8a41a38fc..d04b543e7e88 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -2612,6 +2612,7 @@ package android.accessibilityservice { public abstract class AccessibilityService extends android.app.Service { ctor public AccessibilityService(); + method public final void disableSelf(); method public final boolean dispatchGesture(android.accessibilityservice.GestureDescription, android.accessibilityservice.AccessibilityService.GestureResultCallback, android.os.Handler); method public android.view.accessibility.AccessibilityNodeInfo findFocus(int); method public final android.accessibilityservice.AccessibilityService.MagnificationController getMagnificationController(); diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java index 3293c264974a..8bc17f8d15eb 100644 --- a/core/java/android/accessibilityservice/AccessibilityService.java +++ b/core/java/android/accessibilityservice/AccessibilityService.java @@ -541,6 +541,22 @@ public abstract class AccessibilityService extends Service { } /** + * This method allows accessibility service turn itself off + * and the service will become disabled from the Settings. + */ + public final void disableSelf() { + final IAccessibilityServiceConnection connection = + AccessibilityInteractionClient.getInstance().getConnection(mConnectionId); + if (connection != null) { + try { + connection.disableSelf(); + } catch (RemoteException re) { + throw new RuntimeException(re); + } + } + } + + /** * Returns the magnification controller, which may be used to query and * modify the state of display magnification. * <p> diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl index a65b87b7b0c8..e58ef2fec010 100644 --- a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl +++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl @@ -65,6 +65,8 @@ interface IAccessibilityServiceConnection { boolean performGlobalAction(int action); + oneway void disableSelf(); + oneway void setOnKeyEventResult(boolean handled, int sequence); float getMagnificationScale(); diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 28aeef7c6a2f..dbbb1895d1da 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -2179,6 +2179,24 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { return true; } + @Override + public void disableSelf() { + synchronized(mLock) { + UserState userState = getUserStateLocked(mUserId); + if (userState.mEnabledServices.remove(mComponentName)) { + final long identity = Binder.clearCallingIdentity(); + try { + persistComponentNamesToSettingLocked( + Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, + userState.mEnabledServices, mUserId); + } finally { + Binder.restoreCallingIdentity(identity); + } + onUserStateChangedLocked(userState); + } + } + } + public boolean canReceiveEventsLocked() { return (mEventTypes != 0 && mFeedbackType != 0 && mService != null); } |