summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2011-07-17 12:22:08 -0700
committerSvetoslav Ganov <svetoslavganov@google.com>2011-07-17 12:22:14 -0700
commit4a49d9fe52a76c7f91f81113e0a8e9f97ac3f24c (patch)
treeaddca7ac9f8cb24e37a894b0c26fd7404b1a8204
parent47b779b9f9c2e7948ae8d45ea07a10f1ad07d135 (diff)
downloadframeworks_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
-rw-r--r--services/java/com/android/server/accessibility/AccessibilityManagerService.java21
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);
}