diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2011-07-17 12:22:08 -0700 |
---|---|---|
committer | Svetoslav Ganov <svetoslavganov@google.com> | 2011-07-17 12:22:14 -0700 |
commit | 4a49d9fe52a76c7f91f81113e0a8e9f97ac3f24c (patch) | |
tree | addca7ac9f8cb24e37a894b0c26fd7404b1a8204 /services/java/com | |
parent | 47b779b9f9c2e7948ae8d45ea07a10f1ad07d135 (diff) | |
download | frameworks_base-4a49d9fe52a76c7f91f81113e0a8e9f97ac3f24c.zip frameworks_base-4a49d9fe52a76c7f91f81113e0a8e9f97ac3f24c.tar.gz frameworks_base-4a49d9fe52a76c7f91f81113e0a8e9f97ac3f24c.tar.bz2 |
Throw an exception if accessibility service has not requested to retrieve window content.
1. If an accessibility service does not request access to the window
content and does so, an exception is thrown to point the developer
to the reason.
bug:5038284
Change-Id: Ibf08f4d2c8ad8939c4f4c2e288048a4f8ff1e31b
Diffstat (limited to 'services/java/com')
-rw-r--r-- | services/java/com/android/server/accessibility/AccessibilityManagerService.java | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java index f99951fa..a8dc885 100644 --- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -935,9 +935,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } - public AccessibilityNodeInfo findAccessibilityNodeInfoByViewIdInActiveWindow(int viewId) { + public AccessibilityNodeInfo findAccessibilityNodeInfoByViewIdInActiveWindow(int viewId) + throws RemoteException { IAccessibilityInteractionConnection connection = null; synchronized (mLock) { + mSecurityPolicy.enforceCanRetrieveWindowContent(this); final boolean permissionGranted = mSecurityPolicy.canRetrieveWindowContent(this); if (!permissionGranted) { return null; @@ -975,15 +977,16 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewTextInActiveWindow( - String text) { + String text) throws RemoteException { return findAccessibilityNodeInfosByViewText(text, mSecurityPolicy.mRetrievalAlowingWindowId, View.NO_ID); } public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewText(String text, - int accessibilityWindowId, int accessibilityViewId) { + int accessibilityWindowId, int accessibilityViewId) throws RemoteException { IAccessibilityInteractionConnection connection = null; synchronized (mLock) { + mSecurityPolicy.enforceCanRetrieveWindowContent(this); final boolean permissionGranted = mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, accessibilityWindowId); if (!permissionGranted) { @@ -1026,9 +1029,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } public AccessibilityNodeInfo findAccessibilityNodeInfoByAccessibilityId( - int accessibilityWindowId, int accessibilityViewId) { + int accessibilityWindowId, int accessibilityViewId) throws RemoteException { IAccessibilityInteractionConnection connection = null; synchronized (mLock) { + mSecurityPolicy.enforceCanRetrieveWindowContent(this); final boolean permissionGranted = mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, accessibilityWindowId); if (!permissionGranted) { @@ -1199,6 +1203,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub return service.mCanRetrieveScreenContent; } + public void enforceCanRetrieveWindowContent(Service service) throws RemoteException { + // This happens due to incorrect registration so make it apparent. + if (!canRetrieveWindowContent(service)) { + Slog.e(LOG_TAG, "Accessibility serivce " + service.mComponentName + " does not " + + "declare android:canRetrieveWindowContent."); + throw new RemoteException(); + } + } + private boolean isRetrievalAllowingWindow(int windowId) { return (mRetrievalAlowingWindowId == windowId); } |